Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改以了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明以获取有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
使用JTabbedPane
类,您可以有多个组件(如面板)共享相同的空间。用户可以通过选择对应所需组件的选项卡来选择要查看的组件。如果您希望在没有选项卡界面的情况下实现类似功能,则可以使用卡片布局而不是选项卡窗格。
要创建选项卡窗格,请实例化JTabbedPane
,创建要显示的组件,然后使用addTab
方法将这些组件添加到选项卡窗格中。
下面的图片介绍了一个名为TabbedPaneDemo
的应用程序,它有一个带有四个选项卡的选项卡窗格。
如TabbedPaneDemo
示例所示,选项卡可以具有工具提示和助记键,并且可以同时显示文本和图像。
默认的选项卡位置设置为TOP
位置,如上图所示。您可以使用setTabPlacement
方法将选项卡位置更改为LEFT
、RIGHT
、TOP
或BOTTOM
。
下面的代码来自TabbedPaneDemo.java
,创建了前面示例中的选项卡面板。请注意,不需要编写任何事件处理代码。JTabbedPane
对象会为您处理鼠标和键盘事件。
JTabbedPane tabbedPane = new JTabbedPane(); ImageIcon icon = createImageIcon("images/middle.gif"); JComponent panel1 = makeTextPanel("面板1"); tabbedPane.addTab("选项卡1", icon, panel1, "什么都不做"); tabbedPane.setMnemonicAt(0, KeyEvent.VK_1); JComponent panel2 = makeTextPanel("面板2"); tabbedPane.addTab("选项卡2", icon, panel2, "什么都不做两次"); tabbedPane.setMnemonicAt(1, KeyEvent.VK_2); JComponent panel3 = makeTextPanel("面板3"); tabbedPane.addTab("选项卡3", icon, panel3, "仍然什么都不做"); tabbedPane.setMnemonicAt(2, KeyEvent.VK_3); JComponent panel4 = makeTextPanel( "面板4(首选大小为410 x 50)."); panel4.setPreferredSize(new Dimension(410, 50)); tabbedPane.addTab("选项卡4", icon, panel4, "根本什么都不做"); tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
正如上面的代码所示,addTab
方法负责设置选项卡面板中的大部分工作。addTab
方法有几种形式,但它们都使用字符串标题和要显示在选项卡中的组件。可选地,您可以指定一个图标和工具提示字符串。文本或图标(或两者)都可以为null。创建选项卡的另一种方法是使用insertTab
方法,它允许您指定要添加的选项卡的索引。请注意,addTab
方法在此步骤中不允许指定索引。
有三种方法可以使用GUI切换到特定的选项卡。
JTabbedPane
对象获得焦点时,可以使用键盘箭头从选项卡切换到选项卡。setMnemonicAt
方法允许用户使用键盘切换到特定的选项卡。例如,setMnemonicAt(3, KeyEvent.VK_4)
将'4'设置为第四个选项卡的助记符(索引为3,因为索引从0开始);按下Alt-4将显示第四个选项卡的组件。通常,助记符使用选项卡标题中的一个字符,然后自动添加下划线。要以编程方式切换到特定的选项卡,请使用setSelectedIndex
方法或setSelectedComponent
方法。
在构建要添加到选项卡面板的组件时,要记住无论哪个选项卡的子组件可见,每个子组件都会获得相同的空间来显示自己。选项卡面板的首选大小刚好足够显示其最高的子组件的首选高度和最宽的子组件的首选宽度。类似地,选项卡面板的最小大小取决于其所有子组件的最大最小宽度和高度。
在TabbedPaneDemo
示例中,第四个面板的首选宽度和高度比其他面板大。因此,选项卡面板的首选大小刚好足够显示第四个面板的首选大小。每个面板获得的空间完全相同——在选项卡面板处于首选大小时,宽度为410像素,高度为50像素。如果您不理解如何使用首选大小,请参考布局管理工作原理。
TabComponentsDemo
示例介绍了一个选项卡面板,其选项卡包含真实的组件。使用自定义组件可以为选项卡带来按钮、组合框、标签和其他组件等新功能,并允许更复杂的用户交互。
下面是一个带有选项卡上关闭按钮的选项卡面板。
下面的代码从ButtonTabComponent.java
中删除选项卡。请注意,必须编写事件处理代码。由于每个选项卡包含一个真正的JButton
对象,因此必须将ActionListener
附加到关闭按钮上。当用户点击按钮时,actionPerformed
方法确定它所属的选项卡的索引,并删除相应的选项卡。
public void actionPerformed(ActionEvent e) { int i = pane.indexOfTabComponent(ButtonTabComponent.this); if (i != -1) { pane.remove(i); } }
下面的代码来自ButtonTabComponent.java
,演示了如何从原始选项卡面板中获取自定义选项卡组件的标题。
JLabel label = new JLabel(title) { public String getText() { int i = pane.indexOfTabComponent(ButtonTabComponent.this); if (i != -1) { return pane.getTitleAt(i); } return null; } };
以下表格列出了常用的JTabbedPane
构造函数和方法。使用选项卡面板的 API 可以分为以下几类:
SwingConstants
JTabbedPane
TOP
BOTTOM
LEFT
RIGHT
JTabbedPane
WRAP_TAB_LAYOUT
SCROLL_TAB_LAYOUT
addTab(String, Icon, Component, String)
WRAP_TAB_LAYOUT
SCROLL_TAB_LAYOUT
WRAP_TAB_LAYOUT
void setTabPlacement(int)
SwingConstants
JTabbedPane
TOP
BOTTOM
LEFT
RIGHT
方法 | 目的 |
---|---|
insertTab(String, Icon, Component, String, int) | 在指定的索引处插入一个选项卡,第一个选项卡的索引为0。参数与addTab 相同。 |
remove(Component) removeTabAt(int) |
移除与指定组件或索引对应的选项卡。 |
removeAll() | 移除所有选项卡。 |
int indexOfComponent(Component) int indexOfTab(String) int indexOfTab(Icon) |
返回具有指定组件、标题或图标的选项卡的索引。 |
void setSelectedIndex(int) void setSelectedComponent(Component) |
选择具有指定组件或索引的选项卡。选择选项卡会显示其关联的组件。 |
int getSelectedIndex() Component getSelectedComponent() |
返回选定选项卡的索引或组件。 |
setForegroundAt
void setEnabledAt(int, boolean)
方法 | 目的 |
---|---|
void setTabComponentAt(int, Component) | 设置负责渲染选项卡指定参数所指定的标题或图标(或两者都)的组件。当指定空值时,JTabbedPane 会渲染标题或图标。同一个组件不能用于多个选项卡。 |
Component getTabComponentAt(int) | 获取指定索引处选项卡的选项卡组件。如果指定的选项卡没有选项卡组件,则返回空值。 |
int indexOfTabComponent(Component) | 检查指定的组件是否属于其中一个选项卡。返回对应选项卡的索引,如果没有这样的选项卡则返回-1。 |
此表列出了使用JTabbedPane
的示例,并指向这些示例的说明。
示例 | 说明位置 | 备注 |
---|---|---|
TabbedPaneDemo |
本页面 | 演示了一些选项卡窗格的功能,如工具提示、图标、可滚动布局和助记符。 |
TabComponentsDemo |
本页面 | 演示了在选项卡上使用自定义组件。使用带有关闭按钮的选项卡窗格。 |
BoxAlignmentDemo |
使用BoxLayout | 将JTabbedPane 作为框架内容面板的唯一子组件。 |
BorderDemo |
使用边框 | 类似于BoxAlignmentDemo ,在其选项卡窗格中使用边框。 |
DialogDemo |
使用对话框 | 在框架内容面板的中心有一个选项卡窗格,下面有一个标签。 |