快速业务通道

使用JRuby和Swing进行跨平台开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
用了一个类方法 set_java_class。这应该被设置成为这个视图定义的 Swing 类。在您的代码中,这是 flash.FlashFrame。

通常,一个 Monkeybars 视图类需要做 3 件事:

将数据传入和传出 Swing 组件

管理各种以视图为中心的行为(例如大小和位置)

对控制器发出的信号做出响应

映射数据

Monkeybars 提供了一个 map 方法,通过该方法可以定义如何将模型方法连接到 Swing 控件。最简单的用法是连接一个 UI 组件方法和一个模型方法:

map :view => :card_pane.text, :model => :current_card

该映射使用默认行为,即使之成为一个直接的、双向的关联。也就是说,card_pane 组件的 text 方法的结果被传递到模型的 current_card= 方法。当根据模型更新视图时,这个过程又反过来了:

model.current_card 填充 card_pane.text.(注意:JRuby 处理 Ruby/Java 命名转换,所以实际的 Swing 方法 setText 可以使用 set_text = 来调用。)

使用JRuby和Swing进行跨平台开发(9)

时间:2011-11-29 IBM developerworks James Britt

这种简单的映射常常很好用,但是在某些时候,由于数据类型、格式或某个应用程序逻辑的不同,您不希望直接进行数据交换。Monkeybars 允许在数据交换中使用中介。可以为映射传递一个 :using 参数(即指向一个数组的一个 hash 键),该参数表明当将数据从模型转移到视图和从视图转移到模型时所使用的替代方式(使用 :using 的另一个原因是处理这样的情况,即需要用不符合常规的 getProperty 和 setProperty 模式的组件方法或子对象来操纵 Swing 组件的值或状态)。

对于您的代码,需要从模型中获取一个 Textile 格式的字符串,并在将它赋给 card_pane text 属性之前将它转换成 HTML。为此,您将创建 to_html 方法。另外,您不想直接从视图中更新模型的 current_card 值。在视图中,您将有专门的代码用于编辑卡片,所以在本应使用 view-to-model 之类的方法名的地方,您将使用 nil。

结果就是这样的映射:

map :view  => :content_pane.text,     :model => :current_card, :using => [:to_html, nil ]

您还希望 Swing 帧以特定的方式显示。默认情况下,Swing 帧出现在屏幕的左上角。对于您的应用程序,您希望它显示在屏幕的右上角。您还将给它一个幻灯片效果,使它不至于突然地出现和消失。

管理 Swing 对象

视图类有一个专用的实例变量 @main_view_component,它引用相应的 Swing 类。视图代码通过这个对象与 Swing 组件交互。例如,为了更改 flash-card 文本面板的内容,可以编写:

@main_view_component.card_pane.text = "Some new text"

但是,这种代码实际上正是需要视图类存在的理由,所以 Monkeybars 让您不必显式地使用 @main_view_component,而是直接引用它的组件:

card_pane.text = "Some new text"

基本 Monkeybars::View 类使用 method_missing 来拦截那样的代码,看它是不是一个组件引用,如果是,则将请求委托给 @main_view_component。

方法是在 Swing 类上调用的,不过需要显式的引用:

@main_view_component.width = 500

为了取得精美的幻灯片效果,视图类有一些用于操纵 Swing 帧的高度和位置的方法,以便图形化地对它进行缩放,使得在每个呈现周期中,它从屏幕的顶端滑下,然后又缩回。

处理来自控制器的请求

Monkeybars 被设计用来解耦 MVC 元组的关键部分。由于视图有对 Java Swing 对象的直接引用,因此它通常是最难以测试的部分。Monkeybars 的目的是减少视图与模型和控制器的直接交互。但是,控制器负责处理 UI 事件。不可避免的是,这意味着控制器需要指导视图做出响应。但是,控制器并不直接与视图类通信。相反,它使用信号。

稍后您将

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号