JRuby+Swing的開發人員選擇
JRuby 是用于 Java 平臺的一個 Ruby 實現。它使您可以通過 JVM 執行 Ruby 代碼。在 JRuby 下運行的 Ruby 代碼還可以裝載和使用 Java 庫,包括 Swing。所以JRuby+Swing的組合,也成為了開發人員的選擇之一。
Java 平臺的某些方面使得 JRuby 成為一個好的選擇:
◆它比較穩定,并且經過良好的測試
◆它有較強的社區和供應商支持
◆它有很多良好的文檔
◆有很好的 IDE 和 UI 布局工具可供選擇
◆可免費使用(不管是在成本方面還是許可方面)
◆用戶機器上可能已經安裝了 Java 運行時
如果用JRuby 編寫應用程序,并使用 Swing 實現 UI,則只需確保用戶有***版本的 Java 運行時,并在打包應用程序時包括 JRuby JAR 文件。由于已經有了用于 JRuby 應用程序打包的 Ruby 工具,所以這些不成問題。
JRuby+Swing 的開發人員選項
對于從 JRuby 中使用 Swing,有很多選項:
原始的、手工編寫的對 Swing 對象的內聯調用:在最簡單的情況下,可以像引用任何其他 JRuby 對象那樣引用 Swing 對象:
- panel = Java::javax::swing::JFrame.new("JRuby panel")
- panel.show
“Builder” 和領域特定語言(DSL)風格的庫:全部以手工代碼構造面板和窗體,然后添加組件,這樣可以提高開發速度。有一些庫使 Swing 交互更具 Ruby 風格。例如:
Cheri::Swing 使用 JRuby 塊語法生成 Swing 代碼。
另一個庫 Profligacy 則圍繞原始的 Swing 調用提供了一個 Ruby 包裝器,它可以幫助您用更少的原始 Java 代碼編寫更多的 Swing 代碼。為了恰當地使用 Swing 組件,仍然需要熟悉 Swing API 文檔。
這些方法都假設面板、窗體和布局是用手工代碼創建的。雖然用純 Swing 代碼做這些事情已經是一個進步,但是仍然無法處理復雜的用戶界面。
“我們不關心 Java 類來自何處” 方法:第三種方法假設用于 Swing 對象的已編譯的 Java 類已經存在,并試圖使用 JRuby 代碼簡化 Swing 對象的創建。
***是 Monkeybars 庫采用的方法(請參閱 參考資料)。現在已經有很多非常好的、免費的圖形化 Swing UI 布局編輯器。和之前提到的 GUI 工具包(例如 Fox 和 GTK)的使用一樣,對于不常見的對話框,不需要 UI 編輯器。但是,除此之外,這類工具是不可替代的,對于一個高級的桌面應用程序,無視這些工具而手工編寫 UI 并無益處。
JRuby+Swing:Monkeybars
Monkeybars 是一個開源 Ruby 庫,它使用一種模型、視圖、控制器(MVC)設計模式將已有的 Java Swing 類(即定義 Swing UI 的已編譯 Java 類)與 Ruby 代碼連接起來。MVC 的目的在于將視圖邏輯和 UI 組件與應用程序邏輯相分離。
由于使用 Java 語言和 Swing 庫,Monkeybars 建立在成熟、健壯的技術之上。與目前用于 JRuby 的其他 Swing 庫不同,它非常適合于構造大型的、復雜的、多面板的應用程序。您將看到,創建 Monkeybars 應用程序需要承擔一定的開銷,所以對于簡單的窗體來說它可能不是***的選擇。但是,對于有以下需求的 JRuby 桌面應用程序來說,它是一個合理的選擇:
◆可靠的跨平臺部署(確保用戶安裝了***的 JVM)
◆有大量具有任意復雜度的 UI 部件可供選擇
◆復雜的 UI 窗體和面板構造和交互
和 Profligacy 一樣,Monkeybars 不隱藏 Swing API。但是,由于它使用編譯過的 UI 類,因此可以充分利用任何工具或應用程序來生成真正的布局。取決于應用程序的復雜性,幾乎不可避免的是,在編寫 Ruby 代碼的過程中,某些時候需要參考 Swing 組件 API 文檔和代碼示例才能知道怎么做(但是由于 JRuby 與 Java 庫的良好集成,很容易將那樣的 Swing 代碼包裝在一個 Ruby API 中,以便于重用)。使用 Monkeybars 構建的程序可能有不同程度的復雜性,但是可以遵循一些基本的模式來使代碼易于維護。
【編輯推薦】