Écouteur de changement de sélection JComboBox ?
-
09-06-2019 - |
Question
J'essaie de déclencher un événement chaque fois qu'un choix est fait à partir d'un JComboBox
.
Le problème que j'ai c'est qu'il n'y a rien d'évident addSelectionListener()
méthode.
J'ai essayé d'utiliser actionPerformed()
, mais il ne se déclenche jamais.
À moins de remplacer le modèle pour le JComboBox
, je suis à court d'idées.
Comment puis-je être informé d'un changement de sélection sur un JComboBox
?**
Modifier: Je dois m'excuser.Il s'avère que j'utilisais une sous-classe de JComboBox
, mais je vais laisser la question en suspens puisque votre réponse est bonne.
La solution
Il faudrait répondre à Écouteurs d'action, comme ça:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@John Calsbeek souligne à juste titre que addItemListener()
fonctionnera aussi.Vous pouvez en obtenir 2 ItemEvents
, cependant, un pour la désélection de l'élément précédemment sélectionné et un autre pour la sélection du nouvel élément.N'utilisez simplement pas les deux types d'événements !
Autres conseils
Exemple de code de ItemListener
mise en œuvre
class ItemChangeListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
Object item = event.getItem();
// do something with object
}
}
}
Maintenant, nous n'obtiendrons que l'élément sélectionné.
Ensuite, ajoutez simplement un écouteur à votre JComboBox
addItemListener(new ItemChangeListener());
j'essaierais le itemStateChanged()
méthode du ItemListener
interface si la solution de Jodonnell échoue.
Voici la création d'une ComboBox en ajoutant un écouteur pour le changement de sélection d'élément :
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
}
});
}
Vous pouvez essayer ceux-ci
int selectedIndex = myComboBox.getSelectedIndex();
-ou-
Object selectedObject = myComboBox.getSelectedItem();
-ou-
String selectedValue = myComboBox.getSelectedValue().toString();
Je cherchais récemment cette même solution et j'ai réussi à en trouver une simple sans attribuer de variables spécifiques pour le dernier élément sélectionné et le nouvel élément sélectionné.Et cette question, bien que très utile, n’a pas apporté la solution dont j’avais besoin.Cela a résolu mon problème, j'espère que cela résoudra le vôtre et celui des autres.Merci.