目標讀者必須熟悉Java開發,並且有一定的Eclipse開發經驗。
在Eclipse網站上有一篇相關的文章"Creating Your Own Widgets using SWT",該文介紹了開發自己控制項的很多基本概念、方法,並且通過執行個體進行了介紹,非常好。但是其所用的執行個體比較簡單,還有很多控制項開發中所要涉及到的內容,例如鍵盤、滑鼠事件的處理,捲軸、焦點的處理等等沒有提及。本文通過開發一個自訂的顏色清單控制項的執行個體,全面地介紹了自訂控制項所涉及的技術。同時,讀者也可以對該執行個體進行擴充,實現自己的清單控制項。
SWT中提供的標準清單控制項非常簡單,只能提供字串的選擇。我們經常需要提供一些圖形列表供使用者選擇,這就需要自己開發自訂的清單控制項。顏色挑選清單是我們常用的一種圖形列表,我們就以此為例進行介紹。以下是我們將要開發的顏色列表。
我們在開發自訂控制項時主要考慮以下問題:
1、自訂控制項的繪製:通常我們需要自己對控制項的形狀或圖案進行繪製;
2、控制項對鍵盤事件的響應:當焦點進入控制項,使用者進行鍵盤操作,通過鍵盤對控制項進行控制時,我們需要讓控制項對使用者的操作進行響應。例如在列表中,使用者會通過上下箭頭改變列表的選擇項;
3、控制項對滑鼠事件的響應:當使用者用滑鼠選中控制項,進行操作時,控制項必須作出相應的反應;
4、控制項對焦時間點事件的響應:當介面焦點進入或移出控制項,通常我們需要將控制項繪製成得到或失去焦點的形狀。例如,當焦點進入列表時,一般被選中的清單項目會有虛框表示選中。
5、響應TAB鍵:對於一個可操縱的控制項,使用者可以用TAB鍵將焦點移入或移出。
6、響應捲軸事件:當控制項有捲軸時,我們需要響應使用者對捲軸的操作,完成對控制項的繪製工作。
7、提供事件監聽機制:程式員使用你的控制項時通常需要監聽控制項中發生的一些事件,這樣當事件發生時,他們能夠進行相應處理。
8、提供協助工具功能(Accessibility):協助工具功能是方便殘障人士使用時必須的,標準控制項都會提供相應的支援,我們自訂的控制項也不例外。
9、提供功能介面方便程式員訪問:通常為方便程式員使用時擷取控制項中的資訊或進行設定,我們需要提供一些介面。
首先我們要開發的清單控制項是一個基本控制項,所以我們選擇Canvas作為我們開發的基類。
public class ColorList extends Canvas {
Vector colors = new Vector(); // 用於儲存我們顏色控制項中的顏色值
Vector colorNames = new Vector(); // 用於儲存顏色控制項中的顏色名字
int rowSel = -1; // 用於儲存當前選中的行號
int oldRowSel = -1; // 用於儲存上一次選中的行號
int maxX, maxY; // 用於儲存列表的寬度和高度
int lineHeight; // 用於設定行高
int cx = 0; // 捲軸滾動後,控制項的圖形相對於控制項可見地區左上方的x座標
int cy = 0; // 捲軸滾動後,控制項的圖形相對於控制項可見地區左上方的y座標
}