Java实现的日历功能完整示例

作者:c_jian 时间:2021-10-12 18:30:21 

本文实例讲述了Java实现的日历功能。分享给大家供大家参考,具体如下:

应用名称:Java日历

用到的知识:Java GUI编程,日期操作

开发环境:win8+eclipse+jdk1.8

功能说明:一个很简单的万年历,可以选择年份和月份,也可以用按钮翻页,日历会实时更新日期,最下方会显示当前操作系统的时间。

效果图:

Java实现的日历功能完整示例

源代码:

CalendarFrame.java


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;
public class CalendarFrame extends JFrame implements ActionListener{
 /**
  * @author Nut
  * 2016.01.13
  */
 private static final long serialVersionUID = -7260798316896145633L;
 JLabel labelDay[] = new JLabel[42];
 JButton titleName[] = new JButton[7];
 String name[]={"日","一","二","三","四","五","六"};
 JButton nextMonth,previousMonth;
 JComboBox choiceYear,choiceMonth;
 Calendarbean calendar;
 JLabel showYear,showMonth;
 JLabel showmessage=new JLabel("",JLabel.CENTER);
 int year = 2011,month=2;
 //构造方法初始化界面
 public CalendarFrame(){
   JPanel pCenter = new JPanel();
   pCenter.setLayout(new GridLayout(7,7));
   //星期栏
   for(int i=0;i<7;i++){
     titleName[i]=new JButton(name[i]);
     titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));
     pCenter.add(titleName[i]);
   }
   //日期栏
   for(int i=0;i<42;i++){
     labelDay[i]=new JLabel("",JLabel.CENTER);
     labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
     pCenter.add(labelDay[i]);
   }
   //年月选择栏
   choiceYear=new JComboBox();
   choiceMonth=new JComboBox();
   showYear=new JLabel("年");
   showMonth=new JLabel("月  ");
   for(int i=1990;i<2050;i++)
     choiceYear.addItem(i);
   choiceYear.addActionListener(this);
   for(int i=1;i<=12;i++)
     choiceMonth.addItem(i);
   choiceMonth.addActionListener(this);
   calendar=new Calendarbean();
   nextMonth=new JButton("下月");
   previousMonth=new JButton("上月");
   nextMonth.addActionListener(this);
   previousMonth.addActionListener(this);
   JPanel pNorth=new JPanel(),
   pSouth=new JPanel();
   pNorth.add(choiceYear);
   pNorth.add(showYear);
   pNorth.add(choiceMonth);
   pNorth.add(showMonth);
   pNorth.add(previousMonth);
   pNorth.add (nextMonth);
   pSouth.add(showmessage);
   add(pCenter,BorderLayout.CENTER);
   add(pNorth,BorderLayout.NORTH);
   add(pSouth,BorderLayout.SOUTH);
   setYearAndMonth(year,month);
   setDefaultCloseOperation(DISPOSE_ON_CLOSE);
 }
public void setYearAndMonth(int y,int m){
 calendar.setYear(y);
 calendar.setMonth(m);
 String day[]=calendar.getCalendar();
 for(int i=0;i<42;i++)
   labelDay[i].setText(day[i]);
 SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 EEEE");//设置日期格式
 showmessage.setText("系统时间:"+df.format(new Date()));
}
//事件动作
public void actionPerformed(ActionEvent e){
 if(e.getSource()==nextMonth){
   month=month +1;
   if(month>12)
     month=1;
   calendar.setMonth(month);
   choiceMonth.setSelectedItem(month);
   String day[]=calendar.getCalendar();
   for(int i=0;i<42;i++){
     labelDay[i].setText(day[i]);
   }
 }
 else if(e.getSource()==previousMonth){
   month=month-1;
   if(month<1)
     month=12;
   calendar.setMonth(month);
   choiceMonth.setSelectedItem(month);
   String day[]=calendar.getCalendar();
   for(int i=0;i<42;i++){
     labelDay[i].setText(day[i]);
   }
 }
 //选择年份
 else if (e.getSource()==choiceYear){
   calendar.setYear((Integer) choiceYear.getSelectedItem());
   String day[]=calendar.getCalendar();
   for(int i=0;i<42;i++){
     labelDay[i].setText(day[i]);
     }
   }
 //选择月份
 else if (e.getSource()==choiceMonth){
   calendar.setMonth((Integer) choiceMonth.getSelectedItem());
   String day[]=calendar.getCalendar();
   for(int i=0;i<42;i++){
       labelDay[i].setText(day[i]);
   }
 }
//  showmessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
}
}

Calendarbean.java


import java.util.Calendar;
public class Calendarbean {
String day[];
int year = 2005,month=0;
public void setYear(int year){
  this.year=year;
}
public int getYear(){
  return year;
}
public void setMonth(int month){
  this.month=month;
}
public int getMonth(){
  return month;
}
public String[] getCalendar(){
  String a[]=new String[42];
  Calendar 日历=Calendar.getInstance();
  日历.set(year,month-1,1);
  int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
  int day=0;
  if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    day=31;
  if(month==4||month==6||month==9||month==11)
    day=30;
  if(month==2){
    if(((year%4==0)&&(year%100!=0))||(year%400==0))
      day=29;
    else
      day=28;
  }
  for(int i=星期几,n=1;i<星期几+day;i++){
    a[i]=String.valueOf(n);
    n++;
  }
  return a;
}
}

CalendarMainClass.java


public class CalendarMainClass{
 public static void main(String args[])
 {
   CalendarFrame frame = new CalendarFrame();
   frame.setBounds(100,100,360,300);
   frame.setTitle("Java日历");
   frame.setVisible(true);
   frame.setYearAndMonth(1990,1);//设置日历初始值为1990年1月
 }
}

PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用:

Unix时间戳(timestamp)转换工具:
http://tools.jb51.net/code/unixtime

在线日期/天数计算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi

在线日期计算器/相差天数计算器:
http://tools.jb51.net/jisuanqi/datecalc

在线日期天数差计算器:
http://tools.jb51.net/jisuanqi/onlinedatejsq

希望本文所述对大家java程序设计有所帮助。

来源:https://blog.csdn.net/C_jian/article/details/50513386

标签:Java,日历
0
投稿

猜你喜欢

  • Android通过startService实现文件批量下载

    2022-11-02 05:29:52
  • Java通过CMD方式读取注册表任意键值对代码实践

    2021-10-10 19:56:40
  • SpringBoot 整合 Shiro 密码登录与邮件验证码登录功能(多 Realm 认证)

    2023-06-23 02:45:28
  • 详解spring cloud中使用Ribbon实现客户端的软负载均衡

    2022-10-26 15:54:45
  • Android Mms之:对话与联系人关联的总结详解

    2023-12-06 13:12:57
  • Java实现字符串匹配的示例代码

    2023-04-17 05:24:35
  • 简单捋捋@RequestParam 和 @RequestBody的使用

    2022-11-02 16:19:20
  • Springboot使用@Valid 和AOP做参数校验及日志输出问题

    2023-12-05 04:39:12
  • C#绘制飞行棋地图小程序

    2021-11-20 23:19:10
  • Java的锁机制:synchronized和CAS详解

    2023-03-18 16:04:00
  • Maven中央仓库地址配置大全

    2022-06-14 02:42:48
  • java内存模型jvm虚拟机简要分析

    2022-09-08 09:29:34
  • 使用工具类-java精确到小数点后6位

    2021-06-24 20:45:39
  • WinForm实现读取Resource中文件的方法

    2021-05-25 18:29:45
  • C#通过属性名字符串获取、设置对象属性值操作示例

    2022-01-06 14:28:08
  • 详解在springboot中使用Mybatis Generator的两种方式

    2021-10-12 14:26:44
  • .NET实现父窗体关闭而不影响子窗体的方法

    2022-10-06 20:56:04
  • java实现简易飞机大战

    2022-08-27 12:36:07
  • Android实现简易浏览器遇到问题的解决方法

    2023-06-15 21:47:56
  • 浅谈Java中replace与replaceAll区别

    2021-07-05 12:56:56
  • asp之家 软件编程 m.aspxhome.com