Мне было интересно, может ли кто-нибудь объяснить мне, как я мог бы связать группу переключателей с логической переменной в модели с использованием привязки данных JFace.Правильный способ привязки группы переключателей с использованием привязки данных JFace
Позвольте мне объяснить ситуацию в первую очередь: я создал класс, представляющий группу кнопок SWT (со стилем, установленным в «SWT.RADIO»), который состоит из трех элементов: метка с вопросом и две кнопки , один для ответа «да» и один для «нет». Я хотел бы создать привязку к логической переменной в модели таким образом, что, когда пользователь выбирает «да», кнопка boolean имеет значение true, а когда он выбирает кнопку «no», логическое значение установите значение false.
Вот код моего класса:
private class YesOrNoRadioButtonGroup {
private static final String YES = "yes";
private static final String NO = "no";
private Button m_yesButton;
private Button m_noButton;
public YesOrNoRadioButtonGroup(final Composite p_parent,
final String p_questionText,
final IObservableValue p_modelProperty
final DataBindingContext p_dbContext)
{
Composite radioButtonGroupContainer = new Composite(p_parent, SWT.NONE);
radioButtonGroupContainer.setLayout(new GridLayout());
Label question = new Label(radioButtonGroupContainer, SWT.NONE);
question.setText(p_questionText);
m_yesButton = new Button(radioButtonGroupContainer, SWT.RADIO);
m_yesButton.setText(YES);
m_noButton = new Button(radioButtonGroupContainer, SWT.RADIO);
m_noButton.setText(NO);
m_noButton.setSelection(true);
Listener yesOrNoRadioGroupListener = new Listener() {
public void handleEvent(Event p_event) {
Button button = (Button) p_event.widget;
if (m_yesButton.equals(button)) {
m_yesButton.setSelection(true);
m_noButton.setSelection(false);
}
else {
m_yesButton.setSelection(false);
m_noButton.setSelection(true);
}
}
};
m_yesButton.addListener(SWT.Selection, yesOrNoRadioGroupListener);
m_noButton.addListener(SWT.Selection, yesOrNoRadioGroupListener);
p_dbContext.bindValue(SWTObservables.observeSelection(this.getYesButton()),
p_modelProperty, null, null);
}
public Button getYesButton() {
return m_yesButton;
}
public Button getNoButton() {
return m_noButton;
}
}
Теперь, как вы можете видеть, я связывание моей кнопки «да» на логическое значение. В частности, значение будет привязано к событию SWT.selection. Это, кажется, единственное допустимое событие для привязки переключателя. Однако из-за этого, когда выбрана кнопка «Нет», значение логического значения остается неизменным (поскольку не было запущено событие SWT.selection на кнопке «да»).
Что я могу сделать, чтобы сделать эту работу так, как она должна быть, чтобы иметь возможность изменять значение булева модели в зависимости от того, какую из кнопок выбирает пользователь? Я пропустил что-то очевидное здесь? Спасибо!
Хммм ... да, это, кажется, самый элегантный способ решить эту проблему. Tnx для ответа, я соглашусь, если никто не придумает ничего лучшего. Кстати, кажется, что я должен, вероятно, расширить AbstractObservable, а не напрямую выполнять IObservable. – Sandman
Я думаю, что SeB.Fr предоставил еще более элегантное и более простое решение, используя SelectObservableValue. – janhink
@eQui Я согласен и поддержал этот пост. – VonC