SWT: установить радиокнопки программно

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


person Mot    schedule 29.04.2011    source источник


Ответы (3)


К сожалению, приходится перебирать все варианты. В первый раз, когда появляется ваш пользовательский интерфейс, запускается событие 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 для более подробной информации.

person Favonius    schedule 29.04.2011

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

    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");
person sudipn    schedule 17.09.2013

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

person Prakash G. R.    schedule 30.04.2011
comment
Даже если они находятся на одном родительском элементе и родительский элемент не создан с помощью NO_RADIO_GROUP, они все равно демонстрируют поведение, упомянутое в вопросе. Поведение, по крайней мере, в Windows Vista с eclipse 3.6. Если он работает на других ОС или версиях eclipse, то это ошибка SWT. - person Favonius; 30.04.2011