有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java之间的区别是什么:使用JFrame类中的getContentPane()和JRootPane中的getContentPane()?

我已经做了一些研究来了解JFrame及其部分的用法,我发现以下信息:

1-JFrame的部分

  • 根窗格
  • 菜单空白
  • 内容窗格
  • 玻璃窗

2-JFrame实现接口RootPaneContainer

return type  |  method name

Container       getContentPane();

Container       getGlassPane();

JLayeredPane    getLayeredPane();

JRootPane       getRootPane();

3-JRootPane JFrame的JRootPane。JRootPane是JFrame在幕后使用的轻量级容器

JFrame实现RootPaneContainer接口,它们都将自己的操作委托给JRootPane

注意:JComponent方法getRootPane可用于获取包含给定组件的JRootPane

代码:

public static void main(String[] args) {

        //--> create JFrame
        JFrame f = new JFrame("Demo Frame");
        f.setSize(300, 150);
        f.setVisible(true);

        //--> now use JFrame.getContentPane()

        Container c = f.getContentPane();

        //--> use JOptionpane.getContentPane()

        JRootPane op = f.getRootPane();
        op.getContentPane();         
    }

问题:为什么我应该使用JRootPane中的getContentPane()方法而不是JFrame


共 (2) 个答案

  1. # 1 楼答案

    我在帮助别人时找到了答案:

    接口RootPaneContainer

    由具有单个JRootPane子级的组件实现:JDialog、JFrame、JWindow、JApplet、JInternalFrame此接口中的方法仅涵盖JRootPane属性

    例如getContentPane()通常是这样实现的:

     public Container getContentPane() {
         return getRootPane().getContentPane();
     }
    

    getRootPane()返回JRootPane对象

    getContentPanel()返回容器对象

  2. # 2 楼答案

    没有区别。调用frame.getContentPane()比调用frame.getRootPane().getContentPane()更方便

    Swing这样做有两个原因

    1)JFrame由于JavaDoc中指定的原因,需要将RootPaneContainer实现为标记

    2)它有单独的JRootPane,因此可以在其他实现类JDialorJInternalFrame中重用它。这就像Delegation模式