如何使用面板

JPanel类为轻量级组件提供通用容器。默认情况下,面板不会为自己的背景添加颜色;但是,您可以轻松地为其添加边框,也可以自定义其绘画。详细信息可以在进行定制绘画中找到。

在许多类型的外观中,默认情况下面板是不透明的。如使用顶层容器中所述,不透明面板可以很好地用作内容窗格,并可以有效地进行绘画。您可以通过调用setOpaque方法来更改面板的透明度。透明面板不会绘制背景,因此下面的任何组件都可以显示出来。

An Example

下图显示了Converter应用程序的彩色版本,该版本在Using Models中进行了详细讨论。

Converter示例以多种方式使用面板:

Converter应用程序通常如下所示。

Converter示例所示,面板对于将组件分组,简化组件布局以及在组件组周围放置边框很有用。本节的其余部分提供有关组件分组和布局的提示。有关使用边框的信息,请参见如何使用边框

设置布局 管理 器

像其他容器一样,面板使用布局 管理 器来定位和调整其组件的大小。默认情况下,面板的布局 管理 器是FlowLayout的实例,该实例将面板的内容放置在一行中。您可以通过调用setLayout方法或在创建面板时指定布局 管理 器来轻松地使面板使用任何其他布局 管理 器。由于性能原因,后一种方法是可取的,因为它避免了不必要的FlowLayout对象的创建。

这是创建面板时如何设置布局 管理 器的示例。

JPanel p = new JPanel(new BorderLayout()); //PREFERRED!

这种方法不适用于BoxLayout,因为BoxLayout构造函数需要一个预先存在的容器。这是使用BoxLayout的示例。

JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS));

Adding Components

将组件添加到面板时,可以使用add方法。您为add方法指定的确切参数取决于面板使用的布局 管理 器。当布局 管理 器是FlowLayoutBoxLayoutGridLayoutSpringLayout时,通常将使用单参数add方法,如下所示:

aFlowPanel.add(aComponent);
aFlowPanel.add(anotherComponent);

当布局 管理 器为BorderLayout时,您需要提供一个参数,以指定添加的组件在面板中的位置。例如:

aBorderPanel.add(aComponent, BorderLayout.CENTER);
aBorderPanel.add(anotherComponent, BorderLayout.PAGE_END);

使用GridBagLayout时,可以使用add方法之一,但是必须以某种方式为每个组件指定网格袋约束

有关选择和使用标准布局 管理 器的信息,请参见使用布局 管理 器

Panel API

JPanel类本身中的 API 最少。您最有可能在JPanel对象上调用的方法是从其超类JComponentContainerComponent继承的方法。下表列出了您最可能使用的 API,与borderslayout hints相关的方法除外。有关所有JComponent对象可以使用的 API 的更多信息,请参见JComponent 类

创建一个 JPanel

Constructor Purpose
JPanel()

JPanel(LayoutManager)
创建一个面板。 LayoutManager参数为新面板提供布局 管理 器。默认情况下,面板使用FlowLayout布置其组件。

管理 容器的组件

Method Purpose
void add(Component)

void add(Component,int)
void add(组件,对象)
无效 add(Component,Object,int)
void add(String,Component)
将指定的组件添加到面板。如果存在,则int参数是容器内组件的索引。默认情况下,添加的第一个组件位于索引 0,第二个组件位于索引 1,依此类推。 Object参数取决于布局 管理 器,通常向布局 管理 器提供有关所添加组件的位置和其他布局约束的信息。 String参数类似于Object参数。
int getComponentCount() 获取此面板中的组件数。
Component getComponent(int)
组件 getComponentAt(int,int)
Component getComponentAt(Point)
Component[] getComponents()
获取指定的一个或多个组件。您可以根据其索引或* x,y *位置获取组件。
void remove(Component)
void remove(int)
void removeAll()
删除指定的组件。

设置或获取布局 管理 器

Method Purpose
void setLayout(LayoutManager)

LayoutManager getLayout()
设置或获取此面板的布局 管理 器。布局 管理 器负责根据某些原理将面板的组件放置在面板的边界内。

使用面板的示例

本类中包含的许多示例都使用JPanel对象。下表列出了一些。

Example Where Described Notes
Converter This section 使用五个面板,其中四个使用BoxLayout,其中一个使用GridLayout。面板使用边框以及必要时的尺寸和对齐提示来影响布局。
ListDemo 如何使用清单 使用具有默认FlowLayout管理 器的面板将三个组件连续居中。
ToolBarDemo 如何使用工具栏 将面板用作内容窗格。该面板包含由BorderLayout布局的三个组件。
BorderDemo 如何使用边框 包含许多具有各种边框的面板。多个面板使用BoxLayout
BoxLayoutDemo 如何使用 BoxLayout 说明了与 Swing 的BoxLayout管理 器一起使用的面板。
首页