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 构建的程序可能有不同程度的复杂性,但是可以遵循一些基本的模式来使代码易于维护。
【编辑推荐】