我正在使用带有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告诉它,它是第二项(即用户选择的项目)?如果有人可以解释为什么它被调用两次,那也会很好!
谢谢
在我的swing应用程序中,我有一个带有ItemListener的组合框,如果用户更改了值,则会执行X(通过itemStateChanged()).但是,我也有一个不同的功能,可以更改该组合框的值.在这种情况下,我不希望X完成.
有没有办法找出状态变化是由用户交互还是由函数引起的?
谢谢!
编辑:我使用了标志方法.谢谢你的快速解答.我只想补充一点,itemStatechanged实际上被调用了两次,一次用于取消选择,一次用于选择.这需要处理,否则旗帜不会有任何影响.这里讨论的问题.