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);
 

blz

Bekanntes Mitglied
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))
 

Ähnliche Java Themen

Neue Themen


Oben