取消选中java中的复选框

取消选中java中的复选框,java,jcheckbox,Java,Jcheckbox,在我的程序中,每当调用此方法时,我希望取消选中所有复选框。有人能解释为什么它不起作用吗?无论何时调用此方法,复选框仍处于选中状态 private void nextQuestionButtonActionPerformed(java.awt.event.ActionEvent evt) { clearOptions(); } public void clearOption

在我的程序中,每当调用此方法时,我希望取消选中所有复选框。有人能解释为什么它不起作用吗?无论何时调用此方法,复选框仍处于选中状态

private void nextQuestionButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                   

     clearOptions();

}    

public void clearOptions ()   
{ 
    //Make sure the check boxes are not checked
    optionA.setSelected(false);
    optionB.setSelected(false);
    optionC.setSelected(false);
    optionD.setSelected(false);  
}

通常,在Swing中,在后端所做的任何更改都不会传播到可视元素。一个众所周知的异常是
JTextField.setText()
(对setText的任何调用都将立即更新可视文本元素)

它甚至记录在API文档中:


您可以继续使用代码,但必须(在中)验证容器。

首先,您需要将所有复选框的代码置于例如状态更改方法的顶部,然后取消选中复选框,您可以创建一个类似状态的变量,并将变量值设置为false,然后您可以调用
复选框。setSelected(false)
布尔状态=false;

复选框.setSelected(state)就是这样

最简单的方法是对所有复选框应用相同的按钮组。然后使用:

buttonGroup1.clearSelection();

在尝试了几乎所有的方法之后。这是迄今为止最简单和最有效的一个。

如果您确定选中了
复选框,您可以切换它

checkbox.toggle();

我尝试对带有空参数的复选框组使用此方法:

checkboxGroup1.setSelectedCheckbox(null);

我认为“checked”是属性,所以需要将其设置为optionC.checked=false;但不一定要显示完整的代码。请提供一个可编译的示例来重现您的问题。如果您已将一些
侦听器注册到
jceckbox
中,请同时显示相关的操作。@JeanWaghetti我对这一点不熟悉,但我认为可编译意味着您可以在您的计算机上运行。嗯,我只需要在UI中添加4个复选框,在jFrame中添加一个按钮,并调用clearOptions()方法。在按钮1的情况下,Swing会在组件的属性发生更改时自动重新绘制组件。调用setSelected(…)方法将导致组件重新绘制自身。不需要验证()。这可能是一个旧的AWT要求,但Swing不需要它。@petermm是否有其他方法可以取消选中复选框?我有一个反例。jcheckbox在JDialog中的一个框中,调用setSelected。它有时会进入绘制错误的状态(复选框状态是正确的,但绘制错误),直到我在对话框中添加了一个名为“重新绘制”的ItemListener。这就解决了问题。假设我有时间,我将在这里发布并链接到一个带有SSCCE的问题,以供进一步分析。@JoshuaGoldberg如果您从一个不是事件dispath线程的线程调用
cb.setSelected(state)
,可能会发生这种情况。这样的修改(就像Swing组件上的所有操作一样)只应该在事件分派线程上完成。@Marco13回顾这段代码,我几乎可以肯定这就是问题所在,谢谢你的评论。为什么这样可以解决问题?这与OP发布的内容相同。
checkboxGroup1.setSelectedCheckbox(null);