【问题标题】:Is there any way to get a reference to the current frame in Java?有没有办法在 Java 中获取对当前帧的引用?
【发布时间】:2011-06-19 14:59:13
【问题描述】:

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

【问题讨论】:

    标签: java swing menu jframe


    【解决方案1】:

    以上方法都不适合我。

    由于我只需要面板的直接父级,因此通过 super 调用直接访问它们:super.setTitle("The new Frame Title") 等。

    【讨论】:

      【解决方案2】:

      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() 方法?我不确定将容器投射到窗口有多安全(看起来非常不安全)。另外,我该如何实现其他方法?
      • 我添加了一个例子,但如果你走这条路,Gursel 的 getTopLevelAncestor 建议会更合适。
      • 谢谢。我使用 instanceof 检查它是否是 JFrame 实例,然后将 Container 转换为 JFrame 并执行 setVisible(false) 和 dispose() 以关闭窗口。效果很好。
      【解决方案3】:

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

      【讨论】:

      • 谢谢。这行得通。我铸造了 Container 并调用了 setVisible(false) 和 dispose() 并且它起作用了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多