Динамический столбец и значения данных JavaFX TableView
Я тестирую себя с помощью простого средства просмотра CSV с помощью JavaFX, и я застрял в заполнении данных таблицы. Я создаю столбцы динамически, но значения данных не идут. Я искал в интернете и нашел несколько способов, но все способы включают ObservableList с пользовательским классом (включая get/set), который в средстве просмотра 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!
}
1 ответов
использовать 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
Edit: Стандартный Способ JavaFX
замените код:
for(List<String> dataList : data) {
    table1.setItems(dataList); // Requires an ObservableList!
}
С
  //  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
