JavaFx:从TableView获取新旧值

时间:2014-12-13 02:28:22

标签: java dictionary javafx tableview

我在TreeMap中有数据,我使用ObservableList来渲染地图数据。我需要在TableView上直接编辑String值。问题是,如何更改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 个答案:

答案 0 :(得分:0)

您在lambda表达式中使用的 CellEditEvent t实际上具有方法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());

              });