热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要介绍了Java实现的日历功能,结合完整实例形式分析了Java日历功能相关的日期时间获取、计算、显示等操作技巧,需要的朋友可以参考下

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

应用名称:Java日历

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

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

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

效果图:

源代码:

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相关内容感兴趣的读者可查看本站专题:《java日期与时间操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

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


推荐阅读
  • 如何修改360极速浏览器的默认安装路径
    本文介绍了一种有效的方法,帮助用户在新版360极速浏览器中成功更改默认安装路径,解决因权限问题导致的安装失败。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 本文介绍了Memcached分布式集群中的取模算法和一致性哈希算法的原理及其对缓存命中率的影响。通过详细分析,探讨了如何优化这些算法以提高系统的稳定性和性能。 ... [详细]
  • 单片机编程为何偏爱C语言
    尽管现代有许多高级编程语言如Java、Python等,但单片机编程依然广泛使用C语言。本文将探讨C语言在单片机编程中的优势及其原因。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 专业人士如何做自媒体 ... [详细]
  • 本文总结了《编程珠玑》第12章关于采样问题的算法描述与改进,并提供了详细的编程实践记录。参考了其他博主的总结,链接为:http://blog.csdn.net/neicole/article/details/8518602。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 非计算机专业的朋友如何拿下多个Offer
    大家好,我是归辰。秋招结束后,我已顺利入职,并应公子龙的邀请,分享一些秋招面试的心得体会,希望能帮助到学弟学妹们,让他们在未来的面试中更加顺利。 ... [详细]
  • PHP实现汉诺塔算法
    昨天研究了一天汉诺塔算法都没搞懂,感觉自己智商被碾压了,还不如《猩球崛起》中的那一只猩猩!!!起源传说最早发明这个问题的人是法国数学家『爱德华·卢卡斯』。在世界中心贝拿勒斯(在印度 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
author-avatar
勿忘
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有