gpt4 book ai didi

java - 错误对话框未被销毁

转载 作者:行者123 更新时间:2023-11-30 12:01:42 24 4
gpt4 key购买 nike

我正在开发一个项目,该项目使用 JTable 来显示一列日期等。我们需要对用户输入的日期进行验证,因此我实现了格式验证屏蔽和实际日期验证解析的组合。我已经使用日期列的自定义 CellEditor 完成了此操作。

在我的 MaskedCellEditor 中,我有一个 JFormattedTextField。我为日期设置了掩码。然后我添加一个 InputVerifier 以允许实际验证。我的 InputVerifier 实现 verify() 以检查: 1. textField.isEditValid() 2. DateValidator.ValidDate()。如果任何一个无效,则验证返回 false,InputVerifier 将焦点锁定在文本字段(单元格编辑器)中,并显示一个小消息对话框,提醒用户日期格式。

错误消息是一个小的、未修饰的、非模态的、不可聚焦的 JDialog,它会在正在编辑的单元格下方弹出。它会在按键或成功的日期验证时消失。除了小的边缘情况外,它工作得很好。

如果用户在弹出对话框时选择了应用程序顶部的菜单按钮,则它会切换屏幕,破坏当前屏幕上的所有内容(包括表格)。但是,由于正在显示对话框并且没有发生按键/成功编辑,因此永远不会隐藏对话框。它在不同屏幕上的完全不相关的上下文中仍然可见。一旦用户关闭了带有表格的屏幕,用户就无法摆脱该对话框。

我曾讨论过在对话框本身上放置一个 Timer 和/或一个 MouseListener 会导致它消失,但我觉得我忽略了实际问题。该对话框永远不会被处理,我很确定它是因为它仍然设置为可见并且它阻止垃圾收集器摆脱它。

我在包含 JTable 的面板上有一个 Cleanup 方法,但我找不到引用对话框(InputVerifier 的一个组件)以摆脱它的好方法。该对话框与表格的父面板相去甚远。 (面板 -> JTable -> CellEditor -> JFormattedTextField -> InputVerifier -> JDialog)

关于在销毁表格时如何强制隐藏对话框的任何想法?如果您需要更多详细信息,请告诉我。我尽量不让你们陷入细节,但有很多事情正在发生。

最佳答案

首先想到的是,你能不能不采用监听器方法。如果您有一个在成功验证时调用的 closeErrorDialog() 类型方法,那么您也可以在选择菜单操作时调用它。

作为替代方案,也许您可​​以通过某种方式控制从一个菜单到另一个菜单的转换,并创建一个“清理”方法来关闭任何现有的错误对话框。这将允许在更改菜单时需要发生的任何其他操作发生在同一个地方。

只是我头脑中的几个快速想法。希望他们符合您的意思

关于java - 错误对话框未被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com