JRuby GUI API三劍客
JRuby GUI API三劍客[@more@]來自:infoq中文站
Swing早在1998年被加入JRE 1.2版,因為人們已經發現它的前身AWT在面臨重要的應用已經力不從心了。Swing廣受詬病的問題之一(僅次於效能和外觀問題)就是,哪怕構建一些小型應用都需要帶來大量的編碼工作。因此,又有了一系列基於XML的GUI定義語言應運而生。
現在,JRuby的橫空出世又引發了一次全新的浪潮,湧現出許多使用(J)Ruby語言特性的類庫,試圖讓Swing應用的開發變得不那麼單調乏味。有了Block,我們就可以從編寫冗餘的Listener樣板程式碼(Boilerplate Code)中解放出來,而Builder的概念則可以用於在Ruby程式碼中建立複雜的巢狀GUI。
最近剛問世的API叫做Profligacy,發起人是Zed Shaw。這套API的關注點在於讓事件處理變得更加輕而易舉,並免去AWT/Swing Listener所需要的所有樣板程式碼。在另一方面,對元件的建立和裝配也和普通JRuby程式碼的形式大同小異,比如說使用new來建立新的Swing小部件。下面讓我們來看看Profligacy的範例程式碼到底是什麼樣子的:
@ui = Swing::Build.new JFrame, :texts, :label do |c,i|
c.texts = [JTextField.new(10), JTextField.new(10)]
c.texts.each_with_index { |t, n|
t.action_command = "text#{n}" } c.label = JLabel.new "Something will show up here."
i.texts = {:action => method(:text_action) }
end
@ui.layout = FlowLayout.new
@ui.build("Two Text Fields Demo").default_close_operation = JFrame::EXIT_ON_CLOSE
def text_action(type, event)
puts "EVENT: #{type} #{event.action_command}"
end
請點選上面的連結檢視更多的示例程式碼。
由Bill Dortch建立的Cheri::Swing則是Cheri專案的一部分,該專案是一套建立Builder應用的框架。Builder可以讓開發人員使用非常少量的Ruby程式碼建立出層次型的結構。
menu_bar {
menu('File') {
mnemonic :VK_F
menu_item('Exit') {
mnemonic :VK_X
on_click { @frame.dispose } } } } 這段示例程式碼則向我們展示瞭如何使用Ruby的method_missing和Block來使得我們可以使用非常精煉的程式碼,建立出一個選單欄,上面包含了擁有一個選單項的選單。這些方法的呼叫使用的全是Block(包含在花括號內的程式碼)來執行的。同時還把超程式設計(Metaprogramming)和method_missing組合起來,用於判斷到底是該建立一個新的物件,還是在剛剛建立的物件上執行如mnemonic這樣的方法。正如我們看見的 on_click呼叫一樣,Cheri::Swing也可以讓我們輕而易舉地處理事件。on_click也使用了一個Block,它在MenuItem被單擊的時候會被執行,這樣也就把所有冗餘無味的Listener或者Action的構建程式碼隱藏得一乾二淨。
Swing早在1998年被加入JRE 1.2版,因為人們已經發現它的前身AWT在面臨重要的應用已經力不從心了。Swing廣受詬病的問題之一(僅次於效能和外觀問題)就是,哪怕構建一些小型應用都需要帶來大量的編碼工作。因此,又有了一系列基於XML的GUI定義語言應運而生。
現在,JRuby的橫空出世又引發了一次全新的浪潮,湧現出許多使用(J)Ruby語言特性的類庫,試圖讓Swing應用的開發變得不那麼單調乏味。有了Block,我們就可以從編寫冗餘的Listener樣板程式碼(Boilerplate Code)中解放出來,而Builder的概念則可以用於在Ruby程式碼中建立複雜的巢狀GUI。
最近剛問世的API叫做Profligacy,發起人是Zed Shaw。這套API的關注點在於讓事件處理變得更加輕而易舉,並免去AWT/Swing Listener所需要的所有樣板程式碼。在另一方面,對元件的建立和裝配也和普通JRuby程式碼的形式大同小異,比如說使用new來建立新的Swing小部件。下面讓我們來看看Profligacy的範例程式碼到底是什麼樣子的:
@ui = Swing::Build.new JFrame, :texts, :label do |c,i|
c.texts = [JTextField.new(10), JTextField.new(10)]
c.texts.each_with_index { |t, n|
t.action_command = "text#{n}" } c.label = JLabel.new "Something will show up here."
i.texts = {:action => method(:text_action) }
end
@ui.layout = FlowLayout.new
@ui.build("Two Text Fields Demo").default_close_operation = JFrame::EXIT_ON_CLOSE
def text_action(type, event)
puts "EVENT: #{type} #{event.action_command}"
end
請點選上面的連結檢視更多的示例程式碼。
由Bill Dortch建立的Cheri::Swing則是Cheri專案的一部分,該專案是一套建立Builder應用的框架。Builder可以讓開發人員使用非常少量的Ruby程式碼建立出層次型的結構。
menu_bar {
menu('File') {
mnemonic :VK_F
menu_item('Exit') {
mnemonic :VK_X
on_click { @frame.dispose } } } } 這段示例程式碼則向我們展示瞭如何使用Ruby的method_missing和Block來使得我們可以使用非常精煉的程式碼,建立出一個選單欄,上面包含了擁有一個選單項的選單。這些方法的呼叫使用的全是Block(包含在花括號內的程式碼)來執行的。同時還把超程式設計(Metaprogramming)和method_missing組合起來,用於判斷到底是該建立一個新的物件,還是在剛剛建立的物件上執行如mnemonic這樣的方法。正如我們看見的 on_click呼叫一樣,Cheri::Swing也可以讓我們輕而易舉地處理事件。on_click也使用了一個Block,它在MenuItem被單擊的時候會被執行,這樣也就把所有冗餘無味的Listener或者Action的構建程式碼隱藏得一乾二淨。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-972039/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript字串“三劍客”JavaScript字串
- 三劍客詳解
- 前端三劍客之HTML前端HTML
- 四劍客第三關
- Linux文字三劍客Linux
- Linux 三劍客之sedLinux
- CSS陰影效果三劍客CSS
- Linux三劍客之sedLinux
- 三劍客詳解之find
- Linux文字三劍客總結Linux
- 三劍客 Handler、Looper 和 MessageQueueOOP
- Linux三大劍客之awkLinux
- Linux (三劍客之三) awk命令詳解Linux
- 玩轉Git三劍客-蘇玲-極客時間Git
- JS動畫三劍客——setTimeout、setInterval、requestAnimationFrameJS動畫requestAnimationFrame
- MySQL 核心三劍客 —— 索引、鎖、事務MySql索引
- Android佈局優化三劍客Android優化
- Linux三劍客之awk詳解Linux
- Linux三劍客之grep詳解Linux
- 資料分析三劍客之一numpy
- Linux三劍客grep、awk和sedLinux
- Docker(五):Docker 三劍客之 Docker MachineDockerMac
- Docker(六):Docker 三劍客之 Docker SwarmDockerSwarm
- Docker及三劍客(Compose、Machine、Swarm)DockerMacSwarm
- 使用linux三劍客取ip地址Linux
- 併發三劍客之限流方案總結
- 006 Linux 命令三劍客之-grepLinux
- 敏捷績效管理三劍客:OKR 、KPI、CFR敏捷OKRKPI
- Linux 三劍客之 grep 使用詳解Linux
- 轉:Android佈局優化三劍客Android優化
- linux三劍客(grep、sed、awk)基本使用Linux
- 007 Linux 命令三劍客之-awkLinux
- Linux三劍客之awk入門指引Linux
- Docker(四):Docker 三劍客之 Docker ComposeDocker
- Linux系統命令三劍客之 awkLinux
- 容器技術|Docker三劍客之docker-swarmDockerSwarm
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux