【问题标题】:How to use the PropertyValueFactory correctly?如何正确使用 PropertyValueFactory?
【发布时间】:2013-04-28 23:21:30
【问题描述】:

我正在尝试使用 TableView 制作一个表格,并根据User 对象列表以编程方式填充它。 User 具有三个变量,nameProperty(字符串)、rankProperty(称为排名的枚举)和netMeritsProperty(整数)。这些都存储在SimpleStringProperty 对象中。我的问题是数据不会出现在实际表中,如下图:

这是我的表格代码。我不明白什么?

TableColumn<User, String> name = new TableColumn<>("Name");
name.setCellValueFactory(new PropertyValueFactory<User, String>("nameProperty"));

TableColumn<User, String> rank = new TableColumn<>("Rank");
rank.setCellValueFactory(new PropertyValueFactory<User, String>("rankProperty"));

TableColumn<User, String> netMerits = new TableColumn<>("Net Merits");
netMerits.setCellValueFactory(new PropertyValueFactory<User, String>("netMeritsProperty"));

userTable.getColumns().addAll(name, rank, netMerits);

【问题讨论】:

  • 这个文档对你没有帮助吗? docs.oracle.com/javafx/2/ui_controls/table-view.htm
  • 可能不需要在“nameProperty”后面加“Property”之类的吧?
  • 或者你没有用数据填充TableView
  • @AlexanderKirov 因此,在我了解一些常识后,我查看了 Javadoc,我发现显然,当您使用诸如 name 之类的属性构造一个 PropertyValueFactory 时,它会寻找一个称为Person.nameProperty() 的方法。很抱歉浪费您的时间。
  • 别担心这个=)

标签: java javafx-2 tableview


【解决方案1】:

答案是关于注意,你作为PropertyValueFactory的参数提供了哪些字符串内容,以及在你封装的数据类型中实现了哪些方法。

实例化:

new PropertyValueFactory<User, String>("name")

将查找:

User.nameProperty()

【讨论】:

  • Alexander 我在某处读到过这个但找不到链接。你有从你读到这个的链接吗?因为有完整的指南,该物业是如何运作的。如果编译器找到 namePeropty() 那么它将调用它,否则它将调用 getName();
【解决方案2】:

使用 PropertyValueFactory 很简单,但并非万无一失。

使用 PropertyValueFactory 可能最麻烦的事情是您提供的参数必须根据 STRICT 约定与您的 JavaFX Bean 属性的名称匹配:

  1. 不得包含“财产”一词
  2. 匹配区分大小写,因此“FIRSTNAME”不会被识别为“firstName”

最好的方法是查看您的 JavaFX Bean 定义块,然后找到您的 Property 行。取属性的名称,省略“property”部分,并将其准确(在相同情况下)复制到您传递给 PropertyValueFactory 的字符串中。

例如,假设你有这个 JavaFX Bean 定义:

public final String getFirstName() { return this.m_firstname.get(); }
public final void setFirstName(String v) { this.m_firstname.set(v); }
public final StringProperty firstNameProperty() { return m_firstname; }

查看最后一行中的属性名称“firstNameProperty”。省略“Property”,生成的字符串是您必须使用的 - 完全 - 作为 PropertyValueFactory 的字符串参数,例如。 “名字”。

tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName"));

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 2022-01-17
    • 1970-01-01
    • 2014-08-29
    • 2018-04-21
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多