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

如何在JAVAFX中使用动态列的动态TableView编辑数据

诸葛煜
2023-03-14

今天,这是一个演示,用于显示来自CSV的数据,而无需在JavaFX 2.0中的tableView上创建自定义类。我称这个TableView为动态TableView,因为表视图自动管理列和行。
在我对tableView的可编辑性的研究中,我们必须有一个自定义类,并将其实现到tableView以显示为这个演示==

但在这种情况下,我不能这样做,因为我们不知道有多少列的例子与csv文件或。dat文件。。。。在这种情况下,我想通过在TableCell中添加TextField在这个tableView上进行编辑。如果没有自定义类(因为您不知道有多少列…),如果它必须定制类,那么在这种情况下定制类的设计又如何呢?

你能帮帮我吗?

    private void getDataDetailWithDynamic() {
    tblView.getItems().clear();
    tblView.getColumns().clear();
    tblView.setPlaceholder(new Label("Loading..."));
        //            @Override



            try {
                File aFile = new File(txtFilePath.getText());
                InputStream is = new BufferedInputStream(new FileInputStream(aFile));
                Reader reader = new InputStreamReader(is, "UTF-8");

                BufferedReader in = new BufferedReader(reader);

                final String headerLine = in.readLine();
                final String[] headerValues = headerLine.split("\t");
                        for (int column = 0; column < headerValues.length; column++) {
                            tblView.getColumns().add(
                                    createColumn(column, headerValues[column]));
                        }

                // Data:

                String dataLine;
                while ((dataLine = in.readLine()) != null) {
                    final String[] dataValues = dataLine.split("\t");
                            // Add additional columns if necessary:
                            for (int columnIndex = tblView.getColumns().size(); columnIndex < dataValues.length; columnIndex++) {
                                tblView.getColumns().add(createColumn(columnIndex, ""));
                            }
                            // Add data to table:
                            ObservableList<StringProperty> data = FXCollections
                                    .observableArrayList();
                            for (String value : dataValues) {
                                data.add(new SimpleStringProperty(value));
                            }
                            tblView.getItems().add(data);
                }
            } catch (Exception ex) {
                System.out.println("ex: " + ex.toString());
            }


    for(int i=0; i<tblView.getColumns().size(); i++) {
        TableColumn col = (TableColumn)tblView.getColumns().get(i);
        col.setPrefWidth(70);
    }
}

private TableColumn createColumn(
        final int columnIndex, String columnTitle) {
    TableColumn column = new TableColumn(DefaultVars.BLANK_CHARACTER);
    String title;
    if (columnTitle == null || columnTitle.trim().length() == 0) {
        title = "Column " + (columnIndex + 1);
    } else {
        title = columnTitle;
    }


            Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell>() {
                @Override
                public TableCell call(TableColumn p) {

                    System.out.println("event cell");
                    EditingCellData cellExtend = new EditingCellData();
                    return cellExtend;
                }
            };

    column.setText(title);
    column.setCellValueFactory(cellFactory);
    return column;
}

感谢您的阅读。

共有1个答案

暴辰龙
2023-03-14

这是最好的解决方法==

我真的很感谢你读到这一点。

谢谢

 类似资料:
  • 问题内容: 我正在使用JavaFX使用一个简单的CSV Viewer测试自己,并且无法填充表格数据。我确实动态创建了列,但是数据值是不行的。我在网上搜索后发现了几种方法,但是所有方法都包括带有自定义类(包括获取/设置)的ObservableList,该类在CSV查看器中必须是动态的(CSV可以有任意数量的列,这意味着可以有任意数量的数据值)。 例: 问题答案: 使用DataFX,这将使您的工作更轻

  • 如何在FXML中定义表,然后使用JavaFX代码在运行时动态填充表?

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

  • 我有一个表视图,其中很少有列是可编辑的,也很少有不可编辑的。当我在第一列中输入一些值并按tab键时,将调用一个服务,返回的对象将映射到表行。我的要求是根据返回对象中的标志将不可编辑列设置为可编辑(仅在我编辑过的行中)。下面是调用服务并将返回的对象设置为行的代码。 请建议如何在运行时根据标志将不可编辑的列转换为可编辑的列。

  • 让我澄清一下这个问题。 我正在创建一个具有2个组合框的JavaFX应用程序。一个显示MySQL数据库中的可用目录,另一个显示第一个组合框中所选目录中的可用表。现在的问题是,我需要创建一个TableView来显示“desc tableName”MySQL命令的结果。 我正在使用jdbc API,使用语句接口执行“”,并将数据获取到一个结果集。我能够用ResultSetMetaData对象中的列名填充

  • 上下文 我正在创建一个股票价格数据数据库。我目前正在使用下面的函数: 这允许在编辑单元格时对某些列执行编辑。到目前为止,它是有效的,但有一些扭结。 问题1 有时,当我编辑列的第四行上方的单元格时,它会编辑整个列,尽管我告诉它从第四行开始。这发生在几分钟前的一个单元格中,我告诉它排除上面的“I2”。我为此编写的代码有什么问题吗? 问题2我尝试为代码创建其他异常,其中对于某些指定的范围,它将仅从不同的