2016-12-15 57 views
0

我目前面臨的一個問題是,我可以添加一個複選框到屏幕上,當點擊它時根據需要在狀態之間交換,但是當涉及到使用選擇數據來做事時,它總是返回原來的值,不管它是真還是假;JCheckBox總是返回真/假但不會改變

我的第一部分代碼只是使用isSelected();方法在不斷運行每個滴答的if語句中。 SVelRand是我的複選框,我創建使用:

SVelRand = new JCheckBox("Random", true); 
    SVelRand.setBounds(50, 30, 90, 20); 

然後檢查代碼如下:

boolean sel = SVelRand.isSelected(); 

    if(sel){ 

     System.out.print("Selected"); 

    }else{ 

     System.out.print("Not Selected"); 


    } 

當我發現這個沒有工作,我試圖執行一個項目監聽我創造一個下方jcheckbox但它仍然繼續返回初始值集。

SVelRand.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent e) { 
      System.out.println(SVelRand.isSelected()); 
      } 
     }); 

我也將它添加到框架櫃面有任何軸承之前繪製一個標籤和的JTextField相同的面板。而使用setBounds而不是佈局的原因是我可以將每個組件添加到精確的位置以實現非標準佈局。

任何幫助將不勝感激;

回答

-1

在你的動作監聽功能只跟蹤一個(類範圍)的布爾

// way up above everything 
public boolean toggleState=false; 

// then later 
SVelRand.addItemListener(new ItemListener() { 
public void itemStateChanged(ItemEvent e) { 
    this.toggleState=(!this.toggleState); 
    String message=(this.toggleState) ? "checked" : "unchecked"; 
    System.out.println("Checkbox is "+message); 
} 
}); 

如果你開始你的複選框爲默認選中,只需toggleState的初始值更改爲true

+0

謝謝堆,它現在工作很好。仍然困惑我爲什麼內置的方法不工作,但我會堅持這種方法。 – user1690395

+0

爲什麼選擇這個領域?你引入了額外的不必要的複雜性爲什麼不檢查ItemEvent對象中保存的狀態,因爲它保存了所需的信息? if(e.getStateChange()== ItemEvent.SELECTED)'是所有需要的 –

相關問題