如何使用面板
JPanel类为轻量级组件提供通用容器。默认情况下,面板不会为自己的背景添加颜色;但是,您可以轻松地为其添加边框,也可以自定义其绘画。详细信息可以在进行定制绘画中找到。
在许多类型的外观中,默认情况下面板是不透明的。如使用顶层容器中所述,不透明面板可以很好地用作内容窗格,并可以有效地进行绘画。您可以通过调用setOpaque
方法来更改面板的透明度。透明面板不会绘制背景,因此下面的任何组件都可以显示出来。
An Example
下图显示了Converter
应用程序的彩色版本,该版本在Using Models中进行了详细讨论。
Converter
示例以多种方式使用面板:
-
一个
JPanel
实例(在前面的快照中为红色)用作应用程序框架的内容窗格。此内容窗格使用从上到下的BoxLayout布置其内容,并使用空边框在其周围放置 5 个像素。有关内容窗格的信息,请参见使用顶层容器。 -
名为
ConversionPanel
的自定义JPanel
子类的两个实例(颜色为青色)用于包含组件并协调组件之间的通信。这些ConversionPanel
面板还具有标题边框,这些边框描述了它们的内容并用一行将内容括起来。每个ConversionPanel
面板都使用从左到右的BoxLayout
对象布置其内容。 -
在每个
ConversionPanel
中,使用JPanel
实例(洋红色)来确保组合框的大小和位置正确。这些JPanel
实例中的每个实例都使用从上到下的BoxLayout
对象(在不可见的填充空间的帮助下)对组合框进行布局。 -
在每个
ConversionPanel
中,一个未命名的JPanel
子类(蓝色)的实例将两个组件(文本字段和滑块)组合在一起并限制其大小。这些JPanel
实例中的每一个都使用从上到下的BoxLayout
对象布置其内容。
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
方法指定的确切参数取决于面板使用的布局 管理 器。当布局 管理 器是FlowLayout
,BoxLayout
,GridLayout
或SpringLayout
时,通常将使用单参数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
对象上调用的方法是从其超类JComponent,Container和Component继承的方法。下表列出了您最可能使用的 API,与borders和layout hints相关的方法除外。有关所有JComponent
对象可以使用的 API 的更多信息,请参见JComponent 类。
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 管理 器一起使用的面板。 |