`

JHotDraw之旅: 3.3 面向文档基本框架

阅读更多


 

通过前文, 我们大概了解了JHotDraw的MVC架构.简单的, 试想如果要实现一个日记程序(Daily), 应该有如下步骤:

1. 定义模型(model): DialyModel. 该模型封装了程序的名称(daily), 版本(1.0), 版权(你);

2. 定义视图(view):DailyView. 该视图可以是一个JPanel, 里面包括一个填写日记内容的JTextPane, 两个用于保存和打开的按钮(仅仅是按钮, 并没有按钮按下的动作);

3. 定义控制类(controller): 定义用于保存和打开日记的控制方法.

4. 将视图添加到模型: 通过model.setView/ViewClass方法将DailyView添加到DialyModel.

5. 将模型添加到应用程序:创建一个DailyApplication, 并通过setModel方法添加模型;

6. 启动程序: 调用DialyApplication.launch 方法.

 

 

下面补充JHotDraw框架(framework)主要接口的框架契约(contract of a framework).

 

设计模式:Framework(框架)

以下的接口和org.jhotdraw.app.action 包里所有类定义了面向文档应用程序的契约: ApplicationModel(org.jhotdraw.app), View(org.jhotdraw.app).

 

1. 接口 Application (org.jhotdraw.app) 应用程序

JavaDoc:  

    Application 用于控制View类的生命周期并提供一个窗口来显示View类.

    一个application拥有一个ApplicationModel, ApplicationModel封装了关于application的信息(名称,版本,版权)以及创建View的模板方法.

    application实现了基于文档界面的风格(document interface style),  一个application可以同时处理一个或者多个文档.

    典型的文档界面有单文档界面(SDI, Single Document Interface), 多文档界面(MDI, Multiple Document Interface)和Mac系统界面(OSX, Mac OS X Application Interface). 针对这些文档风格, JHotDraw已经提供了每种文档的默认实现.

    一些应用程序需要对所有打开的窗口和对话窗进行特别的设置, 这就需要在打开JFrame, JDialog或JWindow时调用application的addWindow/Palette 或removeWindow/Palette方法.(仅7.4之后的版本)

   

 该类的使用方法:

  public class MyMainClass {
     public static void main(String[] args) {
         Application app = new SDIApplication(); // or OSXApplication(), MDIApplication().
         DefaultApplicationModel model = new DefaultApplicationModel();
         model.setName("MyApplication");
         model.setVersion("1.0");
         model.setCopyright("Copyright 2006 (c) Werner Randelshofer. All Rights Reserved.");
         model.setViewClassName("org.jhotdraw.myapplication.MyView");
         app.setModel(model);
         app.launch(args);
     }

 

2. 接口 ApplicationModel (org.jhotdraw.app) 应用程序模型

ApplicationModel提供Application的元数据(名称,版本,版权), Application的控制器, 创建视图,工具栏及URIChooser的工厂方法.

 

3. 接口 View(org.jhotdraw.app) 视图

  View通过JComponent来显示应用程序的文档.

  文档以URI格式定位(一个文档的URI应为 file://home/readme.txt). 如果在多视图界面中打开同一个文档, 则应用程序将为每个文档设置"多重打开标志"来区分这些视图.

  view(视图)的生命周期由application控制, 一个view的生命周期为:

    1.创建(Creation): 应用程序通过调用view类的newInstance()方法将view实例化;

    2.初始化(Initialisation): 应用程序调用view类的以下方法: setActioinMap(), setApplicatiin(), init().然后通过工作者线程(worker thread)调用clear()或者read()方法;

    3. 开始(Start):应用程序将view添加到一个容器(如JFrame)中, 并调用view类的start方法.

    4. 激活(Activation): 当view在应用程序中被激活时, 应用程序调用其activate()方法.

    5. 钝化(Deactivation):当view不处在被激活状态(如其它view被激活), 在应用程序调用其deactivate(0方法. 钝化的view可以再次被激活;

    6. 停止(Stop):应用程序调用view的stop()方法来停止view, 并将其从应用程序容器中删除. 停止后的view可以通过开始(Start)再次显示.

    7. 销毁(Dispose):当一个view不再需要时, 应用程序调用其dispose()方法来销毁一个view. dispose()方法通过setApplication(null)并删除所有对它的引用而进入垃圾回收机制.

 

 

4. 包 org.jhotdraw.app.actions 控制器

  提供"面向文档的应用程序"的抽象动作(abstract actions)及其默认实现的动作. 按照框架契约, 应用程序层次的所有动作都必须继承自org.jhotdraw.app.actions.AbstractApplicationAction类.  该类定义了诸如此类的属性:当应用程序处在disable状态时, 所有继承自AbstractApplicationAction的动作(控制器)的状态也都为disable. 基于swing的特性, 所有继承自AbstractApplicationAction的动作(控制器)既可以作为一个菜单项(menu item),也可以作为工具栏按钮. 当然, 这些动作也可以仅添加在指定的视图上.

  org.jhotdraw.app.actions还定义了应用程序的一些基本动作(控制器)的默认实现类,如"关于","退出","复制","剪切"等.

 

未完待续....

 

 

5
0
分享到:
评论

相关推荐

    JHotDraw:JHotDraw HTML 编辑器

    #JHotDraw HTML 编辑器 第 39 组 - CSE 2102 组项目 该软件允许用户以 WYSIWYG(所见即所得)格式创建 HTML。 用户只需具备一定的 HTML 知识即可保存、导出、加载和修改文件。 用户将找到用于添加图像、视频和链接的...

    java开源图元绘制工具JHotDraw

    2004年下载的JHotDraw开源程序,一个学习设计模式、面向对象设计和开发、java的非常经典的例子。

    JHotDraw让你成为程序设计的毕加索

    NULL 博文链接:https://c-zhiwu.iteye.com/blog/846908

    JHotDraw源码

    适用于画流程图的类,继承自swing。被广泛使用。

    【转】开源项目JHotDraw分析报告

    NULL 博文链接:https://c-zhiwu.iteye.com/blog/908892

    JHotDraw5.2.zip

    java软件,希有助于java学习者

    jhotdraw.rar_软件设计/软件工程_Java_

    自己收集整理的Jhotdraw相关资料,对于了解和学习jhotdraw的同学会有所帮助。Jhotdraw是著名的设计模式教学用框架,软件设计的经典之作。

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包7

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包9

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

    java实现小型函数画图板(含源代码、报告、打包的jar文件)

    java课程设计的一个题目。本程序可以画各种函数曲线,功能有: 1.新建、打开、保存画图 2.多种方式输入函数作图 3.可设置画笔颜色、大小 4.可以放大、缩小 5.可以移动坐标和图像 6.实时显示鼠标经过的坐标 ...

    java开源包101

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,...使用了优秀的JHotDraw 5.2 框架。 activemq...

Global site tag (gtag.js) - Google Analytics