Java 检测JRadioButton状态更改

Java 检测JRadioButton状态更改,java,swing,radio-button,Java,Swing,Radio Button,当用鼠标单击JRadioButton时,如何检测它何时从“未选择”更改为“已选择”?我曾尝试在按钮上使用ActionListener,但每次单击radiobutton时都会触发,而不仅仅是当它将状态更改为“selected”时 我曾考虑过维护一个布尔变量来记住按钮的状态,并在ActionListener中测试它,看看是否要更改其状态,但我想知道是否有更好或更干净的解决方案。看看JRadioButton。() 编辑:您不太可能希望使用changeListener,因为它每次单击都会触发多次。ite

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

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

看看JRadioButton。()

编辑:您不太可能希望使用changeListener,因为它每次单击都会触发多次。itemListener每次单击仅激发一次。

EDIT2:进一步说,jradioButton上的actionListener会在用户每次单击它时触发,即使它已经被选中。如果那是你想要的,好吧,但我觉得很烦人。我只想在它被选中或取消选中时得到通知

ChangeListener会触发各种事件,这意味着您的侦听器每次单击将收到5个或更多事件。不太好

仅当选定或取消选定的状态更改时,itemlistener才会激发。这意味着用户可以多次单击它,如果不更改,它将不会触发。在处理程序方法中,您必须有一个
if
块检查
选中的
取消选中的
状态,并执行以下操作:

@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.
    }
}

它只是工作得更好,因为您知道,如果您在该方法中,则单选按钮已被选中或取消选中,而不是用户只是出于某种未知原因敲打界面

我相信您希望添加一个
ChangeListener
实现。

尽管Sun文档中说“通常,您可以使用操作侦听器处理单选按钮的单击”,但这是非常有效的。谢谢如果您可以将侦听器添加到组内的
JRadioButton
更改后只会触发一次的
ButtonGroup
,那将非常好。@Nemi很抱歉,编辑链接已关闭。“你能提供如何使用这种方法吗?”Abrahamputrakasa抱歉,经过这么长时间,我甚至不知道我链接到了什么。我只想说,EDIT2部分概述了我想说的关于ChangeListener每次单击触发多次的所有内容。我在帖子中提到,添加ChangeListener每次单击触发多次,这不太可能是最佳选择。是的,ActionListener通常就是这样做的。每个人都知道如何编写ActionListener,因为它非常常见。代码将使用按钮的isSelected()方法。ItemListener也会激发多次,因此您必须检查ItemEvent以查看此事件是选择还是取消选择。我会坚持使用更常见的方法。像这样使用ActionListener仍然不起作用,因为每次单击单选按钮时isSelected()都会返回true,这就是我最初的问题所在。在XP上使用JDK6对我来说很好。如果ChangeListener告诉您状态已更改,那么最好更改状态,否则您会遇到大问题。张贴您的SSCCE,说明问题所在。@camickr,您在第一次评论中告诉他使用ActionListener,然后当他解释存在问题时,您的评论就像您告诉他使用ChangeListener一样。这两位听众都有下面指出的问题。