JavaFX TableView动态列和数据值 [英] JavaFX TableView dynamic column and data values

查看:3460
本文介绍了JavaFX TableView动态列和数据值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用JavaFX使用简单的CSV查看器测试自己,并且我一直在填充表格数据。我确实动态创建列,但数据值是禁止的。我在网上搜索并找到了几种方法,但所有方法都包括带有自定义类(包括get / set)的ObservableList,它在CSV查看器中必须是动态的(CSV可以有任意数量的列,这意味着任何数量的数据值)。

I'm testing myself with a simple CSV Viewer using JavaFX and I'm stuck at populating the table data. I do create the columns dynamically, but the data values are a no-go. I searched the web and found a few ways but all ways include a ObservableList with a custom class (including get/set), which in a CSV Viewer must be dynamically (The CSV can have any number of columns, and that means any number of data values).

示例:

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


推荐答案

使用 DataFX ,这将使您的工作更轻松:)

use DataFX,which will make your job easier :)

示例代码:

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

参考: DataFX简介

编辑:
标准JavaFX Way

替换您的代码:

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

这篇关于JavaFX TableView动态列和数据值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆