JFace データバインディングを使用して、ラジオボタンのグループをモデルのブール変数に適切にバインドする方法を誰かが説明してくれるかどうか疑問に思っていました。
最初に状況を説明しましょう: SWT ボタンのグループ (スタイルを「SWT.RADIO」に設定) を表すクラスを作成しました。このクラスは、次の 3 つの要素で構成されています。 「はい」の答えと「いいえ」の答え。ユーザーが「はい」ラジオボタンを選択するとブール値がtrueに設定され、「いいえ」ボタンを選択するとブール値が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 イベントが発生しないため)。
これを想定どおりに機能させるには、つまり、ユーザーが選択したボタンに基づいてモデルのブール値を変更できるようにするにはどうすればよいですか? ここで明らかな何かが欠けていますか?ありがとう!