DevilGoddy 2009-07-20
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 部件可供选择