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.里面。 以下表格总结了有效的事件以及对应的支持事件的部件:
无类型事件以上描述的有类型事件系统实际上是由低级别的,无类型的部件事件机制实现的。这种机制不打算让应用程序使用,不过你会看到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); |
|
来自: @IT小小鸟@ > 《Sing/SWT/Jface》