java - : the use of getContentPane() from JFrame Class & getContentPane() from JRootPane? 和有什么区别

标签 java swing

我做了一些研究来了解 JFrame 的使用及其部件,我发现了以下信息:

1- JFrame 的部分

  • 根 Pane
  • 菜单裸露
  • 内容 Pane
  • 玻璃板

2- JFrame 实现 RootPaneContainer 接口(interface)

return type  |  method name

Container       getContentPane();

Container       getGlassPane();

JLayeredPane    getLayeredPane();

JRootPane       getRootPane();

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

JFrame 实现了 RootPaneContainer 接口(interface),并且它们都将其操作委托(delegate)给 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 ?

最佳答案

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

Swing 这样做有两个原因。

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

2) 它具有单独的 JRootPane,以便可以在其他 RootPaneContainer 实现类(如 JDialorJInternalFrame)中重用。就像 Delegation模式。

关于java - : the use of getContentPane() from JFrame Class & getContentPane() from JRootPane? 和有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043740/

相关文章:

java - 如何知道多部分请求中该部分的真实内容类型是什么

java - 如何在 Spring 创建一个新 session ?

java - 非静态变量 this 不能从静态上下文 JFrame 中引用

java - 设置 JPanel 中没有组件时的大小

java - eclipse 中的马蒂斯

java - 带有可编辑复选框的 JTable

java - SMTP 主机 :smtp. Outlook.com 中的连接错误,端口:25

java - 如何在actionlistener中使用for循环变量

java - pom.xml 中缺少 Artifact com.oracle :ojdbc6:jar:11. 2.0

java - 有或没有 javax.swing.text.Document