【问题标题】:JavaFX TableView String[] column and String[][] valuesJavaFX TableView String[] 列和 String[][] 值
【发布时间】:2016-08-26 11:46:19
【问题描述】:

我尝试将 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);

}

知道如何解决这个问题吗?

【问题讨论】:

    标签: java javafx tableview


    【解决方案1】:

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

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

    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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-31
      • 2021-12-30
      • 2018-06-01
      • 1970-01-01
      • 2021-05-16
      • 2012-10-31
      • 2016-03-12
      • 2017-08-22
      相关资源
      最近更新 更多