自己制作一个日历,默认输出系统年月

代码执行结果:

java swing 日期选择组件 java用swing实现日历_H2

代码如下:

package Calendar;
//日历类
import java.util.Calendar;
import java.util.Date;

public class CalendarBean {
 int year;
 int month;
 CalendarBean(){
  Date now = new Date();
  String year = String.format("%tY", now);
  String month = String.format("%tm", now);
  this.year = Integer.parseInt(year);
  this.month = Integer.parseInt(month);
 }
 public String [] getCalendar() {
  String [] a = new String[49];
  String [] week = {"日","一","二","三","四","五","六"};
  for(int i=0;i<7;i++) {
   a[i] = week[i];
  }
  Calendar cal = Calendar.getInstance();
  cal.set(year, month-1,1);
  int weekday = cal.get(Calendar.DAY_OF_WEEK)-1;
  int day = 0;
  switch(month) {
  case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break;
  case 4: case 6: case 9: case 11: day = 30; break;
  case 2:
   if((year%4==0)&&(year%100!=0)||(year%400)==0) {
    day = 29;
    break;
   }
   else {
    day = 28;
    break;
   }
  }
  int d=1;
  for(int i=7;i<7+weekday;i++) {
   a[i] = " ";
   
  }
  for(int i=7+weekday; i<7+weekday+day;i++) {
   a[i] = Integer.toString(d);
   d++;
  }
  for(int i=7+weekday+day;i<49;i++) {
   a[i] = " ";
  }
  return a;
 }
 public void Previous() {//查看本月之前的月份
  if(month==1) {//Month为1时的处理
   this.year = year-1;
   this.month = 12;
  }
  else {
   this.month = month-1;
  }
 }
 public void Next() {//查看本月之后的月份
  if(month==12) {//month为12时的处理
   this.year = year+1;
   this.month = 1;
  }
  else {
   this.month = month+1;
  }
 }
 public String Date() {//输出年月
  return year+"年"+month+"月";
  
 }
 public void setDate(int y,int m) {
  this.year = y;
  this.month = m;
 }
}
package Calendar;
//窗口类
import javax.swing.*;
import java.awt.*;
public class Window extends JFrame{
 JButton button1;  //上月
 JButton button2;  //下月
 JButton button3;  //设置
 JTextField text1; //年
 JTextField text2; //月
 Box boxH1,boxH2;  //行;某年某月
 Box boxV;         //列;上某年某月,下为按钮
 JPanel pCenter;
 JPanel pNorth;
 JPanel pSouth;
 MousePolice police;//mouseevent
 CalendarBean cal; //日历类
 JLabel [][] label; //日历
 JLabel slabel; //在界面南端显示当前年月
 Window(){
   this.setLayout(new BorderLayout());//设置为边界布局
  this.setBounds(100, 100, 600, 600);//设置窗口位置以及大小
  this.init();
  this.printCalendar();
  police  = new MousePolice(button1,button2,button3,text1,text2,this);
  button1.addMouseListener(police);
  button2.addMouseListener(police);
  button3.addMouseListener(police);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  this.setVisible(true);
  
 }
 void init() {
  /*
   * 边界布局North的设置,上一列用于设置日期,下一列为三个按钮,用于设置日期,查看当前日期之前或之后的日历。
   * 设置两个行式盒,一个放置文本框+标签,另一个放置三个按钮;
   * 设置一个列式盒放置两个行式盒;
   * 将列式盒放入pNorth;
   * 将pNorth放入窗口,即边界布局的北面:BorderLayout.NORTH;
   */
  button1 = new JButton("上月");
  button2 = new JButton("下月");
  button3 = new JButton("设置");
  boxH1 = Box.createHorizontalBox();//行式盒1
  boxH2 = Box.createHorizontalBox();//行式盒2
  boxV = Box.createVerticalBox();//列式盒
  text1 = new JTextField(5);//文本框
  text2 = new JTextField(5);//文本框
  //向行式盒1中添加文本框1以及标签“年”
  boxH1.add(text1);
  boxH1.add(new JLabel("年"));
  //向行式盒1中添加文本框2以及标签“月”
  boxH1.add(text2);
  boxH1.add(new JLabel("月"));
  //向行式盒2中添加三个按钮
  boxH2.add(button1);
  boxH2.add(button2);
  boxH2.add(button3);
  //向列式盒中添加行式盒1和行式盒2
  boxV.add(boxH1);
  boxV.add(boxH2);
  //实例化pNorth并设置为流式布局
  pNorth = new JPanel();
  pNorth.setLayout(new FlowLayout());
  pNorth.add(boxV);                    //向pNorth中添加列式盒
  this.add(pNorth, BorderLayout.NORTH);//向窗口北面边界添加容器pNorth;
  
  /*
   * 将边界布局中心设为网格布局
   * 设置JPanel容器pCenter;
   * 将pCenter设置为7x7网格布局
   * 设置7x7标签数组label(JLabel)并初始化
   * 向pCenter中添加标签
   * 将pCenter放入窗口中心:BorderLayout.CENTER;
   */
  pCenter = new JPanel();
  pCenter.setLayout(new GridLayout(7,7));//实例化pCenter
  label = new JLabel[7][7];//实例化label,用于存储日历
  for(int i=0;i<7;i++) {
   for(int j=0;j<7;j++) {
    label[i][j] = new JLabel("", JLabel.CENTER);
    pCenter.add(label[i][j]);
   }
  }
  this.add(pCenter,BorderLayout.CENTER);//放置在窗口中心
  
  
  pSouth = new JPanel();//实例化pSouth并设置为流式布局
  pSouth.setLayout(new FlowLayout());
  cal = new CalendarBean(); //实例化日历对象
  slabel = new JLabel("日历:"+cal.Date());
  pSouth.add(slabel,BorderLayout.SOUTH);//像容器pSouth中添加标签“某年某月”
  this.add(pSouth,BorderLayout.SOUTH);//向窗口南边界添加容器pSouth
 }
 public void printCalendar() {//设置标签数组中每一个元素的名称,即日历
  String [] a = cal.getCalendar();
  int d = 0;
  for(int i=0;i<7;i++) {
   for(int j=0;j<7;j++) {
    label[i][j].setText(a[d]);
    d++;
   }
  }
 }
 public void Previous() {//输出当前月份之前的月份
  cal.Previous();
  this.printCalendar();
  slabel.setText("日历:"+cal.Date());
 }
 public void Next() {//输出当前月份之后的月份
  cal.Next();
  this.printCalendar();
  slabel.setText("日历:"+cal.Date());
 }
 public void Set(int y, int m) {//自定义年月
  cal.setDate(y, m);
  this.printCalendar();
  slabel.setText("日历:"+cal.Date());
 }
}
package Calendar;
//使用MouseEvent监听点击按钮并做出处理
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MousePolice implements MouseListener{
 JButton button1;
 JButton button2;
 JButton button3;
 JTextField text1;
 JTextField text2;
 Window win;
 MousePolice(JButton button1, JButton button2,JButton button3,
   JTextField text1,JTextField text2,Window win){
  this.button1 = button1;
  this.button2 = button2;
  this.button3 = button3;
  this.text1 = text1;
  this.text2 = text2;
  this.win = win;
 } 
 
 @Override
 public void mouseClicked(MouseEvent arg0) {
  // TODO Auto-generated method stub
  if((JButton)arg0.getSource()==button1) {
   win.Previous();
  }
  if((JButton)arg0.getSource()==button2) {
   win.Next();
  }
  if((JButton)arg0.getSource()==button3) {
   String y = text1.getText();//提取文本框1中的数据
   String m = text2.getText();//提取文本框2中的数据
   int year = Integer.parseInt(y);
   int month = Integer.parseInt(m);
   win.Set(year,month);
  }
 }
 @Override
 public void mouseEntered(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void mouseExited(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void mousePressed(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void mouseReleased(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }
}
package Calendar;
//实现
public class Realize {
 public static void main(String args[]) {
  Window win = new Window();
 }
}