Tho*_*mas 33 java swing radio-button
显示一组JRadioButtons时,最初没有选择它们(除非您以编程方式强制执行).即使在用户已选择按钮之后,我也希望能够将按钮重新置于该状态,即,不应选择任何按钮.
但是,使用通常的嫌疑人无法提供所需的效果:在每个按钮上调用'setSelected(false)'不起作用.有趣的是,当按钮没有放入ButtonGroup时它确实有效 - 不幸的是,后者是JRadioButtons互斥的必需品.
此外,使用setSelected(ButtonModel,boolean) - javax.swing.ButtonGroup的方法不能做我想要的.
我已经整理了一个小程序来演示效果:两个单选按钮和一个JButton.单击JButton应取消选择单选按钮,以使窗口看起来与第一次弹出时完全一样.
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
/**
* This class creates two radio buttons and a JButton. Initially, none
* of the radio buttons is selected. Clicking on the JButton should
* always return the radio buttons into that initial state, i.e.,
* should disable both radio buttons.
*/
public class RadioTest implements ActionListener {
/* create two radio buttons and a group */
private JRadioButton button1 = new JRadioButton("button1");
private JRadioButton button2 = new JRadioButton("button2");
private ButtonGroup group = new ButtonGroup();
/* clicking this button should unselect both button1 and button2 */
private JButton unselectRadio = new JButton("Unselect radio buttons.");
/* In the constructor, set up the group and event listening */
public RadioTest() {
/* put the radio buttons in a group so they become mutually
* exclusive -- without this, unselecting actually works! */
group.add(button1);
group.add(button2);
/* listen to clicks on 'unselectRadio' button */
unselectRadio.addActionListener(this);
}
/* called when 'unselectRadio' is clicked */
public void actionPerformed(ActionEvent e) {
/* variant1: disable both buttons directly.
* ...doesn't work */
button1.setSelected(false);
button2.setSelected(false);
/* variant2: disable the selection via the button group.
* ...doesn't work either */
group.setSelected(group.getSelection(), false);
}
/* Test: create a JFrame which displays the two radio buttons and
* the unselect-button */
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
RadioTest test = new RadioTest();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(3,1));
contentPane.add(test.button1);
contentPane.add(test.button2);
contentPane.add(test.unselectRadio);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
任何人的想法?谢谢!
该类的Javadoc ButtonGroup
本身提供了一些关于如何实现这一点的提示:
从类的API doc ButtonGroup
:
最初,组中的所有按钮都是未选中的.选择任何按钮后,组中始终会选择一个按钮.无法以编程方式将按钮设置为"关闭",以便清除按钮组.要给出"未选择"的外观,请向该组添加一个不可见的单选按钮,然后以编程方式选择该按钮以关闭所有显示的单选按钮.
归档时间: |
|
查看次数: |
72302 次 |
最近记录: |