奇怪的结果(java事件处理代码)

时间:2010-10-12 17:28:59

标签: java event-handling

public void itemStateChanged(ItemEvent event)
{
    if(event.getSource() == doctorBox)
    {
        if (doctorBox.isSelected() == true)
            JOptionPane.showMessageDialog(null, "you are a doctor");
        else if (doctorBox.isSelected() != true)
            JOptionPane.showMessageDialog(null, "you are not a doctor");
    }
}

运行应用程序时...默认情况下取消选中该复选框 当我检查“doctorBox”时...我得到两个弹出的对话框:“你是医生”和“你不是医生”,复选框也没有被检查!

为什么会这样?如何更改代码才能正常工作?

2 个答案:

答案 0 :(得分:1)

以下是一些很棒的samples。删除除一个以外的所有CheckBox,并确保根据提供的链接的详细信息,只有一个侦听器到单个CheckBox。我的猜测是,由于将侦听器与CheckBoxes一起添加的方式,会出现奇怪的现象。

答案 1 :(得分:1)

偶然帮助你

您的逻辑,因为您知道选择是开启还是关闭,请尝试以下

if(doctorBox.isSelected())
  //do something
else
  //do something else

如果未选中复选框,请从ItemListener更改为ActionListener。

private class aListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == doctorBox){
                if(doctorBox.isSelected())
                     JOptionPane.showMessageDialog(null, "you are a doctor");
                else {
                     JOptionPane.showMessageDialog(null, "you are not a doctor");
                }
            }   
        }
    }

如果您查看当前代码,并使用调试逐步执行它,您将看到ItemListener被触发2次。第一次检查它,第二次取消检查它。全部只需点击一下。在这种情况下,我无法解释itemListener的内部工作。 ActionListener工作得更好