JavaFXdynamic添加行和列到TableView

我正在尝试开发一段代码来将数据从Excel文件导入/导出到Java中。 我已经完成导入和导出到定义的模板中(例如:Employee类,我知道Excel表在第一列有“id”,在第二列有“name”等等)。 我遇到的麻烦是添加列和行,以使TableView具有与导入的Excel文件相同的信息,而不pipe行数/列数。

当我从一个Excel文件导入数据时,我把它发送到一个“ArrayList参数”。 所以如果Excel文件有:

Id | 名称

1 | 约翰

2 | 玛丽

当我列出ArrayList'参数'我得到:“Id名称01约翰02玛丽”

我知道有多less列(因为所有单元格=行号*列号):

columnSize = parameter.size() / importedExcel.RowNumber() 

我设法根据一般的Excel文件dynamic添加列。

 public class ExcelObject { private int rowNum; private ArrayList<String> parameters; public void readExcel(String filePath, int sheetInt) { try { FileInputStream file = new FileInputStream(new File(filePath)); XSSFWorkbook workbook = new XSSFWorkbook(file); XSSFSheet sheet = workbook.getSheetAt(sheetInt); Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); this.incRowNum(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: this.parameters.add(cell.getRichStringCellValue().getString()); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { this.parameters.add(cell.getDateCellValue().toString()); } else { this.parameters.add(Double.toString(cell.getNumericCellValue())); } break; case Cell.CELL_TYPE_BOOLEAN: this.parameters.add("" +cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: this.parameters.add(cell.getCellFormula()); break; default: System.out.println("ERROR"); } } } file.close(); } catch (Exception e) { e.printStackTrace(); } } public class vfUIController implements Initializable { private ExcelReader read; @FXML private TableView table = new TableView(); @Override public void initialize(URL url, ResourceBundle rb) { List<String> columns = new ArrayList<String>(); ExcelObject obj = new ExcelObject(); obj.readExcel("file.xlsx", 2); for (int i = 0; i< obj.getColumnNum; i++) { columns.add(obj.getParametersValue(i)); System.out.println("ADDED COLUMN:" +i); } ArrayList<TableColumn> columns = new ArrayList<TableColumn>(); for (int i = 0 ; i < obj.getColNum() ; i++) { columns.add(new TableColumn(obj.getParameters().get(i))); } table.getColumns().addAll(columns); //missing code to add rows from 'ArrayList<String> parameters' at obj.getParameterValue(int arrayListPosition) } 

但我似乎无法使用table.setItems()或其他方法添加任何行。 我总是空白行。 我不知道如果我没有正确使用setCellValueFactory失败,或者因为我用于将单元格数据导入ArrayList的整个方法是不聪明的。

总之,我想将任何Excel文件信息导入到JAVA的TableView中。

谢谢您的帮助。 西蒙

在你的代码中,你只在表格视图中添加了空列。 为了填充你的表的数据。 你必须像这样设置表格数据:

  private TableView<your Object type> table = new TableView<>(); List<your Object type> list=new ArrayList<>(); 

填写你的名单,然后:

  ObservableList<your Object type> fxlist=FXCollections.observableList(list); table.getItems().addAll(fxlist); 

数据对象types必须是表示每行数据的类。 你的清单必须填写你的资料。