我想知道,是否可以像在 c# 中那样在 java 中进行数据绑定?谷歌搜索了很多,但我没有答案。
例如,我想将集合绑定到 Jtable,并希望在我添加、删除或更改集合中的某些元素时更新 JTable。
提前致谢!
我想知道,是否可以像在 c# 中那样在 java 中进行数据绑定?谷歌搜索了很多,但我没有答案。
例如,我想将集合绑定到 Jtable,并希望在我添加、删除或更改集合中的某些元素时更新 JTable。
提前致谢!
是的,有 Java Beans Binding。
看一眼:
至于您的 JTable 示例,有可观察的集合,例如:
ObservableList<Employee> employees =
ObservableCollections.observableList(
new ArrayList<Employee>());
摘自一篇文章Beans Binding: A Java Data-Binding Solution with a Serious Problem。
(由于包含一些代码,我将其作为完整答案而不是评论来回答)也许我迟到了,但是您要求提供一个使用 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。
经过调查,我发现没有什么比使用自定义模型更好的了。在这个博客中你可以找到刚刚完美的表模型。