`

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
分享到:
评论

相关推荐

    JHotDraw5.2.zip

    《JHotDraw5.2.zip:Java图形绘制与设计框架详解》 JHotDraw是一款基于Java的开源图形绘制和设计框架,主要用于创建图形用户界面(GUI)和绘图应用程序。这个压缩包“JHotDraw5.2.zip”包含了用于学习和开发的相关...

    JHotDraw源码

    JHotDraw是一款开源的Java图形绘制框架,它为开发者提供了一个强大而灵活的工具集,用于创建可交互的、基于组件的绘图应用程序。这个框架特别适合用来开发流程图、网络拓扑图、UML模型等可视化表示。JHotDraw是基于...

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

    - **图形绘制**:JHotDraw提供了丰富的图形元件库,包括矩形、椭圆、线段等基本形状,支持自由绘制和编辑。 - **交互操作**:用户可以通过鼠标进行图形的选择、移动、旋转、缩放等操作,同时也支持图形的复制、...

    JHotDraw:JHotDraw HTML 编辑器

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

    java开源图元绘制工具JHotDraw

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

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

    Jhotdraw是一款基于Java的开源图形编辑框架,被广泛用于教学和软件开发,尤其是在讲解设计模式和软件工程原则时。它以其强大的绘图功能和可扩展性而受到赞誉,为开发者提供了构建图形用户界面(GUI)的工具。在深入...

    状态图绘制工具

    JHotDraw是一个开源的Java框架,主要用于绘制和编辑矢量图形,如图表、流程图和UML模型。它的设计模式使得开发者能够快速构建图形用户界面,用于创建定制的绘图应用程序。在这里,它被用来作为基础,开发出专门用于...

    Java画图源代码

    JHotDraw提供了一些基本图形类,如矩形、椭圆、线等,并支持图形的拖放、缩放、旋转等操作,对于快速开发复杂的绘图应用非常有帮助。 在实际应用中,我们还需要理解Java的事件处理机制,比如MouseListener和...

    java开发的画图工具源码IDEA工具

    总的来说,JHotDraw是一个绝佳的学习平台,涵盖了Java GUI编程、面向对象设计、图形算法以及版本控制等多个IT领域的知识。通过研究其源码并使用IDEA进行开发,开发者不仅可以掌握Java编程技巧,还能深入了解图形工具...

    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...

Global site tag (gtag.js) - Google Analytics