java radio 不可选,在Java Swing中取消选择RadioButtons

When displaying a group of JRadioButtons, initially none of them is selected (unless you programmatically enforce that). I would like to be able to put buttons back into that state even after the user already selected one, i.e., none of the buttons should be selected.

However, using the usual suspects doesn't deliver the required effect: calling 'setSelected(false)' on each button doesn't work. Interestingly, it does work when the buttons are not put into a ButtonGroup - unfortunately, the latter is required for JRadioButtons to be mutually exclusive.

Also, using the setSelected(ButtonModel, boolean) - method of javax.swing.ButtonGroup doesn't do what I want.

I've put together a small program to demonstrate the effect: two radio buttons and a JButton. Clicking the JButton should unselect the radio buttons so that the window looks exactly as it does when it first pops up.

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);

}

}

Any ideas anyone? Thanks!

解决方案

But this method is available only since Java 6.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值