java - 使用 Comboviewer 进行 JFace 数据绑定(bind)

标签 java data-binding jface

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

这是我目前的进度:

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

和数据绑定(bind):

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

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

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

顺便说一句:如果我绑定(bind) CCombo 而不是查看器,则会有正确的初始选择(请参阅第二个片段中的注释行)!但是,如果我从 CCombo 框中选择任何其他项目,则模型的值不会更改!

最佳答案

好的,我现在明白了。我的代码一直都是正确的。但我没有意识到我的模型将 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);

关于java - 使用 Comboviewer 进行 JFace 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088932/

相关文章:

java - 初始化时关闭 JFace 窗口

java - 按 T​​AB 键会失去对小部件的焦点

java - JXTA 客户-服务器

c# - TCP 接收后绑定(bind)数据

javascript - Polymer : can't get this. __data__ 从主机传入

带有复选框的 WPF TreeView

java - 将元素添加到模型时,JFace TreeViewer 不会更新

java - 如何从同一类中的先前方法访问 ArrayList?

java - Intellij Idea 社区不断卡住,Maven 项目长时间卡在读取 pom.xml 上

Java 形式的未修饰 jframe 中的 Java 相对定位 swing 组件