快速业务通道

通过Java Swing看透MVC设计模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
常并不会直接和model以及view/controller打交道,他们通常隐藏于那些继承自java.awt.Component的组件里面了,这些组件就像胶水一样把MVC三者合三为一。也正是由于这些继承的组件对象,一个程序员可以很方便的混合使用Swing组件和AWT组件,然后,我们知道,Swing组件有很多都是直接继承自相应的AWT组件,它能提供比AWT组件更加方便易用的功能,所以通常情况下,我们没有必要混合使用两者。

一个实例

现在我们已经明白了Java类与MVC各个部分的对应关系,我们可以更加深入一点去分析问题了。下面我们将要讲述一个小型的使用MVC模式开发的例子。因为JFC十分的复杂,我只能把我的例子局限于一个用户界面组件里面(如果你猜是一个按钮的例子,那么你对了!)

通过Java Swing看透MVC设计模式(3)

时间:2010-12-12

让我们来看看这个例子的所有部分吧。

Button类

最显而易见的开始的地方就是代表了按钮组件本省的代码,因为这个类是大部分程序员会接触的。

就像我前面提到的,按钮用户界面组件类实际上就是model和view/controller的之间的黏合剂。每个按钮组件都和一个model以及一个controller关联,model定义了按钮的行为,而view/controller定义了按钮的表现。而应用程序可以在任何事件改变这些关联。让我们看看得以实现此功能的代码。

public void setModel(ButtonModel buttonmodel) {   if (this.buttonmodel != null)   {    this.buttonmodel.removeChangeListener(buttonchangelistener);    this.buttonmodel.removeActionListener(buttonactionlistener);    buttonchangelistener = null;    buttonactionlistener = null;   }   this.buttonmodel = buttonmodel;   if (this.buttonmodel != null)   {    buttonchangelistener = new ButtonChangeListener();    buttonactionlistener = new ButtonActionListener();    this.buttonmodel.addChangeListener(buttonchangelistener);    this.buttonmodel.addActionListener(buttonactionlistener);   }   updateButton(); } public void setUI(ButtonUI buttonui) {   if (this.buttonui != null)   {    this.buttonui.uninstallUI(this);   }   this.buttonui = buttonui;   if (this.buttonui != null)   {    this.buttonui.installUI(this);   }   updateButton(); } public void updateButton() {   invalidate(); }

在进入下一节之前,你应该多花一些时间来仔细阅读一下Button类的源代码。

ButtonModel类

ButtonModel维护着三种类型的状态信息:是否被按下(pressed),是否“武装上了”(armed),是否被选择(selected)。它们都是boolean类型的值。

一个按钮被按下(pressed)是指当鼠标在按钮上面的时候,按下鼠标但是还没有松开鼠标按钮的状态,及时用户此时把鼠标拖拽到按钮的外面也没有改变这种状态。

一个按钮是否“武装了”(armed)是指按钮被按下,并且鼠标还在按钮的上面。

一些按钮还可能被选择(selected),这种状态通过重复的点击按钮取得true或者false的值。

下面的代码是状态pressed的一个缺省的实现。状态armed以及selected实现的代码与之类似。ButtonModel类应该被继承,这样可以覆盖缺省的状态定义,实现有个性的按钮。

private boolean boolPressed = false; public boolean isPressed() {   return boolPressed; } public void setPressed(boolean boolPressed) {   this.boolPressed = boolPressed;   fireChangeEvent(new ChangeEvent(button)); }

通过Java Swing看透MVC设计模式(4)

时间:2010-12-12

按钮的模型button model还负责通知其他对

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号