JFace 데이터 바인딩을 사용하여 모델의 부울 변수에 라디오 버튼 그룹을 올바르게 바인딩하는 방법을 누군가에게 설명 할 수 있는지 궁금합니다.JFace 데이터 바인딩을 사용하여 라디오 버튼 그룹을 바인딩하는 올바른 방법
상황을 먼저 설명해 드리겠습니다 : 세 가지 요소로 구성된 SWT 버튼 그룹 (SWT.RADIO로 설정된 스타일 포함)을 나타내는 클래스를 만들었습니다. 질문이있는 레이블과 두 개의 버튼 하나는 "예"대답을위한 것이고 다른 하나는 "아니오"를위한 것입니다. 사용자가 "예"라디오 버튼을 선택하면 부울 값이 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 이벤트가 발생하지 않으므로 부울 값이 변경되지 않습니다.
사용자가 선택한 버튼을 기반으로 모델에서 부울 값을 변경할 수 있도록이 작업을 수행하려면 어떻게해야합니까? 나는 여기에서 명백한 무엇인가 놓치고 있냐? 감사합니다.
음 ... 그렇습니다.이 문제를 해결하는 가장 우아한 방법 인 것 같습니다. 대답은 Tnx, 아무도 더 좋은 것으로 올라 오지 않으면 받아 들일 것입니다. Btw, 아마도 IObservable을 직접 구현하는 대신 AbstractObservable을 확장해야 할 것 같습니다. – Sandman
SeB.Fr은 SelectObservableValue를 사용하여 더욱 우아하고 단순한 솔루션을 제공한다고 생각합니다. – janhink
@ eQui 나는 그 의견에 동의하고 upvoted했다. – VonC