Java-combo-box-Modell und Holen Sie sich den ausgewählten Artikel
Den code unten zeigt ein problem ich habe mit combo-Aktionen. Die getSelectedItem() gefeuert mehrmals statt nur in Auswahl. Einfach das laden der frame ruft die Methode 3 mal. Jeder Klick auf die combo-box ist ein Aufruf, auch wenn es nur für die dropdown-und nicht die eigentliche Auswahl. Klicken in das Bearbeitbare text-Bereich löst auch die getSelectedItem () - Methode. Gibt es eine Möglichkeit, filter dieses Ereignis?, oder eine Alternative Methode zum überprüfen von Daten auf den box-Modell-Ebene?
public class SSCCE {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame aframe = new JFrame();
Combo _combo = new Combo();
_combo.addElement("This");
_combo.addElement("That");
JComboBox _box = new JComboBox(new Combo());
_box.setEditable(true);
aframe.add(_box);
aframe.setVisible(true);
}
static class Combo extends DefaultComboBoxModel{
public Combo(){
}
int i = 0;
@Override
public Object getSelectedItem() {
System.out.println("Get selected Item" + i);
i++;
return super.getSelectedItem();
}
}
}
- Was versuchen Sie zu erreichen? Es ist wahrscheinlich eine bessere option als übergeordnete
getSelectedItem()
. - Wo steht, dass es nur einmal aufgerufen werden pro selection? Das ist ein job für einen action-listener, nicht ein Modell überschreiben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen dieses tutorial, wie JComboBox, insbesondere den Abschnitt über die Handhabung von Ereignissen. Sollten Sie ein
ActionListener
an deine combobox. Es wird ausgelöst, wenn der Benutzer tatsächlich macht eine Geste angibt, die Ihre Auswahl bestätigt.Haben Sie Blick auf ItemListener oder ActionListener Hinzugefügt, um die JComboBox
getSelectedItem() in der Tat feuert mehrere Male, sowie das action-Ereignis. Für eine editierbare combo-box die Aktion feuert einmal für comboboxchanged, und einmal für comboboxedited. Ich habe die überprüfung, die ist nicht spezifisch für Ende Element in der getSelectedItem, und zog den rest in einer gefilterten action-Ereignis für comboboxchanged. Ich habe Sie komplett ignoriert comboboxedited Veranstaltung.