「標準 Widget 工具箱(SWT)」是 Java 開發人員使用的一種 Widget 工具箱,它提供可 移植 API,以及與基礎的原生 OS GUI 平台之緊密整合。
許多低階 UI 程式設計作業在高階的 Eclipse 平台中處理。舉例來說, UI 構成要素的 plugin.xml 標記可指定功能表和工具列內容,而不需要任何 SWT 程式設計。 此外,JFace 檢視器和動作提供應用程式與 Widget 之間一般交談作業的實作方式。不過,基礎的 SWT 架構常識和設計理念有助於瞭解如何操作其他平台。
Widget 工具箱設計中的常見問題是可移植工具箱和平台整合之間互相牽引的關係。 Java AWT(抽象視窗工具箱)提供用於低階 Widget(例如清單、文字和按鈕)的平 台整合式 Widget,但不提供高階平台元件(例如樹狀結構或文字)的存取權。 這迫使應用程式開發人員進入「最小公分母」狀況,在這裡他們只能使用適用於所有平台的 Widget。
Swing 工具箱嘗試提供高階 Widget(如樹狀結構、表格和文字)的非原生實作方式來 解決此問題。 雖然這提供了許多功能,但也使得以 Swing 開發的應用程式顯然已經不同了。 平台外觀和行為模擬層次有助於使應用程式看起來更像平台,但因使用者交談作業 的不同而無法被通知。使得利用模擬的工具箱來建置與收縮薄膜包裝的應用程式專為特定 OS 平台開發競爭的應用程式變的困難。
SWT 解決此問題的方法是,定義在所有支援平台上提供的共用可移植 API, 並儘可能利用可用的原生 Widget 在每一個平台上實作該 API。這可讓工具箱在所有平台上維護一致的程式設計模型時, 立即反映在基礎 OS GUI 外觀和行為中的任何變更。
「最小公分母」問題由 SWT 以許多方式解決:
平台整合不全然是外觀和行為。緊密整合併入了與原生桌面特性(例如拖放)交談的能力、 以及與 OS 桌面應用程式整合以及使用以 OS 元件模型(像 Win32 ActiveX)開發元件的能力。
SWT ActiveX 支援說明於
文章
SWT 中的 ActiveX 支援中。
藉由提供原生 OS 開發人員熟悉的實作方式,程式碼本身也可達到一致性。 SWT 為每一個平台提供個別且相異的 Java 實作方式,而不需要隱藏原生 C 程式碼 中的 OS 差異,或嘗試在 Java 實作方式中建置可移植及不可移植層次。
一個重要的實作規則是,在 C 中的原生呼叫與 OS 的呼叫做一對一對映。Windows 程式設計師會 立即辨識 Windows 上 SWT 工具箱的實作方式,因為它使用直接對映到使用於 C 中 系統呼叫的原生。C 程式碼中沒有隱藏「平台魅力」。 平台開發人員可直視程式碼而看出哪一個平台呼叫由工具箱執行。 這可大幅簡化除錯。 如果呼叫原生方法失敗,則以 C 程式碼中相同參數呼叫平台 API 將會顯示相同的 失敗。 (您可以在 Java 原生的 SWT 實作策略中找到此問題的完整討論。)