如何使用选项卡式窗格

使用JTabbedPane类,您可以拥有多个组件,例如panels,共享相同的空间。用户通过选择与所需组件相对应的选项卡来选择要查看的组件。如果想要不带选项卡interface的类似功能,则可以使用card layout代替带选项卡的窗格。

创建选项卡式窗格

若要创建选项卡式窗格,请实例化JTabbedPane,创建希望显示的组件,然后使用addTab方法将组件添加到选项卡式窗格中。

下图介绍了一个名为TabbedPaneDemo的应用程序,该应用程序具有带四个选项卡的选项卡式窗格。

TabbedPaneDemo 的屏幕截图

Try this:

  • 单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 TabbedPaneDemo。另外,要自己编译和运行示例,请查阅example index

  • 将光标放在选项卡上。
    出现与选项卡关联的工具提示。为方便起见,可以在将组件添加到选项卡式窗格中时指定工具提示文本。

  • 单击选择一个选项卡。
    选项卡式窗格显示与选项卡相对应的组件。

  • 通过 Importing 助记符选择一个选项卡。
    例如,在 Java 外观中,您可以通过键入 Alt-3 选择标记为“ Tab 3”的选项卡。

  • 在滚动标签之间导航。
    本示例提供了可滚动的选项卡。通过移动对话框的左边界或右边界来调整对话框的大小,以使选项卡不适合对话框。滚动箭头出现在选项卡旁边。
    单击箭头查看隐藏的选项卡之一。
    请注意,单击箭头只会显示隐藏的选项卡。它不会选择新的选项卡。

TabbedPaneDemo示例所示,选项卡可以具有工具提示和助记符,并且可以显示文本和图像。

Tab Placement

如上所示,默认的标签位置设置为TOP位置。您可以使用setTabPlacement方法将标签位置更改为LEFTRIGHTTOPBOTTOM

选项卡式窗格的代码

TabbedPaneDemo.java中的以下代码在上一个示例中创建了选项卡式窗格。请注意,不需要事件处理代码。 JTabbedPane对象为您处理鼠标和键盘事件。

JTabbedPane tabbedPane = new JTabbedPane();
ImageIcon icon = createImageIcon("images/middle.gif");

JComponent panel1 = makeTextPanel("Panel #1");
tabbedPane.addTab("Tab 1", icon, panel1,
                  "Does nothing");
tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

JComponent panel2 = makeTextPanel("Panel #2");
tabbedPane.addTab("Tab 2", icon, panel2,
                  "Does twice as much nothing");
tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

JComponent panel3 = makeTextPanel("Panel #3");
tabbedPane.addTab("Tab 3", icon, panel3,
                  "Still does nothing");
tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

JComponent panel4 = makeTextPanel(
        "Panel #4 (has a preferred size of 410 x 50).");
panel4.setPreferredSize(new Dimension(410, 50));
tabbedPane.addTab("Tab 4", icon, panel4,
                      "Does nothing at all");
tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

如前面的代码所示,addTab方法处理在选项卡式窗格中设置选项卡的大部分工作。 addTab方法有几种形式,但是它们都使用字符串 标题和选项卡上要显示的组件。 (可选)您可以指定图标和tool tip字符串。文本或图标(或两者)可以为空。创建选项卡的另一种方法是使用insertTab方法,该方法可让您指定要添加的选项卡的索引。请注意,addTab方法不允许在此步骤中指定索引。

切换到特定标签

使用 GUI 可以通过三种方式切换到特定选项卡。

  • 使用鼠标. 要切换到特定选项卡,用户可以用鼠标单击它。

  • 使用键盘箭头.JTabbedPane对象成为焦点时,可以使用键盘箭头在选项卡之间切换。

  • 使用按键助记符. setMnemonicAt方法允许用户使用键盘切换到特定选项卡。例如,setMnemonicAt(3, KeyEvent.VK_4)将第四个标签的助记符“ 4”(位于索引 3,因为索引以 0 开头);按 Alt-4 会出现第四个选项卡的组件。助记符通常在选项卡标题中使用一个字符,然后该字符会自动加下划线。

要以编程方式切换到特定标签,请使用setSelectedIndexsetSelectedComponent方法。

标签中的首选大小

在构建要添加到选项卡式窗格的组件时,请记住,无论选项卡式窗格的哪个子项可见,每个子项都会获得相同的显示空间。选项卡式窗格的首选大小恰好足够大,可以在其首选高度显示其最高子级,在其首选宽度显示其最宽的子级。同样,选项卡式窗格的最小大小取决于其所有子项的最大最小宽度和高度。

TabbedPaneDemo示例中,第四个面板的首选宽度和高度大于其他面板的宽度和高度。因此,选项卡式窗格的首选大小恰好足以以其首选大小显示第四面板。假设选项卡式窗格处于其首选的大小,每个面板都会获得完全相同的空间-410 像素宽和 50 高。如果您不了解如何使用首选尺寸,请参阅布局 管理 的工作方式

具有自定义组件的标签

TabComponentsDemo示例介绍了一个选项卡式窗格,其选项卡包含实际组件。自定义组件的使用为选项卡带来了按钮,组合框,标签和其他组件等新功能,并允许更复杂的用户交互。

这是一个选项卡式窗格,其选项卡上具有关闭按钮。

TabComponentsDemo 的屏幕截图

Try this:

  • 单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 TabComponentsDemo。另外,要自己编译和运行示例,请查阅example index

  • 将光标放在选项卡上。

  • 通过单击选择一个选项卡(确保不要打小十字)。

  • 将光标放在一个带有十字的窗口小部件上。
    十字架变成洋红色,并被围成正方形。出现与关闭按钮相关的工具提示。
    用鼠标左键单击十字以关闭选项卡。

  • 通过从“选项”菜单中选择“重置 JTabbedPane”项,恢复已删除的选项卡。

  • 请注意,带有自定义组件的选项卡显示在原始选项卡式窗格选项卡的顶部。
    要查看下面的选项卡,请打开“选项”菜单,然后清除“使用 TabComponents”复选框。

  • 通过再次选择“使用 TabComponents”复选框,显示带有组件的选项卡。

  • 关闭所有标签。现在,选项卡式窗格为空。

删除标签

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;
    }
};

选项卡式窗格 API

下表列出了常用的JTabbedPane构造函数和方法。使用选项卡式窗格的 API 分为以下几类:

创建和设置选项卡式窗格

方法或构造函数Purpose
JTabbedPane()

JTabbedPane(int)
JTabbedPane(int, int)
创建一个选项卡式窗格。第一个可选参数指定选项卡应出现的位置。默认情况下,选项卡显示在选项卡式窗格的顶部。您可以指定以下位置(在JTabbedPane实现的SwingConstantsinterface中定义):TOPBOTTOMLEFTRIGHT。第二个可选参数指定选项卡布局策略。您可以指定以下策略之一(在JTabbedPane中定义):WRAP_TAB_LAYOUTSCROLL_TAB_LAYOUT
addTab(字符串,图标,组件,字符串)
addTab(String,Icon,Component)
addTab(String, Component)
将新选项卡添加到选项卡式窗格。第一个参数指定选项卡上的文本。可选的 icon 参数指定选项卡的图标。 component 参数指定在选择选项卡时选项卡式窗格应显示的组件。第四个参数(如果存在)指定选项卡的工具提示文本。
void setTabLayoutPolicy(int)
int getTabLayoutPolicy()
设置或获取在一次运行中所有选项卡都不适合时,选项卡式窗格在布局选项卡时使用的策略。可能的值为WRAP_TAB_LAYOUTSCROLL_TAB_LAYOUT。默认策略是WRAP_TAB_LAYOUT
void setTabPlacement(int)
int getTabPlacement()
设置或获取选项卡相对于内容出现的位置。可能的值(在SwingConstants中定义,由JTabbedPane实现)是TOPBOTTOMLEFTRIGHT

插入,删除,查找和选择选项卡

MethodPurpose
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()
返回所选标签的索引或组件。

更改标签页外观

MethodPurpose
void setComponentAt(int,Component)

Component getComponentAt(int)
设置或获取与指定索引处的选项卡关联的组件。第一个选项卡位于索引 0.
void setTitleAt(int,String)
String getTitleAt(int)
设置或获取指定索引处的选项卡标题。
void setIconAt(int,Icon)
Icon getIconAt(int)
void setDisabledIconAt(int,Icon)
Icon getDisabledIconAt(int)
设置或获取选项卡在指定索引处显示的图标。
void setBackgroundAt(int,Color)
Color getBackgroundAt(int)
void setForegroundAt(int,Color)
Color getForegroundAt(int)
设置或获取选项卡在指定索引处使用的背景或前景色。默认情况下,选项卡使用选项卡式窗格的背景和前景色。例如,如果选项卡式窗格的前景为黑色,则每个选项卡的标题均为黑色,但您使用setForegroundAt指定其他颜色的选项卡除外。
void setEnabledAt(int,boolean)
boolean isEnabledAt(int)
在指定的索引处设置或获取选项卡的启用状态。
无效 setMnemonicAt(int,int)
int getMnemonicAt(int)
设置或获取用于访问指定选项卡的键盘助记符。
void setDisplayedMnemonicIndexAt(int,int)
int getDisplayedMnemonicIndexAt(int)
设置或获取应修饰哪个字符以表示助记符。当助记符在标签的标题中多次出现并且您不希望在下划线出现下划线时,此功能很有用。
void setToolTipTextAt(int,String)
String getToolTipTextAt(int)
设置或获取指定选项卡的工具提示上显示的文本。

在标签上设置自定义组件

MethodPurpose
void setTabComponentAt(int,Component)设置负责呈现第一个参数指定的选项卡的标题或图标(或两者)的组件。指定空值时,JTabbedPane呈现标题或图标。同一组件不能用于多个选项卡。
Component getTabComponentAt(int)在参数指定的索引处获取选项卡的选项卡组件。如果指定的选项卡没有选项卡组件,则返回空值。
int indexOfTabComponent(Component)检查指定的组件是否属于选项卡之一。返回相应选项卡的索引;如果没有这样的选项卡,则返回-1.

使用选项卡式窗格的示例

下表列出了使用JTabbedPane的示例,并指向描述这些示例的位置。

ExampleWhere DescribedNotes
TabbedPaneDemoThis page演示一些选项卡式窗格的功能,例如工具提示,图标,可滚动的布局和助记符。
TabComponentsDemoThis page演示选项卡上的自定义组件。使用带有关闭按钮的选项卡式窗格。
BoxAlignmentDemo如何使用 BoxLayout使用JTabbedPane作为框架内容窗格的唯一子项。
BorderDemo如何使用边框以类似于BoxAlignmentDemo的方式使用其选项卡式窗格。
DialogDemo如何使用对话框在框架内容窗格的中央有一个选项卡式窗格,下面带有标签。