我想知道是否有人可以向我解释如何使用 JFace 数据绑定将一组单选按钮正确绑定到模型中的布尔变量。
让我先解释一下情况:我创建了一个代表一组 SWT 按钮(样式设置为“SWT.RADIO”)的类,它由三个元素组成:一个带有问题的标签和两个按钮,一个用于“是”的答案和一个“否”。我想在模型中创建一个与布尔变量的绑定,这样当用户选择“是”单选按钮时,布尔值设置为真,当他/她选择“否”按钮时,布尔值是设置为假。
这是我班级的代码:
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 事件)。
我该怎么做才能使这项工作按预期的方式工作,即能够根据用户选择的按钮来更改模型中布尔值的值?我在这里遗漏了一些明显的东西吗?谢谢!