2012-11-11 26 views
7

मैं जावाफ़ैक्स का उपयोग करके एक साधारण सीएसवी व्यूअर के साथ स्वयं परीक्षण कर रहा हूं और मैं तालिका डेटा को पॉप्युलेट करने पर अटक गया हूं। मैं गतिशील रूप से कॉलम बना देता हूं, लेकिन डेटा मान कोई नहीं है। मैंने वेब की खोज की और कुछ तरीकों को पाया लेकिन सभी तरीकों में एक कस्टम क्लास (गेट/सेट समेत) के साथ एक ऑब्जेर्जेबललिस्ट शामिल है, जो एक सीएसवी व्यूअर में गतिशील रूप से होना चाहिए (सीएसवी में कोई भी कॉलम हो सकता है, और इसका मतलब है कि किसी भी संख्या में डेटा मूल्य)।जावाएफएक्स तालिका दृश्य गतिशील कॉलम और डेटा मान

उदाहरण:

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 नहीं दिया जा सकता संगठन के लिए .javafxdata.datasources.io.DataSourceReader। डाउनलोड की गई डेटाएफएक्स लाइब्रेरी (v0.0.6 - नवीनतम) में फ़ाइलरडर का अपना कार्यान्वयन नहीं है, लेकिन नेटबीन ने org.javafxdata.datasources.io.FileSource का सुझाव दिया है और यह काम करता है (सभी मानों को पार्स किया जाता है और CSVDataSource में संग्रहीत किया जाता है) लेकिन CSVDataSource नहीं करता है कॉलम (ds1.getColumns() एक 0 लंबाई सरणी देता है)। यह एक त्वरित समाधान होगा, लेकिन फिर भी एक मानक जावाएफएक्स रास्ता खोजने की कोशिश कर रहा है .. – AlenBer

+0

@AlenBer ने डेटाफैक्स कोड संपादित किया जो अब ठीक काम करेगा :), और मानक जावाएफएक्स मार्ग कोड भी जोड़ा गया है :) – invariant

+0

हाय @invariant, क्या आप चेक आउट कर सकते हैं मेरा पद? मैं आपके मानक जावाएफ़एक्स तरीके का पालन करता हूं लेकिन अभी भी कुछ समस्याएं हैं http://stackoverflow.com/questions/22129559/insert-dynamic-json-data-into-javafx2-tableview – Arvin