我正在跟踪tutorial by Oracle,以在JavaFX中创建TableView。在此屏幕截图中,我复制并粘贴了代码,但遇到了一些错误,本教程中的任何地方都未提及。
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
的通用数组
我真的不明白对类型参数的期望。我知道我可以取消警告,但这似乎是一种不好的做法。我该怎么办?
答案 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");