UI 組件簡介
在開始學習 Swing 之前,必須回答針對真正初學者的一個問題:什么是 UI?初學者的答案是“用戶界面”。但是因為本教程的目標是要保證您不再只是個初學者,所以我們需要比這個定義更高級的定義。
所以,我再次提出這個問題:什么是 UI?您可能把它定義成您按下的按鈕、打字的地址欄 、打開和關閉的窗口,等等,這些都是 UI 的元素,但是除了在屏幕上看到的這些之外,還有更多都是 UI 元素。比如鼠標、鍵盤、音量、屏幕顏色、使用的字體,以及一個對象相對於另一個對象的位置,這些都包含在 UI 之中。實際上,在計算機和用戶的交互之中扮演角色的任何對象都是 UI 的組成部分。這看起來足夠簡單,但是您應當驚訝的是,有許多人和大型公司已經為它努力了很多年。實際上,現在有的大學專業的惟一課程就是研究這種交互。
Swing 的角色
Swing 是 Java 平台的 UI —— 它充當處理用戶和計算機之間全部交互的軟件。它實際上充當用戶和計算機內部之間的中間人。Swing 到底是如何做這項工作的呢?它提供了處理前面一節中描述的 UI 各方面內容的機制:
· 鍵盤:Swing 提供了捕捉用戶輸入的方法。
· 顏色:Swing 提供改變在屏幕上看到的顏色的方法。
· 打字的地址欄:Swing 提供了文本組件,處理所有普通任務。
· 音量:Swing 不太擅長。
無論如何,Swing 為您提供了創建自己的 UI 所需要的所有工具
MVC
Swing 甚至走得更遠一步,在基本的 UI 原則之上又放上了一個公共的設計模式。這個設計模式叫做模型-視圖-控制器(Model-View-Controller,MVC),它試圖“把角色分開”。MVC 讓負責顯示的代碼、處理數據的代碼、對交互進行響應並驅動變化的代碼彼此分離。
有點迷惑?如果我為這個設計模式提供一個現實世界的非技術性示例,它就比較容易了。請想像一次時裝秀。把秀場當成 UI,假設服裝就是數據,是展示給用戶的計算機信息。現在,假設這次時裝秀中只有一個人。這個人設計服裝、修改服裝、同時還在 T 台上展示這些服裝。這看起來可不是一個構造良好的或有效率的設計。
現在,假設同樣的時裝秀采用 MVC 設計模式。這次不是一個人做每件事,而是將角色分開。時裝模特(不要與 MVC 縮寫中的模型混淆)展示服裝。他們扮演的角色是視圖。他們知道展示服裝(數據的)適當方法,但是根本不知道如何創建或設計服裝。另一方面,時裝設計師充當控制器。時裝設計師對於如何在 T 台上走秀沒有概念,但他能創建和操縱服裝。時裝模特和設計師都能獨立地處理服裝,但都有自己的專業領域。
這就是 MVC 設計模式背后的概念:讓 UI 的每個方面處理它擅長的工作。如果您仍然不明白,那么教程后面的示例有望消除您的迷惑 —— 但是在您繼續進行的時候,請記住基本的原則:用可視組件顯示數據,同時讓其他類操縱數據。
JComponent
Swing 的整個可視組件庫的基礎構造塊是 JComponent。它是所有組件的父類。它是一個抽象類,所以不能創建 JComponent,但是作為類層次結構的結果,從字面意義來說它包含了數百個函數,Swing 中的每個組件都可以使用這些函數。顯然,有些概念要比其他概念重要,所以對於本教程,需要學習的重要的東西是:
· JComponent 不僅是 Swing 組件的基類,還是定制組件的基類(有關的更多信息在“中級 Swing”教程中)。
· 它為所有組件提供了繪制的基礎架構 —— 一些方便進行組件定制的東西(同樣,在“中級 Swing”中,有關於這個主題的更多信息)。
· 它知道如何處理所有的鍵盤按鍵。所以類只需要偵聽特定的鍵。
它包含 add() 方法,可以添加其他 JComponent。換種方式來看,可以把任意 Swing 組件添加到其他任何 Swing 組件,從而構造嵌套組件(例如,JPanel 包含 JButton,甚至包含一些古怪的組合,例如 JMenu 包含 JButton)。
