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

4

1 回答 1

9

您可以尝试ItemListener接口itemStateChanged()的方法:

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

并将侦听器添加到您的 JComboBox:

source.addItemListener(new ItemChangeListener());
于 2013-07-10T16:58:56.823 回答