JComboBox itemStateChanged事件一次调用两次

时间:2014-02-21 05:55:56

标签: java swing

resultCombo = new JComboBox();
resultCombo.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent ie) {
         sampleText=resultCombo.getSelectedItem().toString();
         System.out.println("SampleText : "+sampleText);
    }
});


output:
SampleText : selectedword
SampleText : selectedword

为什么在组合框中选择项目时会调用此事件两次。?

2 个答案:

答案 0 :(得分:12)

JComoboBox ItemListener会在一次更改时被调用两次。一次用于SELECTED事件,一次用于DESELECTED事件。

有关如何编写ItemListener的信息,请参阅this tutorial page

基本上你要做的是

public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        //Do any operations you need to do when an item is selected.
    } else if(e.getStateChange() == ItemEvent.DESELECTED){
        //Do any operations you need to do when an item is de-selected.
    }
}

答案 1 :(得分:0)

基于ItemListener

的文档
  

用户选择或取消选择某个项目时调用。该   为此方法编写的代码执行需要的操作   选择(或取消选择)项目时会发生。

这表示您在取消选择或选择某个项目时会收到​​一个事件。如果对组合框中所选项目进行更改,则必须首先取消选中当前所选项目,这表明您将收到ItemEvent.DESELECTEDItemEvent.SELECTED事件