我已经实施了一个响应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.");
}
}
事件?
答案 0 :(得分:1)
这是因为“选项1”已经是默认/选择选项,这就是
的原因 myComboBox.setSelectedItem("Option 1");
不会触发任何Item更改事件。将代码更改为
myComboBox.setSelectedItem("Option 2");
它将触发doStuff()
方法,因为item确实已从当前选择中更改。