我正在向表视图添加动态列和行,并且列正在添加但不添加行。我正在尝试和搜索互联网我得到一个结果。它将我的所有csv文件列数据添加到一行。
我的代码: -
public class FXMLDocumentController {`
@FXML
private TableView tableView;
String headers[] = null;
String items[] = null;
Employee ee;
List<String> columns = new ArrayList<String>();
List<String> rows = new ArrayList<String>();
ObservableList<ObservableList> csvData = FXCollections.observableArrayList();
@FXML
private void initialize() {
Insert();
}
public void Insert() {
try {
int columnIndex = 0;
TableColumn[] tableColumns;
File f = new File("C:\\Users\\admin\\Desktop\\Project\\shipforecast\\Data\\Recieve\\ShipId-1432530905282-1.csv");
if (f.exists() && !f.isDirectory()) {
FileReader fin = new FileReader(f);
BufferedReader in = new BufferedReader(fin);
String l;
int i = 0;
while ((l = in.readLine()) != null) {
if (i < 1) {
headers = l.split(",");
for (String w : headers) {
columns.add(w);
}
for (int ii = 0; ii < columns.size(); ii++) {
final int finalIdx = ii;
TableColumn<ObservableList<String>, String> column = new TableColumn<>(
columns.get(ii)
);
// column.setText("hghjghjg");
column.setCellValueFactory(param ->
new ReadOnlyObjectWrapper<>(param.getValue().get(finalIdx))
);
/*System.out.println(new ReadOnlyObjectWrapper<>(param.getValue().get(finalIdx)));*/
tableView.getColumns().addAll(column);
}
//tableView.getColumns().addAll(tableColumns);
} else {
ObservableList<String> row = FXCollections.observableArrayList();
row.clear();
items = l.split(",");
for (String item : items) {
System.out.println(item);
row.add(item);
}
csvData.add(row);
}
i++;
tableView.getItems().add(csvData);
}
} else {
System.out.println("File Not Found");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
请为此问题提供合适的解决方案......
答案 0 :(得分:2)
删除
tableView.getItems().add(csvData);
每次从文件中读取一行时,都会将整个列表列表添加到表格视图的数据列表中(因此您可以获得表格中相同元素列表的n份副本) s项目清单),
并添加行
tableView.setItems(csvData);
在 while
循环之后(这告诉表使用列表列表作为其数据列表)。
如果您使用正确的类型,而不是原始类型(IDE提供的所有警告都是有原因的那样),那么编译器将为您捕获这些错误。即:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
public class FXMLDocumentController {
@FXML
private TableView<ObservableList<String>> tableView;
String headers[] = null;
String items[] = null;
// Employee ee;
List<String> columns = new ArrayList<String>();
List<String> rows = new ArrayList<String>();
ObservableList<ObservableList<String>> csvData = FXCollections.observableArrayList();
@FXML
private void initialize() {
Insert();
}
public void Insert() {
File f = new File(
"C:\\Users\\admin\\Desktop\\Project\\shipforecast\\Data\\Recieve\\ShipId-1432530905282-1.csv");
if (f.exists() && !f.isDirectory()) {
try (
FileReader fin = new FileReader(f);
BufferedReader in = new BufferedReader(fin);
) {
String l;
int i = 0;
while ((l = in.readLine()) != null) {
if (i < 1) {
headers = l.split(",");
for (String w : headers) {
columns.add(w);
}
for (int ii = 0; ii < columns.size(); ii++) {
final int finalIdx = ii;
TableColumn<ObservableList<String>, String> column = new TableColumn<>(columns.get(ii));
// column.setText("hghjghjg");
column.setCellValueFactory(
param -> new ReadOnlyObjectWrapper<>(param.getValue().get(finalIdx)));
/*
* System.out.println(new
* ReadOnlyObjectWrapper<>(param.getValue().get(
* finalIdx)));
*/
tableView.getColumns().add(column);
}
// tableView.getColumns().addAll(tableColumns);
} else {
ObservableList<String> row = FXCollections.observableArrayList();
row.clear();
items = l.split(",");
for (String item : items) {
System.out.println(item);
row.add(item);
}
csvData.add(row);
}
i++;
}
tableView.setItems(csvData);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("File Not Found");
}
}
}
答案 1 :(得分:0)
我得到了这个James_D和thanq .....的答案。
public class FXMLDocumentController implements Initializable {
@FXML private TableView tableView;
List<String> columns = new ArrayList<String>();
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
try {
CsvReader products = new CsvReader("C:\\Users\\admin\\Desktop\\Project\\shipforecast\\Data\\Recieve\\ShipId-1432530905282-1.csv");
products.readHeaders();
String s[]=products.getHeaders();
//int count=0;
for(int i=0;i<s.length;i++)
{
columns.add(s[i]);
}
System.out.println(columns.size());
TableColumn [] tableColumns = new TableColumn[columns.size()];
int columnIndex = 0;
for(int k=0 ; k<columns.size(); k++) {
final int j = k;
TableColumn col = new TableColumn(columns.get(k));
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString());
}
});
tableView.getColumns().addAll(col);
}
while (products.readRecord())
{
ObservableList<String> row = FXCollections.observableArrayList();
for(int x=0;x<s.length;x++)
{
int count=0;
//System.out.println(s[x]);
String Valid = products.get(s[x]);
row.addAll(Valid);
}
tableView.getItems().add(row);
}
} catch (Exception ex) {
ex.printStackTrace();
}
} }
答案 2 :(得分:0)
String[] title = new String[]{"name","address","email"};
for (String t : title) {
TableColumn<Model,Object> col = new TableColumn<>(t.toUpperCase());
col.setCellValueFactory(new PropertyValueFactory<>(t));
table.getColumns().add(col);
}
table.getItems().add(new Model("Haroon","Kapisa","info@gmail.com"));