ItemStateChanged在JComboBox中调用了两次

时间:2014-01-03 07:21:34

标签: java swing jframe jcombobox

您好,我正在使用一个Combobox,当我触发IteamStateChage事件时,该操作会调用两次。但是,如果我打了两次电话,我就无法使我想做的事情成为可能。

那么有没有办法只调用一次IteamStatechange evet。当我将iteam改为Jcombobox时。我只需要一次itemStatechange的动作。并且仅使用项目状态更改。![此处屏幕截图相同。] [1]

请帮我一样。 并提前感谢你。

2 个答案:

答案 0 :(得分:7)

在这种情况下,这是预期的行为。组合框表示取消选择当前项目和选择新项目。

itemStateChanged方法中,您需要检查ItemEvent的状态,以确定您应该做什么。

public void itemStateChanged(ItemEvent evt) {

    switch (evt.getStateChanged()) {
        case ItemEvent.DESELECTED:
            // Do what ever you want when the item is deselected
            break;
        case ItemEvent.SELECTED:
            // Do what ever you want when the item is selected
            break;
    }
}

答案 1 :(得分:3)

以下是如何确定更改事件是选择还是取消选择的示例:

JComboBox<String> comboBox = new JComboBox<>(new String[] {"one", "two", "foo"});
 comboBox.addItemListener(new ItemListener() {
     @Override
     public void itemStateChanged(ItemEvent e) {
         System.out.println("Change");
         if(e.getStateChange() == ItemEvent.SELECTED){
             System.out.println("Selected");
         }
         if(e.getStateChange() == ItemEvent.DESELECTED){
             System.out.println("Deselected");
         } 
     }
 });