【问题标题】:How to create a JavaFX TableView without warnings?如何在没有警告的情况下创建 JavaFX TableView?
【发布时间】:2019-05-14 01:20:28
【问题描述】:

我正在关注tutorial by Oracle 在 JavaFX 中创建 TableView。在此屏幕截图中,我复制并粘贴了代码,但出现了几个错误,这些错误在本教程的任何地方都没有提及。

TableView 上的警告说:

TableView 是原始类型。对泛型 TableView 的引用 应该参数化

TableColumn 上的警告说:

TableColumn 是原始类型。对泛型类型 TableColumn 的引用 应该参数化

addAll 方法上的警告说:

类型安全:方法 addAll(Object...) 属于原始类型 可观察列表。对泛型类型 ObservableList 的引用应该是 参数化

我查看了文档,发现它们确实需要参数(这很令人困惑,因为教程没有提到这一点),但我不明白它们应该是什么。如果我这样做了

TableView<String> table = new TableView<>();

TableColumn<String, String> tableCol = new TableColumn<>(...);

我仍然收到关于 addAll 方法的警告,上面写着:

类型安全:为可变参数创建 TableColumn 的通用数组

我真的无法理解类型参数的预期。我知道我可以抑制警告,但这似乎是不好的做法。我应该怎么做?

【问题讨论】:

  • TableView 通常是一些Object

标签: java user-interface javafx types tableview


【解决方案1】:

TableView 需要将尝试在每一行中表示的数据对象。 因此,根据您的示例,您正在尝试在表中显示人员列表。所以你的 tableView 引用类型将是 Person 类型。喜欢

TableView<Person> tableView = new TableView<>();

现在每一列代表你要显示的信息的数据类型。在你的情况下,都是字符串。但它可以根据您要显示的数据而变化。

以下面的 Person 对象为例。

public class Person{
     private StringProperty firstName = new SimpleStringProperty();
     private StringProperty lastName = new SimpleStringProperty();
     private IntegerProperty age = new SimpleIntegerProperty();
     private DoubleProperty weight = new SimpleDoubleProperty();
}

在上面的 person 对象中,如果您想表示每一列中的数据,您的列声明将类似于..

TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name");
TableColumn<Person, Integer> ageCol = new TableColumn<>("Age");
TableColumn<Person, Double> weightCol = new TableColumn<>("Weight");

【讨论】:

  • 谢谢。我最后创建了我的 GUI,我想要存储在 TableView 中的东西不是对象,它们只是存储在具有两个数组的自定义数据结构中,并且匹配的数据存储在两个数组的相同索引中(即我有名称[] 和 age[],age[0] 与 name[0] 一起使用)。有什么方法可以使用 TableView,还是应该将它们全部转换为对象?
  • 我建议先将它们转换为对象,然后设置为TableView。这样一来,事情就会变得简单得多,并且您可以对显示数据进行大量控制。
猜你喜欢
  • 2010-09-08
  • 2021-11-22
  • 2017-02-27
  • 2017-10-29
  • 2011-05-23
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多