JavaFX 2.将外部CSV加载到TableView中

时间:2012-12-10 12:20:07

标签: csv tableview javafx

我是Java的新手,我在Internet上搜索一个将外部csv加载到JavaFX TableView的简单方法。 我能够将CSV解析为数组,但我不知道我现在必须如何处理它。然后我在玩DataFX库。但是再次无法将解析后的csv传递到我的表中。 我想我真的不明白这里的ObservableLists我认为有必要吗?你知道一个很好的教程,或者你能解释解析文件后的下一步是什么吗? THX

编辑:这就是我做的事情

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

eclipse对table1.setItems(dataSource);

TableView类型中的方法setItems(ObservableList)不适用于参数(CSVDataSource)

2 个答案:

答案 0 :(得分:2)

制表符分隔文件有sample solution here。 csv文件的处理方式可以类似。

该示例的工作原理是将TableView的类型声明为TableView<ObservableList<StringProperty>>,使TableView中的每一行都是字符串属性的ObservableList,其中每个属性代表一个csv文件中的字段。 TableView的{​​{1}}列表是此类列表的列表。为每列设置items,从支持该单元格行的cellValueFactory中提取该列的正确单元格值。

答案 1 :(得分: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