You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JFace数据绑定实现双向生效,解决仅视图到模型单向生效问题

问题原因

单向绑定问题核心是JFace DataBinding的BeanProperties要求POJO符合JavaBean规范,具备属性变更通知能力,你当前的POJO没有实现属性变更事件触发逻辑,框架感知不到模型侧的数值变化,因此无法同步到视图。

解决方法

方案1:为POJO添加属性变更通知能力(推荐)

修改SqlDataModel类,添加属性变更监听支持,在setter执行时触发变更事件:

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

public class SqlDataModel {
    private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private String length;

    public String getLength() {
        return length;
    }

    public void setLength(String length) {
        String oldValue = this.length;
        this.length = length;
        changeSupport.firePropertyChange("length", oldValue, length);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    // 其余原有逻辑
}

修改后原有绑定逻辑不需要改动,即可实现双向同步。

方案2:使用PojoProperties替代BeanProperties

如果你不想修改原有POJO结构,可以改用不需要属性变更通知的PojoProperties,它会自动处理普通POJO的变更同步:
修改绑定逻辑中的模型 observable 构造部分:

IObservableValue<String> propertyLength = PojoProperties.value(SqlDataModel.class, "length", String.class)
        .observe(dataModel);

注意:该方案仅在你主动调用setter修改属性、或者切换绑定的model对象时触发视图同步,性能略低于方案1

选中项切换场景适配

你的场景是Eclipse属性视图,选中不同对象时需要更新展示内容,此时不要重复创建DataBindingContext,直接替换observable关联的模型对象即可:

// 选中项变更监听器中调用
propertyLength.setObserved(newSelectedSqlDataModel);

内容的提问来源于stack exchange,提问作者sluppennudel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:06:03