2

I'm trying to listen to a change of selection in a Java JComboBox. I have tried to use an ActionListener but the problem is this: the action listener does something like this

public void actionPerformed(ActionEvent e){
    JComboBox<String> source = ((JComboBox<String>)e.getSource());
    String selected = source.getItemAt(source.getSelectedIndex());

    /*now I compare if the selected string is equal to some others 
      and in a couple of cases I have to add elements to the combo*/
}

As you can notice, when I need to add elements to the combo another event is fired and the actionPerformed method is called again, even if I don't want that, and the code may loops... :( Is there any way to listen to the selection change only and not to a generic change event? Thanks

Giuseppe Salvatore
  • 717
  • 1
  • 8
  • 18

1 Answers1

9

You can try itemStateChanged() method of the ItemListener interface:

class ItemChangeListener implements ItemListener{
    @Override
    public void itemStateChanged(ItemEvent event) {
       if (event.getStateChange() == ItemEvent.SELECTED) {
          Object item = event.getItem();
          // do something with object
       }
    }       
}

And add the listener to your JComboBox:

source.addItemListener(new ItemChangeListener());
Ellen Spertus
  • 6,576
  • 9
  • 50
  • 101
Juned Ahsan
  • 67,789
  • 12
  • 98
  • 136