2012-12-10 53 views
1

對於Java而言,我很新穎,並且正在因特網上搜索將外部csv加載到JavaFX TableView中的簡單方法。 我能解析CSV到一個數組,但我不知道我現在如何處理它。然後我在玩DataFX庫。但再次無法將解析的csv傳遞到我的表中。 我想我真的不明白ObservableLists在哪裏,我認爲這是必要的?你知道一個好的教程,或者你能解釋文件解析後的下一步是什麼? THXJavaFX 2.將外部CSV加載到TableView中

編輯:這就是我所做的

import javafx.application.Application; 
import javafx.scene.SceneBuilder; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.stage.Stage; 
import org.javafxdata.datasources.reader.FileSource; 
import org.javafxdata.datasources.provider.CSVDataSource; 

public class CSVTableSample extends Application { 
    @SuppressWarnings("unchecked") 
    @Override 
    public void start(Stage stage) throws Exception { 
     stage.setTitle("Test App"); 
     // Just loading the file... 
     FileSource fs = new FileSource("test.csv"); 
     // Now creating my datasource 
     CSVDataSource dataSource = new CSVDataSource( 
       fs, "order-id", "order-item-id"); 
     @SuppressWarnings("rawtypes") 
     TableView table1 = new TableView(); 
     TableColumn<?, ?> orderCol = dataSource.getNamedColumn("order-id"); 
     TableColumn<?, ?> itemCol = dataSource.getNamedColumn("order-item-id");  
     table1.getColumns().addAll(orderCol, itemCol); 
     table1.setItems(dataSource); 
     stage.setScene(SceneBuilder.create().root(table1).build()); 
     stage.show(); 
    } 
    public static void main(String[] args) { 
     Application.launch(args); 
    } 
} 

日食說,對table1.setItems(數據源);

方法setItems(ObservableList)在類型TableView中是不適用的參數(CSVDataSource)

+0

你能告訴我們你已經嘗試了什麼? – ForceMagic

+0

檢查此鏈接http://stackoverflow.com/questions/13332212/javafx-tableview-dynamic-column-and-data-values/13335161#13335161 – invariant

回答

1

沒有爲製表符分隔的文件sample solution here。 csv文件可以類似地處理。

樣品作品通過聲明的類型的TableView作爲TableView<ObservableList<StringProperty>>使得在TableView每一行是其中每個屬性表示在CSV文件的字段串屬性的ObservableListTableViewitems列表是這樣的列表的列表。爲每一列設置的值爲cellValueFactory從支持該單元行的ObservableList<StringProperty>中提取該列的正確單元值。

+0

它似乎鏈接是在錯誤的方向領先... – Chromos

+0

糟糕,固定鏈接... – jewelsea

+0

我知道它在你的鏈接中的例子。 thx – Chromos

1

在類型TableView中的方法setItems(ObservableList)不 適用於參數(CSVDataSource)

改變你的線

table1.setItems(dataSource); 

table1.setItems(dataSource.getData()); 

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

如果你想要做它在標準的JavaFX方式:Look Here

+0

我會試試這個thx – Chromos

+0

這仍然是datafx中的一個類? –

+0

@JasonWeh我不知道,我現在還沒有用javafx開發,請感覺用最新的代碼編輯:) – invariant