Java GUI:关于getContentPane()方法和内容

Ber*_*san 15 java swing jframe

在这段代码中:

JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)

我可以看到它生成一个新标签并将其添加到JFrame对象中frame.但我想知道做了getContentPane()什么,为什么需要它呢?

我读了这个API,但我仍然不明白.

Mad*_*mer 25

每个Swing顶级容器(和JInternalFrame)都有一个叫做a的东西JRootPane.这负责实际管理窗口的整体布局.

在此输入图像描述

根窗格有许多层,其中一个是内容窗格.当您向框架添加内容时(我认为是Java 5),它会自动添加到内容窗格中,在此之前,您必须getContentPane().add(...)自己调用

看看如何使用RootPanes


Caf*_*tte 9

每个JPanel都是一个容器,所以要么将它添加到面板然后将其添加到容器中,要么直接使用add(component)或使用该getContentPane().add方法.两者都将组件添加到Java 7中的容器中(我不知道版本6是否存在此问题).

  • [转发到`contentPane`](http://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html)功能出现在Java 5中. (2认同)

Jai*_*tel 5

容器中有若干层.您可以将图层视为覆盖容器的透明胶片.在Java Swing中,用于保存对象的图层称为内容窗格.对象将添加到容器的内容窗格层.

所述的getContentPane()方法检索内容窗格层,以便可以添加一个目的是它.内容窗格是Java运行时环境创建的对象.您不必知道要使用它的内容窗格的名称.使用时getContentPane(),然后在内容窗格对象中替换它,以便您可以对其应用方法.