zoukankan      html  css  js  c++  java
  • Java用户界面 模型视图控制器(MVC)模式

    Swing组件的MVC设计模式

      在解决一个问题时,不需要从头做起,而是参考过去的经验,设计模式是一种方法,以一种结构化的形式展示了前人的经验。

      前面提到过的Java中的AWT事件处理机制采用了“观察者”(Observer)模式

      本文要说的是Swing设计者采用的另一种著名的设计模式:模型-视图-控制器(model-view-controller)模式

    MVC设计模式

      用户界面组件一般有三个要素:

        1.内容,如按钮的状态(是否按下),或者文本域的文本。

        2.外观, 颜色,大小等等。

        3.行为,对输入事件的反应。

      模型-视图-控制器(MVC)模式,不是用一个类完成所有的事情,而是实现三个独立的类:

        模型(model:存储内容。

        视图(view:显示内容。

        控制器(controller:处理用户输入。

      这个模式明确地规定了三个对象如何进行交互。模型存储内容,实现改变内容和查找内容的方法,它没有用户界面,模型是完全不可见的,显示存储在模型中的数据是视图的工作。

      比如文本域的内容是容纳当前文本的字符串对象,与视图显示的内容并不一致——如果内容的长度大于文本域的显示长度,用户只能看到显示出来的那一部分。

      模型-视图-控制器(model-view-controller)模式的一个优点是一个模型可以有多个视图,其中每个视图可以显示全部内容的不同部分或不同方面。当通过某一个视图的控制器对模型进行更新时,模型会把这种改变通知给所有视图,视图得到通知之后就会自动刷新。

      控制器负责处理用户输入事件,例如点击鼠标和敲击键盘,然后决定是否把这些事件转化成对模型或视图的改变。

      

    程序员使用Swing组件

      程序员使用Swing组件通常不需要考虑它们的模型-视图-控制器体系结构。

      每个用户界面元素都有一个包装器类(如JButton或JTextField)来保存模型和视图。

      当需要查询内容时,包装器类会向模型询问并返回结果。当想改变视图时,包装器类会把此请求发给视图。然而有时候也需要直接同模型打交道。

      MVC模式允许实现可插观感。每个按钮或者文本域的模型是独立于观感的。通过把底层模型与用户界面分离开,Swing设计者能够重用模型的代码,甚至在程序运行时对观感进行切换。

    Swing按钮的MVC分析

      对于大多数组件来说,模型类实现了名字结尾为Model的接口。例如,按钮类就实现了ButtonModel接口。

      每个JButton对象存储一个按钮模型对象,可以用下列形式得到它的引用。

        

    JButton button = new JButton("Blue");
    
    ButtonModel model = button.getModel();

      当使用Metal观感时,JButton类用BasicButtonUI类作为其视图,用ButtonUIListener类作为控制器。

      一般来说,每个Swing组件都有一个相关的后缀为UI的视图对象,但并不是所有的Swing组件都有专门的控制器对象。

  • 相关阅读:
    用find和xargs处理文件名中带空格的文件
    python调用Shell
    python 的sys.argv 和 sys.path.append() 用法和PYTHONPATH环境变量
    pytorch中 model.cuda的作用
    Python中变量和对象的关系
    python中的import、from import以及import as的区别
    常用功能bash脚本
    图像数据增强-图像补边
    python中的glob库函数
    喵哈哈村的七十六
  • 原文地址:https://www.cnblogs.com/mengdd/p/2757757.html
Copyright © 2011-2022 走看看