JavaFX TableView - 有一种简单的“经典”方式吗?

时间:2015-03-15 17:18:44

标签: javafx javafx-8

我在网上找到的关于操纵JavaFX的TableView小部件内的数据的所有示例都使用的是GUI库中的Table小部件常见的API(Model类,Observable列表等等) ...)。

有没有一种简单的方法可以使用这个表格小部件,即没有模型类?

如果有简单的方法,我会很高兴,例如:

table.getModel().setValue(rowIndex, colIndex, someData);
table.addEmptyRow(index);

JavaFX中有这样的东西吗?

1 个答案:

答案 0 :(得分:1)

你总是可以制作一个TableView<Object[]>。然后

table.getModel().setValue(rowIndex, colIndex, someData);
table.addEmptyRow(index);

刚刚成为

table.getItems().get(rowIndex)[colIndex] = someData ;
table.getItems().add(new Object[numColumns]);

分别。 (或者TableView<List<Object>>的类似代码,如果您愿意的话。)

更多评论:我认为在几乎所有情况下(无论使用哪种工具包),拥有表行的模型类比上面的代码模拟的旧Swing样式更简单。这种风格的问题是你的代码丢失了你实际显示的所有语义。唯一的例外可能是通用数据库(或CSV /制表符分隔文件)查看器。

<强>更新

只有在显示表格时数据不会改变,并且在显示数据之前设置了所有数据时,此方法才有效。这是因为TableView使用JavaFX可观察属性来获取数据更改的通知。

您可以按如下方式对其进行修改:

    TableView<List<ObjectProperty<Object>>> table = new TableView<>();

然后添加新行

table.getItems().add(IntStream.range(0, numCols)
    .mapToObj(colIndex -> new SimpleObjectProperty<>())
    .collect(Collectors.toList());

并设置值变为

table.getItems().get(rowNumber).get(columnNumber).set(someValue);

此时,按照预期的方式使用API​​几乎肯定会变得更容易,并为行项创建模型类。