これを実証する最良の方法は、コンパイル可能な例を使用することだと思いました。そのように動作するラジオボタンのグループが必要です(一度に選択できるのは1つだけです)。ただし、現在選択されているラジオボタンが再び「選択」されると、選択はクリアされます(私が推測するチェックボックスのように)。
私の実装では、ラジオボタンのステータスをチェックし、選択されている場合は、選択をクリアします(チェックボックスのように「選択解除」をエミュレートします)。問題は、ラジオボタンの選択状態が起動前に変化するためActionEvent
、isSelected()
すでに選択されているかどうかに関係なくtrueを返すことです。1つの解決策は、基本的にActionEventが発生する直前にButtonGroupの選択されたボタンをログに記録することですが、私のプログラムはそのように精神的ではありません:(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);
}
}