在Java中,有没有一种方法可以获取当前帧的引用?

5

我有一个菜单栏类(MenuBarGUI),已在所有其他类中使用,我需要知道是否可以通过菜单选项关闭当前包含它的JFrame。通常我可以调用setVisible(false)然后dispose(),但是因为菜单栏没有对当前框架的引用,所以我不能这样做。有没有办法做到这一点?

3个回答

5

如果您的MenuBarGUI类扩展了JMenuBar,则可以使用getTopLevelAncestor方法获取菜单栏所在的窗口。


谢谢,这个可行。我转换了容器并调用了setVisible(false)和dispose(),它就正常工作了。 - LOD121

1

getParent() 方法将获取父容器。使用此方法时,您需要进行一些类型转换。更理想的选项是让菜单栏接受一个包含关闭方法的接口。

以下是一个示例:

   JFrame frame = new JFrame();
   JMenuBar bar = new JMenuBar();
   frame.setJMenuBar(bar);
   if(bar.getParent().getParent().getParent() instanceof JFrame){
       System.out.println(bar.getParent().getParent().getParent());
   }

我应该如何实现getParent()方法呢?我不确定将容器强制转换为窗口是否安全(似乎非常不安全)。另外,我该如何实现另一个方法? - LOD121
我添加了一个例子,但如果你选择这种方法,Gursel的建议使用getTopLevelAncestor会更加合适。 - jzd
谢谢。我使用 instanceof 检查它是否为 JFrame 实例,然后将 Container 强制转换为 JFrame,并执行 setVisible(false) 和 dispose() 来关闭窗口。它运行得很好。 - LOD121

0

以上方法都对我无效。

由于我只需要面板的直接父级,直接通过超级调用访问它们:super.setTitle("新框架标题") 等。


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