有没有办法改变JDialog的所有者?

时间:2009-02-16 15:52:18

标签: java swing jdialog

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

3 个答案:

答案 0 :(得分:7)

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

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

    对于第2点,您当然可以使用对面板的延迟评估(仅在首次使用时实例化,然后重复使用)。

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

答案 1 :(得分:1)

我唯一能想到的就是不安全的黑客攻击(使用反射并改变所有者,但在不同版本的JVM下可能会发生变化(甚至可能在同一平台上的同一个传感器上)。

或许你要问的一个更好的问题是“这就是我想要做的......我真的需要改变对话的拥有者还是有更好的方法”?我想到想要改变主人的理由,我无法想出任何......

答案 2 :(得分:1)

Y:

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