12.3.2 使用JTabbledPane 标签页
12.3.2 使用JTabbledPane 标签页
JTabbledPane
可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器具有相同大小的组件摆放区域。通过这种方式,就可以在一个容器里放置更多的组件,例如右击桌面上的我的电脑”图标,在弹出的快捷菜单里单击“属性”菜单项,就可以看到一个“系统属性”对话框,这个对话框里包含了7个标签页。
创建标签页的步骤
如果需要使用JTabbedPane
在窗口上创建标签页,则可以按如下步骤进行。
1 创建JTabbedPane
对象
创建一个JTabbedPane
对象,JTabbedPane
提供了几个重载的构造器
方法 | 描述 |
---|---|
JTabbedPane() |
Creates an empty TabbedPane with a default tab placement of JTabbedPane.TOP. |
JTabbedPane(int tabPlacement) |
Creates an empty TabbedPane with the specified tab placement of either: JTabbedPane.TOP, JTabbedPane.BOTTOM, JTabbedPane.LEFT, or JTabbedPane.RIGHT. |
JTabbedPane(int tabPlacement, int tabLayoutPolicy) |
Creates an empty TabbedPane with the specified tab placement and tab layout policy. |
这些构造器里一共包含如下两个参数。
tabPlacement
:该参数指定标签页标题的放置位置,例如前面介绍的“系统属性”对话框里标签页的标题放在窗口顶部。Swing
支持将标签页标题放在窗口的4个方位:JTabbedPane.TOP
(顶部)、JTabbedPane.LEFT
(左边)、JTabbedPane.BOTTOM
(下部)JTabbedPane.RIGHT
(右边)
tabLayoutPolicy
:指定标签页标题的布局策略。当窗口不足以在同一行摆放所有的标签页标题时Swing
有两种处理方式:- 将标签页标题换行(
JTabbedPane.WRAP_TAB_LAYOUT
)排列 - 使用滚动条来控制标签页标题的显示(
JTabbedPane.SCROLL_TAB_LAYOUT
)。
- 将标签页标题换行(
例如,下面代码创建一个JTabbedPane
对象,该JTabbedPane
的标签页标题位于窗口左侧,当窗口的一行不能摆放所有的标签页标题时,JTabbedPane
将采用换行方式来排列标签页标题:
1 | JTabbedPane tabPane = new JTabbedPane (JTabbedPane.LEFT,JTabbedPane.WRAP_TAB_LAYOUT); |
2 增加 插入 修改 删除 标签页
调用JTabbedPane
对象的addAbb()
、insertTab()
、setComponentAt()
、removeSabAt()
方法来增加、插入、修改和删除标签页。其中
增加标签页
addAbb()
方法总是在最前面增加标签页:
方法 | 描述 |
---|---|
void addTab(String title, Component component) |
Adds a component represented by a title and no icon. |
void addTab(String title, Icon icon, Component component) |
Adds a component represented by a title and/or icon, either of which can be null. |
void addTab(String title, Icon icon, Component component, String tip) |
Adds a component and tip represented by a title and/or icon, either of which can be null. |
添加标签页时可以指定该标签页的标题(title
)、图标(icon
,以及该Tab
页面的组件(component
)及提示信息(tip
),这4个参数都可以是null
:如果某个参数是null
,则对应的内容为空。
不要使用add方法来添加标签页
不要使用JTabbedPane
的add()
方法来添加组件,该方法是JTabbedPane
重写Containner
容器中的add
方法,如果使用该ad()
方法来添加Tab
页面,毎次添加的标签页会直接覆盖原有的标签页。
插入 修改 删除标签页
insertTab()
表示在指定位置插入标签页、setComponentAt()
修改指定位置的标签页,removeTabAt()
方法删除指定位置的标签页。
方法 | 描述 |
---|---|
void insertTab(String title, Icon icon, Component component, String tip, int index) |
Inserts a new tab for the given component, at the given index, represented by the given title and/or icon, either of which may be null. |
void setComponentAt(int index, Component component) |
Sets the component at index to component. |
void removeTabAt(int index) |
Removes the tab at index. |
先将组建放到容器中 再讲容器放到标签页中
不管使用增加、插入、修改哪种操作来改变JTabbedPane
中的标签页,都是传入一个Component
组件作为标签页。也就是说,如果希望在某个标签页内放置更多的组件,则必须先将这些组件放置到个容器(例如JPanel
)里,然后将该容器设置为JTabbedPane
指定位置的组件。
3 显示某个标签页
如果需要让某个标签页显示出来,则可以通过调用JTabbedPane
的setSelectedIndex()
方法来实现:
方法 | 描述 |
---|---|
void setSelectedIndex(int index) |
Sets the selected index for this tabbedpane. |
例如如下代码
1 | // 设置第三个Tab页面处于显示状态 |
4 操作JTabbedPane属性
程序还可通过JTabbedPane
提供的一系列方法来操作JTabbedPane
的相关属性。例如,有如下几个常用方法
方法 | 描述 |
---|---|
void setDisabledIconAt(int index, Icon disabledIcon) |
将指定位置的禁用图标设置为icon ,该图标也可以是null ,表示不使用禁用图标。 |
void setEnabledAt(int index, boolean enabled) |
设置指定位置的标签页是否启用。 |
void setForegroundAt(int index, Color foreground) |
设置指定位置标签页的前景色为foreground 。该颜色可以是nul ,这时将使用该JTabbedPane 的前景色作为此标签页的前景色。 |
void setIconAt(int index, Icon icon) |
设置指定位置标签页的图标。 |
void setTitleAt(int index, String title) |
设置指定位置标签页的标题为title ,该title 可以是null ,这表明设置该标签页的标题为空。 |
void setToolTipTextAt(int index, String toolTipText) |
设置指定位置标签页的提示文本。 |
5 监听标签页事件
如果程序需要监听用户单击标签页的事件,例如,当用户单击某个标签页时才载入该标签页的内容,则可以使用ChangeListener
监听器来监听JTabbedPane
对象。
例如如下代码:
1 | tabPane.addChangeListener(listener); |
当用户单击标签页时,系统将把该事件封装成ChangeEvent
对象,并作为参数来触发ChangeListener
里的stateChanged
事件处理器方法:
方法 | 描述 |
---|---|
void stateChanged(ChangeEvent e) |
Invoked when the target of the listener has changed its state. |
程序 标签页
下面程序定义了具有5个标签页的JTabbedPane
面板,该程序可以让用户选择标签布局策略、标签位置。
1 | import java.awt.BorderLayout; |
程序运行后会看到如图12.15所示的标签页效果