如何创建无警告的JavaFX TableView?

时间:2018-12-12 21:15:02

标签: java user-interface javafx types tableview

我正在跟踪tutorial by Oracle,以在JavaFX中创建TableView。在此屏幕截图中,我复制并粘贴了代码,但遇到了一些错误,本教程中的任何地方都未提及。

enter image description here

TableView上的警告显示:

  

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

TableColumn上的警告显示:

  

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

并且addAll方法上的警告说:

  

类型安全:方法addAll(Object ...)属于原始类型   ObservableList。泛型类型ObservableList 的引用应为   参数化

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

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

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

我仍然收到关于addAll方法的警告,内容为:

  

类型安全性:为varargs参数创建TableColumn 的通用数组

我真的不明白对类型参数的期望。我知道我可以取消警告,但这似乎是一种不好的做法。我该怎么办?

1 个答案:

答案 0 :(得分:4)

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");