分享

SWT事件

 @IT小小鸟@ 2012-01-13

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
当控件被移动或改变大小时发生
ControlTableColumn,Tracker
Dispose
当部件被销毁时发生,无论销毁是由于用户操作还是程序操作
Widget
Focus
当部件获得或者失去焦点时发生
Control
Help
当用户请求对部件的帮助说明时发生,比如按下F1
ControlMenuMenuItem
Key
当控件拥有键盘焦点,用户压下或释放按键时发生。
Control
Menu
当菜单被隐藏或显示时发生
Menu
Modify
当部件的文本内容被改变时发生
CComboComboText,StyledText
Mouse
当用户在控件上压下、释放或双击鼠标时发生
Control
MouseMove
当用户把鼠标从控件上移过时发生
Control
MouseTrack
当鼠标进入、退出或在控件上悬浮时发生
Control
Paint
当控件需要被重绘时发生
Control
Selection
当用户选择了控件中的一项时发生
ButtonCComboCombo,CoolItemCTabFolderList,MenuItemSashScale,ScrollBarSlider,StyledTextTabFolder,TableTable CursorTableColumnTableTree,TextToolItemTree
Shell
当Shell窗口被最小化、最大化、激活、不激活或被关闭时发生。
Shell
Traverse
当用户使用键盘按键访问控件时发生
Control
Tree
当用户展开或收缩树时发生
TreeTableTree
Verify
当部件的文本内容将要发生改变的时候发生,给了应用程序一个机会去修改或防止修改部件的文本内容
TextStyledText

无类型事件

以上描述的有类型事件系统实际上是由低级别的,无类型的部件事件机制实现的。这种机制不打算让应用程序使用,不过你会看到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);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多