ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]Merlin 的魔力: 滚动选项卡窗格

[转载]Merlin 的魔力: 滚动选项卡窗格

原创 Linux操作系统 作者:dinner1007 时间:2019-04-03 15:54:04 0 删除 编辑

Merlin 的魔力: 滚动选项卡窗格


在 Java 平台的 Merlin 发行版之前,Swing 的 JTabbedPane 控件只允许将选项卡换成多行。 JTabbedPane 的新的、改进的版本允许您在一行上滚动选项卡。在 Merlin 的魔力的这一部分,John Zukowski 演示了如何更改 JTabbedPane 的布局策略并提供了一个完整的示例供您使用。请在 讨论论坛与本文作者和其他读者交流关于本文的心得。

开始

JTabbedPane 控件是一个容器,它根据用户选择的选项卡允许他或她访问不同的组件集。当您用 JTabbedPane 设计用户界面时,指定许多选项卡也是很常见的。如果用户的屏幕尺寸比期望的小,就会出现问题;在这种情况下,选项卡将换为多行。换行导致每个选项卡上的组件期望的屏幕空间减小。所占区域根据显示跨越 JTabbedPane 各个选项卡所需的行数按比例减小 — 对用户界面工程师来说,这很可怕。

图 1 演示了 UI 工程师初始设置的屏幕的样子,而图 2 显示了当屏幕宽度小于期望大小时将会怎样。


图 1. 单行宽 JTabbedPane
单行宽 JTabbedPane

图 2. 多行窄 JTabbedPane
多行窄 JTabbedPane



回页首


更改布局策略

Merlin 发行版允许您通过设置 JTabbedPane 的新 tabLayoutPolicy 属性更改此行为。通过将缺省设置从 JTabbedPane.WRAP_TAB_LAYOUT 更改为 JTabbedPane.SCROLL_TAB_LAYOUT ,选项卡将不再换行,而是停留在一行,如清单 1 所示。箭头被添加到尾部,用于移到屏幕上容不下的选项卡,如图 3 所示。

清单 1. 更改 JTabbedPane 的布局策略

  JTabbedPane pane = new JTabbedPane();
pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);


图 3. 窄、单行 JTabbedPane
多行窄 JTabbedPane

如果选项卡垂直放置,而不是平行放置(见图 4),布局策略也会有所帮助。


图 4. 选项卡在左边的 JTabbedPane
选项卡在左边的 JTabbedPane



回页首


一个完整的示例

它的确包含所有的东西。清单 2 包含完整的示例源代码,也可从 参考资料下载。

清单 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();
}
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130101/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    698
  • 访问量
    484363