Когда я создаю пару переключателей (new Button(parent, SWT.RADIO)
) и программно устанавливаю выбор с помощью radioButton5.setSelection(true)
, ранее выбранный переключатель также остается выбранным. Нужно ли мне перебирать все другие переключатели той же группы, чтобы отменить их выбор, или есть более простая альтернатива? Заранее спасибо.
SWT: установить радиокнопки программно
Ответы (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
для более подробной информации.
Радиокнопки в одном композите будут действовать как группа. Одновременно будет выбрана только одна радиокнопка. Вот рабочий пример:
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");
Это должно происходить автоматически. Как вы создаете кнопки? Они от одного родителя? Родитель использует стиль NO_RADIO_GROUP?
NO_RADIO_GROUP
, они все равно демонстрируют поведение, упомянутое в вопросе. Поведение, по крайней мере, в Windows Vista с eclipse 3.6. Если он работает на других ОС или версиях eclipse, то это ошибка SWT.
- person Favonius; 30.04.2011