使用JComboBox的switch语句

时间:2015-11-07 18:03:14

标签: java user-interface switch-statement jcombobox

我有一个JComboBox设置如下:

private String[] boxChoices = {"option 1", "option 2"};
JcomboBox box = new JCombobox(boxChoices);

box.addItemListener()
{ 
    public void itemStateChanged(ItemEvent event)  
    {
        int selection = box.getSelectedIndex();
        switch (selection)
        {
            case 0: JOptionPane.showMessageDialog(null, "you have selected option 1");
                break;
            case 1: JOptionPane.showMessageDialog(null, "you have selected option 2");
                break;
            default: break;
        }
    }
}

我的问题是,当我选择一个选项时,该消息将显示两次而不是一次。例如,如果我选择选项1,则会出现以下内容:

you have selected option 1
you have selected option 1

是什么导致这种情况发生?

3 个答案:

答案 0 :(得分:1)

出现此问题的原因是,由于选择了JComboBox中的任何项目,因此会调用项目侦听器2次。第一个用于取消选择先前选择的项目,第二个用于选择新项目。

您可以使用if子句来反映您要捕获的实际事件,即选择或取消选择:

if(event.getStateChange() == ItemEvent.SELECTED)

OR

 if(event.getStateChange() == ItemEvent.DESELECTED)

根据您想要捕获的状态变化选择的偏好。

答案 1 :(得分:0)

我不确定,但可能是因为你正在使用一个无意识的听众。

实施ItemListener并添加它。

答案 2 :(得分:0)

除了@ Blip的回答,您还可以使用actionListener。只有在更改选择时才会触发一次JComboBox的actionEvent。

box.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {

            int selection = box.getSelectedIndex();
            switch (selection) {
                case 0:
                    JOptionPane.showMessageDialog(null, "you have selected option 1");
                    break;
                case 1:
                    JOptionPane.showMessageDialog(null, "you have selected option 2");
                    break;
                default:
                    break;
            }
        }
    });