SWT 併入許多完整功能,但系統基核(小組件、佈置和事件 )的基本知識是實作有用及健全應用程式絕對必要的。
當您使用平台工作台延伸項目提供 UI 元素時,工作台會為您處理啟動 SWT 的機制。
如果您是從頭開始撰寫 SWT 應用程式(工作台除外),則必須詳細瞭解 SWT 的 應用程式結構。
典型獨立式 SWT 應用程式具有下列結構:
建立一個代表 SWT 階段作業的 Display。
建立一或多個可作應用程式主視窗之用的 Shell。
建立 Shell 內部所需的其他任何小組件。
起始設定小組件的大小及其他必要的狀態。為需要處理的小組件事件登錄接聽器。
開啟 Shell 視窗。
執行分派迴圈的事件直到結束(通常會在使用者關閉主要 Shell 視窗時結束)。
除去 display。
下列程式碼片段改編自 org.eclipse.swt.examples.helloworld.HelloWorld2 應用程式。因為該應 用程式僅顯示字串 "Hello World",所以不需要對任何小組件事件登錄。
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
Label label = new Label (shell, SWT.CENTER);
label.setText ("Hello_world");
label.setBounds (shell.getClientArea ());
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch
()) display.sleep ();
}
display.dispose ();
}
Display 代表 SWT 與基礎平台的 GUI 系統之間的連線。Display 主要用來管理平台事件迴圈 及控制 UI 執行緒和其他執行緒之間的通信。(有關 UI 執行緒作業問題的完整討論 ,請參閱從屬站的執行緒作業問題。)
以大部份應用程式而言,您可以遵循上面使用的型樣。您必須在建立任何視窗前先建 立一個顯示畫面,而且您必須在 Shell 關閉後除去該顯示畫面。除非您是設計多重 執行緒的應用程式,否則不需要對顯示畫面考慮太多。
Shell 是由 OS 平台視窗管理程式管理的一個 「視窗」。 最上層 Shell 就是建立為顯示畫面子項的那些視窗。這些視窗就是使用者使用應用 程式時移動、調整大小、最小化和最大化的那些視窗。第二層 Shell 就是建立為另 一個 Shell 子項的那些視窗。這些視窗通常作為對話視窗或其他僅存於另一視窗上 下文中的暫時性視窗。
非最上層 Shell 的所有小組件都有母項。最上層 Shell 沒有母項,但全都與特定 Display 有關。您可以使用 getDisplay() 來存取這個顯示畫面。其他 所有小組件建立為最上層 Shell 的後代(直接或間接)。
Composite 小組件是可具有子項的小組件。
當您看到應用程式視窗時,您可以將它視為小組件樹狀結構或是根為 Shell 的階層 。 根據應用程式的複雜性,可能有 Shell 的單一子項、許多子項或具有子項的組合之 巢狀層次。
當您的應用程式建立小組件時,SWT 會立即建立基礎的平台小組件。此依據基礎的 OS 小組件是否存在來減少以不同方式操作的程式碼需求。它也可讓多數小組件資料 保存在平台層次中,而非在工具箱中複製。這表示工具箱的小組件生命週期概念必須 符合基礎的 GUI 系統規則。
大部份 GUI 平台建立小組件時需要您指定母項。因為只要您建立工具箱小組件,SWT 就會建立平台小組件,母項小組件必須在小組件的建構子中指定。
某些小組件內容必須由 OS 在建立小組件時設定,以後無法變更。 例如,清單可能是單一或多重選項,不一定會有捲軸。
這些內容(稱為樣式)必須在建構子中設定。所有小組件建構子都有 int 引數,它指定所有想要樣式的按位元 OR。在某些情況下,特定 樣式被視為一種提示,這表示它可能不適用所有平台,而會在不支援它的平台上被順 利忽略。
樣式常數位於 SWT 類別中作為公 開靜態欄位。每一個小組件類別適用的常數清單包含在 SWT 的 API 參照中。
SWT 下面的 OS 平台需要明確配置及釋出 OS 資源。為保存在小組件工具箱反映平台 應用程式結構的 SWT 設計理念,SWT 需要您明確地釋出所配置的任何 OS 資源。 在 SWT 中,dispose() 方法用來釋出與特定工具箱物件相關的資源。
簡略的規則為如果您建立物件,就必須將它除去。以下是進一步解說此理念的一些特 定基本規則:
如果您使用建構子建立小組件或圖形物件,則必須在使用完後以手動方式除去它。
如果不是利用建構子取得小組件或圖形物件,則不需要手動除去它,因為您根本就沒 有配置它。
如果您傳遞小組件或圖形物件的參照給另一個物件,則必須小心不要將還在使用中的 它給除去。(事實上,我們之前在用於使 用影像的外掛程式型樣中就看過這個規則了。)
當使用者關閉 Shell ,該 Shell 及其所有子項小組件都會被遞迴地除去。在這個情況下,您不需要除去 小組件本身。不過,您必須釋出與那些小組件一起配置的任何圖形資源。
如果您建立某個圖形物件來於您其中一個小組件的生命期限期間使用,則必須在除去 小組件時除去該圖形物件。方法是為您的小組件登錄除去接聽器,並在收到 dispose 事件時釋出該圖形物件。
這些規則有一個異常狀況。簡單資料物件,例如 Rectangle 和 Point ,不使用作業系統資源。它們沒有 dispose() 方法,所以您不需要釋出它們 。如果不確定,請參考 javadoc 中的特定類別。