取消选中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);