如何在设置项目的初始值时触发itemStateChanged事件?

时间:2015-05-06 18:01:11

标签: java itemlistener

我已经实施了一个响应java.awt.event.ItemListener的{​​{1}}。它似乎按预期执行更改itemStateChanged但是,事件不会触发我分配给组合框的第一个值。

我找不到在ideone.com上运行此方法的方法,但下面的代码可以按原样编译和执行。将其放在“MyDialog.java”中,使用JComboBox进行编译并使用javac.exe *.java执行。对话框初始化时,不会执行java MyDialog方法。但是,当用户更改组合框时,将触发该事件。

DoStuff

如何在对话框初始化时触发import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import javax.swing.JDialog; import javax.swing.JComboBox; import javax.swing.JOptionPane; public class MyDialog extends JDialog { public static void main(String[] args) { MyDialog dlg = new MyDialog(); dlg.setVisible(true); } class MyListener implements java.awt.event.ItemListener { public void itemStateChanged(ItemEvent event) { if (event.getSource() == myComboBox && event.getStateChange() == ItemEvent.SELECTED ) { DoStuff(event); } } } JComboBox myComboBox; public MyDialog() { this.setSize(100,100); myComboBox = new JComboBox(); myComboBox.addItem("Option 1"); myComboBox.addItem("Option 2"); this.add(myComboBox); MyListener listener = new MyListener(); myComboBox.addItemListener(listener); myComboBox.setSelectedItem("Option 1"); // EXPECT: DoStuff() was executed // GOT: DoStuff() was not executed } public void DoStuff(java.awt.event.ItemEvent event) { JOptionPane.showMessageDialog(null, "DoStuff() was reached."); } } 事件?

1 个答案:

答案 0 :(得分:1)

这是因为“选项1”已经是默认/选择选项,这就是

的原因
 myComboBox.setSelectedItem("Option 1");

不会触发任何Item更改事件。将代码更改为

 myComboBox.setSelectedItem("Option 2");

它将触发doStuff()方法,因为item确实已从当前选择中更改。