SWT: установить радио кнопки программно - PullRequest
7 голосов
/ 29 апреля 2011

Когда я создаю пару радиокнопок (new Button(parent, SWT.RADIO)) и устанавливаю выбор программно с помощью radioButton5.setSelection(true), ранее выбранная радиокнопка также остается выбранной. Нужно ли перебирать все другие переключатели той же группы, чтобы отменить выбор, или есть более простая альтернатива? Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 30 апреля 2011

К сожалению, вам придется перебирать все параметры.В первый раз, когда ваш пользовательский интерфейс появляется, происходит событие BN_CLICKED.Если ваш Shell или Group или любой другой контейнер переключателей не создан с опцией SWT.NO_RADIO_GROUP, то вызывается следующий метод:

void selectRadio () 
{
    Control [] children = parent._getChildren ();
    for (int i=0; i<children.length; i++) {
        Control child = children [i];
        if (this != child) child.setRadioSelection (false);
    }
    setSelection (true);
}

Таким образом, собственно затмение само по себе зависит от итерации по всему радиокнопки и переключение их состояния.

Каждый раз, когда вы вручную выбираете переключатель, происходит событие BN_CLICKED и, следовательно, автоматическое переключение.

Когда вы используете button.setSelection(boolean), тогда нет BN_CLICKEDсобытие запущено.Поэтому нет автоматического переключения радиокнопок.

Проверьте класс org.eclipse.swt.widgets.Button для более подробной информации.

1 голос
/ 17 сентября 2013

Переключатели внутри одного и того же композита будут действовать как группа.Только один переключатель будет выбран одновременно.Вот рабочий пример:

    Composite composite = new Composite(parent, SWT.NONE);

    Button btnCopy = new Button(composite, SWT.RADIO);
    btnCopy.setText("Copy Element");
    btnCopy.setSelection(false);

    Button btnMove = new Button(composite, SWT.RADIO);
    btnMove.setText("Move Element");
0 голосов
/ 30 апреля 2011

Это должно произойти автоматически. Как вы создаете кнопки? Они на одного родителя? Родитель использует стиль NO_RADIO_GROUP?

...