【问题标题】:JFace Databinding using a Comboviewer使用 Comboviewer 的 JFace 数据绑定
【发布时间】:2012-10-26 14:33:40
【问题描述】:

我想为 ComboViewer 使用 JFace 数据绑定,但我不知道如何正确执行此操作。

这是我目前的进度:

    CCombo c= new CCombo(grpCpu, SWT.BORDER);
    c.setEditable(false);

    ComboViewer c_viewer = new ComboViewer(text_6);
    c_viewer.setContentProvider(new ArrayContentProvider());
    c_viewer.setLabelProvider(new LabelProvider() {

        @Override
        public String getText(Object element) {
            return Activator.getSomeService().key2Value((Integer) element);
        }

    });
    c.setInput(new int[]{1, 2, 3});

key2Value 方法(将 int 值转换为字符串的简单映射):

public String key2Value(int key){
    return someHashMap.get(key);
}

还有数据绑定:

// IObservableValue target = SWTObservables.observeSelection(c);
IObservableValue target = ViewersObservables.observeSingleSelection(c_viewer);
IObservableValue model = BeansObservables.observeValue(getInputObject(), "id");
    ctx.bindValue(target, model, null, null);

绑定已经正常工作。如果 UI 中的选择发生更改,则模型中的值也会更改。但是没有初始选择!

我真的需要一些帮助。提前谢谢!

顺便说一句:如果我绑定的是 CCombo 而不是 Viewer,那么会有一个正确的初始选择(参见第二个 sn-p 中的注释行)!但是,如果我从 CCombo 框中选择任何其他项目,则模型的值不会更改!

【问题讨论】:

    标签: java data-binding jface


    【解决方案1】:

    好的,我现在明白了。我的代码一直都是正确的。但我没有意识到我的模型将 observableValue 保持得这么久。而且因为查看器输入是一个 int 数组,所以它不能正常工作。我所要做的只是编写一个自定义的 UpdateValueStrategy:

    IObservableValue target = ViewersObservables.observeSingleSelection(c_viewer);
    IObservableValue model = BeansObservables.observeValue(getInputObject(), "id");
    
        UpdateValueStrategy u = new UpdateValueStrategy().setConverter(new IConverter() {
    
            @Override
            public Object getFromType() {
                return long.class;
            }
    
            @Override
            public Object getToType() {
                return int.class;
            }
    
            @Override
            public Object convert(Object fromObject) {
                return Integer.parseInt(fromObject.toString());
            }
        });
        ctx.bindValue(target, model, null, u);
    

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多