有没有办法改变一个JDialog的拥有者?

问题描述:

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

+0

为什么你甚至想要这样做? – Bombe 2009-02-16 16:35:28

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

  1. 定义您的所有对话内容的JPanel子类
  2. 和实例化一个新的JDialog与现有的JPanel子类的实例

对于第2点,当然你也可以用面板的懒散评估(实例在第一次只用,然后重用)。

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

只有我可以想到的事情在不安全的黑客攻击(使用反射和改变所有者,但可能会改变在不同版本的JVM下即使是来自同一个平台上的同一个传感器))。

对于你来说,或许一个更好的问题是“这就是我正在做的事情......我真的需要改变对话的主人还是有更好的方式”?我试图想要改变业主的理由,我不能拿出任何...

记者:

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