2012-11-11 10 views
7

Ich teste mich selbst mit einem einfachen CSV-Viewer mit JavaFX und ich bin beim Auffüllen der Tabelle Daten stecken. Ich erstelle die Spalten dynamisch, aber die Datenwerte sind nicht verfügbar. Ich suchte im Internet und fand einige Wege, aber alle Möglichkeiten enthalten eine ObservableList mit einer benutzerdefinierten Klasse (einschließlich Get/Set), die in einem CSV-Viewer dynamisch sein muss (Die CSV kann beliebig viele Spalten haben, und das bedeutet eine beliebige Anzahl von Datenwerte).JavaFX TableView dynamische Spalte und Datenwerte

Beispiel:

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

Antwort

9

Verwendung DataFX, die Ihre Arbeit leichter machen :)

Beispielcode:

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

Referenz: Introduction to DataFX

Edit: Standard-JavaFX Way

Code ersetzen:

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

mit

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

Vielen Dank für Ihre Antwort, aber .. das obige Beispiel sagt: Kann werfen java.io.FileReader nicht org .javafxdata.datasources.io.DataSourceReader. Die heruntergeladene DataFX-Bibliothek (v0.0.6 - neueste Version) enthält keine eigene Implementierung von FileReader, aber NetBeans schlug org.javafxdata.datasources.io.FileSource vor und es funktioniert (alle Werte werden analysiert und in CSVDataSource gespeichert), aber die CSVDataSource nicht enthält die Spalten (ds1.getColumns() gibt ein Array der Länge 0 zurück). Es wäre eine schnelle Lösung, aber immer noch versuchen, einen Standard JavaFx Weg zu finden .. – AlenBer

+0

@AlenBer bearbeitet DataFx-Code, der jetzt gut funktioniert :), und auch Standard JavaFX Weg Code :) – invariant

+0

Hallo @invariant, könnten Sie auschecken mein Post? Ich folge Ihren Standard JavaFX Weg, aber immer noch einige Probleme http://stackoverflow.com/questions/22129559/insert-dynamic-json-data-into-javafx2-tableview – Arvin

Verwandte Themen