Вопрос

Когда я создаю пару переключателей (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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top