JavaFX TableView动态列和数据值

我正在使用JavaFX使用简单的CSV查看器测试自己,并且我坚持填充表数据。 我确实动态创建列,但数据值是不行的。 我在网上搜索并找到了几种方法但是所有方法都包括带有自定义类(包括get / set)的ObservableList,它在CSV查看器中必须是动态的(CSV可以有任意数量的列,这意味着任意数量的数据值)。

例:

List columns; List<List> data; /* Fills 'columns' and 'data' */ parseCSV("C:/list.csv"); int columnIndex = 0; TableColumn [] tableColumns = new TableColumn[columns.size()]; for(String columName : columns) { tableColumns[columnIndex++] = new TableColumn(columName); } table1.getColumns().addAll(tableColumns); for(List dataList : data) { table1.setItems(dataList); // Requires an ObservableList! } 

使用DataFX ,这将使您的工作更轻松:)

示例代码:

 DataSourceReader dsr1 = new FileSource("your csv file path"); String[] columnsArray // create array of column names you want to display CSVDataSource ds1 = new CSVDataSource(dsr1,columnsArray); TableView tableView = new TableView(); tableView.setItems(ds1.getData()); tableView.getColumns().addAll(ds1.getColumns()); 

参考: DataFX简介

编辑: 标准JavaFX方式

替换你的代码:

 for(List dataList : data) { table1.setItems(dataList); // Requires an ObservableList! } 

  // which will make your table view dynamic ObservableList csvData = FXCollections.observableArrayList(); for(List dataList : data) { ObservableList row = FXCollections.observableArrayList(); for( String rowData : dataList) { row.add(rowData); } cvsData.add(row); // add each row to cvsData } table1.setItems(cvsData); // finally add data to tableview