科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 private ActionListener subscribers = null;
  public synchronized void addActionListener(ActionListener l)
  {  subscribers = AWTEventMulticaster.add(subscribers, l);
  }
  public synchronized void removeActionListener(ActionListener l)
  {  subscribers = AWTEventMulticaster.remove(subscribers, l);
  }
  private void fire_ActionEvent( int id, String command )
  {  if (subscribers != null)
       subscribers.actionPerformed(new ActionEvent(this, id, command) );
  }
  
  
  
  //在面板显示前调用addNotify()。它实际上创建了基本的图象对象,因此你可以调用super.addNotify()去调用面板。
  [code]//这里使用它是一个入口去发送初始化ActionEvent到支持标题的任何实体。
  public void addNotify()
  {
    super.addNotify();
    int month = calendar.get(Calendar.MONTH);
    int year = calendar.get(Calendar.YEAR);
    fire_ActionEvent( CHANGE_ACTION, months[month] + " " + year );
  }[/code]
    然后我创建并初始化了代表天的按纽数组。有趣的是,日历并不能用二维数组表示,于是,我把按纽放在GridLayout布局中,让布局管理器来获取他的状态。在线形数组中在Grid中的第一个按钮表示第一周的第一天;第八个按纽是第二周的第一天;等等。下面是代码 :
  
  [code]--");
      days[i] = day;
      day.setBorder (BorderFactory.createEmptyBorder(1,2,1,2));
       day.setFocusPainted (false);  // Cannot get focus
      day.setActionCommand  ("D");
      day.addActionListener  (day_listener);// Our single listener
      day.setOpaque (false);         
   // Transparent background
    }
  }[/code]
  然后便是构造器。主要工作都在这没有参数的构造器中。它创建了包含日历的面板,建立了gridlayout布局,并将按纽加入到布局中:
  
  public Date_selector_panel()
  {
    JPanel calendar_display = new JPanel();
    calendar_display.setOpaque(false);
    calendar_display.setBorder( BorderFactory.createEmptyBorder(5,3,0,1) );
    calendar_display.setLayout(new GridLayout(MAX_WEEKS /*rows*/, DAYS_IN_WEEK /*columns*/ ));
  
    for( int i = 0; i < days.length; ++i )
      calendar_display.add(days[i]);
  
    setOpaque( false );
    setLayout( new BorderLayout() );
    add(calendar_display, BorderLayout.CENTER);
    update_calendar_display();
  }
  
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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