如何从JPanel获取JDialog的父级

5
在我的Swing应用程序中,我有一个带有几个JPanel的JFrame。其中一个我用来放置另一个面板。而这些面板中的一个调用了一个JDialog。对话框的构造函数接受Frame、String和Boolean作为参数。我的问题是如何从这个面板中获取父级(即frame)?
在这种情况下,SwingUtilities.windowForComponent(...)和SwingUtilities.getWindowAncestor(...)都无法使用。没有参数的构造函数也不是一个选项。

使用这里展示的技术(https://dev59.com/CWPVa4cB1Zd3GeqP9txB#10611286)。如果您无法将其应用于您的用例,请发布您最好的尝试的SSCCE。 - Andrew Thompson
2
@user1420504 只是想知道,为什么 SwingUtilities.getWindowAncestor(...) 在你的情况下不起作用? - Timmos
2个回答

9
每个 JComponent 都支持 getParent() 方法。正如方法名称所示,它会返回此组件的父级引用。由于 JDialog、JPanel、JFrame 等都是 JComponent 的子类,因此您可以在您的情况下使用它。但请注意,您必须进行类型转换,例如:

JFrame parentFrame = (JFrame) myContenPane.getParent()

根据您的布局,您可能需要多次调用 getParent(),这很丑陋。

希望这可以帮到您。


5
要获取当前面板的父级,您可以使用以下方法:
(JFrame)this.getRootpane().getParent();

(JFrame)this.getRootPane().getParent(); 的翻译是:将当前对象转换为 JFrame 并获取其父级容器。 - Ted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接