程序类添加一个 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();
}
}
});
}
我在本系列的 第 1 部分 中描述了使用 SelectionListener 的细节。
请注意,菜单项(以及稍后讨论的列表、表、和树控件中的项)只支持字符串值;在添加其他类型的值之前,这些值将被转换成字符串值。
组合框和列表
通常,您希望 GUI 的用户从预先确定的值列表中进行选择。列表 控件是做到这一点的最简单的方法。列表显示了一组预先定义的、用户可以从中进行选择的字符串值。列表通常需要大量的屏幕实际信息(real estate)。如果您想节省空间,那么可以使用组合框 控件,组合框允许在需要的时候让列表处于下拉状态。组合框还可以有选择地允许用户在类似文本的字段中输入所需要的值。
必须将组合框定义为以下两种互斥样式之一:
SIMPLE 显示值的列表。
DROP_DOWN 使值的列表处于下拉状态。
组合框支持一种可选样式:
READ_ONLY 防止用户编辑此组合框的文本字段。
我所讨论的所有控件(列表、组合框、表和树)都支持以下两种互斥样式之一:
SINGLE 用户只能选择一个项。
MULTI 用户可以选择多个项。
这些控件还支持其他样式:
H_SCROLL 在需要时显示了一个水平滚动的条。
V_SCROLL 在需要时显示了一个垂直滚动的条。
SWT和JFace, 第2部分: 简介(5)
时间:2011-03-20 IBM Barry Feigenbaum
创建组合框和列表相当容易。创建这些控件和添加所需要的字符串值,如清单 4 所示。
清单 4. 使用 FormLayout 创建一个组合框和一个列
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
:
setLayout(new FormLayout());
String[] data = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5",
"Item 6", "Item 7", "Item 8", "Item 9", "Item 10" };
Combo c = createCombo(this, data);
configureLayout(c, new FormAttachment(0, 5), new FormAttachment(0, 5),
new FormAttachment(100, -5), null);
List l = createList(this, data);
configureLayout(l, new FormAttachment(0, 5), new FormAttachment(c, 5),
new FormAttachment(100, -5), new FormAttachment(100, -5));
// Create a Combo
protected Combo createCombo(Composite parent, String[] data) {
Combo combo = new Combo(parent,
SWT.DROP_DOWN | SWT.MULTI |
SWT.V_SCROLL | SWT.H_SCROLL);
combo.addSelectionListener(new SelectionListener() {
:
});
setComboContents(data);
return combo;
}
// Create a List
protected List createList(Composite parent, String[] data) {
|