¿Cambiar oyente de selección de JComboBox?
-
09-06-2019 - |
Pregunta
Estoy tratando de hacer que un evento se active cada vez que se hace una elección desde un JComboBox
.
El problema que tengo es que no hay nada obvio. addSelectionListener()
método.
He intentado usar actionPerformed()
, pero nunca dispara.
A falta de anular el modelo para el JComboBox
, se me acabaron las ideas.
¿Cómo recibo notificaciones de un cambio de selección en un JComboBox
?**
Editar: Tengo que disculparme.Resulta que estaba usando una subclase de mal comportamiento de JComboBox
, pero dejaré la pregunta ya que tu respuesta es buena.
Solución
Debe responder a Oyentes de acción, como esto:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@John Calsbeek señala con razón que addItemListener()
también funcionará.Puedes conseguir 2 ItemEvents
, Sin embargo, uno para la deselección del elemento previamente seleccionado y otro para la selección del nuevo elemento.¡Simplemente no uses ambos tipos de eventos!
Otros consejos
Ejemplo de código de ItemListener
implementación
class ItemChangeListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
Object item = event.getItem();
// do something with object
}
}
}
Ahora obtendremos solo el elemento seleccionado.
Luego simplemente agregue el oyente a su JComboBox
addItemListener(new ItemChangeListener());
yo probaría el itemStateChanged()
método de la ItemListener
interfaz si la solución de jodonnell falla.
Aquí se crea un ComboBox que agrega un oyente para el cambio de selección de elementos:
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
}
});
}
Puedes probar estos
int selectedIndex = myComboBox.getSelectedIndex();
-o-
Object selectedObject = myComboBox.getSelectedItem();
-o-
String selectedValue = myComboBox.getSelectedValue().toString();
Recientemente estuve buscando esta misma solución y logré encontrar una simple sin asignar variables específicas para el último elemento seleccionado y el nuevo elemento seleccionado.Y esta pregunta, aunque muy útil, no me proporcionó la solución que necesitaba.Esto resolvió mi problema, espero que resuelva el tuyo y el de los demás.Gracias.