[英]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.