Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在Java中获取对当前帧的引用?_Java_Swing_Menu_Jframe - Fatal编程技术网

有没有办法在Java中获取对当前帧的引用?

有没有办法在Java中获取对当前帧的引用?,java,swing,menu,jframe,Java,Swing,Menu,Jframe,我有一个菜单栏类(MenuBarGUI),我把它放在我所有的其他类中,我需要知道我是否可以通过菜单中的一个选项关闭它所包含的当前JFrame。通常我可以调用setVisible(false)然后dispose(),但是因为菜单栏没有对当前帧的引用,所以我不能这样做。有什么方法可以做到这一点吗?getParent()将获取父容器。用这种方法你必须做一些铸造。一个更理想的选择是让菜单栏可以采用包含close方法的界面 以下是一个例子: JFrame frame = new JFrame();

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

getParent()
将获取父容器。用这种方法你必须做一些铸造。一个更理想的选择是让菜单栏可以采用包含close方法的界面

以下是一个例子:

   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());
   }

若MenuBarGUI类扩展了JMenuBar,那个么可以使用方法来获取菜单栏的窗口

以上方法都不适合我


因为我只需要面板的直接父级,所以直接通过超级调用访问它们:super.setTitle(“新的框架标题”)等等。

我如何具体实现getParent()方法?我不确定把一个容器扔到窗户上有多安全(看起来很不安全)。另外,我如何实现另一种方法呢?我添加了一个示例,但是如果您选择这条路线,Gursel关于GetToLevel祖先的建议会更合适。谢谢。我使用instanceof检查它是否是JFrame实例,然后将容器强制转换为JFrame,并执行setVisible(false)和dispose()关闭窗口。很好,谢谢。这起作用了。我铸造了容器并调用了setVisible(false)和dispose(),它成功了。