检测JRadioButton状态更改


问题内容

当用鼠标单击时,如何检测JRadioButton从“未选中”更改为“选中”?我曾尝试在按钮上使用ActionListener,但是每次单击单选按钮时都会触发该事件,而不仅仅是在将状态更改为“选定”时触发。

我曾想过要维护一个记住按钮状态的布尔变量,并在ActionListener中对其进行测试以查看是否更改其状态,但是我想知道是否有更好或更干净的解决方案。


问题答案:

看一下JRadioButton。addItemListener()

编辑:不太可能要使用changeListener,因为它每次单击会触发多次。每次点击仅触发一次itemListener。
看这里

EDIT2:只是为了对此进行扩展,即使用户已选择jradioButton上的actionListener,它也会在用户每次单击时触发。如果那是您想要的,那很好,但是我觉得很烦。我只想通知它已被选中或取消选中。

一个ChangeListener将会触发各种各样的事情,这意味着您的监听器每次点击将收到5个或更多事件。不好。


当选定或取消选定状态更改时,条目侦听器才会触发。这意味着用户可以多次单击它,并且如果不更改它也不会触发。在您的处理程序方法中,您将必须具有if检查SELECTEDDESELECTED状态的块,然后在其中进行任何操作:

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        // Your selected code here.
    }
    else if (e.getStateChange() == ItemEvent.DESELECTED) {
        // Your deselected code here.
    }
}

这样做会更好,因为您知道,如果您在方法中,则单选按钮已被选中或取消选中,而不是因为某种未知的原因,用户只是在界面上敲打。