16

在这段代码中:

JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

我可以看到它创建了一个新标签并将其添加到JFrameobject frame。但我想了解它getContentPane()做了什么,为什么我需要它?

我读了这个 API,但我还是不明白。

4

4 回答 4

29

每个 Swing 顶级容器(和 JInternalFrame)都有所谓的JRootPane. 这负责实际管理窗口的整体布局。

在此处输入图像描述

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

看看如何使用 RootPanes

于 2013-05-24T22:57:26.167 回答
10

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

于 2013-05-24T22:02:03.330 回答
5

A container has several layers in it. You can think of a layer as a transparent film that overlays the container. In Java Swing, the layer that is used to hold objects is called the content pane. Objects are added to the content pane layer of the container.

The getContentPane() method retrieves the content pane layer so that you can add an object to it. The content pane is an object created by the Java run time environment. You do not have to know the name of the content pane to use it. When you use getContentPane(), the content pane object then is substituted there so that you can apply a method to it.

于 2016-03-22T10:35:18.143 回答
2

JFrame 是与其他子组件放在一起的头组件。使用 getContentPane() 获取表示图形用户界面内容的组件。例如,JMenuBar 被放置在框架的 contentPane 旁边的另一个区域中。

于 2013-05-24T22:00:53.250 回答