JavaFX 动态添加行和列到 TableView

标签 java excel javafx tableview

我正在尝试开发一段代码,将 Excel 文件中的数据导入/导出到 Java 中。我已经完成了导入和导出到定义的模板(例如:Class Employee,我知道 Excel 工作表在第 1 列中具有“id”,在第 2 列中具有“名称”,依此类推)。 我遇到的问题是添加列和行,以使 TableView 具有与导入的 Excel 文件相同的信息,无论行数/列数如何。

当我从 Excel 文件导入数据时,我将其发送到“ArrayList 参数”。因此,如果 Excel 文件包含:

ID |姓名

1 |约翰

2 |玛丽

当我列出 ArrayList“参数”时,我得到:“Id Name 01 John 02 Mary”

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

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

我已成功根据通用 Excel 文件动态添加列。

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 中。

感谢您的帮助。 西蒙

最佳答案

在您的代码中,您仅向 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);

数据对象类型必须是表示每行数据的类。 您的列表必须由您的 exsl 数据填充。

关于JavaFX 动态添加行和列到 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32611268/

相关文章:

excel - Excel 能否增加单元格 1 直到单元格 2 与单元格 3 匹配

java - 如何使用 JavaFX 中的 JCSG 库将 MeshView 转换为 CSG 对象

java - 如何将抗锯齿应用于 GraphicsContext.fillArc() 等 javafx 方法?

java - 使用 Path 解决方案后,我无法让命令提示符读取 javac 命令。 ( Windows 8.1 64 位)

java - Selenium FirefoxDriver - 如果使用 Geckodriver 单击关闭窗口,WebElement.click() 将被挂起

vba - 使用变量时,在 Excel 中通过 VBA 设置验证失败

eclipse - 在 Docker 容器中的 Eclipse 中运行 JavaFX GUI 应用程序时出现 fatal error

Java运行Python脚本问题

java - 将.chm帮助文件集成到java应用程序(jsp页面)中的步骤

excel - 在不同列之间计算excel中的单词 "pairs"