Java ItemStateChanged被两次调用到JComboBox中

Java ItemStateChanged被两次调用到JComboBox中,java,swing,jframe,jcombobox,Java,Swing,Jframe,Jcombobox,您好,我正在使用一个组合框,当我触发IteamStateChage事件时,该操作调用了两次。但是,如果我打两次电话,我就无法实现我想做的事情 那么,有没有办法只改变一次呢。当我将iteam更改为Jcombobox时。我只需要一次itemStatechange的操作。并且仅使用项目状态更改。![此处为相同的屏幕截图。][1] 请帮我做同样的事。 提前感谢您的支持。在这种情况下,这是预期的行为。组合框发出取消选择当前项和选择新项的信号 在itemStateChanged方法中,您需要检查ItemEv

您好,我正在使用一个组合框,当我触发IteamStateChage事件时,该操作调用了两次。但是,如果我打两次电话,我就无法实现我想做的事情

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

请帮我做同样的事。
提前感谢您的支持。

在这种情况下,这是预期的行为。组合框发出取消选择当前项和选择新项的信号

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;
    }
}

在这种情况下,这是预期的行为。组合框发出取消选择当前项和选择新项的信号

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;
    }
}

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

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");
         } 
     }
 });
JComboBox组合框=新的JComboBox(新字符串[]{“一”、“二”、“foo”});
comboBox.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent e){
系统输出打印项次(“更改”);
如果(如getStateChange()==ItemEvent.SELECTED){
系统输出打印项次(“选定”);
}
如果(例如getStateChange()==ItemEvent.DESELECTED){
系统输出打印项次(“取消选择”);
} 
}
});

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

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");
         } 
     }
 });
JComboBox组合框=新的JComboBox(新字符串[]{“一”、“二”、“foo”});
comboBox.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent e){
系统输出打印项次(“更改”);
如果(如getStateChange()==ItemEvent.SELECTED){
系统输出打印项次(“选定”);
}
如果(例如getStateChange()==ItemEvent.DESELECTED){
系统输出打印项次(“取消选择”);
} 
}
});


您能在您认为发生这种情况的地方显示您的一些代码吗?更好的是,你是否无意中在组合框中注册了两个侦听器?查看屏幕截图,它会出现两次。如输出所示。所以它叫了两次。你看不到输出吗?ItemStateChanged事件可以被触发两次,因为它处理当前值的取消选择和新值的选择。这是默认行为。你需要检查状态事件以确定它是什么类型的事件…@peeskillet看到屏幕截图了吗?iteam statechage的代码就在那里。你能把你认为发生这种情况的代码显示出来吗?更好的是,你是否无意中在组合框中注册了两个侦听器?查看屏幕截图,它会出现两次。如输出所示。所以它叫了两次。你看不到输出吗?ItemStateChanged事件可以被触发两次,因为它处理当前值的取消选择和新值的选择。这是默认行为。您需要检查状态事件以确定它是什么类型的事件…@peeskillet查看屏幕截图,它就在iteam状态更改的代码后面。+1用于MAD编程:我是个很棒的家伙。顺便说一句,你从哪里来?@Krishna如果宇宙有一个明亮的中心…;)。我住在澳大利亚维多利亚州墨尔本的阳光明媚的小镇上……有人对自己评价很高:)@madhh:D哈哈,对了。但我得说你是个疯狂的程序员。顺便说一句,你们现在会问你们所有人关于这一点的疑问。@Krishna在一个特定的API中编写了15年的代码就可以做到这一点了——不过还有很多东西需要学习(就是我);)+1用于编程:我是个很棒的家伙。顺便说一句,你从哪里来?@Krishna如果宇宙有一个明亮的中心…;)。我住在澳大利亚维多利亚州墨尔本的阳光明媚的小镇上……有人对自己评价很高:)@madhh:D哈哈,对了。但我得说你是个疯狂的程序员。顺便说一句,你们现在会问你们所有人关于这一点的疑问。@Krishna在一个特定的API中编写了15年的代码就可以做到这一点了——不过还有很多东西需要学习(就是我);)好吧,让我查一下……)好吧,让我查一下……)