ITPub博客

首页 > IT职业 > IT生活 > JRuby GUI API三剑客

JRuby GUI API三剑客

原创 IT生活 作者:heying1229 时间:2007-09-25 09:59:53 0 删除 编辑
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的构建代码隐藏得一干二净。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10172717/viewspace-972039/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    1691
  • 访问量
    9211391