我是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)
答案 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