带有集合的TableView

时间:2012-12-26 19:19:20

标签: javafx-2

我应该如何处理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*

有什么想法吗?

1 个答案:

答案 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。