首页 > 其他分享 >第二十一章《万年历》第1节:万年历项目简介

第二十一章《万年历》第1节:万年历项目简介

时间:2023-01-05 12:37:20浏览次数:93  
标签:第二十一章 万年历 Festival 简介 日历 界面 new JLabel

​万年历项目实现的是一款日历软件,它能够展示出任意年份的日历,除此之外,该软件还能以红色字体标出每个月的阳历节日。

21.1.1万年历功能简介

万年历软件的运行结果如图21-1所示。​

第二十一章《万年历》第1节:万年历项目简介_万年历

图21-1万年历软件界面​

为方便讲述,此处把这个万年历的界面分成了4个区域,每个区域当中都有很多个组件,源代码中也会以注释的形式指出各组件对象属于哪一个区域。​

从图21-1可以看到:区域1显示了当前日期时间。这个当前时间是以中国的北京时间来显示的,并且每秒钟能自动刷新当前时间。如果希望显示其他时区的时间,用户可以用下拉框切换城市,本案例的选项中提供了四个较大的城市,分别是:北京、巴黎、纽约和悉尼,它们分别是亚洲、欧洲、美洲和大洋洲这4个大洲当中4个有代表性的城市。读者在掌握了万年历的运行原理后完全可以自己再添加一些其他城市。当从一个城市切换到另一个城市的时候,界面上所显示的时间也会发生变化。​

区域2中有一行黑色的字,它指出了当前界面上所显示的日历是哪年哪月。有了这一行字,用户就知道现在界面上所显示的日历是哪年哪月,例如图21-1显示的就是2022年6月的日历。​

区域3是界面的主体,它所显示的是某年某月的日历。在显示这个月的日历的同时,还会同时的显示上个月末尾的几天和下个月开头的几天。但本月的日历显示为黑色字体,而上个月末尾的几天和下个月开头的几天用灰色的字体显示。此外,日历主界面上还可以显示出当月重要的阳历节日,阳历节日用较小的红色字体显示,例如图21-1中显示的是儿童节。如果界面上的日期包含当前日期,也就是现实意义的“今天”,那么“今天”的日期将以蓝色字体显示。​

区域4中是一些按钮和下拉框,这一部分组件用来对日历进行切换,用户可以通过这一组组件把日期切换到任何年月。在界面左下方有一个“回当前月”按钮,单击这个按钮就能回到当前这个月。此外,万年历软件能在切换城市时重新计算今天是几号。例如当前日期时间如果是北京时间2022年6月30日早上六点,日历界面上会以蓝色字体显示30日这个日期,如果用户把时区切换为纽约,则以纽约时间计算当前时间为6月29日,日历界面上会以蓝色字体显示29日。​

21.1.2项目结构简介

万年历项目总共由3个类组成,它们分别是:​

  • CalendarFrame:日历窗体,是本项目最核心的类。​
  • MyCalendar:包含main()方法,最主要作用是从main()方法中创建一个日历窗体对象。​
  • Festival:表示阳历节日的类,日历中的阳历节日就是Festival类的对象。​

万年历软件界面上有很多组件,这些组件均被定义成CalendarFrame类的属性,它们是:​

//区域1:当前时间区​
JLabel lblCTip;//当前日期指示时间标签​
JLabel lblCurTime;//当前日期显示时间标签​
JComboBox<String> jcbCities;//城市选择下拉框​
DefaultComboBoxModel<String> citiesData;//城市名称​
//区域2:日历显示年月​
JLabel lblShowTip;//桌面日历显示年月标签​
//区域3:日历主体部分​
JLabel[] lblweekDays = new JLabel[7];​
String[] strWeekDays = {"日","一","二","三","四","五","六"};​
JLabel[] lblDates = new JLabel[42];​
JLabel[] lblFestivals = new JLabel[42];​
//区域4:功能按钮​
JLabel lblSelectTip;//选择年月指示标签​
JComboBox<String> jcbYears;//年份选择下拉框​
DefaultComboBoxModel<String> yearsData;//年份​
JLabel lblYearTip;//年标签​
JButton btnCurYM;//回到当前月​
JButton btnPreYear;//前1年​
JButton btnNextYear;//后1年​
JButton btnPreMonth;//前1月​
JButton btnNextMonth;//后1月​
JComboBox<String> jcbMonths;//月份选择下拉框​
DefaultComboBoxModel<String> monthsData;//月份​
JLabel lblMonthTip;//月标签​

此外,很多公共资源也被定义为CalendarFrame类的属性,这样这些公共资源能够被多个方法所共用,例如日历上的节日名称就是一种公共资源,在任何一个方法中都可以调用它们。项目中的公共资源包括:​

//4个城市的时区(北京、巴黎、纽约、悉尼)​
ZoneId[] zids = {​
ZoneId.of("Asia/Shanghai"),​
ZoneId.of("Europe/Paris"),​
ZoneId.of("America/Indianapolis"),​
ZoneId.of("Australia/Sydney")​
};​
//当前时区下标​
int zidIndex = 0;​
//定义当前时间​
ZonedDateTime curTime = ZonedDateTime.now(zids[zidIndex]);​
//格式化工具​
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");​
//格式化当前时间形成的字符串​
String strCurTime;​
//定时器及定时器任务​
Timer timer;​
TimerTask task;​
//日历显示的年月(YearMonth类对象)​
YearMonth shownYM;​
//阳历节日​
Festival[][] festivals= {​
{new Festival(1,1,"元旦")},​
{new Festival(2,14,"情人节")},​
{new Festival(3,8,"妇女节")},​
{new Festival(4,1,"愚人节")},​
{new Festival(5,1,"劳动节")},​
{new Festival(6,1,"儿童节")},​
{new Festival(7,1,"建党节")},​
{new Festival(8,1,"建军节")},​
{new Festival(9,10,"教师节")},​
{new Festival(10,1,"国庆节")},​
{new Festival(11,11,"光棍节")},​
{new Festival(12,25,"圣诞节")}​
};​

读者先熟悉一下以上定义的这些组件和公共资源,这样后面在阅读代码时能够快速理解每个组件或资源的意义。​

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。

标签:第二十一章,万年历,Festival,简介,日历,界面,new,JLabel
From: https://blog.51cto.com/mugexuetang/5990324

相关文章

  • STM32简介
    1.STM32分类STM32有不同内核的IC,如下图所示:2.命名规则命名规则如下图所示,如我有一款STM32芯片名字为:STM32F407ZGT6STM32:ST公司的ARM32bit微控制器F:通用性其......
  • HTML5 Web SQL 数据库简介
    WebSQL数据库API并不是HTML5规范的一部分,但是它是一个独立的规范,引入了一组使用SQL操作客户端数据库的APIs。WebSQL数据库可以在最新版的Safari,Chrome和Ope......
  • 常用EMC元器件简介——防护器件
    在电子产品中,需要防护的电路主要是电源和信号,所处的位置不同其防护等级和防护方案也不同,介绍三种最常用的防护器件:TVS管,气体放电管、半导体放电管。一、瞬态抑制二极管(TVS)1......
  • 简易PC基准测试丨PerformanceTest功能简介
    简易PC基准测试1、将您的PC的性能与世界各地的类似计算机进行比较。2、衡量配置更改和硬件升级的效果。3、自1998年以来的行业标准。您可以直接从USB驱动......
  • 【Kafka技术内幕】(二):Kafka简介
    【Kafka技术内幕】(二):Kafka简介2021年03月22日19:43 ·  阅读132我是少侠露飞。学习塑造人生,技术改变世界。文章目录什么是KafkaKafka的应用Kafka......
  • 科普系列:诊断路由类型简介及测试实践
    一、简介  当前车载以太网得到了大范围应用,但出于成本、可靠性等综合因素的考虑,CAN和LIN仍大范围应用于车载总线中,CAN和LIN之间的信息交互的需求仍然很大,承载着CAN-CA......
  • C# 委托事件简介
    简单理解C#委托事件,示例如下所示:usingSystem;///<summary>///---------------------委托步骤---------------------///第一步:声明委托///第二步:委托使用方法的......
  • SA612M期货订轧、SA612M化学成分、SA612M简介
    1、SA612M钢板介绍:SA612M是美标锅炉压力容器用钢板属于中低温焊接压力容器,是一种中低温焊接压力容器用镇静C-Mn-Si钢板,SA612M钢板执行标准:舞钢执行标准WYJ059-2006。2、SA......
  • 建筑软件解决方案丨Bluebeam简介
    BluebeamRevu和BluebeamCloud让团队可以灵活地在任何地方通过设计、构建和移交进行协作。 桌面和云协作解决方案桌面和云协作解决方案基于开放标准构建,因此......
  • 【React框架基础知识】React框架的简介与基本使用方法
    一、简介React:由Facebook开发的用于构建用户界面的JavaScript库(开源)。1.1为什么要学前端框架?原生Javascript有很多痛点:原生JavaScript操作DOM繁琐、效率低(DOM-API操作UI......