我有一个菜单栏类(MenuBarGUI),已在所有其他类中使用,我需要知道是否可以通过菜单选项关闭当前包含它的JFrame。通常我可以调用setVisible(false)然后dispose(),但是因为菜单栏没有对当前框架的引用,所以我不能这样做。有没有办法做到这一点?
如果您的MenuBarGUI类扩展了JMenuBar,则可以使用getTopLevelAncestor方法获取菜单栏所在的窗口。
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());
}
以上方法都对我无效。
由于我只需要面板的直接父级,直接通过超级调用访问它们:super.setTitle("新框架标题") 等。