首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 开发频道>通过Java Swing看透MVC设计模式

通过Java Swing看透MVC设计模式

2005-01-28 15:27作者:xymiser 出处:Java研究组织责任编辑:方舟

  ButtonUI类

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

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 installUI(Button button)
{
 button.addMouseListener(buttonuilistener);
 button.addMouseMotionListener(buttonuilistener);
 button.addChangeListener(buttonuilistener);
}

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

  View/Controller实际上就是一些方法。他们不维护任何自己的状态信息。因此,许多按钮的实例可以共享一个ButtonUI实例。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用户界面组件的好处在于你不用去花时间去弄明白他们底层是如何设计实现的就可以很方便的使用他们了。他们都提供了缺省的model以及view/controller,然后,当你自己做组件的时候,你会发现上面的思想的强大之处。

关注此文的读者还看过:

返回开发频道首页

共3页。 上一页123

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络