Dynamic Column Values ​​and JavaFX TableView Data

I am testing myself using a simple CSV Viewer using JavaFX, and I'm stuck in populating the table data. I am creating columns dynamically but data values ​​are not coming. I searched the Internet and found several ways, but all paths include an ObservableList with a custom class (including get / set), which in the CSV Viewer must be dynamic (CSV can have any number of columns, which means any amount of data value).

Example:

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! } 
+7
source share
1 answer

use DataFX , which will simplify your work :)

Code example:

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

Link: Introduction to DataFX

Edit: Standard JavaFX path

replace your code:

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

from

  // 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 
+9
source

All Articles