gpt4 book ai didi

swt - 使用 JFace 数据绑定(bind)绑定(bind)单选按钮组的正确方法

转载 作者:行者123 更新时间:2023-12-04 01:53:27 25 4
gpt4 key购买 nike

我想知道是否有人可以向我解释如何使用 JFace 数据绑定(bind)将一组单选按钮正确绑定(bind)到模型中的 bool 变量。

让我先解释一下情况:我创建了一个代表一组 SWT 按钮(样式设置为“SWT.RADIO”)的类,它由三个元素组成:一个带有问题的标签和两个按钮,一个用于"is"的答案和一个“否”。我想在模型中创建一个与 bool 变量的绑定(bind),这样当用户选择"is"单选按钮时, bool 值设置为真,当他/她选择“否”按钮时, bool 值是设置为假。

这是我类(class)的代码:

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;
}


}

现在,如您所见,我将"is"按钮绑定(bind)到 bool 值。具体来说,该值将绑定(bind)在 SWT.selection 事件上。这似乎是绑定(bind)单选按钮的唯一有效事件。然而,正因为如此,一旦选择了“否”按钮, bool 值保持不变(因为没有触发"is"按钮上的 SWT.selection 事件)。
我该怎么做才能使这项工作以应有的方式工作,即能够根据用户选择的按钮来更改模型中 bool 值的值?
我在这里遗漏了一些明显的东西吗?
谢谢!

最佳答案

它似乎类似于 binding a POJO to a property .

这意味着你应该有一个对象,你的两个按钮实现 IObservable ,然后将其绑定(bind)到您的属性。
正如您在评论中提到的,您应该扩展 AbstractObservable .

你有一个这样的扩展的例子here with this class Test关于 observable 列表(不是您需要的,但它可以让您了解 Observable 在通知时检测更改时的使用)

关于swt - 使用 JFace 数据绑定(bind)绑定(bind)单选按钮组的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/650959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com