如何恢复 JavaFX TableColumn 的 onEditCommit 中的先前值?

2023-11-29

我有一个用 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(使用前将#替换为@)

如何恢复 JavaFX TableColumn 的 onEditCommit 中的先前值? 的相关文章

随机推荐

  • C# 通过委托和事件调用的区别

    有什么不同 使用委托 public delegate void TestDelegate public TestDelegate delObj SomeMethod public void SomeMethod public void Te
  • 如何在结构体中重载运算符 <<

    我只想打印结构的两个值 但无法编译我的代码 我得到 没有运算符 include
  • 在 Windows 上的 Django 应用程序中使用 PIL 时出现问题

    我正在学习一点 Django使用 Django 进行 Python Web 开发书 一切都很顺利 直到我尝试构建photos需要 PIL Python 图像库 的应用程序 当我尝试通过管理界面添加图像时 我收到下面粘贴的错误消息 我正在运行
  • Bootstrap 模式响应式垂直居中?

    如何垂直居中引导模式 我在这里四处寻找解决方案 但它们没有响应 或者根本不起作用 我正在使用 Bootstrap 3 该模式不再响应较小的屏幕 或者在使用以下解决方案后调整浏览器窗口大小时 jquery modal on shown bs
  • C++ 中使用 cout 递增和递减[重复]

    这个问题在这里已经有答案了 我是 C 新手 正在研究增量和减量运算符 所以我尝试了这个例子 int x 4 cout lt lt x lt lt lt lt x lt lt lt lt x lt lt endl lt lt endl cou
  • 不在 Azure 上托管时生产服务器上的 .NET Core 机密

    我一直在尝试了解 NET Core 如何处理敏感信息 并且正在努力弄清楚如何在生产环境中进行部署isn t托管在 Azure 上 据我了解 我可以在本地开发环境上使用 秘密存储 来存储敏感信息 但这仅适用于开发环境 如果我想访问生产环境中的
  • 在 Flask 中为 url_for 创建动态参数

    我有一个 jinja2 模板 我将其重复用于不同的 Flask 路由 所有这些路由都有一个必需参数并且仅处理GET请求 但某些路由可能有额外的参数 有没有办法附加额外的参数url for 就像是 url for my custom url
  • Flutter:在恢复时更新小部件?

    在 Flutter 中 有没有办法在用户离开应用程序并立即返回时更新小部件 我的应用程序是基于时间的 尽快更新时间会很有帮助 您可以通过执行以下操作来监听生命周期事件 import package flutter material dart
  • CSRF 状态令牌与提供的状态令牌不匹配[重复]

    这个问题在这里已经有答案了 我知道 stackoverflow 上有大量关于 CSRF 状态令牌与提供的令牌不匹配 问题的帖子 但是 我尝试过 似乎没有解决问题 你能看一下我下面的代码吗 请告诉我你的想法以及如何解决这个问题 我已经更新到最
  • WPF 保留 Tab 控件状态

    我已阅读帖子 如何停止 Wpf Tabcontrol 以在选项卡更改时卸载可视化树 但我无法让它工作 我一定错过了一些东西 请帮忙 谢谢 我正在使用示例项目 中的TabControlEx类http www pluralsight train
  • C++ EOF 运行太多次?

    这是我第一次使用 EOF 和 或文件 我遇到了代码挂起的问题 我相信这是因为我的 EOF 循环次数太多 我从文件中进行输入 并以这种方式动态创建对象 一旦文件运行完毕 它就会挂起 while studentFile eof cout lt
  • 如何使用 Alpha 通道为 png 图像着色?

    我正在尝试编写典型的 DVD 弹跳屏幕保护程序 我对此很满意 但我想在每次它撞到墙上时改变标志的颜色 我使用了 fill 但徽标变为彩色矩形 我想更改徽标的颜色 尊重图像的 Alpha 通道 from pygame import impor
  • 我的 Hive 客户端停止使用 Cosmos 实例

    我有一个 Hive 客户端 用 Java 编写 它与 FIWARE 实验室的 Cosmos 全局实例配合得很好 但是 它不再工作了 客户端似乎无法连接 超时 服务器端有什么变化吗 这是因为 FIWARE Lab 的 Cosmos 全局实例已
  • Kotlin 匿名函数用例?

    根据我的理解 Kotlin 中的匿名函数允许您指定返回类型 除此之外 anonymous 中的 return 语句将仅退出函数块 而在 lambda 中它将退出封闭函数 不过 我无法想象 lambda 语法无法提供的 Kotlin 中匿名函
  • 求VCL工具栏布局图设计

    我正在寻找 C 构建器的 VCL 组件 它最好有一个具有拖放功能的工具栏 我想定义一个建筑物或区域 可能不是矩形 并将其分成 房间 或区域 或任何你想称呼它们的东西 我希望能够将 门口 或通道等 从一个房间放入其邻居中 有这样的事吗 最好是
  • 使用 Python 将 Pandas DataFrame 导出为 PDF 文件

    在 Pandas 中为数据框生成 PDF 的有效方法是什么 第一个绘图表matplotlib然后生成pdf import pandas as pd import numpy as np import matplotlib pyplot as
  • HTML WebSocket 是否为每个客户端维护一个开放连接?这个有规模吗?

    我很好奇是否有人有关于 HTML WebSockets 可扩展性的任何信息 对于我读到的所有内容 似乎每个客户端都会与服务器保持开放的通信线路 我只是想知道它是如何扩展的以及服务器可以处理多少个打开的 WebSocket 连接 也许让这些连
  • Java 中如何找到给定类的所有子类?

    在 Java 中 如何尝试查找给定类的所有子类 或给定接口的所有实现者 到目前为止 我有一种方法可以做到这一点 但我发现它效率很低 至少可以说 方法是 获取类路径上存在的所有类名的列表 加载每个类并测试它是否是所需类或接口的子类或实现者 在
  • 不使用 gethostbyname 从 DNS 获取 IP?

    PHP s 获取主机名 就超时而言 函数似乎不可配置 我想将 DNS 请求限制为 1 秒或更短 因为再多的请求就会显示问题并应被忽略 那么 有没有一种方法可以使用套接字或 cURL 来进行 DNS 查询呢 我能够使用 PHP 流发出 SMT
  • 如何恢复 JavaFX TableColumn 的 onEditCommit 中的先前值?

    我有一个用 JavaFX 编写的表 用户可以选择编辑其中一列 当对单元格进行编辑时 我尝试根据新文本重命名一些内部对象 如果重命名失败 我会发出通知并弹出错误对话框 然后我想将原始文本恢复到该字段中 由于某种原因 这让我陷入了错误弹出窗口的