SWT:установить переключатели программно
-
27-10-2019 - |
Вопрос
Когда я создаю пару переключателей (new Button(parent, SWT.RADIO)
) и задайте выбор программно, используя radioButton5.setSelection(true)
ранее выбранный переключатель также остается выбранным.Нужно ли мне перебирать все остальные переключатели той же группы, чтобы отменить их выбор, или есть более простая альтернатива?Заранее спасибо.
Решение
К сожалению, вам придется перебрать все варианты.Впервые, когда появляется ваш пользовательский интерфейс, BN_CLICKED
событие запускается.Если ваш Shell
или Group
или любой другой контейнер переключателей, который не создан с помощью SWT.NO_RADIO_GROUP
option, то вызывается следующий метод:
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?