SWT事件
SWT事件
Translated By xiaotaoliang 04.12
一旦我们创建了display对象和一些部件,启动了应用程序的消息循环,真正的工作从哪里开始发生呢?答案是每当有一个事件从事件队列中被读取并分发给某个部件的时候。实际上大部分的应用程序逻辑被实现为对用户事件的响应。
基本的模式是:为所创建的部件附加一个监听器,当相应的事件发生时,监听器的代码就会被执行。一个简单的例子被实现于org.eclipse.swt.examples.helloworld.HelloWorld3:
Display display = new Display ();
Shell shell = new Shell (display);
Label label = new Label (shell, SWT.CENTER);
...
shell.addControlListener (new ControlAdapter () { public void controlResized (ControlEvent e) {label.setBounds (shell.getClientArea ());
}
});
对于每一种监听器,都对应有一个接口定义这种监听器(XyzListener),一个类提供事件信息(XyzEvent),还有一个应用程序接口方法负责添加监听器(addXyzListener)。如果一个监听器接口中定义了不只一个方法,那么相应地会提供一个适配器(XyzAdapter),它实现了监听器接口并提供一些空方法(你可以覆盖之)。所有的事件类,监听器类以及适配器类都定义在包org.eclipse.swt.events.里面。
以下表格总结了有效的事件以及对应的支持事件的部件:
|
事件类型
|
描述
|
部件
|
|
Arm
|
当部件处于高亮(将被选择)时发生,如菜单项。
|
MenuItem
|
|
Control
|
当控件被移动或改变大小时发生
|
Control, TableColumn, Tracker
|
|
Dispose
|
当部件被销毁时发生,无论销毁是由于用户操作还是程序操作
|
Widget
|
|
Focus
|
当部件获得或者失去焦点时发生
|
Control
|
|
Help
|
当用户请求对部件的帮助说明时发生,比如按下F1
|
Control, Menu, MenuItem
|
|
Key
|
当控件拥有键盘焦点,用户压下或释放按键时发生。
|
Control
|
|
Menu
|
当菜单被隐藏或显示时发生
|
Menu
|
|
Modify
|
当部件的文本内容被改变时发生
|
CCombo, Combo, Text, StyledText
|
|
Mouse
|
当用户在控件上压下、释放或双击鼠标时发生
|
Control
|
|
MouseMove
|
当用户把鼠标从控件上移过时发生
|
Control
|
|
MouseTrack
|
当鼠标进入、退出或在控件上悬浮时发生
|
Control
|
|
Paint
|
当控件需要被重绘时发生
|
Control
|
|
Selection
|
当用户选择了控件中的一项时发生
|
Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table Cursor, TableColumn, TableTree, Text, ToolItem, Tree
|
|
Shell
|
当Shell窗口被最小化、最大化、激活、不激活或被关闭时发生。
|
Shell
|
|
Traverse
|
当用户使用键盘按键访问控件时发生
|
Control
|
|
Tree
|
当用户展开或收缩树时发生
|
Tree, TableTree
|
|
Verify
|
当部件的文本内容将要发生改变的时候发生,给了应用程序一个机会去修改或防止修改部件的文本内容
|
Text, StyledText
|
无类型事件
以上描述的有类型事件系统实际上是由低级别的,无类型的部件事件机制实现的。这种机制不打算让应用程序使用,不过你会看到SWT的实现中使用了这种机制,很多工作台向导页的实现也使用了这种机制。
无类型事件机制依赖一个常量去标识事件类型并且为此定义了一个通用的监听器。这允许监听器实现“case样式”的监听模式。在以下的代码片断,我们定义一个通用的事件句柄并把若干监听器附加到Shell窗口。
Shell shell = new Shell ();
Listener listener = new Listener () { public void handleEvent (Event e) { switch (e.type) {case SWT.Resize:
System.out.println ("Resize received");break;
case SWT.Paint:
System.out.println ("Paint received");break;
default:
System.out.println ("Unknown event received");}
}
};
shell.addListener (SWT.Resize, listener);
shell.addListener (SWT.Paint, listener);
浙公网安备 33010602011771号