网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.介绍J2ME的几个重要概念.
.简析J2EE应用程序中数据库类的设.
.j2ee设计模式:CMP到BMP模式(一.
.介绍J2ME可选包的概念.
.MIDP终端模拟之三:MIDP 的自定义.
.Tomcat服务器下JSP页面中文问题及.
.创建灵活易扩展的J2EE企业应用程.
.JBOSS4.0 JDBC数据源配置大全(一).
.什么是EnterpriseJavaBeans组件?.
.从远程装载PNG图片实例.
.选择:J2EE还是.NET,这是一个问.
.发送PDF文件.
.J2ME中查表法使用三角函数.
.基于MIDP1.0实现动画效果.
.保护MIDP应用里的数据文件--远离.
.JBoss v3.0 与Tibco JMS的整合.
.使用JSR 184技术在3D空间里选中物.
.Servlet中jdbc应用高级篇之六.
.使用Filter封装一个请求.
.hibernate的中文问题的解决方案.

解决日期选择问题,一劳永逸(使用Decorator模式实现日期选择组件)(二)

发表日期:2007-12-23


实现日期选择

    实现了核心的日期选择面板,并将它做为一个可用Decorator 模式的接口。(在i/o例子中,所有的Decorate 对象都是inputStream 对象,因此可同等对待,所有的模式构造器参数都是InputStream 引 用,你可以在不知道包装对象时,用其他Decorator 来包装任何一个Decorator 。)

核心接口看起来像以下这样:(先不考虑 Javadoc 和一些无关的代码,以便清晰的说明。更详细的代码请见Resources <http://www.javaworld.com/javaworld/jw-07-2003/>)

public interface Date_selector
{
    public static final int CHANGE_ACTION = 0;
    public static final int SELECT_ACTION = 1;

    public void addActionListener(ActionListener l);
    public void removeActionListener(ActionListener l);

    public Date get_selected_date();
    public Date get_current_date();

    /** Must work just like {@link Calendar#roll(int,boolean)} */
    public void roll(int flag, boolean up);

    /** Must work just like {@link Calendar#get(int)} */
    public int get(int flag);
}

    Date_selector接口定义了2个静态值:CHANGE_ACTION和SELECT_ACTION,用于事件处理过程中(在下面将有更多例子)。接口也提供了添加与移除当选择日期时已激发的ActionListener对象的方法。最后它提供了模仿java.util.Calendar()方法通过增量(年、月)来推进日历并获取属性值(如当前月份和年份)的接口.
我们返回动作监听:向按纽增加监听一样在日期选择中增加监听。

Date_selector selector = new Date_selector_panel();
selector.addActionListener
(   new ActionListener()
    {   public void actionPerformed( ActionEvent e )
        {   // Do whatever you'd do to process an event
        }
    }
);

   监听策略采用的是观察者(Observer)模式。
  在两种情况下监听将被唤醒(actionPerformed()被调用),两者区别是通过发送 ActionEvent  对象,并传递给actionPerformed一个getID()消息。下面表进行了详细说明:

动作事件:
change_action:当日历面板改变显示的月与年(典型的就是导航条要改变)的时候发送该事件。调用event.getActionCommand.getActionCommand()去获得发生改变后的当前月与年。你也可以调用get_current_date()获取当前用户选择的日期。
select_action:当用户点击日期时发送时间,调用event.getActionCommand.getActionCommand()去获得选择日期的字符串形式。(这字符串和使用toString()得到相同的结构。)你也可以调用get_selected_date()获取改变后当前用户选择的日期。
下面代码演示了这两种事件类型,它实现了当用户通过导航条改变月份Date_selector改变标签与用户点击面板改变日期的功能:
Date_selector selector = new Date_selector_panel();
JLabel moth_display = new JLabel();

s.addActionListener
(   new ActionListener()
    {   public void actionPerformed( ActionEvent e )
        {   if( e.getID() == Date_selector.CHANGE_ACTION )
                month_display.setText( e.getActionCommand() );
            else
                System.out.println( e.getActionCommand() );
        }
    }
);

    所有实现了Date_selector接口,还继承了 JPanel类(或至少说是一些 Container 的衍生物)。代码要实现这个需求,以便日期选择器不用派生也可以当作一个JPanel使用,但是此时实现不了因为java.awt.Container不是一个接口.对于一个方法,如果要返回一个能看为日期选择器或容器,它将必须实现这两个类,这样是非法的,而且接口(Date_selector)不能继承于一个类(Container)。

   这个缺陷正好是一个很好的例子:这说明了有时为何难于在已经存在而没有正确使用接口的代码上改型"四人帮"模式。如果是我,我重制它并将 Container写成一个接口,实现 Container与Date_selector。(很明显,我无法改变java.*包)。这种类到接口重组是非常困难的,因为,所有的类代码不变而接口变化程序将会中断。
   引进c++风格的重载操作原因是通过重载操作"new"可以是重组变的容易些。这种方式你可以新建(new)一个接口并且具有默认借口类的性质。java的解决方法是生成一“四人帮”工厂,它是比刚才那样假想的正确做法容易多了。

ealy ,java 爱好者,Matrix jsp翻译小组成员,可以点击http://www.matrix.org.cn/user_view.ASP?username=ealy查看她的个人信息 
进入讨论组讨论。

(出处:)


上一篇:解决日期选择问题,一劳永逸(使用Decorator模式实现日期选择组件)(三) 人气:918
下一篇:KVM的类加载 人气:581
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐