我尝试将String []作为columnNames添加,并将String [] []作为数据添加至JavaFx表。我确实创建了列(它们是可见的),但是数据值是不行的...
我没有收到任何例外,所以我有些困惑。我一直在寻找将项目添加到JavaFX的任何其他方式,但是它们是有限的,并且也不起作用。

我的代码是:

private void createScene(String[] columnNames, String[][] inputData) {

TableView table = new TableView();

table.setEditable(false);

for (int i = 0; i < columnNames.length; i++) {

    table.getColumns().add(new TableColumn(columnNames[i]));

}

List<List<String>> data = new ArrayList<List<String>>();

for (int i = 0; i < inputData.length; i++) {
    List<String> row = new ArrayList<String>();
    for (int j = 0; j < inputData[0].length; j++) {

        row.add(inputData[i][j]);

    }

    data.add(row);

}

ObservableList<ObservableList> inpData = FXCollections.observableArrayList();

for (List<String> dataList : data) {
    ObservableList<String> row = FXCollections.observableArrayList();
    for (String rowData : dataList) {
        row.add(rowData);
    }
    inpData.add(row);
}

table.setItems(inpData);

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().add(table);

Scene scene = new Scene(vbox, 500, 500);
jfxPanel.setScene(scene);


}

任何想法如何解决?

最佳答案

您需要向每个表列添加一个单元格值工厂,以便它知道要显示哪些数据。

我强烈建议您通过向它们提供类型参数来正确键入表视图和表列。

private void createScene(String[] columnNames, String[][] inputData) {

    TableView<List<String>> table = new TableView<>();

    table.setEditable(false);

    for (int i = 0; i < columnNames.length; i++) {

        TableColumn<List<String>, String> column = new TableColumn<>(columnNames[i]);

        final int colIndex = i ;
        column.setCellValueFactory(cellData ->
            new SimpleStringProperty(cellData.getValue().get(colIndex)));

        table.getColumns().add(column);

    }

    List<List<String>> data = new ArrayList<List<String>>();

    for (int i = 0; i < inputData.length; i++) {
        List<String> row = new ArrayList<String>();
        for (int j = 0; j < inputData[0].length; j++) {

            row.add(inputData[i][j]);

        }

        data.add(row);

    }

    ObservableList<List<String>> inpData = FXCollections.observableArrayList(data);



    table.setItems(inpData);

    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

    VBox vbox = new VBox();
    vbox.setSpacing(5);
    vbox.setPadding(new Insets(10, 0, 0, 10));
    vbox.getChildren().add(table);

    Scene scene = new Scene(vbox, 500, 500);
    jfxPanel.setScene(scene);

}

09-10 03:36
查看更多