我在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方法不起作用。我使用这种方法只是新值。
答案 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());
});