Снятие Переключателей в Java Swing

При отображении группы JRadioButtons первоначально ни один из них не выбран (если Вы программно не осуществляете это). Я хотел бы иметь возможность отложить кнопки в то состояние даже после того, как пользователь уже выбрал один, т.е. ни одна из кнопок не должна быть нажата.

Однако использование обычных подозреваемых не обеспечивает необходимый эффект: вызов 'setSelected (ложь)' на каждой кнопке не работает. Интересно, это работает, когда кнопки не помещаются в ButtonGroup - к сожалению, последний требуется для JRadioButtons быть взаимоисключающим.

Кроме того, с помощью setSelected (ButtonModel, булевская переменная) - метод 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);
    }
}

Какие-либо идеи кто-либо? Спасибо!

33
задан Thomas 9 March 2010 в 11:43
поделиться

4 ответа

Вы можете сделать buttonGroup.clearSelection () .

Но этот метод доступен только в Java 6.

50
ответ дан 27 November 2019 в 18:10
поделиться

Или вы можете использовать группу кнопок выбора Даррила , которая не требует использования «невидимой кнопки».

3
ответ дан 27 November 2019 в 18:10
поделиться

Javadoc самого класса ButtonGroup дает некоторую подсказку о том, как этого можно достичь:

Из API doc класса ButtonGroup:
Изначально все кнопки в группе не выбраны. После выбора любой кнопки в группе всегда выбирается одна кнопка. Не существует способа программно перевести кнопку в состояние "выключено", чтобы очистить группу кнопок. Чтобы создать видимость "ни одна не выбрана", добавьте в группу невидимую радиокнопку, а затем программно выберите эту кнопку, чтобы выключить все отображаемые радиокнопки.

6
ответ дан 27 November 2019 в 18:10
поделиться

Попробуйте добавить третью невидимую кнопку в группу кнопок. Когда вы захотите "отменить выбор", выберите невидимую.

3
ответ дан 27 November 2019 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: