Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置项目时如何激发itemStateChanged事件';什么是初始值?_Java_Itemlistener - Fatal编程技术网

Java 设置项目时如何激发itemStateChanged事件';什么是初始值?

Java 设置项目时如何激发itemStateChanged事件';什么是初始值?,java,itemlistener,Java,Itemlistener,我实现了一个java.awt.event.ItemListener,它响应itemStateChanged。对于JComboBox的更改,它似乎按预期执行,但是,对于我分配给组合框的第一个值,事件不会触发 我找不到一种方法来运行它,但是下面的代码可以按原样编译和执行。将它放在“MyDialog.java”中,用javac.exe*.java编译并用javamydialog执行。对话框初始化时将不执行DoStuff方法。但是,当用户更改组合框时,事件将触发 import java.awt.even

我实现了一个
java.awt.event.ItemListener
,它响应
itemStateChanged
。对于
JComboBox
的更改,它似乎按预期执行,但是,对于我分配给组合框的第一个值,事件不会触发

我找不到一种方法来运行它,但是下面的代码可以按原样编译和执行。将它放在“MyDialog.java”中,用
javac.exe*.java
编译并用
javamydialog
执行。对话框初始化时将不执行
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.");
    }
}
如何在对话框初始化时触发
DoStuff
事件?

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

 myComboBox.setSelectedItem("Option 1");
不会触发任何项目更改事件。将代码更改为

 myComboBox.setSelectedItem("Option 2");

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

谢谢,这有助于我理解为什么会发生这种情况。但是,如果我确实希望“选项1”作为默认值,那么我是否唯一可以切换到“选项2”并切换回?这似乎有点奇怪@阿兰海的建议可能也行,但我可能不得不修改一些东西。