![](/img/trans.png)
[英]javafx tableview update cell after editing another cell of the same row
[英]Restore oldValue in tableview after editing the cell javaFX
嗨,我正在关注Oracle网站上的AddressBook示例。
bookName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Books, String> t) {
if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
info.setText("Book name must be greater than 3 characters.");
// set the old value or do not update the cell.
return;
}
((Books) t.getTableView().getItems().get(
t.getTablePosition().getRow())).setBookName(t.getNewValue());
}
}
);
问题是如果我编辑一个单元格,它只是采用newvalue,但是如果字符串为空且少于3个字符,我不想更新该单元格的值。
当未更新支持数据模型但表视图显示新的编辑值时,这意味着表视图不会刷新呈现的值。 要强制刷新,请执行以下操作:
bookName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Books, String> t) {
if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
info.setText("Book name must be greater than 3 characters.");
// workaround for refreshing rendered values
t.getTableView().getColumns().get(0).setVisible(false);
t.getTableView().getColumns().get(0).setVisible(true);
// set the old value or do not update the cell.
return;
}
((Books) t.getTableView().getItems().get(
t.getTablePosition().getRow())).setBookName(t.getNewValue());
}
}
);
如果您尚未找到解决方案,请尝试以下方法:
实际上,尽管表显示了新值,但实际项目保持不变。 所以我要做的是删除该项目,然后将其设置为旧的。
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent<TestObject, Integer> event) -> {
TestObject to = event.getTableView().getItems().get(event.getTablePosition().getRow());
try {
if (event.getNewValue() < 0) {
throw new Exception("You might wanna put error messages here");
} else {
to.setQty(event.getNewValue());
}
} catch (Exception e) {
//Make some dialog to show error
event.getTableView().getItems().set(event.getTablePosition().getRow(), to);
}
就我而言,它有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.