在Java Swing中取消选择单选按钮

当显示一组JRadioButton时,最初不会选择任何一个(除非您以编程方式强制执行此操作)。我希望即使在用户已经选择一个按钮之后,也可以将按钮放回该状态,即,不应选择任何按钮。

但是,使用通常的嫌疑人并不能达到预期的效果:在每个按钮上调用’setSelected(false)’不起作用。有趣的是,当按钮没有放入ButtonGroup时,它

确实可以 工作-不幸的是,对于JRadioButton来说,后者是互斥的。

另外,使用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);

}

}

有任何想法吗?谢谢!

回答:

你可以做的buttonGroup.clearSelection()

但是此方法仅自Java 6起可用。

以上是 在Java Swing中取消选择单选按钮 的全部内容, 来源链接: utcz.com/qa/403655.html

回到顶部