2012-11-11 139 views
7

我使用JavaFX以簡單的CSV查看器測試自己,並且我堅持填充表數據。我確實動態創建列,但是數據值是不可用的。我搜索了網絡並找到了一些方法,但所有方法都包括一個帶有自定義類(包括get/set)的ObservableList,它在CSV查看器中必須是動態的(CSV可以有任意數量的列,並且這意味着任意數量的數據值)。JavaFX TableView動態列和數據值

例子:

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! 
} 

回答

9

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

參考:Introduction to DataFX

編輯: 標準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 
+0

謝謝您的回答,但..上面的例子說:不能投java.io.FileReader爲org .javafxdata.datasources.io.DataSourceReader。下載的DataFX庫(v0.0.6 - latest)不包含它自己的FileReader實現,但NetBeans建議org.javafxdata.datasources.io.FileSource並且它可以工作(所有值都被解析並存儲到CSVDataSource中),但CSVDataSource不包含包含列(ds1.getColumns()返回一個0長度的數組)。這將是一個快速的解決方案,但仍然試圖找到一個標準的JavaFx方式.. – AlenBer

+0

@AlenBer編輯的DataFx代碼現在可以正常工作:),並且還添加了標準的JavaFX方式代碼:) – invariant

+0

嗨@invariant,你能檢查出我的帖子? 我遵循你的標準javaFX方式,但仍然有一些問題 http://stackoverflow.com/questions/22129559/insert-dynamic-json-data-into-javafx2-tableview – Arvin