• 沒有找到結果。

第二章、 系統設計

2.1 AWT

AWT 可以分為兩個部分,使用者介面工具組(UI Toolkit)與繪圖 工具組(Graphics Toolkit)。

然而若以類別封裝的角度來看,AWT 可以分為三大部分,元件 模式(Component Model)、事件模式(Event Model)、繪圖模式 (Painting Model)。之後幾節的介紹也將從這個角度來一一詳細說 明。從圖2-1 可以看出,這三個部分在主要功能上的分類,其中與 繪圖工具組(Graphics Toolkit)相關的繪圖模式(Painting Model)部份 將是影響繪圖效能的關鍵,也會是CWT 與 AWT 最大的不同之處。

圖 2-1 : AWT 的基本組成架構。

2.1.1 元件模式(Component Model)

如圖2-2 所示,AWT 的所有元件都是繼承 Component 這個類 別,包含Container 也是。Container 是可以用來裝元件的容器類別,

如圖所示的視窗(由 Frame 這個類別產生)就是屬於 Container 的一 種,裡面裝的三個按鈕(由 Button 這個類別產生)則是屬於 Component 的一種。

圖 2-2 : AWT 元件的階層式架構。

除了Component 和 Container 這兩個基礎類別之外,其他的元 件在AWT 中都是屬於重型元件(Heavy-weight Component),是由不 同平台的視窗系統所生成,以提供與平台一致的呈現,所以又稱為原 生元件(Native Component)。

除了重型元件(Heavy-weight Component)之外,AWT 也提供了 輕型元件(Light-weight Component),Component 和 Container 即是 屬於這一類的元件。輕型元件指的就是該元件與系統平台無關,其呈 現方式必須自行繪製,因此這部份將十分仰賴AWT 的繪圖工具組,

並且將大幅考驗Java 的繪圖效能。Swing 的絕大部分元件就是屬於 這樣的輕型元件。雖然輕型元件是自行繪製的,但是也總要有地方可 以被畫,所以重型元件就必須扮演這樣的角色。至少要有一個重型元 件提供畫布,讓所有的輕型元件可以畫在上面。

2.1.2 事件模式(Event Model)

AWT 在 1.1 版之後提出了委派型事件模式(Delegation Event Model)的事件處理機制。如圖 2-3 所示,傾聽者(Listener)會向事件 來源(Event Source)註冊,事件來源在有事件產生的時候就會將事件 傳遞給所有註冊的傾聽者,傾聽者在收到事件後則會做出必要的反 應。

圖 2-3 : 委派型事件模式(Delegation Event Model)。

如圖2-4 所示,在 AWT 中有著各式各樣的事件,基本上都被歸 類為 AWTEvent,其中與元件直接相關的 ComponentEvent 還可以 再往下細分許多種。各種鍵盤和滑鼠的輸入事件,畫面更新的重繪事 件與視窗顯示狀態變更的事件等等,這些都是提供AWT 各種互動反 應不可或缺的重要角色。

java.awt

2.1.3 繪圖模式(Painting Model)

這個部分最重要的就是Graphics 這個類別,Graphics 在 AWT 中扮演了畫布的角色,並提供了繪製影像、文字與圖形的基本功能。

此外Image 和 FontMetrics 則是分別和影像與文字的處理有關,與影 像處理有關的部分主要都在java.awt.image 這個套件中。至於如何 取得Image 物件,一般來說就要靠 Toolkit 這個核心類別了。因此,

這幾個類別在AWT 的繪圖工具組中都將扮演很重要的角色,包含 Graphics、Image、FontMetrics 和 Toolkit。

此外,AWT 中重繪的方式也與事件處理機制密不可分。基本上 分為兩大類:系統驅動的重繪程序(System-triggered painting) [25]

和應用程式驅動的重繪程序(App-triggered painting) [25]。圖 2-5 以 這兩種重繪程序為例,說明了AWT 事件處理機制的運作方式。

系統驅動的重繪程序(System-triggered painting)與系統的重型

元件

用程式驅動的重繪程序(App-triggered painting)一般來說則是 與輕

盤 有密切的關係,當這類元件需要被重繪時,將由視窗平台上的事 件分派執行緒(Native Event Dispatch Thread)直接呼叫該元件的 paint()函式立刻進行重繪,例如元件被臨時擋住之後的顯示等等。

型元件比較有關,需要重繪時就呼叫repaint()這個函式來丟出重 繪事件(Paint Event)。然後將由 AWT 內部的事件處理機制來來處 理,事件佇列(Event Queue)負責存放這些事件,事件分派執行緒

相關文件