javafx-2 - 带有集合的 TableView

标签 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*

有什么想法吗?

最佳答案

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/

相关文章:

java - 如何获取在 JavaFX 2 中按下的 Enter 键?

button - 使用 JavaFX 2.2 助记符(和加速器)

JavaFX 客户端和 JDBC 服务器 : Are JavaFX Bean-style objects required on the server side?

JavaFX:拉伸(stretch)选项卡以适应父 TabPane

java - 使用 javafx 中的超链接事件连接两个 Web View

css - JavaFX 2 和 CSS 类

java - 在普通 Java 应用程序中使用 JavaFX MediaPlayer 播放音频?

java - 如何专门化 JavaFX 的组件并隐藏其 API 以仅显示我的 API

java - 如何在 BorderPane 中重新定位 VBox?

java - 为什么我的计划方法在 JavaFX 2.2 服务中被调用两次