科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道再战MVC(-)

再战MVC(-)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

之所以说是再战,是因为在没有学习设计模式之前已经基于MVC体系结构做过一些项目,主要是小项目,当初理解MVC有一些困难。现在已经把Gof所说的相对简单但是最常见的这些设计模式。

作者:gaolin_bei 来源:CSDN 2008年2月27日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共7页)

  上面的代码setArmed等方法是由DefaultButtonModel定义的,它是ButtonModel接口的一个默认实现。我们如果继承了DefaultButtonModel,这样可以覆盖缺省的状态定义,实现有个性的按钮。

ButtonUI类按钮的view/controller是负责构建表示层的。缺省情况下它仅仅是用背景色画一个矩形而已,他们的子类继承了他们并且覆盖了绘制的方法,使得按钮可以有许多不同的表现,例如MOTIF,Windows 95,Java样式等等。

  注:在
javax.swing.plaf这个包里我们可以找到ButtonUI,这是一个抽象类,类内部是空的,而在javax.swing.plaf.basic这个包里我们可以找到BasicButtonUI,它继承自ButtonUI,其实我们观察下包结构会发现有javax.swing.plaf.metaljavax.swing.plaf.multi等,这几个就是来控制Button在不同系统间的不同的显示效果。

public void update(Button button, Graphics graphics)
{
}
public void paint(Button button, Graphics graphics)
{
 Dimension dimension = button.getSize();
 Color color = button.getBackground();
 graphics.setColor(color);
 graphics.fillRect(0, 0, dimension.width, dimension.height);
}

ButtonUI类并不自己处理AWT事件,他们会使用一个定制的事件监听器把低级的AWT事件翻译为高级的Button模型期望的语义事件。下面就是安装/卸载事件监听器的代码。

private static ButtonUIListener buttonuilistener = null



public void uninstallUI(Button button)
{
 button.removeMouseListener(buttonuilistener);
 button.removeMouseMotionListener(buttonuilistener);
 button.removeChangeListener(buttonuilistener);
}

View/Controller实际上就是一些方法。他们不维护任何自己的状态信息。因此,许多按钮的实例可以共享一个ButtonUI实例。ButtonUI是通过在方便的参数列表里面加上按钮的引用来区分各个不同的按钮。

ButtonUIListener类

ButtonUIListener类可以帮助Button类去转变鼠标或者键盘的输入为对按钮模型的操作。这个监听器类实现了:MouseListener,MouseMotionListener,ChangeListener接口,并且处理一下事件:

public void mouseDragged(MouseEvent mouseevent)
{
 Button button = (Button)mouseevent.getSource();
 ButtonModel buttonmodel = button.getModel();

 if (buttonmodel.isPressed())
 {
  if (button.getUI().contains(button, mouseevent.getPoint()))
  {
   buttonmodel.setArmed(true);
  }
  else
  {
   buttonmodel.setArmed(false);
  }
 }
}

public void mousePressed(MouseEvent mouseevent)
{
 Button button = (Button)mouseevent.getSource();
 ButtonModel buttonmodel = button.getModel();
 buttonmodel.setPressed(true);
 buttonmodel.setArmed(true);
}

public void mouseReleased(MouseEvent mouseevent)
{
 Button button = (Button)mouseevent.getSource();
 ButtonModel buttonmodel = button.getModel();
 buttonmodel.setPressed(false);
 buttonmodel.setArmed(false);
}

public void stateChanged(ChangeEvent changeevent)
{
 Button button = (Button)changeevent.getSource();
 button.repaint();
}


(转载完)


通过这些相信大家能够感受到Swing的设计是MVC的典范,这是一点都不假的。下一节将要看看在基于B/S的应用中MVC模式是如何被应用的。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章