改写的基于SWING的日期选择控件

翻译|其它|编辑:郝浩|2006-08-02 13:41:00.000|阅读 2184 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


程序运行结果效果图如下所示:


源代码:
  
  //DatePicker.java
  
  package com.kxsoft.component;
  
  import java.awt.*;
  
  import java.awt.event.*;
  
  import java.util.GregorianCalendar;
  
  import java.util.Date;
  
  import java.util.Calendar;
  
  import java.text.DateFormat;
  
  import java.text.FieldPosition;
  
  import javax.swing.*;
  
  import javax.swing.plaf.BorderUIResource;
  
  public final class DatePicker extends JPanel {
  
  private static final long serialVersionUID = 1L;
  
  private static final int startX = 10;
  
  private static final int startY = 60;
  
  private static final Font smallFont = new Font("Dialog", Font.PLAIN, 10);
  
  private static final Font largeFont = new Font("Dialog", Font.PLAIN, 12);
  
  private static final Insets insets = new Insets(2, 2, 2, 2);
  
  private static final Color highlight = new Color(255, 255, 204);
  
  private static final Color white = new Color(255, 255, 255);
  
  private static final Color gray = new Color(204, 204, 204);
  
  private Component selectedDay = null;
  
  private GregorianCalendar selectedDate = null;
  
  private GregorianCalendar originalDate = null;
  
  private boolean hideOnSelect = true;
  
  private final JButton backButton = new JButton();
  
  private final JLabel monthAndYear = new JLabel();
  
  private final JButton forwardButton = new JButton();
  
  private final JLabel[] dayHeadings = new JLabel[]{
  new JLabel("日"),
  new JLabel("一"),
  new JLabel("二"),
  new JLabel("三"),
  new JLabel("四"),
  new JLabel("五"),
  new JLabel("六")};
  
  private final JLabel[][] daysInMonth = new JLabel[][]{
  {new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel()},
  {new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel()},
  {new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel()},
  {new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel()},
  {new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel()},
  {new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel(),
  new JLabel()}
  };
  
  private final JButton todayButton = new JButton();
  
  private final JButton cancelButton = new JButton();
  
  public DatePicker() {
      super();
      selectedDate = getToday();
      init();
  }
  
  public DatePicker(final Date initialDate) {
  super();
  if (null == initialDate)
     selectedDate = getToday();
  else
     (selectedDate = new GregorianCalendar()).setTime(initialDate);
     originalDate = new GregorianCalendar(
     selectedDate.get(Calendar.YEAR),
     selectedDate.get(Calendar.MONTH),
     selectedDate.get(Calendar.DATE));
     init();
  }
  
  public boolean isHideOnSelect() {
     return hideOnSelect;
  }
  
  public void setHideOnSelect(final boolean hideOnSelect) {
  if (this.hideOnSelect != hideOnSelect) {
      this.hideOnSelect = hideOnSelect;
      initButtons(false);
     }
  }
  
  public Date getDate() {
  if (null != selectedDate)
  return selectedDate.getTime();
  return null;
  }
  
  private void init() {
     setLayout(new AbsoluteLayout());
        this.setMinimumSize(new Dimension(161, 226));
        this.setMaximumSize(getMinimumSize());
        this.setPreferredSize(getMinimumSize());
        this.setBorder(new BorderUIResource.EtchedBorderUIResource());
  
        backButton.setFont(smallFont);
        backButton.setText("<");
        backButton.setMargin(insets);
        backButton.setDefaultCapable(false);
        backButton.addActionListener(new ActionListener() {
          public void actionPerformed(final ActionEvent evt) {
            onBackClicked(evt);
          }
       });
     add(backButton, new AbsoluteConstraints(10, 10, 20, 20));
  
     monthAndYear.setFont(largeFont);
     monthAndYear.setHorizontalAlignment(JTextField.CENTER);
     monthAndYear.setText(formatDateText(selectedDate.getTime()));
     add(monthAndYear, new AbsoluteConstraints(30, 10, 100, 20));
  
     forwardButton.setFont(smallFont);
     forwardButton.setText(">");
     forwardButton.setMargin(insets);
     forwardButton.setDefaultCapable(false);
     forwardButton.addActionListener(new ActionListener() {
       public void actionPerformed(final ActionEvent evt) {
         onForwardClicked(evt);
     }
  });
  add(forwardButton, new AbsoluteConstraints(130, 10, 20, 20));
  
  int x = startX;
  for (int ii = 0; ii < dayHeadings.length; ii++) {
     dayHeadings[ii].setOpaque(true);
     dayHeadings[ii].setBackground(Color.LIGHT_GRAY);
     dayHeadings[ii].setForeground(Color.WHITE);
     dayHeadings[ii].setHorizontalAlignment(JLabel.CENTER);
     add(dayHeadings[ii], new AbsoluteConstraints(x, 40, 21, 21));
     x += 20;
  }
  
  x = startX;
  int y = startY;
  for (int ii = 0; ii < daysInMonth.length; ii++) {
  for (int jj = 0; jj < daysInMonth[ii].length; jj++) {
     daysInMonth[ii][jj].setOpaque(true);
     daysInMonth[ii][jj].setBackground(white);
     daysInMonth[ii][jj].setFont(smallFont);
     daysInMonth[ii][jj].setHorizontalAlignment(JLabel.CENTER);
     daysInMonth[ii][jj].setText("");
     daysInMonth[ii][jj].addMouseListener(new MouseAdapter() {
       public void mouseClicked(final MouseEvent evt) {
         onDayClicked(evt);
        }
     });
    add(daysInMonth[ii][jj], new AbsoluteConstraints(x, y, 21, 21));
  x += 20;
  }
  x = startX;
  y += 20;
  }
  
  initButtons(true);
  
  calculateCalendar();
  }
  
  private void initButtons(final boolean firstTime) {
  if (firstTime) {
     final Dimension buttonSize = new Dimension(68, 24);
     todayButton.setText("今天");
     todayButton.setMargin(insets);
     todayButton.setMaximumSize(buttonSize);
     todayButton.setMinimumSize(buttonSize);
     todayButton.setPreferredSize(buttonSize);
     todayButton.setDefaultCapable(true);
     todayButton.setSelected(true);
     todayButton.addActionListener(new ActionListener() {
     public void actionPerformed(final ActionEvent evt) {
     onToday(evt);
    }
  });
  
  cancelButton.setText("取消");
  cancelButton.setMargin(insets);
  cancelButton.setMaximumSize(buttonSize);
  cancelButton.setMinimumSize(buttonSize);
  cancelButton.setPreferredSize(buttonSize);
  cancelButton.addActionListener(new ActionListener() {
  public void actionPerformed(final ActionEvent evt) {
     onCancel(evt);
     }
    });
  } else {
  this.remove(todayButton);
  this.remove(cancelButton);
  }
  
  if (hideOnSelect) {
  add(todayButton, new Absolut


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP