JFaceデータバインディングを使用して、ラジオボタンのグループをモデルのブール変数に適切にバインドする方法を誰かに説明できますか?JFaceデータバインディングを使用してラジオボタングループをバインドする適切な方法
最初に状況を説明しましょう:3つの要素で構成されるSWTボタンのグループ(SWT.RADIOに設定されたスタイル)を表すクラスを作成しました。質問付きのラベルと2つのボタン1つは「はい」、もう1つは「いいえ」です。私は、ユーザが "yes"ラジオボタンを選択したときにブール値が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の場合は、誰も何も良いことがなければそれを受け入れます。 Btw、私はおそらく、IObservableを直接実装するのではなく、AbstractObservableを拡張する必要があるようです。 – Sandman
私はSeB.FrがSelectObservableValueを使用してより洗練された簡単なソリューションを提供したと思います。 – janhink
@eQui私は同意し、その投稿をupvotedしています。 – VonC