Ruby 不僅限於 Web 開發,透過 JRuby 運行於 JVM 之上,即可呼叫 Java Swing 建立跨平台 GUI 應用程式。本文介紹開源庫 Monkeybars,它採用 MVC 架構,將編譯後的 Swing UI 類別與 Ruby 程式碼分離,適合開發複雜、多視窗的桌面應用程式。
每個 Swing 視窗/面板對應三個 Ruby 檔案:
FlashFrame.java),負責資料綁定、元件狀態管理、回應 Controller 訊號。$ gem install monkeybars rawr $ monkeybars monkey_see $ cd monkey_see $ rawr install $ rake generate ALL=src/flash
產生 flash_model.rb、flash_view.rb、flash_controller.rb 三個檔案,並建立對應的 Swing 類別 src/flash/FlashFrame.java。
從文字檔讀取卡片(採 Textile 格式),使用 RedCloth 轉 HTML。關鍵方法:load_cards、select_card、update_current_card、save。
使用 map 方法將 Model 屬性對應至 Swing 元件,支援雙向綁定與轉換器:
map :view => :content_pane.text,
:model => :current_card,
:using => [:to_html, nil]
定義訊號處理器回應 Controller 指令(如 :initialize、:begin_edit、:roll_up),實現滑入滑出動畫。
依慣例命名事件處理器 元件名_action_performed,透過 signal :訊號名 驅動 View,使用 view_model 取得 View 端的 Model 複本進行資料同步。
$ rake rawr:jar $ java -jar package/deploy/monkey_see.jar
rawr 會產生 Main.java、編譯類別、複製相依 JAR 至 package/deploy/,部署時整個目錄需一併發布。
Monkeybars 結合 JRuby 的動態語法與 Swing 的成熟元件,讓 Ruby 開發者能以 MVC 模式建構可測試、可維護的大型桌面應用程式,是跨平台 GUI 開發的有力選擇。