java日历

来源:互联网 发布:汉诺塔问题c语言视频 编辑:程序博客网 时间:2024/06/08 11:33

/*长春工程学院软件学院
 * 张国维
 * 完成于2006年12月13日
 * 简单的日历控件
 */
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.*;

public class CalendarE extends JFrame {
 private static final long serialVersionUID = 6491915283937096860L;

 private JComboBox jtf1 = new JComboBox();// 选择年下拉框

 private JComboBox jtf2 = new JComboBox();// 选择月下来框

 private JLabel jlb1 = new JLabel("选则年");

 private JLabel jlb2 = new JLabel("选择月");

 private JPanel jp1 = new JPanel();// 放选择的控件

 private JPanel jp2 = new JPanel();// 显示日期

 private int year;// 记录哪一年

 private int month;// 记录哪一月

 private int week;// 记录星期几

 private int dayNum;// 记录某月中的天数

 private GregorianCalendar aa = new GregorianCalendar();

 public CalendarE() {
  for (int i = 1; i < 13; i++) {
   jtf2.addItem(Integer.valueOf(i));// 生成月份
   jtf1.addItem(String.valueOf(2000 + i));// 生成年份
  }
  jp1.add(jlb1);
  jp1.add(jtf1);
  jp1.add(jlb2);
  jp1.add(jtf2);
  this.add(jp1, BorderLayout.NORTH);// 将第一个面板加入
  GridLayout gl = new GridLayout(7, 7, 3, 3);
  jp2.setLayout(gl); // 设置第二个面板布局方式为表格布局;
  dayNum = aa.getActualMaximum(Calendar.DAY_OF_MONTH);
  month = aa.get(Calendar.MONTH);// 为什么将月份 ;
  year = aa.get(Calendar.YEAR);
  jtf1.setSelectedItem(String.valueOf(year));
  jtf2.setSelectedIndex(month);
  aa.set(year, month, 1);
  week = aa.get(Calendar.DAY_OF_WEEK);
  this.addControl(week, dayNum);
  jtf1.addItemListener(new ItemListener() {
   public void itemStateChanged(ItemEvent arg0) {
    if (arg0.getStateChange() == ItemEvent.SELECTED) {
     int y = Integer.parseInt(jtf1.getSelectedItem().toString());

     int m = Integer.parseInt(jtf2.getSelectedItem().toString());
     aa.set(y, m - 1, 1);
     jp2.removeAll();
     jp2.updateUI();
     addControl(aa.get(Calendar.DAY_OF_WEEK), aa
       .getActualMaximum(Calendar.DAY_OF_MONTH));
    }
   }
  });
  jtf2.addItemListener(new ItemListener() {
   public void itemStateChanged(ItemEvent arg0) {
    if (arg0.getStateChange() == ItemEvent.SELECTED) {
     int y = Integer.parseInt(jtf1.getSelectedItem().toString());
     int m = Integer.parseInt(jtf2.getSelectedItem().toString());
     aa.set(y, m - 1, 1);
     jp2.removeAll();
     jp2.updateUI();
     addControl(aa.get(Calendar.DAY_OF_WEEK), aa
       .getActualMaximum(Calendar.DAY_OF_MONTH));
    }
   }
  });
  this.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  this.add(jp2, BorderLayout.SOUTH);
  this.setSize(800, 800);
  this.setResizable(false);
  this.pack();
  this.setVisible(true);
 }

 public static void main(String[] args) {
  new CalendarE();
 }

 public void addControl(int week, int dayNum) {
  String[] weekday = new String[] { "星期日", "星期一", "星期二", "星期三", "星期四",
    "星期五", "星期六" };
  int a = 43 - week;
  for (int i = 0; i < 7; i++) {// 循环将日期添加到面板中;
   jp2.add(new JButton(weekday[i]));
  }
  for (int i = 1; i < week; i++) {// 添加前面空白的按钮
   jp2.add(new JButton());
  }
  for (int i = 1; i <= a; i++) {
   if (i <= dayNum) {// 添加日期按钮
    jp2.add(new JButton(String.valueOf(i)));
   } else
    // 添加后面空白的按钮
    jp2.add(new JButton());
  }
 }
}
 

原创粉丝点击