我在网上找到的关于操纵JavaFX的TableView小部件内的数据的所有示例都使用的是GUI库中的Table小部件常见的API(Model类,Observable列表等等) ...)。
有没有一种简单的方法可以使用这个表格小部件,即没有模型类?
如果有简单的方法,我会很高兴,例如:
table.getModel().setValue(rowIndex, colIndex, someData);
table.addEmptyRow(index);
JavaFX中有这样的东西吗?
答案 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几乎肯定会变得更容易,并为行项创建模型类。