7

我有一个非常具体的问题,我想知道是否有办法更改 JDialog 的所有者(可以使用构造函数设置)。我想没有“官方”的可能性(除了黑客),但我想确保我没有错过任何东西。关于该主题的任何想法或提示都会有所帮助,已经谢谢...

4

3 回答 3

7

如果您的问题是关于如何在应用程序生命周期中重用对话框,那么更好的方法是:

  1. 将所有对话框内容定义为 JPanel 子类
  2. 并用现有的 JPanel 子类实例实例化一个新的 JDialog

对于第 2 点,您当然可以对面板使用惰性求值(仅在首次使用时实例化,然后重用)。

您还需要让您的面板实现一些(您自己的)接口,允许您重新初始化它们以便在新的 JDialog 中重用(重新初始化通常意味着擦除所有字段内容,或将这些字段设置回它们的默认值)。

于 2009-02-17T05:26:06.130 回答
1

我能想到的唯一事情属于不安全的黑客攻击(使用反射并更改所有者,但这可能会在不同版本的 JVM 下发生变化(即使来自同一平台上的同一供应商))。

也许你要问的一个更好的问题是“这就是我正在尝试做的......我真的需要更改对话框的所有者还是有更好的方法”?我正在想办法想改变主人的理由,但我想不出任何...

于 2009-02-16T16:37:11.033 回答
1

Ĵ:

当表格单元格中的文本太长而无法显示时,我也需要在我的应用程序中使用单个“全局”对话框来提供“注释”对话框。在这种情况下,用户可以悬停或右键单击单元格并获得一个显示整个文本的对话框。但是,我希望对话框快速显示,尤其是在悬停时,所以我想简单地显示和隐藏它。我决定创建这个对话框并将其存储在主类中,并以应用程序框架为所有者。然后,只要拥有者是框架的任何视图需要注释对话框,视图就可以从主类中获取它。在对话框需要注释对话框的那些实例中,父对话框可以创建具有适当所有者的注释对话框的新实例。由于这些父对话框(至少在我的应用程序中)在关闭时被释放,额外的注释对话框实例将超出范围并被垃圾收集。希望有帮助。

于 2012-08-10T17:09:34.037 回答