版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南农业学课程论文
2班JAVA:Java程
word档可编辑复制目
录摘要..................................................................-1-关键词..................................................................-1-1需分析...............................................................-1-1.1需求分析.........................................................-11.2功能设计.........................................................-12概设计...............................................................-1-2.1开发环境.........................................................-12.2程序设计思路.....................................................-12.3具体功能设计.....................................................-22.4程序运行界面.....................................................-22.5程序流程图.......................................................-33详设计...............................................................-3-3.1初始化组件.......................................................-33.2初始化程序数据,绘制程序面板.....................................--3.3显示日期的方法...................................................-63.4点击按钮产生的效果...............................................-84程测试...............................................................-9-4.1程序不能完全退出.................................................-94.2下拉列表数据不能返回............................................-10-心得体会..............................................................-10-参考文献..............................................................-11-致谢...................................................................-11-附:程序源代码.........................................................-12-word档可编辑复制历小程序学
生:郭显勇、刘彦波、任涛摘
湖南农业大学信息科学技术学院2008级息工程班学号200841843227、200841843228200841843219要:万年历是一个强大的日历系统通过它可以实现对过去,现在以及将来日期的查询,通过在年份对话框中输入要查询的年份,再相应的在月份对应的下拉菜单选择要查询的月份可得到相应的日历验是对图形用户界面,布局管理器的综合运用,理解JAVA的时间处理机制,编写独立运行的窗口。关键词日历;swing;局管理器;1需求分析1.1求分析本程序的要求为:使用图形用户界面;本程序能够实现日期与星期的查询。1.2能设计本程序要构建的万年历程序,其功能有以下几个方面实现图形界面。能以月历形式显示日期与星期。工作日、双休日、当天分别以黑色、红色和蓝色显示。支持用户通过下拉形式菜单来选择月份。4.通过点击“现在日期”来刷新日历2概要设计2.1发环境
。开发平台:MicrosoftWindowsXPService2开发工具:+JDK1.6.0_022.2序设计路1.月份总天数的算法:直接根据month_int即月份序号判断该月的天数。当month_int等于2时,调用isLeapYear()法判断是否为闰年。word档可编辑复制网格内容算法:用dt.getDate()法算出输出月份第一天为星期几,第一天的格子序号应该为7+第一天的星期序号算出输出月份第一天为星期几后,把该日期以前的位置用空格补上并从该日起一次输出天数直到月底该月中的天数加上该月一日为星期几的数字再除以70换行可完整的输出该月的日历。日期颜色的算法:格子数从0开始,第一行为星期序号,则日期从第7格开始根据格子序号i进行判断当i模7余数为0或者6时日期为周末置为红色当i等于第一天的格子序号加上当前日期减一时置为蓝色其余日期为黑色。如果年份小于年大于2031年则程序不予判断。2.3体功能计数据选择列表:年份选择列表、月份选择列表。点击日期跳转按钮,即在日历中显示用户选择日期数据;点击现在日期按钮,即在日历中显示当前日期数据。2.4序运行面(图2.4.1程序运行界面截图)word档可编辑复制2.5序流程开始程序初始化获取当前系统时间年份等数据计算,绘制屏幕是否选择日期是提交年月变更数据结束(图2.5.1程序流程图)3详细设计3.1始化组importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;3.2始化程数据,绘制序面板
否在初始化模块中,首先定义一个公共类,它继承自JFrame。ActionListener是一个接口,在实现此接口的类中,给需要关注其动作的组件跳转按钮button_jump和现在日期按钮添加监听器,之后在事件处理方publicvoidactionPerformed(ActionEvente)中对每个事件进行不同处理在这个类中定义用到的标签、下拉列表框、按钮,放置面板。word档可编辑复制publicclassCalenderTrainextendsJFrameimplementsActionListener{JComboBoxMonth=newJComboBox();JComboBoxYear=newJComboBox();JLabelYear_l=newJLabel("年份:");JLabelMonth_l=newJLabel("月份:");Datenow_date=newDate();JButton[]button_day=newJButton[49];JButtonbutton_jump=newJButton("日期跳转);JButtonbutton_today=newJButton("现在日期);intnow_year=now_date.getYear()+1900;intnow_month=now_date.getMonth();booleanbool=false;Stringyear_int=null;intmonth_int;JPanelpane_ym=newJPanel();JPanelpane_day=newJPanel();JPanelpane_parent=newJPanel();调用CalenderTrain,设定面板标题为"JAVA日历程序"。只给窗口设置的话,点击关闭按钮,执行的其实只有把窗口隐藏动作在任务管理器中可以看到进程仍在运行于是加上后面的代码,确保点击关闭,程序直接退出。面板的大小设置为不能变化。publicCalenderTrain(){super("JAVA日历程序");setDefaultCloseOperation(DISPOSE_ON_CLOSE);addWindowListener(newWindowAdapter(){publicvoidwindowClose(WindowEvente){System.exit(0);}});setResizable(false);设定年月时规定年份的区间是当前年份的过去年到当前年份的未来年,月份区间为正常1-12月。由于在年份区间中,今年是所有年份中的第十一个,所以Year.setSelectedIndex(){指定要选择的列表项的整数,其中0指定列表中的第一项}的参数为10时年份刚好是2011Pane_ym即放置年月下拉列表框以及两个控制按钮的面板。给“跳转按钮”和“现在日期”按钮添加监听事word档可编辑复制件。for(inti=now_year-10;i<=now_year+20;i++){Year.addItem(i+"");}for(inti=1;i<13;i++){Month.addItem(i+"");//addItem(ObjectanObject)为项列表添加项。仅当JComboBox使用可变数据模型时此方法才有效anObject-要添加到列表的Object}Year.setSelectedIndex(10);button_jump.addActionListener(this);button_today.addActionListener(this);初始化日期按钮并绘制由于每一月第一天不能确定即所在列的位(星期能确定上第一行的星期序号一个7*7格布局管理器GridLayout。GridLayout把容器分成指定行和列的若干个网格,每个组件占一个网格,从左向右上到下依次把组件添加进来有的网格都是同样大小的GridLayout(7,7)设置行列数为7*7。pane_day.setLayout(newGridLayout(7,7));for(inti=0;i<49;i++){button_day[i]=newJButton("");pane_day.add(button_day[i]);}本程序中对组件的布置整形和定位授权给一个布局管理器由布局管理器来负责利用布局管理器可以做到计算一个容器的所选尺寸和最小尺寸(2)布置一个容器的组件。这里采用的BorderLayout,按东南西北和中心将组件布置在容器的四周和中心用setContentPane()法把容器置为JFrame的内容面板。用pack()方法调整此窗口的大小,以适合其子组件的首选大小和布局实现全部显示,然后用show()方法显示出来。pane_parent.setLayout(newBorderLayout());//先把子容器pane_parent设置为东南西北中setContentPane(pane_day);setContentPane(pane_ym);pane_parent.add(pane_day,BorderLayout.SOUTH)word档可编辑复制pane_parent.add(pane_ym,BorderLayout.NORTH);//把内容面板添加到子容器pane_parent中setContentPane(pane_parent);//把子容器添加到栏框中pack();//调整此窗口的大小show();}3.3显示日期的方法根据bool的值,由语句进行判断执行哪一显示日期的语句块,为时,显示现在的时间;为false时,显示用户选定的时间。网格第一行,即0至6号格子,内容固定为星期序号,即“星期日”到“星期六voidsetDay(){if(bool){year_int=now_year+"";month_int=now_month;}else{year_int=Year.getSelectedItem().toString();month_int=Month.getSelectedIndex();定当前选择的列表项的整数其中0指定列表中的第一项如果没有选择任何项或者当前所选项不在列表中,则返回-1}intyear_sel=Integer.parseInt(year_int)-1900;//Integer构造一个新分配的Integer对象表示String参数所指示的值用与parseInt方法(对基数为10的值)相同的方式将该字符串转换成int值。Datedt=newDate(year_sel,month_int,1);GregorianCalendarcal=newGregorianCalendar();cal.setTime(dt);Stringweek[]={"星期日","星期一","星期二","星期三","期四","星期五","星期六"};intday=0;intday_week=0;for(inti=0;i<7;i++){button_day[i].setText(week[i]);}word档可编辑复制判断当前月份的天数,根据它来设定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;}elseif(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网格的内容先要根据选定的月份的第一天是星期几来确定我们绘制按钮的起始位置。前段代码中的就是我们要绘制的起始位置于那些没有数值可以显的按钮要置空期六和星期日以红色字体显示,工作日以黑色字体显示当天以蓝色字体显示对于没有日期数值显示的按钮进行置空处理。Count的值即网格的内容,值从一直到day(当月的总天数intcount=1;for(inti=day_week;i<day_week+day;count++,i++){if(i%7==0||i==13||i==20||i==27||i==48||i==34word档可编辑复制||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.4点击按钮产生的效果对监听器关注的按钮动作进行处理,点击“日期跳转”按钮时,将置为false,并调用setDay()方法重新绘制网格内容;点击“现在日期”按钮时,将bool置为true,得到今天的日期,将月份置为当前月份,将年份置为当前年份。publicvoidactionPerformed(ActionEvente){if(e.getSource()==button_jump){bool=false;this.setDay();}elseif(e.getSource()==button_today){bool=true;this.setDay();Month.setSelectedIndex(now_month);Year.setSelectedIndex(10);}}word档可编辑复制4程序测试4.1序不能全退出点击窗口右上角的关闭按钮,程序窗口消失,但是,查看任务管理器,可以发现进程仍然在运行。(图4.1.1:程序不能完全退出解决方法:将关闭部分的代码修改为下段代码后,程序能够完全退出。setDefaultCloseOperation(DISPOSE_ON_CLOSE);addWindowListener(newWindowAdapter(){publicvoidwindowClose(WindowEvente){System.exit(0);word档可编辑复制4.2拉列表据不能返回运行程序,跳转日期后,再点击“当前日期”按钮,日期面板显示的是当前的日期数据年份月份下拉列表的值还是停留在跳转时所选定的值不能正常返回。(图4.2.1:拉列表数据不能回)解决方法:把button_day的处理事件,修改为下段代码elseif(e.getSource()==button_today){bool=true;this.setDay();Month.setSelectedIndex(now_month);Year.setSelectedIndex(10);}5心得体会经过短暂的两周的程序设计,使我又学到了很多的知识,尤其是运用Java知识去解决实际问题的能力又得到了很大的提高。尽管所设计的程序比较简单但是程序中的每个功能的实现都经过了自己的一定认真的思考由于把所学的知识做到很灵活的运用在实际中对于现在的我还有一定的难度故而在设计的每个的环节中都会多多少少的遇到一些问题这就促使我去查阅各种资料或者请教同学极大的提高我的专业素养同时对在有些书上的理论知识在实际的运用以及应该注意的问题有了比较深刻的认识当然仍然有些理论问题不是很好的去运用或者是了解的不深刻这就使的在实践中的所设计的程序有些功能不是自己所想的那样的完美不过既然发现了问题的所在我就不会word档可编辑复制放弃的直至问题得到解决这些也同时反映出了平时运用知识去实践这方面做的太少。太缺乏经验。对所设计中将所面临的问题认识不够。是课程设计让我认识到了这些问题的存在同时给我提供了去面对这些问题的平台也使我充分的认识到在以后也应该怎样去实践怎样去学习一门计算机语言以及如何去运用这门语言去解决实际问题等等。总之在经过这次的课程设计使我认识到了自己很多的缺点同时,也是我学到新知识和新方法的一个机会给我在以后继续学习好这门语言指明了方向。6参考文献曾令明索望甘刚宋波序设计教程西安电子科技大学出版孙全党王吴迪枫朝,Java程序设计应用教程,电子工业版社赵玉阳Java从入门到精通,清华大学出版社2006.8致
谢本设计及报告是在指导老师张老师的指导下完成,所此在此衷心感谢张老师的悉心教诲以及耐心的讲解时还要感谢在设计程序和报告期间给予我帮助和启示的同学让我了解了很多自己没有注意或忽视的地方希望我们一起分享成功的喜悦。word档可编辑复制附:程序代码importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;publicclassCalenderTrainextendsJFrameimplementsActionListenerJComboBoxMonth=newJComboBox();月份下拉列框JComboBoxYear=JComboBox();年下拉列表框JLabelYear_l=new年份:定义标签JLabelMonth_l=newJLabel("月份");//义标签Datenow_date=newDate();获取今的日期JButton[]button_day=newJButton[49];定义一个数组用来存日期JButtonbutton_jump=JButton("日期跳转);//现实选择日期JButtonbutton_today=newJButton("现在日");//显示今天日期按钮intnow_year=now_date.getYear()+获取年份值intnow_monthnow_date.getMonth();//取月份值当前月-1)booleanbool=false;Stringyear_int=null;存放年份intmonth_int;存放月份JPanel=newJPanel();放置下拉列表框和制按钮面板JPanelpane_day=JPanel();放置日期面板JPanelpane_parent=newJPanel();放以上两个面板//定义方法绘制面板publicCalenderTrain(){日历程序"设定面板标题下几行使得关闭面板时退出程序setDefaultCloseOperation(DISPOSE_ON_CLOSE);addWindowListener(newWindowAdapter(){publicvoidwindowClose(WindowEvente){//System.out.print("CLOSINGTHEWIN");System.exit(0);}});setResizable(false);//板的大小不能变化//设定年月/*年份的区间是当前年的过去10到当前年份的未来20*月份正常1-12月*/for(inti=now_year-10;i<=now_year+i++){word档可编辑复制Year.addItem(i+"");}for(inti=1;i<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(newGridLayout(7,7));for(inti=0;i<i++){button_day[i]=newJButton("pane_day.add(button_day[i]);}this.setDay();调用setDay()方法pane_parent.setLayout(newBorderLayout());设定布局管理器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();}//SETDAY方,显示日期voidsetDay(){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());word档可编辑复制}intyear_sel=Integer.parseInt(year_int)-1900;获得年份值Datedt=newDate(year_sel,month_int,1);//构造一个日期GregorianCalendarcal=GregorianCalendar();创建一个Calendar实cal.setTime(dt);Stringweek[]={星期日,"星期一","星期二,"星期三""星期四,星期五","星期六};int=0;//day中存放某个月份的数int0;用来存放某个月的第一天星期几的数值//--将期添加到前7个按钮中for(inti=0;i<7;i++){button_day[i].setText(week[i]);}//--/*判断是几月份,根据它来设定day的*其中二月份要判断是否是闰*/if(month_int==0||month_int==2||month_int==4||month_int==6||month_int==7||month_int==9||month_int==11){day=}else(month_int==3||month_int==5||month_int==8||month_int==10){day=}else{if(cal.isLeapYear(year_sel)){day=}else{day=}}d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省武汉市华中师大一附中2027届九年级化学第一学期期末检测试题含解析
- 云南省云南大附属中学2027届九上物理期末质量跟踪监视模拟试题含解析
- 内蒙古巴彦淖尔临河区四校联考2027届物理九上期末联考模拟试题含解析
- 安徽省安庆市桐城市2027届物理九上期末综合测试模拟试题含解析
- 2026中国印刷设备及材料行业市场深度调研与发展前景及竞争态势研究报告
- 2026中国印刷办公文具行业市场现状供需分析及投资评估规划分析研究报告
- 2026日本生物制药行业市场供需调研及投资开发规划全解析报告
- 2026中国智能电动物流特许投资系统行业市场现状供需分析及投资评估规划分析研究报告
- 2026瑞典家居制造行业市场竞争现状及投资前景评估规划分析研究报告
- 2026叶黄素酯生产工艺创新与成本控制优化研究报告
- 2025海康威视DS-VE21R-A-R1E 服务器用户手册
- 2024仁爱科普版八年级英语上册单词表(背诵版+默写版)
- 2025年及未来5年中国生姜及深加工行业市场全景调研及投资规划建议报告
- 华润电力控股有限公司招聘笔试题库及答案2025
- 高考语文大一轮复习讲义 目录
- 南网安规考试题库及答案
- 2025年吉林大安市事业单位面向上半年应征入伍高校毕业生招聘5人笔试模拟试题及参考答案详解一套
- 国网差旅管理办法
- 奖励与处罚管理办法
- 《HJ 212-2025 污染物自动监测监控系统数据传输技术要求》
- 江苏都桐科技有限公司新建锂离子电池用再生黑粉生产及再生磷酸铁锂测试电芯研发项目环评资料环境影响
评论
0/150
提交评论