我应该如何处理1列的集合?我试过了:
private ObservableList<EmailU> emails= FXCollections.observableList(new ArrayList<EmailU>());
public ObservableList<EmailU> emailsProperty() {
return emails;
}
然后
col_email.setCellValueFactory(
new PropertyValueFactory<Client, ObservableList<EmailU>>("emails"));
col_email.setCellFactory(new MultilineTextFieldCellFactory());
但收到以下错误:
SEVERE: javafx.scene.control.Control loadSkinClass Failed to load skin 'StringProperty [bean: TableRow[id=null, styleClass=cell indexed-cell table-row-cell], name: skinClassName, value: com.sun.javafx.scene.control.skin.TableRowSkin]' for control TableRow[id=null, styleClass=cell indexed-cell table-row-cell]
java.lang.RuntimeException: java.lang.ClassCastException: com.sun.javafx.collections.ObservableListWrapper cannot be cast to javafx.beans.property.ReadOnlyProperty*
有什么想法吗?
答案 0 :(得分:2)
FooProperty
方法应以javafx.beans.property.Property的形式返回属性。这些属性能够通知其他实体其更改,这对绑定和TableView工作至关重要。在您的情况下,它将是ListProperty
:
private ListProperty<EmailU> emails = new SimpleListProperty<>(
FXCollections.observableList(new ArrayList<EmailU>()));
public ListProperty<EmailU> emailsProperty() {
return emails;
}
public ObservableList<EmailU> getEmails() {
return emailsProperty().get();
}
public void setEmails(ObservableList<EmailU> emails) {
emailsProperty().set(emails);
}
请注意,您需要提供getter和setter才能正确使用TableView。