Selezione JComboBox Cambia ascoltatore?
-
09-06-2019 - |
Domanda
Sto cercando di attivare un evento ogni volta che viene effettuata una scelta da a JComboBox
.
Il problema che sto riscontrando è che non c'è nulla di ovvio addSelectionListener()
metodo.
Ho provato a usare actionPerformed()
, ma non si accende mai.
A meno di sovrascrivere il modello per il JComboBox
, sono a corto di idee.
Come posso ricevere una notifica di una modifica della selezione su a JComboBox
?**
Modificare: Devo scusarmi.Si scopre che stavo usando una sottoclasse che si comportava male di JComboBox
, ma lascerò la domanda in sospeso poiché la tua risposta è buona.
Soluzione
Dovrebbe rispondere ActionListeners, come questo:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@John Calsbeek lo sottolinea giustamente addItemListener()
funzionerà anch'esso.Potresti ottenerne 2 ItemEvents
, però, uno per la deselezione dell'elemento precedentemente selezionato, ed un altro per la selezione del nuovo elemento.Basta non utilizzare entrambi i tipi di eventi!
Altri suggerimenti
Esempio di codice di ItemListener
implementazione
class ItemChangeListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
Object item = event.getItem();
// do something with object
}
}
}
Ora otterremo solo l'elemento selezionato.
Quindi aggiungi semplicemente il listener al tuo JComboBox
addItemListener(new ItemChangeListener());
Vorrei provare il itemStateChanged()
metodo del ItemListener
interfaccia se la soluzione di Jodonnell fallisce.
Ecco la creazione di un ComboBox che aggiunge un ascoltatore per la modifica della selezione dell'elemento:
JComboBox comboBox = new JComboBox();
comboBox.setBounds(84, 45, 150, 20);
contentPane.add(comboBox);
JComboBox comboBox_1 = new JComboBox();
comboBox_1.setBounds(84, 97, 150, 20);
contentPane.add(comboBox_1);
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
//Do Something
}
});
}
Puoi provare questi
int selectedIndex = myComboBox.getSelectedIndex();
-O-
Object selectedObject = myComboBox.getSelectedItem();
-O-
String selectedValue = myComboBox.getSelectedValue().toString();
Recentemente stavo cercando questa stessa soluzione e sono riuscito a trovarne una semplice senza assegnare variabili specifiche per l'ultimo elemento selezionato e il nuovo elemento selezionato.E questa domanda, sebbene molto utile, non ha fornito la soluzione di cui avevo bisogno.Questo ha risolto il mio problema, spero che risolva il tuo e quello degli altri.Grazie.