5

我想知道,是否可以像在 c# 中那样在 java 中进行数据绑定?谷歌搜索了很多,但我没有答案。
例如,我想将集合绑定到 Jtable,并希望在我添加、删除或更改集合中的某些元素时更新 JTable。

提前致谢!

4

4 回答 4

2

是的,有 Java Beans Binding。

看一眼:

  1. NetBeans BeansBinding 教程
  2. Scott Violet 在 BB 上的博客条目

至于您的 JTable 示例,有可观察的集合,例如:

ObservableList<Employee> employees =
    ObservableCollections.observableList(
    new ArrayList<Employee>());

摘自一篇文章Beans Binding: A Java Data-Binding Solution with a Serious Problem

于 2012-05-05T09:03:20.563 回答
1

如果您的问题是关于 java gui,Java FX 2本身就支持绑定。
如果特别是关于 Swing(您的 JTable 示例),似乎也有解决方案,但我不熟悉它们。

于 2012-05-05T08:57:28.797 回答
0

(由于包含一些代码,我将其作为完整答案而不是评论来回答)也许我迟到了,但是您要求提供一个使用 BBB 的小示例,所以这里有一小段代码您可能会觉得有用:

public static final Property<PatientModel, Long> PATIENT_MODEL_PATIENT_ID_PROPERTY_OBJECT =
        BeanProperty.create(Patient.PATIENT_ID_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_FIRST_NAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.FIRST_NAME_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_MIDDLE_NAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.MIDDLE_NAME_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_SURNAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.SURNAME_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_SECOND_SURNAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.SECOND_SURNAME_PROPERTY);
public static final Property<PatientModel, Sex> PATIENT_MODEL_SEX_PROPERTY_OBJECT =
        BeanProperty.create(Patient.SEX_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_BIRTH_PLACE_PROPERTY_OBJECT =
        BeanProperty.create(Patient.BIRTH_PLACE_PROPERTY);
public static final Property<PatientModel, Calendrical> PATIENT_MODEL_BIRTH_DATE_PROPERTY_OBJECT =
        BeanProperty.create(Patient.BIRTH_DATE_PROPERTY);
public static final Property<PatientModel, Period> PATIENT_MODEL_AGE_PROPERTY_OBJECT =
        BeanProperty.create(Patient.AGE_PROPERTY);

(...)

    private ObservableList<PatientModel> model;
    private JTable selectionTable;

(...)

    JTableBinding<PatientModel, List<PatientModel>, JTable> selectionTableBinding
            = SwingBindings.createJTableBinding(UpdateStrategy.READ_WRITE, this.model, this.selectionTable);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_PATIENT_ID_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_FIRST_NAME_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_SURNAME_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_SEX_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_BIRTH_PLACE_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_BIRTH_DATE_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_AGE_PROPERTY_OBJECT);

根据我的经验,学习的难度与学习后的实施难度一样可笑。我知道文档不是很好,但是看看http://www.jarvana.com/jarvana/view/it/tidalwave/betterbeansbinding/betterbeansbinding-swingbinding/1.3.0/betterbeansbinding-swingbinding-1.3.0-javadoc。 jar!/org/jdesktop/swingbinding/JTableBinding.html并做一些自学示例使我免于浪费大量时间。除了 BBB,还有我个人没有尝试过的 JGoodies Bindings。

于 2013-02-27T18:29:43.060 回答
0

经过调查,我发现没有什么比使用自定义模型更好的了。在这个博客中你可以找到刚刚完美的表模型。

于 2012-05-14T06:45:27.440 回答