我有一个用JavaFX编写的表,用户可以选择编辑其中一个列。当编辑单元格时,我尝试根据新文本重命名一些内部对象。如果重命名失败,我会发出通知+弹出一个错误对话框,然后我想将原始文本恢复到该字段中。出于某种原因,这会让我陷入无限循环的错误弹出窗口。
我原来作家的代码如下:
mNameColumn.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<StateDefinition, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<StateDefinition, String> event) {
try {
someObject.rename(((StateDefinition) event.getTableView().getItems().get(event.getTablePosition().getRow())).getState(), event.getNewValue());
} catch (MYException ex) {
MyNotificationCollector.addNotification("Failed renaming: " + ex.getLocalizedMessage(), NotificationType.SYSTEM_WARNING);
//popup error message code here
// Need to revert the cell's text to the previous value here...
}
}
});
知道我做错了什么吗?如何在不再调用单元格编辑提交事件的情况下恢复旧值?
谢谢, 奥伦
答案 0 :(得分:2)
尝试使用
TableColumn.CellEditEvent.getOldValue()
例如:
try {
someObject.rename(((StateDefinition) event.getTableView().getItems()
.get(event.getTablePosition().getRow())).getState(),
event.getNewValue());
} catch (MYException ex) {
MyNotificationCollector.addNotification("Failed renaming: "
+ ex.getLocalizedMessage(), NotificationType.SYSTEM_WARNING);
// popup error message code here
// Revert the cell's text to the previous value here...
someObject.rename(((StateDefinition) event.getTableView().getItems()
.get(event.getTablePosition().getRow())).getState(),
event.getOldValue());
// workaround for refreshing rendered view
event.getTableView().getColumns().get(0).setVisible(false);
event.getTableView().getColumns().get(0).setVisible(true);
}
最后两行是用于刷新tableview呈现值的旧解决方法。
修改强>
如果在抛出异常时未更改支持的数据模型(tableview的项目字段),则只需使用以下命令更新catch块中的tableview呈现:
} catch (MYException ex) {
MyNotificationCollector.addNotification("Failed renaming: "
+ ex.getLocalizedMessage(), NotificationType.SYSTEM_WARNING);
// workaround for refreshing rendered view
event.getTableView().getColumns().get(0).setVisible(false);
event.getTableView().getColumns().get(0).setVisible(true);
}