JTabbedPane 控件是一个容器,它根据用户选择的选项卡允许他或她访问不同的组件集。当您用
JTabbedPane 设计用户界面时,指定许多选项卡也是很常见的。如果用户的屏幕尺寸比期望的小,就会出现问题;在这种情况下,选项卡将换为多行。换行导致每个选项卡上的组件期望的屏幕空间减小。所占区域根据显示跨越
JTabbedPane 各个选项卡所需的行数按比例减小 — 对用户界面工程师来说,这很可怕。
图 1 演示了 UI 工程师初始设置的屏幕的样子,而图 2 显示了当屏幕宽度小于期望大小时将会怎样。
图 1. 单行宽 JTabbedPane
图 2. 多行窄 JTabbedPane
Merlin 发行版允许您通过设置
JTabbedPane 的新
tabLayoutPolicy 属性更改此行为。通过将缺省设置从
JTabbedPane.WRAP_TAB_LAYOUT 更改为
JTabbedPane.SCROLL_TAB_LAYOUT ,选项卡将不再换行,而是停留在一行,如清单 1 所示。箭头被添加到尾部,用于移到屏幕上容不下的选项卡,如图 3 所示。
JTabbedPane pane = new JTabbedPane(); pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); |
图 3. 窄、单行 JTabbedPane
如果选项卡垂直放置,而不是平行放置(见图 4),布局策略也会有所帮助。
图 4. 选项卡在左边的 JTabbedPane
它的确包含所有的东西。清单 2 包含完整的示例源代码,也可从 参考资料下载。
import javax.swing.*;
import java.text.*;
import java.awt.*;
public class Tabs {
public static void main(String args[]) {
String[] months = new DateFormatSymbols().getShortMonths();
JTabbedPane pane = new JTabbedPane();
pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
// pane.setTabPlacement(JTabbedPane.LEFT);
for (int i=0; i < 12; i++) {
JPanel panel = new JPanel(new BorderLayout());
JButton button = new JButton(months[i]);
panel.add(button);
pane.add(months[i], panel);
}
JFrame frame = new JFrame("Tabs");
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.show();
}
}
|
- 您可以参阅本文在 developerWorks 全球站点上的
英文原文.
- 参与关于 Java SDK 版本 1.4 的新功能的
讨论。
- 下载本文中使用的完整示例的
源代码。
- 学习 1.4 发行版中的
Swing 组件集的更多变化。
- 通过阅读其
javadoc,学习更多关于
JTabbedPane的知识。
- 用 Java 语言的较早版本试验
TabSplitter组件。
- Kelvin Lawrence
介绍 JFC 的功能和灵活性(developerWorks,1998)。
- Matt Chapman 提供了
Java 2 用户界面概述— 它的发展历程以及它有什么内容(developerWorks,2001 年 7 月)。
- 阅读 John Zukowski 写的、完整的
Merlin 技巧集合。
- 请在
developerWorks Java 技术专区查找更多的参考资料。

John Zukowski 为 JZ Ventures, Inc.做战略性 Java 咨询,同时还担任一些 jGuru的由社区推动的 Java 常见问题解答的常驻指导。他最近的著作有 Apress 出版的 Java Collections 和 Definitive Guide to Swing for Java 2 (第 2 版)。请通过 jaz@zukowski.net与 John 联系。