2016-12-05 7 views
1

Ich habe eine Combobox erstellt, die abhängig von den Inhalten einer anderen Combobox dynamisch bevölkert ist, und so weiter. Ich habe mich entschieden, obwohl es ein bisschen schrecklich ist, mit dem Inhalt des Quell-Arrays zu experimentieren, wenn ich das Ziel-Kombinationsfeld bevölkere. Obwohl dies zu Combobox-Inhalten führt, werden sie jedoch wiederholt. Ich bin durch den Code gegangen, und das Array wird nur einmal durchlaufen.Für (jede) Schleife zweimal füllt eine Combobox

private JComboBox regBuildingSelectBox; 
... 
String[] siteSelectStrings = {"Site", "London", "Long Island"}; 
    JComboBox regSiteSelectBox = new JComboBox(siteSelectStrings); 
    regSiteSelectBox.addItemListener(new ItemListener() { 
     public void itemStateChanged(ItemEvent arg0) { 
      getDropDownVariables gddv = new getDropDownVariables(); 
      for(String s: 
        gddv.buildingSelectList 
          (regSiteSelectBox.getSelectedItem().toString())) 
      { 
       regBuildingSelectBox.addItem(s); 
      } 
     } 
    }); 
    regSiteSelectBox.setBounds(24, 336, 282, 20); 
    contentPane.add(regSiteSelectBox); 


    regBuildingSelectBox = new JComboBox(); 

    regBuildingSelectBox.setBounds(24, 367, 282, 20); 
    contentPane.add(regBuildingSelectBox); 

Der Code der Arrays enthält, ist wie folgt:

public class getDropDownVariables { 

    public String[] buildingSelectList(String site) 
    { 
     switch (site) 
     { 
     case "London": 
      return new String[] {"Building", "Harvell", 
           "LYNX Complex", "Caroline", "Salters"}; 
     case "Long Island": 
      return new String[] {"Building", "Phillips", "Pascal"}; 
     } 
     return new String[] {"Failed to populate buildings"}; 
    } 

Und das Ergebnis:

enter image description here

+0

Es kann nur einmal Schleife, aber wie oft ist das Ereignis feuern? Sie sollten das Kombinationsfeld vor dem Hinzufügen von Elementen löschen. (Auch wenn das Ereignis mehrere Male ausgelöst wird, müssen Sie das Problem möglicherweise separat lösen) – musefan

+0

@musefan Ja, das ist richtig - es scheint jedoch nichts miteinander zu tun zu haben, da das Hinzufügen einer if-Klausel für eine bereits gefüllte Combobox das nicht ändert Ergebnis. – Wolfish

+0

@Berger wow ... wirklich? Das ist seltsam ... danke für diesen Link – Wolfish

Antwort

0

Nur eine Vermutung, aber bevor Sie regBuildingSelectBox.addItem nennen (s) ; Sie müssen es wahrscheinlich zuerst löschen, ansonsten wird es nur zur Liste hinzugefügt, anstatt es zu ersetzen. Es könnte auch eine andere Methode sein, die die Werte im Vergleich zum Hinzufügen setzt.