ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:89.21KB ,
资源ID:12456304      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12456304.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA万年历程序设计剖析.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA万年历程序设计剖析.docx

1、JAVA万年历程序设计剖析 佛山科学技术学院可视化编程技术课程设计报告万年历程序设计学生姓名:谢锐波 学 号:2012914247 年级专业:12级教育技术学2班指导老师: 容汝佳学 院: 教育科学学院广东佛山提交日期:2014年6月目 录1. 前言32概要设计42.1开发环境42.2程序设计思路42.3具体功能设计42.4程序运行界面42.5程序流程图53. 详细设计63.1初始化组件63.2初始化程序数据,绘制程序面板63.3显示日期的方法83.4点击按钮产生的效果10 3.5动态系统时间114. 程序测试114.1程序不能完全退出114.2下拉列表数据不能返回125. 心得体会126.

2、参考文献13附:程序源代码13 摘要:万年历是一个强大的万年历系统,通过它可以实现对过去,现在以及将来日期的查询,通过在年份对话框中输入要查询的年份,再相应的在月份对应的下拉菜单选择要查询的月份,则可得到相应的日历。本实验是对图形用户界面,布局管理器的综合运用,理解JAVA的时间处理机制,编写独立运行的窗口。 关键字:java万年历系统,万年历类,处理机制1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的日历,可以实现简单的查看功能,满足日常基本的工作学习

3、和娱乐需要。Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,

4、J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。Java语言是由C+语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C+语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。2 概要设计 2.1开发环境 开发平台:Microsoft Windows 7 Ultimate 开发工具:JBuilder 2007 + JDK 1.6.0_02

5、2.2程序设计思路 1.月份总天数的算法:直接根据month_int,即月份序号判断该月的天数。当month_int等于2时,调用isLeapYear()方法判断是否为闰年。2.网格内容算法:用dt.getDate()方法算出输出月份第一天为星期几,第一天的格子序号应该为7+第一天的星期序号。算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并从该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。 3.日期颜色的算法:格子数从0开始,第一行为星期序号,则日期从第7格开始。根据格子序号i进行判断,当i模7余数为0或者6时日期为周

6、末,置为红色;当i等于第一天的格子序号加上当前日期减一时,置为蓝色;其余日期为黑色。4.调用系统时间,利用while循环设置动态效果。5.如果年份小于2001年大于2031年则程序不予判断。 2.3具体功能设计 数据选择列表:年份选择列表、月份选择列表; 点击日期跳转按钮,即在日历中显示用户选择日期数据; 点击现在日期按钮,即在日历中显示当前日期数据; 动态系统时间。 2.4界面设计图1: 日历面板 2.5程序流程图3详细设计 3.1初始化组件 import java.awt.*; import java.awt.event.*; import javax.swing.*; import ja

7、va.util.*; 3.2初始化程序数据,绘制程序面板在初始化模块中,首先定义一个公共类 CalenderTrain,它继承自JFrame。ActionListener是一个接口,在实现此接口的类CalenderTrain中,给需要关注其动作的组件跳转按钮button_jump和现在日期按钮button_today添加监听器(addActionListener(this),之后在事件处理方法public void actionPerformed (ActionEvent e) 中,对每个事件进行不同处理。在这个类中,定义用到的标签、下拉列表框、按钮,放置面板。public class Cal

8、enderTrain 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 JButton49; JButton button_jump = new JButton(日期跳转); JButton bu

9、tton_today = new JButton(现在日期);JLabel labelTime = new JLabel();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();

10、调用CalenderTrain,设定面板标题为JAVA日历程序。只给窗口设置frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)的话,点击关闭按钮,执行的其实只有把窗口隐藏动作,在任务管理器中可以看到进程仍在运行。于是加上后面的代码,确保点击关闭,程序直接退出system。面板的大小设置为不能变化。public CalenderTrain() super(谢锐波-JAVA日历程序); /设定面板标题/-以下几行使得关闭面板时退出程序setDefaultCloseOperation(DISPOSE_ON_CLOSE);addWindowList

11、ener(new WindowAdapter() public void windowClose(WindowEvent e) /System.out.print(CLOSING THE WIN);System.exit(0););setResizable(false); 设定年月时,规定年份的区间是当前年份的过去10年到当前年份的未来20年,月份区间为正常1-12月。由于在年份区间中,今年是所有年份中的第十一个,所以Year.setSelectedIndex()的参数为10时,年份刚好是2011。Pane_ym即放置年月下拉列表框以及两个控制按钮的面板。给“跳转按钮”和“现在日期”按钮添加监

12、听事件。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。Gri

13、dLayout把容器分成指定行和列的若干个网格,每个组件占一个网格,从左向右、从上到下依次把组件添加进来。所有的网格都是同样大小的。GridLayout(7, 7)设置行列数为7*7。pane_day.setLayout(new GridLayout(7, 7);for (int i = 0; i 49; i+) button_dayi = new JButton( );pane_day.add(button_dayi); 本程序中,对组件的布置、整形和定位授权给一个布局管理器,由布局管理器来负责。利用布局管理器可以做到:(1)计算一个容器的所选尺寸和最小尺寸(2)布置一个容器的组件。这里采用

14、的是BorderLayout,按东南西北和中心将组件布置在容器的四周和中心。用se tContentPane()方法把容器置为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, BorderL

15、ayout.NORTH);setContentPane(pane_parent);pack();show(); 3.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 =

16、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_dayi

17、.setText(weeki); 判断当前月份的天数,根据它来设定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_in

18、t = 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 =

19、 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_dayi.setForeground(Color.blue);button_dayi.setText(count + ); else button_dayi.setForeground(Color.red);button_dayi.setText(count +

20、); elseif (i = day_week + now_date.getDate() - 1) button_dayi.setForeground(Color.blue);button_dayi.setText(count + ); else button_dayi.setForeground(Color.black);button_dayi.setText(count + ); 3.4点击按钮产生的效果 对监听器关注的按钮动作进行处理,点击“日期跳转”按钮时,将bool置为false,并调用setDay()方法重新绘制网格内容;点击“现在日期”按钮时,将bool置为true,得到今天的日

21、期,将月份置为当前月份,将年份置为当前年份。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); 3.5动态系统时间利用while函数使读取时间的函数循环,得到动态时间。 while (tru

22、e) GregorianCalendar g = new GregorianCalendar(); String clock = new String(g.getTime().toString().split( )3); labelTime.setText(clock); 4程序测试 4.1程序不能完全退出 点击窗口右上角的关闭按钮,程序窗口消失,但是,查看任务管理器,可以发现进程仍然在运行。图2:程序不能完全退出解决方法:将关闭部分的代码修改为下段代码后,程序能够完全退出。setDefaultCloseOperation(DISPOSE_ON_CLOSE);addWindowListener

23、(new WindowAdapter() public void windowClose(WindowEvent e) System.exit(0); 4.2下拉列表数据不能返回 运行程序,跳转日期后,再点击“当前日期”按钮,日期面板显示的是当前的日期数据,年份、月份下拉列表的值还是停留在跳转时所选定的值,不能正常返回。图3:下拉列表数据不能返回解决方法:把button_day的处理事件,修改为下段代码else if (e.getSource() = button_today) bool = true;this.setDay(); Month.setSelectedIndex(now_mont

24、h);Year.setSelectedIndex(10); 5心得体会短暂而又漫长的两周的Java程序设计,使我对于Java有了更深的认识和理解,尤其是运用Java知识去解决实际问题的能力又得到了很大的提高。尽管所设计的程序比较简单,只对原有程序添加了个别的功能,但是程序中的这个功能的实现都经过了自己的一定思考。在设计这个功能的时候,多多少少的遇到一些问题,我去上网查阅各种文档、请教同学和老师,最后完成了这个程序。当然,我的能力还十分有限,对于所设计的程序功能并不理想。实践这方面做的太少。太缺乏经验。对所设计中将所面临的问题认识不够。是Java课程设计让我认识到了这些问题的存在。所以我觉得,学

25、习java要不断地通过上机来增强自己对知识的学习与认识。书本要学有所用,才是真正的融会贯通。最重要的,在实验中,我们会遇到种种的难题,或由于粗心,或由于知识的匮乏,或其他,但我们不能有畏难情绪。一遇到困难就放弃,我们永远都不能成就自己。学会自己查阅资料,学会寻求他人的帮助,一时的不会更能加深我们的记忆,促进我们的求知欲。所以不能放弃自己。注:所添加的功能为动态系统时间,并美化了界面。6参考文献1.曾令明 索 望 甘 刚 宋 波,Java程序设计教程,西安电子科技大学出版社,2007.82.孙全党 王吴迪 赵枫朝,Java程序设计应用教程,电子工业出版社,2006.23.赵玉阳,Java从入门到

26、精通,清华大学出版社,2006.8附:程序源代码import java.awt.*; import java.awt.event.*; import java.lang.StringBuffer;import javax.swing.*;import java.util.*;import javax.swing.Timer;import javax.swing.border.*;public class CalenderTrain extends JFrame implements ActionListener JComboBox Month = new JComboBox(); /月份下拉列

27、表框JComboBox Year = new JComboBox(); /年份下拉列表框JLabel Year_l = new JLabel(年份:); /定义标签JLabel Month_l = new JLabel(月份:); /定义标签Date now_date = new Date(); /获取今天的日期JButton button_day = new JButton49; /定义一个数组用来存放日期JButton button_jump = new JButton(日期跳转); /现实选择日期JButton button_today = new JButton(现在日期); /显示今天日期按钮JLabel labelTime = new JLabel();int now_year = now_date.getYear() + 1900; /获取年份值int now_month = now_date.getMonth(); /获取月份值(当前月份-1)boolean bool = false;String year_int = null; /存放年

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1