当前位置:  开发笔记 > Android > 正文

使用JFace数据绑定绑定单选按钮组的正确方法

如何解决《使用JFace数据绑定绑定单选按钮组的正确方法》经验,为你挑选了2个好方法。

我想知道是否有人可以向我解释如何使用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事件).
我该怎么做才能使它按照预期的方式工作,即能够根据用户选择的按钮更改模型中布尔值的值?我错过了一些明显的东西吗?谢谢!



1> VonC..:

它似乎类似于将POJO绑定到属性.

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

你有一个这样的扩展的例子,这个类有一个关于可观察列表的测试(不需要你需要的东西,但它可以给你关于在通知时检测变化时使用Observable的想法)



2> SeB.Fr..:

我想我找到了最合适的实现.您需要使用org.eclipse.core.databinding.observable.value.SelectObservableValue.这是代码

class YesNoModel{
   public static enum RESPONSE {YES,NO};
   private RESPONSE value;
   public RESPONSE getValue(){return value;}
   public void setValue(RESPONSE value){this.value = value;}
}
class YouGraphicalClass {
   YesNoModel yesNomodel  = new YesNoModel();
   void iniDataBinding(){
        IObservableValue yesBtnSelection  = SWTObservables.observeSelection(this.getYesButton());
        IObservableValue noBtnSelection  = SWTObservables.observeSelection(this.getNoButton());
        SelectObservableValue featureRepoPolicyObservable = new SelectObservableValue(YesNoModel.RESPONSE.class);
        featureRepoPolicyObservable.addOption(RESPONSE.YES, yesBtnSelection);
        featureRepoPolicyObservable.addOption(RESPONSE.NO, noBtnSelection);
        p_dbContext.bindValue(featureRepoPolicyObservable,
                PojoObservables.observeValue(yesNomodel, "value"));
    }

这当然适用于各种枚举或其他类型的可选值.你当然可以使用String YES和NO,但我更喜欢枚举

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有