首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

SWT 和 JFace,第 4 部分 简介(2)

SWT 和 JFace,第 4 部分 简介(2)

ToolBar、CoolBar 和 TrayToolBar[size=1.0625] 与本系列 第 2 部分 中[size=1.0625]所描述的 Menu 控件类似。ToolBar 包含 ToolItem[size=1.0625], ToolItem 可以有文本或图片作为按钮。一般来说,要么使用图片(AKA 图标)、要么使用文本,不能同时使用。如果仅使用图片,那么 ToolItem 需要有一个 ToolTip[size=1.0625] (帮助提供信息的短语或句子),这样当鼠标停留在 ToolItem 上时,会显示 ToolTip,解释图片的功能。
[size=1.0625]ToolBar 必须定义成以下两种完全互异的样式之一:
  • HORIZONTAL —— 水平方向的
  • VERTICAL —— 垂直方向的
[size=1.0625]ToolBar 支持以下样式:
  • FLAT —— 以平面样式显示项目
  • WRAP —— 项目换行
  • RIGHT —— 项目右对齐(及左对齐)
  • SHADOW_OUT —— 显示阴影
[size=1.0625]ToolItem 必须定义成以下 5 种完全互异的样式之一:
  • CHECK —— 可连续选择项目(复选)。
  • DROP_DOWN —— 项目(通常)显示下拉菜单。
  • PUSH —— 项目作为按钮,可直接引发动作(最常见的形式)。
  • RADIO —— 此类项目只能选择一个。
  • SEPARATOR —— 在项目组之间充当分隔符(通常是一个条),这个项目没有功能。
[size=1.0625]以下两个清单分别显示了创建 ToolBar 和 ToolItem 的代码。
清单 2. 创建 ToolBar 的方法

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875][size=0.875]protected ToolBar createVToolBar(Composite parent, int style) {
[size=0.875]    return new ToolBar(parent, style | SWT.VERTICAL);
[size=0.875]}

[size=0.875]protected ToolBar createHToolBar(Composite parent, int style) {
[size=0.875]    return new ToolBar(parent, style | SWT.HORIZONTAL);
[size=0.875]}




清单 3. 创建 ToolItem 的方法

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875]12


[size=0.875]13


[size=0.875]14


[size=0.875]15


[size=0.875]16


[size=0.875]17


[size=0.875]18


[size=0.875]19


[size=0.875]20


[size=0.875]21


[size=0.875]22


[size=0.875]23


[size=0.875][size=0.875]protected ToolItem createToolItem(ToolBar bar, int style, String text,
[size=0.875]                                  Image image, String tooltip,   
[size=0.875]                                  SelectionListener listener) {
[size=0.875]    if (image != null && (text == null && tooltip == null)) {
[size=0.875]        throw new IllegalArgumentException("image only items require a tool tip");
[size=0.875]    }
[size=0.875]    ToolItem ti = new ToolItem(bar, style);
[size=0.875]    if (image != null) {
[size=0.875]        ti.setImage(image);
[size=0.875]    }
[size=0.875]    else {
[size=0.875]        if (text != null) {
[size=0.875]            ti.setText(text);
[size=0.875]        }
[size=0.875]    }
[size=0.875]    if (tooltip != null) {
[size=0.875]        ti.setToolTipText(tooltip);
[size=0.875]    }
[size=0.875]    if (listener != null) {
[size=0.875]        ti.addSelectionListener(listener);
[size=0.875]    }
[size=0.875]    return ti;
[size=0.875]}




[size=1.0625]多数操作系统都提供了与系统状态关联的特殊形式的工具栏,称为 托盘 (Tray)。不能构造 Tray;必须使用 Display.getSystemTray() 访问 Tray。与 ToolBar 相似,托盘中包含 TrayItem。TrayItem 没有样式选项,通常以 PUSH ToolItem 的形式工作。
[size=1.0625]CoolBar 类似 ToolBar,区别在于用户可以重新安排栏中的 CoolItem,可以在 CoolItem 之间拖曳分隔条。对于栏中的 CoolItem 如何换行以及栏中项目显示的顺序,CoolBar 还允许更多控制。CoolBar 只支持 FLAT (或 NONE)样式。CoolItem 只支持 DROP_DOWN 样式。与 ToolItem 不同,CoolItem 有相关的控件负责实际实现项目的 GUI。如果没有这个控件,CoolItem 就没有功能,通常也没有可视的实现。这个控件应当有一个 ToolTip。
[size=1.0625]下面两个清单分别显示了创建 CoolBar 和 CoolItem 的代码。请注意只能创建水平 CoolBar。
清单 4. 创建 CoolBar 的方法

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875][size=0.875]protected CoolBar createCoolBar(Composite parent, int style) {
[size=0.875]    return new CoolBar(parent, style);
[size=0.875]}




清单 5. 创建 CoolItem 的方法

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875][size=0.875]protected CoolItem createCoolItem(CoolBar bar, int style, String text,
[size=0.875]                                  Image image, SelectionListener listener) {
[size=0.875]    CoolItem ci = new CoolItem(bar, style);
[size=0.875]    if (text != null) {
[size=0.875]        ci.setText(text);
[size=0.875]    }
[size=0.875]    if (image != null) {
[size=0.875]        ci.setImage(image);
[size=0.875]    }
[size=0.875]    return ci;
[size=0.875]}




[size=1.0625]下面这个清单显示了如何用这个代码创建 CoolItem 和相关控件。在这个示例中,当选中 CoolItem 的控件时,会弹出一个菜单,如图 2 所示。请注意 CoolItem、按钮和菜单都用 CoolBar 作为双亲。还请注意 CoolItem 的文本没有显示,只显示了关联的控件。
清单 6. CoolItem 的创建示例

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875]12


[size=0.875]13


[size=0.875]14


[size=0.875][size=0.875]CoolBar cb = createCoolBar(..., SWT.FLAT);
[size=0.875]  :  // other CoolItems
[size=0.875]CoolItem ci = createCoolItem(cb, SWT.FLAT,  "Drop", null, null);
[size=0.875]Button b = createButton(cb, SWT.PUSH, "Press Me 1", null, new SelectionAdapter() {
[size=0.875]    public void widgetSelected(SelectionEvent se) {
[size=0.875]        menu.setVisible(true);
[size=0.875]    }
[size=0.875]});
[size=0.875]ci.setControl(b);     // associate Button with CoolItem
[size=0.875]Menu m = new Menu(cb);
[size=0.875]createMenuItem(m, SWT.PUSH, "Item 1", null, '1', true, null);
[size=0.875]createMenuItem(m, SWT.PUSH, "Item 2", null, '2', true, null);
[size=0.875]createMenuItem(m, SWT.PUSH, "Item 2", null, '3', true, null);
[size=0.875]  :  // other CoolItems




图 2. CoolItem 示例
山不在高,有仙则名;水不在深,有龙则灵。
返回列表