我認爲證明這一點的最佳方式是使用可編譯的示例。我想要一組單選按鈕,其行爲如此(一次只能選擇一個按鈕);然而,噹噹前選定的單選按鈕再次被選中時,選擇被清除(就像我猜測的複選框)。我無法確定此JRadioButton功能的語義
我的實現檢查單選按鈕的狀態,如果選中,則清除選擇(模擬「取消選擇」就像複選框)。問題是,單選按鈕的選擇狀態在ActionEvent
觸發之前發生變化,因此返回true,無論它是否已被選中。一種解決方案是在任何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);
}
}
http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton – assylias 2012-03-28 19:49:24
如果你保存你只是做了,並檢查它下一次的方法被調用這不是心理。 – Thomas 2012-03-28 19:53:28
這個用法是什麼?當你現在選擇一個單選按鈕時,你將再次清除選擇,這將使用戶感到挫敗。你確定無線電按鈕是要走的路嗎?爲什麼不選擇帶有'JCheckbox'實例的ButtonGroup? – Robin 2012-03-28 19:56:44