【问题标题】:Binding Swing components to Java objects将 Swing 组件绑定到 Java 对象
【发布时间】:2011-11-13 23:51:22
【问题描述】:

我目前正在使用 Swing 开发 Java 桌面应用程序。我正在使用 jdesktop.org 的 beansbinding 框架来同步 GUI 组件和数据对象的状态。但是我遇到了框架问题,迫使我在 GUI 组件和数据对象之间手动来回传输状态信息。

是否有 beanbinding 框架的替代方案(我认为 NetBeans 也使用它?)?有什么可以推荐的策略(比如根本不使用绑定?该怎么做?)?

如果您想知道我在使用 beansbinding 时遇到了什么问题:

  • 它替换了我在 JTables 中的 TableModel(所以我不能使用自己的行或删除行)
  • 某些属性不可访问或不可用,例如 selectedItem 或 selectedObject(至少在 JComboBox、JList 等中一致)
  • 某些属性是只读的或只写的(如 selectedItem 或 selectedObject)
  • 我可以为 null 值绑定特殊值,但我不能例如使用自定义映射函数或其他东西将列表中的数字映射到 JComboBox 中的字符串(我知道我可以使用适当的toString 方法,但是这迫使我为我的数据集创建特殊的包装对象)
  • ...

【问题讨论】:

    标签: java swing data-binding jsr296 beans-binding


    【解决方案1】:

    虽然可用,但 Beansbinding 已经死了 - 它在远未获得该版本号时被人为地推入 1.x 状态,并且此后没有太大变化。无论您发现什么问题,它们都不会得到解决 - 除非您自己解决 :-) 至于特定的项目符号:

    • 总体思路是,TableModel 是一个对象列表,其列绑定到对象的属性(bean 或 EL)。它通常是一个 ObservableList,确实支持修改。
    • JComboBox 是一个建筑工地。 JList/JTable 中的选择绑定可用且一致
    • 使(单个)选择可写并不是什么大问题(在孵化器中使用 JXTable 适配器进行了实验)。还没有看到只写属性,你的意思是?
    • 与每个绑定框架一样,您需要转换器来映射值类型(顺便说一句,这与渲染无关,尽管在编辑中起作用)

    当前明显的替代方案是 JGoodies Binding。有一阵子没仔细看,但是最近看到它出了一个新版本,所以肯定在开发和使用中。未来的替代方案可能是 fx 绑定 - 它仍处于起步阶段,等待善良的灵魂围绕其准系统构建一些可用的框架。

    【讨论】: