首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于IOC的GUI框架设计与实现
来源:本站整理  作者:佚名  2011-09-15 05:25:13



      Java Swing是Java Foundation Classes(JFC)的一部分,解决了AWT的很多缺点,相对于AWT,Swing是轻量级组件。Swing提供了许多比AWT更好的屏幕显示元素,使用纯Java写成,与Java一样可以跨平台运行[1]。

  图形用户界面(GUI)借助于多种组件,包括菜单、按钮、文本框、选择框、列表框等,通过相应的事件处理机制,实现与用户的动态交互。
 

  1 图形用户界面的建立

  1.1 创建GUI窗口

  javax.swing.JFrame类是用来建立用户界面的底层窗口容器,能够容纳其他组件的对象,如标签、按钮、文本组件等。JFrame类提供的add()方法把不同的组件添加到容器中,通过容器类的setLayout()方法可以设定容器的布局,安排各种组件在容器中。

  使用JFrame类创建GUI窗口的基本步骤如下:用JFrame类或其子类创建一个对象即窗体;设置窗口的部分属性,如标题、宽度、高度、可见性、图标等;添加内容面板、组件;编写事件处理方法;组件添加事件监听。

  1.2 Java事件处理

  在Java中,程序与用户的交互通过响应各种事件来实现。每当一个事件发生,Java虚拟机就会将事件的消息传递给程序,由程序中的事件处理方法对事件进行处理。Java通过委托型事件处理机制来解决对事件的响应。

  事件处理机制可表述如下[2]:事件源对象封装了事件源、组件状态等必要信息;当事件源对象发生改变时,向它所注册的所有监听器发出通知,各监听器判断事件类型是否为自己管辖范围,若是,则通知给该监听器的执行器,执行器从事件中获取事件信息,并执行相应函数,改变组件的状态。

  1.3 传统创建窗口和事件处理的局限性

  在传统的GUI创建过程中,存在一些局限性。

  (1)组件创建、添加都采用硬编码方式,造成程序的过度耦合。

  (2)如果窗体中有很多组件,组件要添加注册监听,则在代码中看到很多重复注册监听的代码,而这些注册监听的代码都与界面本身设计无关,组件与事件之间的映射关系将会很混乱。

  (3)事件处理方法定义在别的类中,无法得到窗体及其组件的引用,只能得到事件源,而无法改变其他组件的状态;或者把事件处理与窗体设计放在一起,这样程序的可维护性又不好。

  (4)不利于代码重用,基于MVC的思想,应该把事件处理方法分离出来;在需要修改事件处理代码时,就无需修改界面本身的源代码。

  2 图形用户界面设计的改进

  2.1 控制反转(IOC)

  IOC就是控制反转[3](Inversion of Control)的缩写,也称为依赖注入,控制反转IOC是一种用于控制业务对象之间依赖关系的机制,将其设计的类与类之间的关系都交由外部容器进行管理,仅需调用类在容器中注册的名字就可以得到类的实例,有效降低了业务对象之间的依赖程度,实现了业务对象之间的松散耦合。

  IOC的实际意义就是把组件之间的依赖关系(调用关系)反转出来,对象之前的依赖关系用xml配置文件描述;这样,各个组件之间就不存在硬编码的关联,任何组件都可以最大程度地得到重用。

  考虑如下接口和类的定义:

  publIC interface ICar{void operate();}

  public class Toyota implements ICar{…}

  public class Honda implements ICar{…}

  public class Driver{

  private ICar car;

  public void setCar(ICar car){this.car = car;}

  public ICar getCar(){return car;}

  public void drive(){car.operator();}

  }

  类Driver依赖于ICar,而类Toyota和Honda实现了接口ICar,即类Driver可以依赖于Toyota或Honda。

  运用了IOC模式后就不再需要自己管理组件之间的依赖关系,只需要声明由xml配置文件描述去实现这种依赖关系,就好像把对组件之间的依赖关系的控制进行了倒置,不再由组件自己来建立这种依赖关系而是交给xml配置文件去管理。

[1] [2] [3] [4]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:160,019.50000 毫秒