我有以下问题:我尝试用数组填充JavaFX8中的tableview . 所以,我尝试将数组作为一行添加到tableview中 . 当按下enter时,我在我的FXML文件的Controller中运行此代码 . 这是代码:
String[] words = {"ace", "boom", "crew", "dog", "eon"};
List<String> tableViewRow = Arrays.asList(words);
ObservableList<String> row = FXCollections.observableList(tableViewRow); //observableArrayList also doesn't work
transactionOverview.getItems().add(row);
transactionOverview是我的tableview,String []只是我实际的String []的占位符 . 我尝试以多种方式创建我的tableview:
public TableView<ObservableList<String>> transactionOverview;
public TableView<ObservableList> transactionOverview;
public TableView transactionOverview;
它们都不起作用 . 问题是tableview获得了一个额外的行,我可以选择,但现在在tableview中可以看到字符串值 . 我不知道他们是否被添加 .
我的代码基于Javafx 2.2 - Dynamic table view - table data(来自Jitendra Pareek的答案),我选择了这个解决方案,因为我不想使用额外的类来填充我的tableview .
任何帮助表示赞赏!
1 回答
由于(根据您的评论)您有固定数量的列,我强烈建议您创建一个模型类来保存表格每行中的项目 . 然后,您可以遵循标准模式,它应该很容易 .
但是,如果您管理
TableView
,则必须为每列提供单元格值工厂 . 这本质上是一个函数,它指定如何从行中的项获取单元格的值 . 如果您使用的是使用JavaFX属性的模型类,那么您可以使用PropertyValueFactory
(尽管Java 8 lambda表达式使其非常冗余) . 否则,您需要实现回调 .如果你真的想使用列表结构来保存每一行的数据,并假设你的表和表列都在FXML文件中定义,你可以在你的控制器类中做这样的事情: