2016-12-15 56 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)'是所有需要的 –

相关问题