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

JavaFx:从TableView获取新值和旧值

李联
2023-03-14

我在树状图中有数据,我使用ObservableList来渲染地图数据。我需要直接在TableView上编辑字符串值。问题是,如何更改TreeMap上的真实数据,即如何从数据列表中获取旧的和新的str值以将其放入map键中。

private Map<String, Long> map = new TreeMap<>();

private ObservableList<TableBean> data = FXCollections.observableArrayList();
....

articles.setCellFactory(TextFieldTableCell.forTableColumn());
    articles.setOnEditCommit(
              t -> {
                    ((TableBean) t.getTableView().getItems().get(
                                t.getTablePosition().getRow())
                      ).setArticles(t.getNewValue());

                    //Edited:
                     System.out.println(t.getOldValue());

                  });

getOldValue方法不起作用。我用这个方法得到的只是新值。

共有1个答案

徐洋
2023-03-14

lambda表达式中使用的CellEditEvent实际上具有方法getOldValue()。它将返回特定单元格的前一个值。

articles.setOnEditCommit(
    t -> {
        ((TableBean) t.getTableView().getItems().get(
        t.getTablePosition().getRow())
        ).setArticles(t.getNewValue());
//  you can use "t.getOldValue()" here to get the old value of the particular cell
    });

编辑:

在将旧值设置为新值之前,是否可能从数据列表中取出旧值?

articles.setCellFactory(TextFieldTableCell.forTableColumn());
articles.setOnEditCommit(
          t -> {
                // get your old value before update it
                System.out.println(((TableBean) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())
                  ).getArticles());

                ((TableBean) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())
                  ).setArticles(t.getNewValue());

                //Edited:
                 System.out.println(t.getOldValue());

              });
 类似资料:
  • 我目前正在使用 但这并没有返回选择模型中的一个选定项。

  • 问题内容: 如何从JavaFX中的中获取所选项目? 我目前正在使用 但这并没有给我返回选择模型中的一个选择项。 问题答案: 好的,假设您有一个名为的数据模型类。这条路: 请注意,必须使用a 作为类型参数以避免转换: 要么 选择行后,您将返回一个实例。然后对该实例执行任何您想要的操作。

  • 参考问题JavaFX TableView自定义单元格渲染拆分菜单按钮,我能够在每一行中渲染拆分菜单按钮。我已经按照James_D的建议和Keyur Bhanderi的回答更新了我的代码。这个问题是关于获取拆分菜单所在行的值,而无需在单击之前选择行。 更新:添加图像以查看输出 下面的图像显示输出,我点击的每个按钮。 更新SplitMenuCellFactory.java 更新,添加缺少的类 Spli

  • 我在许多地方看到了关于如何使用代码获取表头的示例 像这里:如何防止TableView从做TableColsta重新排序在javaFX 8? 但是这个代码为我返回。 如何到达然后?

  • 问题内容: 我在许多地方看到了有关如何通过代码获取表头的示例 但是这段代码为我返回。 怎么到达呢? 问题答案: 的创建者为,而默认值只有在应用CSS后才会创建。 您可以在将添加到后将其调用,然后在此调用之后访问。 或者,侦听中的更改并在设置外观后执行该代码。 此外,我建议使用而不是使用来检索标题行(无论如何,您都在使用包)。

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