2012-11-11 64 views
7

JavaFXを使用して簡単なCSVビューアーで自分自身をテストしていますが、テーブルのデータを取り込むことができません。私は列を動的に作成しますが、データ値はそのままです。私はウェブを検索していくつかの方法を見つけましたが、CSVビューアでは動的でなければならないカスタムクラス(get/setを含む)を持つObservableListがすべての方法に含まれています(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ウェイ

あなたのコードを置き換える:

// 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

あなたの答えのおかげで、しかし...上記の例で

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

を言う:ORGにjava.io.FileReaderをキャストすることはできません.javafxdata.datasources.io.DataSourceReader。ダウンロードしたDataFXライブラリ(v0.0.6 - 最新)には独自のFileReader実装が含まれていませんが、NetBeansはorg.javafxdata.datasources.io.FileSourceを提案して動作します(すべての値は解析され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

関連する問題