当前位置: 首页 > 知识库问答 >
问题:

JavaFX动态添加行和列到TableView

壤驷茂实
2023-03-14

我试图开发一段代码来将数据从Excel文件导入/导出到Java中。我已经完成了对已定义模板的导入和导出(例如:类Employee,我知道Excel工作表在column1中有“ID”,在column2中有“Name”,等等)。我遇到的麻烦是添加列和行,以便使TableView具有与导入的Excel文件相同的信息,而不管行/列的数量如何。

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

Id名称

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的整个方法不明智。

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

谢谢你的帮助。西蒙

共有1个答案

诸俊才
2023-03-14

在代码中,您只向表视图添加了空列。以便用数据填充表。您必须像这样设置表数据:

 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数据填写。

 类似资料:
  • 我在互联网上看到了向TableView添加行的示例,例如使用Oracle留档中的Person类。 但我的列数是可变的,所以我不能绑定到Person(或任何其他)bean业务对象。 Oracle示例继续展示了如何将列绑定到属性名,但对于这一点,它只展示了如何添加列,而不是行。 我的问题是,有人能给我指出一个Hello, World动态添加任意列和/或行到JavaFX 8 TableView的例子吗?

  • 我是JavaFX新手。我想与我的场景互动 例如:当我单击一个按钮时,我添加了一个新按钮,Textfield。。在里面。然而,我搜索了一下,却没有找到满意的答案! 我的fxml文件: 我的控制器: }

  • 我想创建一个对象动态,例如在JavaFX中的一个圆。我的代码会像这样。 我现在的问题是如何增加每个圆的独特性。例如,如果我要添加每个圆的不同颜色和大小。我该如何实现呢?请帮忙。

  • 问题内容: 我在网上看到了一些向TableView添加行的示例,例如使用Oracle文档中的Person类。 但是我的列数是可变的,所以我不能绑定到Person(或任何其他)bean业务对象。 Oracle示例继续显示如何将列绑定到属性名称,但为此,它仅显示如何添加列,而不显示行。 我的问题是,有人可以给我指出一个Hello,World示例,它向JavaFX 8 TableView动态添加任意列和

  • 我正在尝试构建一个在JavaFX中实现群聊的聊天应用程序。我想在边框窗格内创建一个滚动窗格,该窗格将包含用户所属的所有组。当用户加入时,需要将组图标(ImageViews)动态添加(在场景生成器中无法完成)到滚动窗格(在HBox内)。 目前,我正在使用一个SceneController类,该类负责所有阶段和场景更改。 我已经创建了一个FXML文件(使用场景生成器),其中包含一个边框窗格和一个滚动窗

  • 我对JavaFX相对较新,我很困惑为什么我下面的代码没有产生预期的结果,即添加到网格中的标签。 我想做的是运行一个测试,将JavaFX标签添加到我的FXML GridPane,因为我想在不久的将来构建一个方法,允许用户选择一个文件,然后在用户选择文件时生成一个标签并将该标签添加到GridPane。 提前感谢, 代码: FXML代码是一个标准文件,其中定义了一个网格窗格,上面列出了fx:id。