`

MVC框架

    博客分类:
  • java
阅读更多
        与VCL、AWT等框架中的图形界面框架不同,Swing创造性的采用了MVC(Model View Controller) 模式。MVC 把控件(Component)划分成三个部分:模型( Model):管理这个模块中所用到的数据和值,如某个数据的最大值、最小值、当前值等数据;视图( View):管理如何将模型显示给用户;控制器(Controller) 决定如何处理用户和该模块交互时产生的事件,如用户单击一个按钮等。Sun 出于对视图和控制器之间的依赖关系的考虑, 在 Swing 设计中将 MVC体系简化为分离模型体系 ( Separable Model Architecture) , 将其中的控制器和视图结合成 UI 代理。

界面中的每个控件都包含三种特征:
它的状态:比如一个按钮的状态
它的外观:颜色、尺寸等
它的行为:对事件作出的反应

          以一个按钮为例,它有可用、不可用状态,在不同的LookAndFeel中有不同的外观显示,在鼠标按下、鼠标右击等事件中有自己独特的响应方式。如果管理按钮状态、绘制按钮外观,响应时间等任务都由按钮负责的话就违背了面向对象设计中的“单一责任原则”。Swing开发人员采用MVC模式解决了此问题,将控件的LookAndFeel同一个对象关联到一起,同时将其内容保存到另一个对象中。控制器负责控制用户输入事件。比如鼠标单击、按键操作等,它会决定将这些事件转换成模型中的改变.还是视图中的改变。例如,假定用户在文本框中按下某个键,控制器就会调用模型的“插入字符”命令。随后,模型会通知视图更新来显示新的模型。视图不用关心什么时候进行文字改变,只要模型通知它更新它就会更新。这样控制器只用与用户交互并把交互结果反映到模型中去;模型负责维护状态,当状态变化时通知视图更新显示;视图不负责用户交互的状态维护,它只是根据模型中的状态绘制不同的界面。
Swing中的大多数控件的模型是由一个名字以Model结尾的接口实现的。比如按钮对应的模型接口就是 ButtonModel,JDK中定义了ButtonModel的默认实现类DefaultButtonModel。下面是ButtonModel各个方法的说明:
boolean isArmed():如果按钮被按下,且鼠标指针仍停留在按钮上则返回true
boolean isSelected():如果按钮处于选择状态则返回true
boolean isEnabled():如果按钮可用则返回true
boolean isPressed():如果按钮被按下,但鼠标没有松开,则返回true
boolean isRollover():如果鼠标指针在按钮之上则返回true
public int getMnemonic():返回按钮的助记键
public String getActionCommand():返回命令字符串
此外还有对应的设置状态方法:public void setArmed(boolean b)、public void setSelected(boolean b)、public void setEnabled(boolean b)、public void setPressed(boolean b)、public void setRollover(boolean b)、public void setMnemonic(int key)、public void setActionCommand(String s)等。
每一个JButton都保存着一个ButtonModel对象,我们可以通过JButton的getModel方法来取得该模型对象:
JButton btn = new JButton(“test”);
ButtonModel btnModel = btn.getModel();
通过这个模型对象我们就可以得到按钮的是否可用等状态,不过这个模型是给控件开发者使用的,对于普通使用者来说无需直接调用它,JButton提供了方法来间接的取得这些属性,这一点可以从AbstractButton类的isSelected方法中看出来:
public boolean isSelected()
{
return model.isSelected();
}
Swing中大部分控件都由自己的模型,比如JList控件的ListModel、JTable的TableModel、JSpinner的SpinnerModel、JComboBox的SpinnerModel(SpinnerModel是从ListModel派生出来的),这些模型也由默认的实现,名称通常为模型名前加Default。
Swing中的大多数控件的视图是由一个名字以UI结尾的类实现的,比如按钮对应的模型接口就是 ButtonUI。由于视图在不同的LookAndFeel中有不同的展现形式,所以控件的视图对每一种LookAndFeel都提供了不同的实现。以JLabel为例,它就有MetalLabelUI、MotifLabelUI、WindowsLabelUI等对应不同LookAndFeel的实现。所有的视图都要直接或者间接的从ComponentUI抽象类派生,ComponentUI类中的方法都是供Model回调使用的,下面是ComponentUI主要方法的说明:
public void installUI(JComponent c):这个方法在ComponentUI 实例被安装到UI代理的时候被触发,用来根据LookAndFeel配置控件。它需要完成如下工作:为Color、Font、Border、Icon等类型的属性设定默认值;根据需要设置布局管理器;创建子控件;初始化监听器;为控件设置PropertyChangeListener 监听器以检测控件属性变化事件;初始化快捷键、Tab键顺序等;初始化数据;
public void uninstallUI(JComponent c):这个方法在ComponentUI 实例被从UI代理移除的时候触发。需要在此方法中撤销任何在installUI中进行的配置,要保证JComponent实例变为洁净状态(也就是没有监听器,没有LookAndFeel专有属性等)。它需要完成如下工作:从控件中移除border;从控件中移除布局管理器;从控件中移除子控件;从控件中移除事件、属性监听器、从控件中移除快捷键、Tab键顺序等;将数据标记为可以垃圾回收。
public void paint(Graphics g, JComponent c):为本视图的LookAndFeel绘制控件。
public void update(Graphics g, JComponent c):通知UI代理绘制指定控件。当特定的控件被绘制的时候此方法会被触发。这个方法的默认实现是用背景色填充控件,并且立即调用paint方法。
public Dimension getPreferredSize(JComponent c):返回当前LookAndFeel下控件的最佳尺寸。默认实现是返回null;
public Dimension getMinimumSize(JComponent c):返回当前LookAndFeel下控件的最小尺寸。默认实现是返回getPreferredSize的值;
public Dimension getMaximumSize(JComponent c):返回当前LookAndFeel下控件的最大尺寸。默认实现是返回getPreferredSize的值;
public boolean contains(JComponent c, int x, int y):判断指定的x、y坐标是否存在于当前LookAndFeel下的控件中。
public static ComponentUI createUI(JComponent c):为指定的控件返回UI代理实例。如果UI代理子类是无状态的,它也可以返回多控件共享的实例。如果UI代理子类是有状态的,则它必须为某个控件返回一个新的实例。
public int getAccessibleChildrenCount(JComponent c):返回所有可访问子控件的数量。
public Accessible getAccessibleChild(JComponent c, int i):返回指定的子控件

分享到:
评论

相关推荐

    ASP.NET MVC框架开发系列课程(1):MVC模式与ASP.NET MVC框架概述

    ASP.NET MVC框架是微软开发的一款用于构建Web应用程序的开源、轻量级且高度模块化的框架。这个框架结合了Model-View-Controller(MVC)设计模式的灵活性和ASP.NET的强大功能,为开发者提供了构建可测试、高性能的Web...

    简单的MVC框架例子

    **简单的MVC框架例子** 在Web开发中,MVC(Model-View-Controller)模式是一种广泛应用的设计模式,它将应用程序的结构分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这个简单的MVC框架...

    C++实现简单的MVC框架

    本项目是用C++实现的一个简单的MVC框架,名为MVCDemo,旨在帮助开发者理解MVC设计模式的基础概念。 首先,我们来详细解释MVC的三个组成部分: 1. Model(模型):模型层是应用的核心,它负责管理数据和业务逻辑。...

    PHP mvc框架

    Todo应用通常是一个基础的待办事项列表,用于展示基本的CRUD(创建、读取、更新、删除)操作,这有助于理解MVC框架的核心概念。 在PHP MVC框架中: 1. **Model** 负责处理数据和业务逻辑。对于Todo应用,Model可能...

    MVC框架工程Myeclipse做的

    **MVC框架详解** 在软件开发领域,MVC(Model-View-Controller)框架是一种广泛应用于Web应用设计的架构模式。MVC将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以此实现业务...

    spring MVC框架搭建

    Spring MVC 框架搭建与 Hibernate 整合实例 Spring MVC 框架搭建是 Java Web 开发中的一种常见架构模式,它基于 Model-View-Controller(MVC)模式,使用注解方式来处理请求和响应。下面将详细介绍 Spring MVC 框架...

    (源码)基于Asp.netMVC框架的简易选课系统.zip

    # 基于Asp.net MVC框架的简易选课系统 ## 项目简介 简易选课系统是一个基于Asp.net MVC框架开发的在线选课平台,使用Oracle数据库进行数据存储。该系统旨在为学生和教师提供一个便捷的选课和课程管理平台,支持...

    ET-MVC框架

    ET-MVC框架是一款基于MVC(Model-View-Controller)设计模式的轻量级开发框架,专为简化中小型项目的开发流程而设计。该框架遵循“约定优于配置”的原则,这意味着在开发过程中,开发者无需进行过多的配置,只需按照...

    C# MVC框架实例

    C# MVC框架是一种广泛应用于构建Web应用程序的开发模式,它基于模型(Model)、视图(View)和控制器(Controller)的架构,为开发者提供了清晰的分离关注点的方式,从而提高代码的可读性和可维护性。这个“C# MVC...

    MVC框架源代码(自己系=写的)

    **MVC框架源代码解析** 在软件开发领域,MVC(Model-View-Controller)框架是一种广泛应用的设计模式,尤其在Web应用中。该模式将应用程序的业务逻辑、用户界面和控制逻辑分离,使得代码更易于维护和扩展。在这个...

    MVC框架MVC框架

    MVC框架

    .netmvc框架

    在.NET MVC框架中,模型(Model)负责处理业务逻辑和数据管理,它是应用程序的核心部分。视图(View)则主要负责展示数据,它通常与控制器(Controller)交互,接收控制器传递的数据并渲染成用户界面。控制器负责...

    微软MVC框架教程 案例

    在MVC框架中,模型通常与数据库或其他数据源交互,获取或更新数据。模型对象存储和操作应用程序的数据,并在数据发生变化时通知视图进行更新。 **视图(View)** 视图是用户看到和与之交互的界面部分。它根据模型...

    微信开发php+mvc框架

    微信开发php+mvc框架

    mvc框架例子该例子主要讲述了怎样创建mvc框架以及怎样用mvc操作数据库该希望对初学mvc的人有所帮助欢迎大家下载分享

    本例子将详细解析如何创建一个MVC框架,并展示如何通过该框架与数据库进行交互。** **一、MVC框架的基本概念** 1. **Model(模型)**: 模型层是应用程序的核心,负责处理业务逻辑和数据管理。它与数据库或其他数据...

    Java mvc 框架例子

    这个Java MVC框架的例子为我们提供了一个直观的学习平台,帮助初学者理解MVC的运作机制。 **一、MVC模式介绍** Model-View-Controller(模型-视图-控制器)是一种分层架构,用于分离业务逻辑、数据处理和用户界面。...

    简约版本 MVC 框架模型

    简约版本的MVC框架模型则是为了简化理解这一概念而创建的,适合初学者用来学习MVC的工作原理,并可作为小型项目的基础。 **模型(Model)** 模型层是MVC的核心,负责处理业务逻辑和数据操作。在PHP中,模型通常包含...

    .net MVC框架的DEMO

    在本DEMO中,"OrderingMS"很可能是一个关于在线订餐或订单管理系统的示例应用,旨在帮助初学者理解MVC框架的工作原理和实际应用。 1. **MVC模式概述**: MVC模式是软件设计中的一种架构模式,由模型(Model)、...

    自定义的MVC框架

    自定义的MVC框架是一种基于Java技术实现的轻量级应用程序开发框架,它遵循Model-View-Controller(模型-视图-控制器)设计模式。在软件工程中,MVC模式被广泛应用于创建用户界面,因为它将业务逻辑、数据处理和用户...

Global site tag (gtag.js) - Google Analytics