列表

时间:2017-09-12 08:11:06

标签: arraylist javafx tableview

我在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);

    }); 

它没有插入任何数据。这样的事情甚至可能吗?

2 个答案:

答案 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

希望这一帮助已经很晚了。