SWT事件Translated By xiaotaoliang 04.12一旦我們創(chuàng)建了display對象和一些部件,,啟動了應(yīng)用程序的消息循環(huán),真正的工作從哪里開始發(fā)生呢,?答案是每當有一個事件從事件隊列中被讀取并分發(fā)給某個部件的時候,。實際上大部分的應(yīng)用程序邏輯被實現(xiàn)為對用戶事件的響應(yīng)。 基本的模式是:為所創(chuàng)建的部件附加一個監(jiān)聽器,,當相應(yīng)的事件發(fā)生時,,監(jiān)聽器的代碼就會被執(zhí)行。一個簡單的例子被實現(xiàn)于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 ()); } }); 對于每一種監(jiān)聽器,,都對應(yīng)有一個接口定義這種監(jiān)聽器(XyzListener),,一個類提供事件信息(XyzEvent),還有一個應(yīng)用程序接口方法負責(zé)添加監(jiān)聽器(addXyzListener),。如果一個監(jiān)聽器接口中定義了不只一個方法,,那么相應(yīng)地會提供一個適配器(XyzAdapter),它實現(xiàn)了監(jiān)聽器接口并提供一些空方法(你可以覆蓋之),。所有的事件類,,監(jiān)聽器類以及適配器類都定義在包org.eclipse.swt.events.里面。 以下表格總結(jié)了有效的事件以及對應(yīng)的支持事件的部件:
無類型事件以上描述的有類型事件系統(tǒng)實際上是由低級別的,,無類型的部件事件機制實現(xiàn)的,。這種機制不打算讓應(yīng)用程序使用,不過你會看到SWT的實現(xiàn)中使用了這種機制,,很多工作臺向?qū)ы摰膶崿F(xiàn)也使用了這種機制。 無類型事件機制依賴一個常量去標識事件類型并且為此定義了一個通用的監(jiān)聽器,。這允許監(jiān)聽器實現(xiàn)“case樣式”的監(jiān)聽模式,。在以下的代碼片斷,我們定義一個通用的事件句柄并把若干監(jiān)聽器附加到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); |
|