DefaultComboBoxModel

blz

Bekanntes Mitglied
Hallo,
ich habe 40 JComboBoxes und habe jeder ComboBox ihr eigenes DefaultComboBoxModel zugewiesen.
Die 40 models verwalte ich in einem Array defaultModels[].

Wenn ich nun z. B. den Befehl defModels[1].addElement("neuer Eintrag"); ausführen lasse,
ist der neue Eintrag aber nicht nur in der gewünschten ComboBox, sondern in jeder!!!???

Die Initialisierungen geschehen in einer Schleife:
Java:
defaultModels[i] = new DefaultComboBoxModel<String>(names);
plaetzeField[i] = new MyComboBox(defaultModels[i], i);
 
Ok, vermutlich ist die Information so zu dürftig. Ich dachte, vllt. handelt es sich um ein gängiges Problem, dass sich auch ohne Kenntnis des genaueren Codes lösen lässt - Hier meine komplette for-Schleife:

Java:
    for (i = 0; i < (reihen * maxBreite); i++) {

        defaultModels[i] = new DefaultComboBoxModel<String>(names);
        int width = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() / (maxBreite + 1));

        plaetzeField[i] = new ChooseOnceComboBox(defaultModels[i], i);
        plaetzeField[i].addItemListener(new ItemListener() {

            final int itemListenerIndex = i;

            public void itemStateChanged(ItemEvent e) {
                if (boxEntriesInModification) {
                    return;
                } else {
                    boxEntriesInModification = true;

                    String item = (String) e.getItem();

                    if (!item.equals("")) {
                        for (int j = 0; j < (reihen * maxBreite); j++) {
                            if (getIndexOfCurrentItemListener() != plaetzeField[j].getId()) {

                                // Wurde das DESELECT-Event getriggert?
                                if (e.getStateChange() == ItemEvent.DESELECTED) {
                                    // Das Abgewählte item, sofern es nicht "" ist, in den anderen Models ergänzen
                                    // (im aktuellen ist es ja noch drin, managt die Box selbst)
                                    defaultModels[j].addElement(item);
                                }
                                // Wurde das SELECT-Event getriggert?
                                else if (e.getStateChange() == ItemEvent.SELECTED) {
                                    // Das gewählte item, sofern es nicht "" ist, aus den anderen Models entfernen
                                    defaultModels[j].removeElement(item);
                                }
                            }
                        }
                    }



                    boxEntriesInModification = false;
                }
            }

            public int getIndexOfCurrentItemListener() {
                return itemListenerIndex;
            }
        });
        plaetzeField[i].setPreferredSize(new Dimension(width, 50));
        AutoCompleteDecorator.decorate(plaetzeField[i]);
        plaetzePanel.add(plaetzeField[i]);
    }

Beim innersten "if" habe ich zum Testen die Zählvariable j durch eine 1 ersetzt. Dennoch war das einzufügende Element in ALLEN ComboBoxes ...
(und wenn ich es mit dem "j" stehen lasse, ist es in jeder ComboBox 40 mal! (Anzahl der Schleifendurchläufe))
 

Zurück
Oben