我有一个用 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...
}
}
});
对我做错了什么有什么想法吗?如何在不再次调用单元格编辑提交事件的情况下恢复旧值?
谢谢,
奥伦
尝试使用
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 渲染值的旧解决方法。
EDIT:
如果抛出异常时支持的数据模型(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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)