快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
象(事件监听器)它们所感兴趣的事件。从下面的代买中我们可以看出当按钮的转台发生改变的时候就会发出一个ChangeEvent。下面就是代码:

private Vector vectorChangeListeners = new Vector(); public void addChangeListener(ChangeListener changelistener) {   vectorChangeListeners.addElement(changelistener); } public void removeChangeListener(ChangeListener changelistener) {   vectorChangeListeners.removeElement(changelistener); } protected void fireChangeEvent(ChangeEvent changeevent) {   Enumeration enumeration = vectorChangeListeners.elements();   while (enumeration.hasMoreElements())   {    ChangeListener changelistener =(ChangeListener)enumeration.nextElement();    changelistener.stateChanged(changeevent);   } }

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

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类,然后咱们进入下一节。

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

时间:2010-12-12

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号