2011-02-01 50 views
4

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

回答

4

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

1

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

我究竟怎样才能实现的getParent()方法?我不确定把一个容器放到一个窗口有多安全(这看起来很不安全)。另外,我怎么能实现另一种方法? – LOD121 2011-02-01 23:00:32

+0

我增加了一个例子,但是如果你要走这条路线,Gursel建议getTopLevelAncestor会更合适。 – jzd 2011-02-01 23:19:42

0

上述方法都不适用于我。

因为我只需要一个小组的直接母公司,直接访问他们通过超级呼叫:super.setTitle(“新帧标题”)等

相关问题