相关疑难解决方法(0)

为什么JComboBox上的itemStateChanged在更改时被调用两次?

我正在使用带有ItemListener的JComboBox.更改值时,将调用itemStateChanged事件两次.第一个调用,ItemEvent显示所选的原始项目.第二次,它显示用户刚刚选择的项目.这是一些测试人员代码:

public Tester(){

    JComboBox box = new JComboBox();
    box.addItem("One");
    box.addItem("Two");
    box.addItem("Three");
    box.addItem("Four");

    box.addItemListener(new ItemListener(){
        public void itemStateChanged(ItemEvent e){
            System.out.println(e.getItem());
        }
    });

    JFrame frame = new JFrame();
    frame.getContentPane().add(box);
    frame.pack();
    frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

因此,当我将组合框从"一"改为"三"时,控制台显示:

One
Three
Run Code Online (Sandbox Code Playgroud)

有没有一种方法我可以使用ItemEvent告诉它,它是第二项(即用户选择的项目)?如果有人可以解释为什么它被调用两次,那也会很好!

谢谢

java swing jcombobox itemlistener

36
推荐指数
5
解决办法
6万
查看次数

仅在用户交互后调用itemStateChanged()

在我的swing应用程序中,我有一个带有ItemListener的组合框,如果用户更改了值,则会执行X(通过itemStateChanged()).但是,我也有一个不同的功能,可以更改该组合框的值.在这种情况下,我不希望X完成.

有没有办法找出状态变化是由用户交互还是由函数引起的?

谢谢!

编辑:我使用了标志方法.谢谢你的快速解答.我只想补充一点,itemStatechanged实际上被调用了两次,一次用于取消选择,一次用于选择.这需要处理,否则旗帜不会有任何影响.这里讨论的问题.

java swing

4
推荐指数
1
解决办法
1194
查看次数

标签 统计

java ×2

swing ×2

itemlistener ×1

jcombobox ×1