2010-10-12 48 views
0
當應用程序運行
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」 ......我得到兩個對話框彈出起來:「你是醫生「,」你不是醫生「,複選框也沒有檢查!怪異的結果(Java事件處理代碼)

爲什麼會發生這種情況?如何更改代碼以正確工作?

回答

1

這裏有一些很棒的samples。刪除除了一個之外的所有複選框,並確保您在提供的鏈接中具有單個複選框的單個偵聽器。我的猜測是,由於偵聽器與CheckBox一起添加的方式,會出現奇怪現象。

+0

awt CheckBox和JCheckBox都沒有isChecked方法,都使用getState()或isSelected()。 – josefx 2010-10-12 17:35:52

+0

@josefx是啊我編輯了答案...我有我的.NET帽子 – 2010-10-12 17:37:05

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更好用