我在JavaFX中遇到了TableView的问题。
从现有类创建包含所有字段的表很容易。
但我想知道是否可以制作表并从List中添加数据?
我做过类似的事情,但它有点不起作用。
@FXML
private TableView<List<String>> testTable;
....
List<String> list = new ArrayList<>();
list.add("1hello");
list.add("1hello2");
List<String> list2 = new ArrayList<>();
list2.add("2hello");
list2.add("2hello2");
ObservableList<List<String>> lists = FXCollections.observableArrayList();
lists.add(list);
lists.add(list2);
TableColumn<List<String>, String> coll = new TableColumn<>("one");
coll.setCellValueFactory(new PropertyValueFactory<List<String>,String>(""));
TableColumn<List<String>, String> coll2 = new TableColumn<>("two");
coll2.setCellValueFactory(new PropertyValueFactory<List<String>,String>(""));
testTable.getColumns().add(coll);
testTable.getColumns().add(coll2);
lists.forEach(li -> {
System.out.println("list: " + li);
testTable.getItems().add(li);
});
它没有插入任何数据。这样的事情甚至可能吗?
答案 0 :(得分:0)
您可以将String
中的StringProperty
替换为List
来执行此操作:
@FXML
private TableView<List<StringProperty>> testTable;
然后:
TableColumn<List<StringProperty>, String> coll = new TableColumn<>("one");
添加cellValueFactories:
col1.setCellValueFactory(data -> data.getValue().get(0));
col2.setCellValueFactory(data -> data.getValue().get(1));
.
.
等等。
这意味着列表的第一个元素将在col1
中使用,列表的第二个元素将在col2
中使用。
然后您可以填充列表,如:
ObservableList<List<StringProperty>> data = FXCollections.observableArrayList();
List<StringProperty> firstRow = new ArrayList<>();
firstRow.add(0, new SimpleStringProperty("Andrew"));
firstRow.add(1, new SimpleStringProperty("Smith"));
.
.
.
data.add(firstRow);
.
.
.
and so on...
table.setItems(data);
这样做是可行的,但我会说这是一种非常糟糕的做法。
答案 1 :(得分:0)
作为我工作的一小部分,我需要一个TableView,其中包含来自列表的动态填充的数据。我在StackOverflow上查看了其他一些示例,还查看了Oracle教程。但是没有什么适合我的需求。
为了满足我的需要,我一起困惑了不同的解决方案。请参阅下面的工作示例。
checkout
希望这一帮助已经很晚了。