日历小程序解读_第1页
日历小程序解读_第2页
日历小程序解读_第3页
日历小程序解读_第4页
日历小程序解读_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0 目目 录录 一 摘要 1 二 程序分析 1 2 1 需求分析 1 2 2 功能设计 1 2 3 概要设计 2 3 2 3 1 程序设计思路 2 2 3 2 具体功能设计 2 2 3 3 程序流程图 3 三 详细设计 4 12 3 1 初始化组件 4 3 2 初始化程序数据 绘制程序面板 4 7 3 3 显示日期的方法 8 11 3 4 点击按钮产生的效果 11 12 四 运行结果 13 五 心得体会 14 六 参考文献 15 1 一 一 摘摘 要 要 万年历是一个强大的日历系统 通过它可以实现对过去 现在以 及将来日期的查询 通过在年份对话框中输入要查询的年份 再相应 的在月份对应的下拉菜单选择要查询的月份 则可得到相应的日历 本实验是对图形用户界面 布局管理器的综合运用 理解 JAVA 的时 间处理机制 编写独立运行的窗口 2 2 程序分析程序分析 2 12 1 需求分析需求分析 本程序的要求为 1 使用图形用户界面 2 本程序能够实现日期与星期的查询 2 22 2 功能设计功能设计 本程序要构建的万年历程序 其功能有以下几个方面 1 实现图形界面 2 能以月历形式显示日期与星期 工作日 双休日 当天分别以 黑色 红色和蓝色显示 3 支持用户通过下拉形式菜单来选择月份 4 通过点击 现在日期 来刷新日历 2 32 3 概要设计概要设计 2 3 12 3 1 程序设计思路程序设计思路 1 月份总天数的算法 直接根据 month int 即月份序号判断 该月的天数 当 month int 等于 2 时 调用 isLeapYear 方法判断 是否为闰年 2 网格内容算法 用 dt getDate 方法算出输出月份第一天为 星期几 第一天的格子序号应该为 7 第一天的星期序号 算出输出 月份第一天为星期几后 把该日期以前的位置用空格补上 并从该 日起一次输出天数直到月底 该月中的天数加上该月一日为星期几 的数字再除以 7 得 0 换行 即可完整的输出该月的日历 3 日期颜色的算法 格子数从 0 开始 第一行为星期序号 则 日期从第 7 格开始 根据格子序号 i 进行判断 当 i 模 7 余数为 0 或者 6 时日期为周末 置为红色 当 i 等于第一天的格子序号加上 当前日期减一时 置为蓝色 其余日期为黑色 4 如果年份小于 2001 年大于 2031 年则程序不予判断 2 3 22 3 2 具体功能设计具体功能设计 数据选择列表 年份选择列表 月份选择列表 点击日期跳转按钮 即在日历中显示用户选择日期数据 点击现在日期按钮 即在日历中显示当前日期数据 2 3 32 3 3 程序流程图程序流程图 程序流程图 是 否 计算 绘制屏幕 是否选择日期 提交年月变更数据 程序初始化 结束 获取当前系统时间年 份等数据 开始 三 详细设计三 详细设计 3 13 1 初始化组件初始化组件 import java awt import java awt event import javax swing import java util 3 23 2 初始化程序数据 绘制程序面板初始化程序数据 绘制程序面板 在初始化模块中 首先定义一个公共类 CalenderTrain 它继 承自 JFrame ActionListener 是一个接口 在实现此接口的类 CalenderTrain 中 给需要关注其动作的组件跳转按钮 button jump 和现在日期按钮 button today 添加监听器 addActionListener this 之后在事件处理方法 public void actionPerformed ActionEvent e 中 对每个事件进行不同处理 在这个类中 定义用到的标签 下拉列表框 按钮 放置面板 public class CalenderTrain extends JFrame implements ActionListener JComboBox Month new JComboBox JComboBox Year new JComboBox JLabel Year l new JLabel 年份 JLabel Month l new JLabel 月份 Date now date new Date JButton button day new JButton 49 JButton button jump new JButton 日期跳转 JButton button today new JButton 现在日期 int now year now date getYear 1900 int now month now date getMonth boolean bool false String year int null int month int JPanel pane ym new JPanel JPanel pane day new JPanel JPanel pane parent new JPanel 调用 CalenderTrain 设定面板标题为 JAVA 日历程序 只给 窗口设置 frame setDefaultCloseOperation JFrame EXIT ON CLOSE 的话 点击关闭按钮 执行的其实只有把窗口隐藏动作 在任务管理器中 可以看到进程仍在运行 于是加上后面的代码 确保点击关闭 程 序直接退出 system 面板的大小设置为不能变化 public CalenderTrain super JAVA 日历程序 setDefaultCloseOperation DISPOSE ON CLOSE addWindowListener new WindowAdapter public void windowClose WindowEvent e System exit 0 setResizable false 设定年月时 规定年份的区间是当前年份的过去 10 年到当前年 份的未来 20 年 月份区间为正常 1 12 月 由于在年份区间中 今 年是所有年份中的第十一个 所以 Year setSelectedIndex 的参 数为 10 时 年份刚好是 2011 Pane ym 即放置年月下拉列表框以及 两个控制按钮的面板 给 跳转按钮 和 现在日期 按钮添加监 听事件 for int i now year 10 i now year 20 i Year addItem i for int i 1 i 13 i Month addItem i Year setSelectedIndex 10 button jump addActionListener this button today addActionListener this 初始化日期按钮并绘制 由于每一月第一天不能确定 即所在 列的位置 星期 不能确定 加上第一行的星期序号 画一个 7 7 网格布局管理器 GridLayout GridLayout 把容器分成指定行和列的 若干个网格 每个组件占一个网格 从左向右 从上到下依次把组 件添加进来 所有的网格都是同样大小的 GridLayout 7 7 设置 行列数为 7 7 pane day setLayout new GridLayout 7 7 for int i 0 i 49 i button day i new JButton pane day add button day i 本程序中 对组件的布置 整形和定位授权给一个布局管理器 由布局管理器来负责 利用布局管理器可以做到 1 计算一个容器的所选尺寸和最小尺寸 2 布置一个容器的组件 这里采用的是 BorderLayout 按 东南西北和中心将组件布置在容器的四周和中心 用 setContentPane 方法把容器置为 JFrame 的内容面板 用 pack 方法调整此窗口的大小 以适合其子组件的首选大小和布局实现全 部显示 然后用 show 方法显示出来 pane parent setLayout new BorderLayout setContentPane pane day setContentPane pane ym pane parent add pane day BorderLayout SOUTH pane parent add pane ym BorderLayout NORTH setContentPane pane parent pack show 3 33 3 显示日期的方法显示日期的方法 根据 bool 的值 由 if 语句进行判断执行哪一显示日期的语句 块 为 true 时 显示现在的时间 为 false 时 显示用户选定的时 间 网格第一行 即 0 至 6 号格子 内容固定为星期序号 即 星 期日 到 星期六 void setDay if bool year int now year month int now month else year int Year getSelectedItem toString month int Month getSelectedIndex int year sel Integer parseInt year int 1900 Date dt new Date year sel month int 1 GregorianCalendar cal new GregorianCalendar cal setTime dt String week 星期日 星期一 星期二 星期三 星期四 星期五 星期六 int day 0 int day week 0 for int i 0 i 7 i button day i setText week i 判断当前月份的天数 根据它来设定 day 的值 其中二月份要判 断是否是闰年 因为第一行的星期序号已经占用了 7 个格子 所以 day week 的值要加上 7 即 day week 7 dt getDay if month int 0 month int 2 month int 4 month int 6 month int 7 month int 9 month int 11 day 31 else if month int 3 month int 5 month int 8 month int 10 day 30 else if cal isLeapYear year sel day 29 else day 28 day week 7 dt getDay 绘制 GridLayout 网格的内容 首先要根据选定的月份的第一天 是星期几来确定我们绘制按钮的起始位置 前段代码中的 day week 就是我们要绘制的起始位置 对于那些没有数值可以显示的按钮要 置空 星期六和星期日以红色字体显示 工作日以黑色字体显示 当天以蓝色字体显示 对于没有日期数值显示的按钮进行置空处理 Count 的值即网格的内容 值从 1 一直到 day 当月的总天数 int count 1 for int i day week i day week day count i if i 7 0 i 13 i 20 i 27 i 48 i 34 i 41 if i day week now date getDate 1 button day i setForeground Color blue button day i setText count else button day i setForeground Color red button day i setText count else if i day week now date getDate 1 button day i setForeground Color blue button day i setText count else button day i setForeground Color black button day i setText count 3 43 4 点击按钮产生的效果点击按钮产生的效果 对监听器关注的按钮动作进行处理 点击 日期跳转 按钮时 将 bool 置为 false 并调用 setDay 方法重新绘制网格内容 点击 现在日期 按钮时 将 bool 置为 true 得到今天的日期 将月 份置为当前月份 将年份置为当前年份 public void actionPerformed ActionEvent e if e getSource button jump bool false this setDay else if e getSource button today bool true this setDay Month setSelectedIndex now month Year setSelectedIndex 10 四 运行结果四 运行结果 五 心得体会五 心得体会 本次作业是对前面学过的所有面向对象的编程思想以及编程方 法的一个总结 回顾和实践 因此 开始设计的时候要学会自己看 书 明确本次作业设计所要用到的技术点并在网上搜索以及查阅相 关的书籍来搜集资料 也非常感谢这次实验让我学到了不少知识 懂得了独立学习中非常重要的方法 自己分析问题 并根据需要查 资料 分析资料 真正达到学以致用的目的 这学期的 java 程序设计是考查课 因此在平时上课时没有注意 听讲 有很多东西在用的时候才发现不会应用 但是通过这次作业 我能够对 java 有大概的了解 不能说两三个礼拜能把 java 弄懂弄 透 但是会用 java 语言编一些简单的小程序还是有很大收获的 在本次试验中主要还是回顾以前所学的编程语言中的循环和判断 语句 而 java 的特别用处没有涉及太多 主要只是用了一些重要语 句和主要结构 Java 和 C 在程序结构上有少许不同 在运行环境 下则是完全不一样 Java 需要配置变量和选取主类 这在之前都是 没有接触过的 Java 给了我另一种编程的体会 在今后的学习中 我会利用课余时间来更好的学习 java 它现 在是一门应用很广的编译语言 我会在不断练习中提高自己的编程 能力 在大学为今后的工作打下坚实的基础 六 参考文献六 参考文献 1 java2 程序设计实用教程 第二版 电子工业出版社 叶核亚编著 2 Java 大学简明教程 作者 美 戴尔特 电子工业出版社 译者 张琛恩 附 程序源代码附 程序源代码 import java awt import java awt event import javax swing import java util public class CalenderTrain extends JFrame implements ActionListener JComboBox Month new JComboBox JComboBox Year new JComboBox JLabel Year l new JLabel 年份 JLabel Month l new JLabel 月份 Date now date new Date JButton button day new JButton 49 JButton button jump new JButton 日期跳转 JButton button today new JButton 现在日期 int now year now date getYear 1900 int now month now date getMonth boolean bool false String year int null int month int JPanel pane ym new JPanel JPanel pane day new JPanel JPanel pane parent new JPanel public CalenderTrain super JAVA 日历程序 setDefaultCloseOperation DISPOSE ON CLOSE addWindowListener new WindowAdapter public void windowClose WindowEvent e System out print CLOSING THE WIN System exit 0 setResizable false for int i now year 10 i now year 20 i Year addItem i for int i 1 i 13 i Month addItem i Year setSelectedIndex 10 Year setText pane ym add Year l pane ym add Year Month setSelectedIndex now month pane ym add Month l pane ym add Month pane ym add button jump pane ym add button today button jump addActionListener this button today addActionListener this pane day setLayout new GridLayout 7 7 for int i 0 i 49 i button day i new JButton pane day add button day i this setDay pane parent setLayout new BorderLayout setContentPane pane day setContentPane pane ym pane parent add pane day BorderLayout SOUTH pane parent add pane ym BorderLayout NORTH setContentPane pane parent pack show void setDay if bool year int now year month int now month else year int Year getSelectedItem toString month int Month getSelectedIndex year int Year getText month int Integer parseInt Month getText int year sel Integer parseInt year int 1900 Date dt new Date year sel month int 1 GregorianCalendar cal new GregorianCalendar cal setTime dt String week 星期日 星期一 星期二 星期三 星期四 星期五 星期六 int day 0 int day week 0 for int i 0 i 7 i button day i setText week i if month int 0 month int 2 month int 4 month int 6 month int 7 month int 9 month int 11 day 31 else if month int 3 month int 5 month int 8 month int 10 day 30 else if cal isLeapYear year sel day 29 else day 28 day week 7 dt getDay int count 1 for int i day week i day week day count i if i 7 0 i 13 i 20 i 27 i 48 i 34 i 41 if i day week now date getDate 1 button day i setForeground Color blue button day i setText count else button day i setForeground Color red button day i setText count else if i day week now date getDate 1 button day i setForeground Col

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论