Ale*_*Ber 7 java user-interface swing javafx tableview
我正在使用JavaFX使用简单的CSV查看器测试自己,并且我坚持填充表数据.我确实动态创建列,但数据值是禁止的.我在网上搜索并找到了几种方法,但所有方法都包括带有自定义类(包括get/set)的ObservableList,它在CSV查看器中必须是动态的(CSV可以有任意数量的列,这意味着任何数量的数据值).
例:
List<String> columns;
List<List<String>> 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<String> dataList : data) {
table1.setItems(dataList); // Requires an ObservableList!
}
Run Code Online (Sandbox Code Playgroud)
使用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());
Run Code Online (Sandbox Code Playgroud)
参考: DataFX简介
编辑: 标准JavaFX方式
替换你的代码:
for(List<String> dataList : data) {
table1.setItems(dataList); // Requires an ObservableList!
}
Run Code Online (Sandbox Code Playgroud)
同
// which will make your table view dynamic
ObservableList<ObservableList> csvData = FXCollections.observableArrayList();
for(List<String> dataList : data) {
ObservableList<String> 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
Run Code Online (Sandbox Code Playgroud)