Java日历程序实现:手动计算日期与Swing界面展示
本文介绍如何使用Java Swing构建一个简易日历应用程序。通过自定义CalendarBean类手动处理闰年判断及月份天数逻辑,结合GridLayout布局生成42个格子以显示每月日历。程序包含输入年份和月份的文本框,支持点击按钮切换上下月或查看指定年月,并具备基本的输入验证功能。
核心设计与数据结构
实现一个图形界面的日历,关键在于准确计算指定年月的每一天是星期几,以及该月共有多少天。本示例采用两阶段架构:底层逻辑封装在 CalendarBean 中,负责数据处理;上层界面由 CalendarFrame 继承自 Frame 实现,负责交互与展示。
第1步:定义日历数据计算类 CalendarBean
该类负责存储当前年份、月份,并提供生成当月日历字符串数组的方法。
目的:将日期计算的算法与UI分离,便于逻辑测试。
操作:
1. 定义整型成员变量 year 和 month,默认初始化为 2011 和 9。
2. 提供 setYear(), getYear(), setMonth(), getMonth() 方法用于读写状态。
3. 核心方法 getCalendar() 返回长度为42的字符串数组(7行×6周),用于填充网格。
第2步:实现天数与星期的计算逻辑
在 getCalendar() 中,首先使用 java.util.Calendar 获取目标月的第一天是星期几。注意,Calendar.DAY_OF_WEEK 返回值中 Sunday 为 1,Saturday 为 7,因此需要减 1 使其符合数组索引习惯:
int 星期几 = 日历.get(Calendar.DAY_OF_WEEK) - 1;
接着,手动判断该月的天数 day:
- 大月(1, 3, 5, 7, 8, 10, 12):31天
- 小月(4, 6, 9, 11):30天
- 二月:需判断闰年。若 ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0),则为29天,否则28天。
最后,遍历数组,从索引等于“星期几”的位置开始填入 "1", "2", ... 直到该月最后一天。

图形用户界面构建
第3步:初始化窗体布局 CalendarFrame
界面主要分为三部分:顶部输入区、中间日历网格、底部状态栏。
入口:构造函数 public CalendarFrame()。
动作:
1. 创建中心面板 pCenter,使用 GridLayout(7, 7) 布局。前7个格子放置表示“日、一、...、六”的按钮。后35个格子为占位符标签 labelDay[],用于显示日期数字。
2. 创建北部面板 pNorth,放置“请输入日期”、“年份”、“月份”标签,两个文本输入框 text1, text2,以及“确定”、“上月”、“下月”三个按钮。
3. 创建南部面板 pSouth,放置显示当前年月状态的标签 showMessage。
4. 将中心面板放入滚动条容器,并整体添加到 Frame 的相应边界位置(NORTH, CENTER, SOUTH)。
5. 调用 calendar.setYear(year) 和 calendar.setMonth(month) 获取初始数据,并循环更新 labelDay 的文本。
初始化后的界面结构如下所示:

交互逻辑与事件处理
第4步:实现 ActionListener 响应
所有按钮共享同一个 ActionEvent 监听器。在 actionPerformed(ActionEvent e) 中通过 e.getSource() 判断触发源:
1. **下月/上月**:
- 点击“下月”:month++,若超过12则重置为1。
- 点击“上月”:month--,若小于1则重置为12。
- 更新内部日历对象的状态,重新获取日历数组,并刷新 labelDay 的文本。
2. **确定**:
- 读取 text1(年份)和 text2(月份)的内容。
- 使用 Integer.parseInt() 转换为整数。若转换失败,捕获 NumberFormatException 并通过 JOptionPane.showMessageDialog() 提示“请输入正确的年份及月份”。
- 验证数值合法性:月份需在 1-12 之间,年份需大于0。若不合法,提示错误并返回。
- 若合法,设置新的年月,刷新日历显示,并更新 showMessage 文本。
主程序入口与窗口管理
在 main 方法中实例化 CalendarFrame,设置标题为“日历”,调整大小 (300, 200, 500, 300),并设为可见。添加 WindowListener 以处理关闭事件,确保点击叉号时调用 System.exit(0) 正常退出程序。
以上就是Java日历显示读出输入的年月代码的详细内容,更多关于Java GUI开发与技术趋势的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









