使用JRuby和Swing进行跨平台开发 - 编程入门网
看到控制器端的情况。在视图中,您需要使用 define_signal 方法定义信号处理程序。它带有 2 个参数,一个是信号名称,另一个是用于处理那个信号的视图方法:
define_signal :name => :initialize, :handler => :do_roll_up 使用JRuby和Swing进行跨平台开发(10)时间:2011-11-29 IBM developerworks James Britt处理程序方法必须带 2 个参数:一个是模型(从控制器传入),另一个是传输对象。传输对象是一个短暂的 hash,用于在控制器与视图之间来回移动数据。视图中有为 UI 的初始位置、幻灯片出现、幻灯片消失定义的信号,还有 2 个分别为开始和结束卡片编辑而定义的信号。每种信号的处理程序都很短。下面是 do_roll_up method: def do_roll_up model, transfer hide move_to_top_right roll_up end 编辑序列是通过菜单事件触发的。Edit 菜单项控制编辑。在视图中,编辑序列意味着设置 card_pane.editable = true,然后用原始的 Textile 卡片文本换出用 HTML 呈现的内容。另外还需要更 改组件的内容类型,以便它正确地呈现纯文本。 当编辑完成时,则执行相反的过程。面板呈现 HTML,而 editable 则被设置为 false。视图只负责管理 Swing 组件的状态;控制器则指示模型执行文本更新和保存。 定义控制器类 嵌套的控制器 Monkeybars 控制器通常是作为单独的类使用的;通常不需要多个实例。但是,有一个例外值得注意,那就是嵌套控制器的使用,在此情况下,一个帧或面板有多个子组件,它们是同一个类的不同实例,这超出了本文的讨论范围。实际上,您可以将一组复杂的帧、面板和组件划分到不同的 MVC 元组中。一个例子就是地址簿,一个顶级 Swing 帧呈现多个地址对象,而每个地址对象又是一个 address_entry MVC 集合的实例。 您的 Swing 对象有一些菜单项,但是不必将任何用于这些菜单项的代码放到视图类中。那些代码属于控制器。控制器处理所有 UI 事件,例如单击按钮、选择菜单以及更改文本字段。Monkeybars 为此作了安排,在默认情况下,来自 Swing 代码的所有事件都被毫无察觉地处理。对于您关心的那些事件,必须定义事件处理程序。在这个示例应用程序中,需要捕捉的事件是单击菜单。 事件处理程序的形式如下: def your_component_name_action_performed # code end (如果想在代码中使用实际的 Swing 事件,也可以在定义处理程序时以实际的 Swing 事件作为参数。) 要处理 Quit 菜单项,只需退出: def quit_menu_item_action_performed java.lang.System.exit(0) end Edit 菜单动作则复杂一点: def edit_menu_item_action_performed if @editing @editing = false signal :end_edit update_card else @editing = true signal :begin_edit update_model view_model, :current_card end end 使用JRuby和Swing进行跨平台开发(11)时间:2011-11-29 IBM developerworks James Britt以上代码通过使用信号驱动视图来处理编辑模式的开关。要注意的关键一点是,卡片文本是如何通过使用 控制器的模型实例(通过信号暗中传递给视图)和 view_model 方法提供的视图的模型副本进行转移的。 每当控制器需要用户界面的当前状态时,它可以使用 view_state 方法来引用视图的模型副本和当前的传 输对象。由于从 view_state 获取模型副本非常常见,所以 Monkeybars 提供了 view_model 方法。 您的控制器还有一个用于实现初始呈现的方法和一个用于显示/隐藏显示序列的方法。这两个方法都使用 信号将实际的显示代码交给视图处理。 编排应用程序 除了一个或多个 MVC 元组外,Monkeybars 应用程序还使用 2 个关键的助手 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |