Java 检测 JRadioButton 状态变化
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1424738/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Detecting a JRadioButton state change
提问by cgull
How can I detect when a JRadioButton is changed from 'unselected' to 'selected' when clicked with the mouse? I've tried using an ActionListener on the button, but that gets fired every time the radiobutton is clicked, not just when it's changing state to 'selected'.
使用鼠标单击时,如何检测 JRadioButton 何时从“未选择”更改为“已选择”?我试过在按钮上使用 ActionListener ,但是每次单击单选按钮时都会触发它,而不仅仅是在将状态更改为“已选择”时。
I've thought of maintaining a boolean variable that remembers the state of the button, and test it inside the ActionListener to see whether to change its state but I'm wondering if there's a much better or cleaner solution.
我想过维护一个布尔变量来记住按钮的状态,并在 ActionListener 中测试它以查看是否更改其状态,但我想知道是否有更好或更清晰的解决方案。
采纳答案by Nemi
Look at JRadioButton.addItemListener()
看看 JRadioButton。添加项目监听器()
EDIT: It is unlikely you want to use a changeListener as it fires multiple times per click. An itemListener fires only once per click. See here
编辑:您不太可能想要使用 changeListener,因为它每次点击都会触发多次。itemListener 每次点击仅触发一次。 看这里
EDIT2: Just to expand on this, an actionListener on a jradioButton will fire every time a user clicks on it, even if it is already selected. if that's what you want, fine, but I find it annoying. I only want to be notified it it is selected or deselected.
EDIT2:只是为了扩展这个,每次用户点击 jradioButton 上的 actionListener 都会触发它,即使它已经被选中。如果这就是你想要的,那很好,但我觉得这很烦人。我只想收到通知它被选中或取消选中。
A ChangeListener will fire for all sorts of things, meaning your listener will receive 5 or more events per click. Not good.
ChangeListener 将针对各种情况触发,这意味着您的侦听器每次单击将收到 5 个或更多事件。不好。
An itemlistener will fire onlyif the selected or deselected state changes. This means that a user can click on it multiple times and it will not fire if it doesn't change. In your handler method you will have to have an if
block checking for SELECTED
or DESELECTED
status and do whatever there:
只有当所选或取消选择的状态更改时,才会启动。这意味着用户可以多次点击它,如果它没有改变,它就不会触发。在您的处理程序方法中,您必须有一个if
块检查SELECTED
或DESELECTED
状态并在那里执行任何操作:
@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.
}
}
It just works better because you know that if you are in the method then the radio button has either just been selected or deselected, not that the user is just banging on the interface for some unknown reason.
它只是更好地工作,因为您知道如果您在方法中,那么单选按钮要么刚刚被选中,要么被取消选中,而不是用户只是出于某种未知原因敲击界面。
回答by Rob Di Marco
I believe you want to add a ChangeListener
implementation.
我相信您想添加一个ChangeListener
实现。