精華區beta b865060xx 關於我們 聯絡資訊
如果你不是用什麼Visual Cafe,Visual Age一類的東東在寫你的Java作業 而是像我一樣寒酸的用JDK配上UltraEdit32 Chinese patch的話 你一定想知道 到底JAVA如何進行事件處理的動作呢?(更現實一點的說,如何處理作業 中的button動作呢?^_^) 以下我先從JDK 1.0的角度來看(因為JDK1.1在這裡作了極大的更動 而可能有很多同學因為BROWSER和COMPILER的關係,只能用1.0的語法 而老師也說用1.0即可,因此我們先說1.0吧!) 首先先來說一說 什麼是事件呢? 事件是從有電腦就必需有的觀念 任何一台最陽春的電腦 也都要有INPUT設備(例如:鍵盤) 而當我們在鍵盤上按了一個鍵 實際上是激發了一個「SYSTEM_KEY_CLICK」事件給電腦…… 而有了所謂GUI(Graphic User Interface)後 事件的種類更多也更複雜 如WINDOW_OPEN、WINDOW_MAXIMIZE、CHOICE_SELECT 等等都被我們視為事件 有了事件以後 程式設計者就可以設計相對的處理程式來回應這個事件 那一個事件該如何定義呢?在JDK 1.0裡是用一個Event class 來定義的 一個產生自Event class 的instance 有兩個重要的member variable 一是id,表示這個事件的編號(例如按滑鼠是幾號,滑鼠移動是幾號) 二是target,表示這個事件的作用物件(例如是按鈕還是文字框) 有了這些觀念,我們就可以把系統傳來的事件解讀了…… 系統傳送事件的方式是呼叫預訂在Component中的一些function 也就是每個繼承自Component的元件都會有被系統call的可能(所以你得override這些 function) 系統呼叫的函數的順序如下: boolean handleEvent(Event evt) boolean action(Event evt,Object arg) boolean mouseMove(Event evt,int x,int y) Down Up ....... 這什麼意思呢? handleEvent 是最強大的一個函數,所有的事件(系統、滑鼠、鍵盤)都會先傳給它 如果它處理了這個事件就傳回true, 如果傳回false則系統會繼續把這個事件傳給action來做處理(如果action可處理) 同理如果action也不處理(傳false),系統會把它丟給更低階的mouseMove等函數去處理 如果最後沒人處理, 就不管它 簡單來說,事件可處理的範圍如下: 系統(如使用者按了browser的reload鍵) 鍵盤 滑鼠 handleEvent * * * action * * mouseMove * keyDown * 所以假如今天我們要寫一個讓使用者click button的程式 我們可以在handleEvent裡作處理,也可以在action裡處理,也可以在mouseUp裡處理 以下是一個簡單的在handleEvent裡處理的例子,大家可以看看 有問題再問: public class ShowHello extends Applet{ private Button HELLO=new Button("Hello"); public void init(){ add(HELLO); //表示把這個按鈕加入容器中 } public boolean handleEvent(Event evt){ if (evt.target instanceof Button){ //上一行表示 //如果事件發生在Button(當然是click嘍!) if ("Hello".equals(evt.arg)){ //對Button來說,evt.arg的內容是一個表標題的字串 //故可以此來判斷所按的按鈕 (getGraphics()).drawStrint("Hello,100,100); return true;//已處理 } } return false; } } -- 陷入難過的時候 你就擁有了讓自己更快樂的空間…… 感覺失意的時候 你就掌握了讓自己得意起來的權利…… -- ※ 發信站: 批踢踢實業坊(ptt.m8.ntu.edu.tw) ◆ From: ntucsx.csie.ntu