我应该如何使用 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*
有什么想法吗?
最佳答案
FooProperty
方法应返回 javafx.beans.property.Property 形式的属性。这些属性能够通知其他实体它们的更改,这对于绑定(bind)和 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 正确工作。
关于javafx-2 - 带有集合的 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045140/