Arne: JComboBox mit eigenem ListModel

Hallo,

Ich habe eine Klasse die eine Containerstruktur enthält deren Daten sich durch verschiedene Methoden der Klasse ändern. An anderer Stelle in der Applikation habe ich eine JComboBox die immer die _aktuellen_ Daten dieses Containers enthalten soll.

Bei dem Container handelt es sich um einen Vector von eigenen Objekten, so dass ich der JComboBox nicht mit der Instaziierung den Vector übergeben kann.

Ich dachte das einfachste sei aus der Klasse etwas zu ComboBoxModel kompatibles zu machen, also die Schnittstelle zu implementieren und der JComboBox mit setModel(meine Instanz) zu übergeben.

Leider klappt dies nicht.

  
  
    private int selComboBoxItem = -1;  
  
    public void setSelectedItem(Object item) {  
  
        for(int i = 0; i < this.programs.size(); i++) {  
            if(((Program)this.programs.get(i)).getName().equals(item.toString())) {  
                this.selComboBoxItem = i;  
            }  
        }  
    }  
    public Object getSelectedItem() {  
        if(this.selComboBoxItem == -1) {  
            return "";  
        }  
        return ((Program)this.programs.get(this.selComboBoxItem)).getName();  
    }  
  
    public Object getElementAt(int index) {  
        return ((Program)this.programs.get(index)).getName();  
    }  
  
    public int getSize() {  
        return this.programs.size();  
    }  
  
    public void removeListDataListener(ListDataListener l) {}  
    public void addListDataListener(ListDataListener l) {}  

Ich weiß das der Code der Horror ist!

Die Methoden getSelectedItem() und setSelectedItem(Object o) gibt das Interface ComboBoxModel vor.

Die Methoden ListDataListener, getElementAt, getSize und removeListDataListener kommen aus dem Interface ListModel, welche ComboBoxModel erweitert. Hier verstehe ich folgendes nicht:

Was soll die Methode getSelectedItem zurück geben wenn mein Container, der ja zu Start des Programms nocht nicht gefüllt ist, keine Elemente hat? Ich hab mir hier mit einem helper geholfen der vor Befüllung des Containers auf -1 steht, so dass dann ein "" zurück gegeben werden kann.

Das eigentliche Fehlverhalten ist aber wie folgt: Wenn ich das Programm starte und den Container fülle, dann die JComboBox benutze funktioniert alle Einwandfrei.

Wenn ich danach aber den Container verändere, so dass meine Methoden getSize() etc andere Werte zurück geben, wieder zur ComboBox wechsle, dann Sind alle Einträge leer. Wenn ich in den leeren, aufgeklappten Bereich der Liste klicker, dann wird immer der letzte (unsichtbare) Eintrag ausgewält.

Noch komisch ist, dass die Methode getSize() zig mal hinter einander aufgerufen wird.

Hoffe ich konnte mich halbwegs verständlich ausdrücken und vielen Dank für Eure Tips.

Gruß, Arne.