科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件使用Decorator模式实现日期选择组件(3)

使用Decorator模式实现日期选择组件(3)

  • 扫一扫
    分享文章到微信

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

 基本的selector接口   日期选择类的核心是Date_selector_panel.仔细分析后,首先做了一些如下变量声明,不要被"常量初始化"语法掷出。

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字: Decorator 日期选择组件

  • 评论
  • 分享微博
  • 分享邮件
 基本的selector接口
  日期选择类的核心是Date_selector_panel.仔细分析后,首先做了一些如下变量声明,不要被"常量初始化"语法掷出。(以为括号中的代码是静态的,和其他没有任何联系.)实例初始化声名使用this的结构避免了在构造器中连接另一个构造器。他们提供了保证在每个构造器都能有效调用的初始化方法。同时在一个地方给出所有的初始化代码也是非常方便的。散布在各个地方的没有初始化的变量很容易引起运行错误。当移动代码到构造器中也是非常困难的,因为移动过程中你必须考虑你已经改变的2个地方。比如说,在下面日历声明中代码就是实例初始化:
    public class Date_selector_panel extends JPanel implements Date_selector
  {
   //这些字符串应该应该在资源包中,因此它们是国际化的。  
      private String[] months =
    {  "Jan","Feb", "Mar","Apr", "May","June",
      "July","Aug","Sept","Oct","Nov","Dec"
    };
  
    private static final int DAYS_IN_WEEK = 7, // 一个 星期的天数
    MAX_WEEKS  = 6; // 在一月中最大的//星期数。
    // 用户选择的日期
  private Date selected = null;
  
    private Calendar calendar = Calendar.getInstance();
    {  calendar.set( Calendar.HOUR,  0 );
      calendar.set( Calendar.MINUTE, 0 );
      calendar.set( Calendar.SECOND, 0 );
    }
  
    //显示在屏幕上的当前日期
    private final Calendar today = Calendar.getInstance();
  
  下面便开始处理点击不同天的事件。我采用比较容易实现的外观即将每天都以一个标签是日期的按纽显示在屏幕上,我定义了一个简单的监听对象并加载到每个按纽中。由监听对象获取按纽标签值,由标签值可以得到日期与日历的位置,然后它将从日历中获取日期对象并且将日期字符串发送给监听器(通过调用fire_ActionEvent()的方式)。
  //一个监听器适合所有calendar事件
  private final Button_handler day_listener = new Button_handler();
  
  private class Button_handler implements ActionListener
  {  public void actionPerformed(ActionEvent e)
    {
      if (e.getActionCommand().equals("D"))
      {  String text = ((JButton) e.getSource()).getText();
  
        if(text.length() > 0) // <=0 means click on blank square. Ignore.
        {  calendar.set
          (  calendar.get(Calendar.YEAR),  // Reset the calendar
            calendar.get(Calendar.MONTH),  // to be the chosen
            Integer.parseInt(text)     // date.
          );
          selected = calendar.getTime();
          fire_ActionEvent( SELECT_ACTION, selected.toString() );
        }
      }
    }
  }
  
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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