您好我正在关注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,但如果string为空的少于3个char,我不想更新单元格值。
答案 0 :(得分:2)
如果未更新后备数据模型但tableview显示新编辑的值,则表示tableview不会刷新呈现的值。要强制刷新,请执行以下操作:
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());
}
}
);
答案 1 :(得分:1)
如果您还没有找到解决方案,请尝试我的:
实际上,真实项目保持不变,尽管表格显示了新值。所以我所做的就是删除项目并将其设置为旧项目。
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);
}
就我而言,它有效。