IBM SWT 菜单
来源:互联网 发布:博易大师指标源码 编辑:程序博客网 时间:2024/05/03 12:12
除了最基本的 GUI 应用程序之外,几乎所有的 GUI 应用程序都需要菜单。菜单增加了任何 GUI 的可用性。菜单是动态呈现的选择列表,它对应于可用的函数(常称为命令)或 GUI 状态。正如您所期望的,您可以使用菜单小部件创建菜单。菜单可以包含其他菜单或者menuItems(菜单项),而 menuItems 也可以包含菜单(即分层的菜单)。menuItems 表示您可以执行的命令或您所选择的 GUI 状态。菜单可以与应用程序(即 shell)的菜单栏相关,或者,这些菜单可以是漂浮在应用程序窗口之上的弹出式菜单。
必须将菜单定义为以下三种互斥样式之一:
BAR
充当 shell 的菜单栏。DROP_DOWN
从菜单栏或一个菜单项往下拉。POP_UP
从 shell 弹出,但上下文则针对于一个特定的控件。
菜单支持一些附加的可选样式:
NO_RADIO_GROUP
不充当单选按钮组;当菜单中包含RADIO
样式的菜单项时可以使用它。LEFT_TO_RIGHT
或RIGHT_TO_LEFT
负责选择文本方向。
必须将菜单项定义为以下 5 种互斥样式之一:
CHECK
可以是持久选定的(即复选的)。CASCADE
包含一个应该以下拉方式出现的菜单。PUSH
行为类似于造成某一直接动作的按钮。RADIO
行为类似于一个CHECK
,但是只有一个这种类型的项被选中。SEPARATOR
充当菜单项的组之间的隔离物(通常是一个条),这一项没有任何功能。
创建一个菜单系统是相当复杂的。清单 1 显示了一个代码示例,该示例创建了一个可操作的菜单系统。
清单 1. 创建一个菜单系统和一个弹出菜单
import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.*;import org.eclipse.swt.events.*;import org.eclipse.swt.graphics.*; :Shell shell = ...; :Label body = ...; :// Create the menu bar systemMenu main = createMenu(shell, SWT.BAR | SWT.LEFT_TO_RIGHT);shell.setMenuBar(main);MenuItem fileMenuItem = createMenuItem(main, SWT.CASCADE, "&File", null, -1, true, null);Menu fileMenu = createMenu(shell, SWT.DROP_DOWN, fileMenuItem, true);MenuItem exitMenuItem = createMenuItem(fileMenu, SWT.PUSH, "E&xit/tCtrl+X", null, SWT.CTRL + 'X', true, "doExit");MenuItem helpMenuItem = createMenuItem(main, SWT.CASCADE, "&Help", null, -1, true, null);Menu helpMenu = createMenu(shell, SWT.DROP_DOWN, helpMenuItem, true);MenuItem aboutMenuItem = createMenuItem(helpMenu, SWT.PUSH, "&About/tCtrl+A", null, SWT.CTRL + 'A', true, "doAbout");// add popup menuMenu popup = createPopupMenu(shell, body);MenuItem popupMenuItem1 = createMenuItem(popup, SWT.PUSH, "&About", null, -1, true, "doAbout");MenuItem popupMenuItem2 = createMenuItem(popup, SWT.PUSH, "&Noop", null, -1, true, "doNothing");
此代码序列创建了以下菜单栏,该菜单栏中包含一些子菜单和一个弹出菜单。body
值是一个标签控件,包含文本“Sample body”。弹出菜单与这个控件在上下文上存在关联。
正如您所见,菜单项可以具有加速器(Ctrl+?
)和记忆术(给通过 &
标识的字符加下划线),帮助用户使用键盘选择一些项。
我使用一组 helper 方法创建了这些菜单,如清单 2 中所示。最佳实践是创建与这些 helper 方法类似的方法,用这些方法创建重复的 GUI 部分,如菜单。随着时间的推移,您可以向这些 helper 方法添加更多的支持功能,并将它们应用到所有使用点。这些方法还有助于提示您获得所有需要的值。
清单 2. 菜单创建 helper 例程
protected Menu createMenu(Menu parent, boolean enabled) { Menu m = new Menu(parent); m.setEnabled(enabled); return m;}protected Menu createMenu(MenuItem parent, boolean enabled) { Menu m = new Menu(parent); m.setEnabled(enabled); return m;}protected Menu createMenu(Shell parent, int style) { Menu m = new Menu(parent, style); return m;}protected Menu createMenu(Shell parent, int style, MenuItem container, boolean enabled) { Menu m = createMenu(parent, style); m.setEnabled(enabled); container.setMenu(m); return m;}protected Menu createPopupMenu(Shell shell) { Menu m = new Menu(shell, SWT.POP_UP); shell.setMenu(m); return m;}protected Menu createPopupMenu(Shell shell, Control owner) { Menu m = createPopupMenu(shell); owner.setMenu(m); return m;}protected MenuItem createMenuItem(Menu parent, int style, String text, Image icon, int accel, boolean enabled, String callback) { MenuItem mi = new MenuItem(parent, style); if (text != null) { mi.setText(text); } if (icon != null) { mi.setImage(icon); } if (accel != -1) { mi.setAccelerator(accel); } mi.setEnabled(enabled); if (callback != null) { registerCallback(mi, this, callback); } return mi;}
清单 3 显示了如何使用 Java 的反射 功能,利用处理菜单项的代码来链接菜单项。此功能创建了一个易于使用的方法,在这个方法中,只需要给应用程序类添加一个 public
方法(比如 doExit
、doAbout
或 doNothing
),就可以处理菜单命令。
清单 3. 处理菜单命令的 Callback
例程
protected void registerCallback(final MenuItem mi, final Object handler, final String handlerName) { mi.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { try { Method m = handler.getClass().getMethod(handlerName, null); m.invoke(handler, null); } catch (Exception ex) { ex.printStackTrace(); } } });}
请注意,菜单项(以及稍后讨论的列表、表、和树控件中的项)只支持字符串值;在添加其他类型的值之前,这些值将被转换成字符串值。
- IBM SWT 菜单
- IBM SWT 表
- swt 的 菜单
- SWT 右键菜单
- SWT实现右键菜单功能
- SWT工具栏菜单的实现
- swt树形菜单tree使用
- SWT/JFace菜单和工具栏,对话框,拖放
- SWT如何给Table添加右键菜单
- SWT读取本地文件加到树菜单上
- swt点击按钮弹出下拉菜单
- SWT如何给Table添加右键菜单
- IBM实验室对SWT, Swing 和 AWT 的特征比较
- IBM实验室对SWT, Swing 和 AWT 的特征比较
- IBM实验室对SWT, Swing 和 AWT 的特征比较
- IBM实验室对SWT, Swing 和 AWT 的特征比较
- IBM实验室对SWT, Swing 和 AWT 的特征比较
- IBM实验室对SWT, Swing 和 AWT 的特征比较
- 如何做好项目经理
- 队列(Queue)
- MySQL的自增字段
- SUSE 防火墙设置之端口开放
- 分享我的Spring AOP入门
- IBM SWT 菜单
- 【Windows Mobile开发系列 之 开始一】了解智能项目和一般PC项目的区别
- Windows Mobile开发系列 之 开始二】使用VS2008进行Windows Mobile开发环境的搭建
- SET IDENTITY_INSERT to ON. 将值插入到自动编号
- Spring,hibernate,struts常见的面试笔试题汇总
- 量化用户体验
- ASP.NET 无限级分类
- 关于perl中BEGIN和END的使用
- log4j之经典【properties】