我认为证明这一点的最佳方法是使用可编译的示例。我想要一组这样的单选按钮(一次只能选择一个);但是,当当前选择的单选按钮再次被“选中”时,选择被清除(就像我猜的复选框)。
我的实现检查单选按钮的状态,如果选中,则清除选择(模拟复选框的“取消选择”)。问题是,单选按钮的选择状态在ActionEvent
触发之前发生了变化,因此isSelected()
无论它是否已经被选中都返回 true。一种解决方案是在任何 ActionEvent 触发之前基本上记录 ButtonGroup 的选定按钮,尽管我的程序不是那样的 :( 我怀疑我可以使用 a 轻松实现这一点MouseListener
,尽管这将功能限制为鼠标使用,我可以使用键盘等 :) 感谢您的任何指点!
演示:
package sandbox;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
public class Sandbox {
public static void main(String[] args) {
JFrame f = new JFrame();
final ButtonGroup btns = new ButtonGroup();
final JRadioButton btn1 = new JRadioButton("Button 1");
final JRadioButton btn2 = new JRadioButton("Button 2");
btns.add(btn1);
btns.add(btn2);
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JRadioButton) {
btns.clearSelection();
}
}
};
btn1.addActionListener(al);
btn2.addActionListener(al);
f.setLayout(new FlowLayout());
f.add(btn1);
f.add(btn2);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}