




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学工程硕士课程论文-JAVA课程设计课程论文JAVA程序设计 题 目: 学院(系): 信息工程学院 专业班级: 电子与通信工程信息111班 学生姓名: 陈琛 学号: 1049721102851 指导教师: 魏洪涛 2011年 12月 10日摘 要 本选题旨在研究用JAVA语言制作一个日历选择器。制作出的日历选择器可以工桌面是用,方便快捷。使用者通过点击按钮弹出日历,然后选择需要的日期,最终将选择的日期显示在另一个界面中。程序包含一个类,一个主main函数,通过调用swing类的空间,并组装这些空间,可以完成一个简单的日历选择器功能。在这个日历里,可以任意选择某年某月,可以任意选择某天,最终将选择的日期显示在主程序窗体内。通过需求分许,设计,编码以及测试,最终完成了程序的编写。运行结果正确,基本符合选题的要求。本文包括前言、程序要求、 算法分析 、流程图 、源程序 、调试及运行结果、体会。最后附上参考文献。 关键字:JAVA 日历 swing目 录摘 要1目 录21 前言31.1 设计任务31.1.1 需求说明31.2 设计内容32 程序要求33 算法分析43.1main函数的布置以及主窗体的装载43.2日历窗体的分布和装载53.3日期按钮面板的装载63.4日期面板上日期显示的算法分析64 流程图、结构图84.1流程图84.2结构图85 程序源代码96 调试及运行结果216.1程序运行开始216.2选择当前月的某天216.3点击上个月按钮显示前面月份的日历226.4点击下个月按钮显示后面月份的日历236.5确认选择236.6结果237 体会248 参考文献251 前言1.1 设计任务1.1.1 需求说明Java语言的出现迎合了人们对应用程序跨平台运行的需求,已成为软件设计开发者应当掌握的一们基础语言,很多新的技术领域都涉及到了java语言。为了巩固学习的面向对象程序设计语言的知识,通过编写Java的应用系统综合实例,总结、回顾和实践面向对象的编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握。本设计是一个JAVA日历选择器的设计,利用Frame框架类,面板类进行图形化界面设计,实现日历选择器的功力显示功能。在本设计中,使用者通过点击按钮弹出日历,然后选择需要的日期,最终将选择的日期显示在另一个界面中。1.2 设计内容本设计的内容应该包括以下几个方面:(1)程序要求 (2)算法分析 (3)流程图 (4)源程序 (5)调试及运行结果(6)体会2 程序要求本程序要求用JAVA编写,完成一个可以选择日期的日历选择器。本程序可以完成以下功能。使用者通过点击按钮弹出日历,然后选择需要的日期,最终将选择的日期显示在另一个界面中。在日历界面中,应该有个住程序框,里面应该有点击显示日历的按钮和显示所选择日期的文本框。在选择日期的日历界面里,应该可以 (1)显示当月日历、当前日期、当前时间(2)可以按任意月来查询日历(3)可以用文字显示今天的日期(4)可以任意选择日期,并可显示选择的痕迹(5)可以将所选择的日期显示在主文本框里,以显示日历选择器的主要功能,即可选择日期。(6)选择完毕后可以隐藏日历(7)可以正常退出程序3 算法分析3.1main函数的布置以及主窗体的装载本程序包含一个类Jcalendar扩展系统的Jpanel类,和一个main函数。在main函数里,创建了Frame以及各组件来关联整个软件使之正常运行。下面是main函数里的相关组织。main里的声明:final JFrame f0=new JFrame();final JFrame f1=new JFrame();final JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p0=new JPanel();JButton b=new JButton();容器的装载:f0.setContentPane(p0);p0.add(p2,BorderLayout.NORTH);p0.add(p1,BorderLayout.SOUTH);p2.add(b,BorderLayout.CENTER);p1.add(jCalendar.Out2,BorderLayout.EAST);主窗体f0装载p0,p0包含Jpanel p1和p2,p1里放显示所选择日期的文本框Out2,p2放点击以显示日历的按钮b,最后f1里填充日历,然后通过按钮b的事件监听来显示和隐藏f1即日历,事件监听代码如下所示:b.addActionListener(new java.awt.event.ActionListener()public void actionPerformed(ActionEvent e) JCalendar jCalendar = new JCalendar();p1.removeAll();p1.add(jCalendar.Out2,BorderLayout.EAST);if(jCalendar.getIsShow()=false)f1.setContentPane(jCalendar);f1.pack();f1.show();jCalendar.setIsShow(true);else f1.hide();jCalendar.setIsShow(false););如上所示,通过addActionListener来添加按钮b的事件监听,在事件监听函数里,通过判断Jcalendar类里的isShow变量来判断窗体是否为显示,然后通过f1.show()和f1.hide()来显示和隐藏日历窗体。3.2日历窗体的分布和装载this.add(Main, BorderLayout.NORTH);this.add(jPanelDay, BorderLayout.CENTER);Main.add(jPanelMonth, BorderLayout.CENTER);jPanelDay.add(weekPanel,BorderLayout.NORTH);jPanelDay.add(Days, BorderLayout.CENTER);jPanelDay.add(Out, BorderLayout.SOUTH);jPanelMonth.add(Month, BorderLayout.CENTER);jPanelMonth.add(MonthDown, BorderLayout.WEST);jPanelMonth.add(MonthUp, BorderLayout.EAST);如上所示,首先整个大窗体装载Main和jPanelDay两个Jpanel,然后Main装载jPanelMonth(月选择面板),jPanelDay.装载weekPanel(星期一到星期日文本面板)、Days(显示日期的42个日期按钮面板)、Out(今天日期面板)3.3日期按钮面板的装载日期按钮面板是由42个按钮组成的,这42个按钮中的每一个按钮又有自己的时间如下所示:for(int i=0;i42;i+)daysi=new JToggleButton();daysi.setBorder(null);daysi.setBackground(SystemC);daysi.setHorizontalAlignment(SwingConstants.CENTER);daysi.setHorizontalTextPosition(SwingConstants.CENTER);daysi.addActionListener(new java.awt.event.ActionListener()public void actionPerformed(ActionEvent e) day=Integer.parseInt(JToggleButton)e.getSource().getText();showDate();showDays(););days.add(daysi);通过一个for循环循环添加42个按钮,并通过daysi.addActionListener来添加每个按钮的事件监听,使的点击每个按钮后可以在主面板里显示所选择的日期。3.4日期面板上日期显示的算法分析如下面代码所示,是日期显示算法的分析,在计算日期面板上日期的分布时,首先获得当前月第一天在当前星期是第几天,然后通过月份天数数组mm获得当前月上一个月的天数,在判断是否是二月和闰年就可以开始设置日期按钮上的日期了,首先通过第一个for循环设置上个月最后几天在当前月残留显示的几天,然后通过第二个for循环设置当前月从1号到最后一天的这n天,最后把剩余的日期按钮从1开始设置成下个月的头几天日期,这样日期面板上的日期就是当前所选月的日期分布了。如下面代码所示:void showDays() cal.set(year,month,1);int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);int n=mmmonth;int m=0;/记录当前月前一个月的天数if(month=0) m=mm11;else m=mmmonth-1;if(cal.isLeapYear(year)&month=1) n+;/是闰年又是二月天数就加一if(cal.isLeapYear(year)&(month-1)=1) m+;int i=0;/jLabel1.setForeground(Color.red);for(;ifirstDayOfWeek-1;i+)daysi.setEnabled(false);daysi.setSelected(false);daysi.setText(Integer.toString(m-(firstDayOfWeek-2-i);int d=1;for(;d=n;d+)daysi.setText(Integer.toString(d);daysi.setEnabled(true);if(d=day) daysi.setSelected(true);else daysi.setSelected(false);i+;for(int j=1;i42;i+,j+)daysi.setEnabled(false);daysi.setSelected(false);daysi.setText(Integer.toString(j);4 流程图、结构图4.1流程图开始初始化控件获得当天日期信息点击按钮显示日历选择日期点击按钮确认选择结束4.2结构图下面是各组件、容器的结构图:MonthJCalendarMainjPanelMonthMonthDownMonthUpdaysJPanelDayweekPanelOut5 程序源代码import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.SystemColor;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Locale;import java.util.Date;import java.util.StringTokenizer;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.JToggleButton;import javax.swing.SwingConstants;import javax.swing.UIManager;public class JCalendar extends JPanel/动态表示年月日private int year=0;private int month=0;private int day=0;private int first = 0;/用于标志日历面板是否显示private static boolean isShow = false;/主面板private JPanel Main = new JPanel();/日面板private JPanel jPanelDay = new JPanel();/月面板private JPanel jPanelMonth = new JPanel();/月的输入位置private JTextField Month = new JTextField();/减少月份private JButton MonthDown = new JButton();/增加月份private JButton MonthUp = new JButton();private JPanel jPanelButton = new JPanel();/减少年份private JButton YearDown = new JButton();/增加年份private JButton YearUp = new JButton();/显示日期的位置private JLabel Out = new JLabel();public JLabel Out2 = new JLabel();private Locale l=Locale.CHINESE;/主日历private GregorianCalendar cal=new GregorianCalendar(l);/星期面板private JPanel weekPanel=new JPanel();/天按钮组private JToggleButton days=new JToggleButton42;/天面板private JPanel Days = new JPanel();/标示private JLabel jLabel1 = new JLabel();private JLabel jLabel2 = new JLabel();private JLabel jLabel3 = new JLabel();private JLabel jLabel4 = new JLabel();private JLabel jLabel5 = new JLabel();private JLabel jLabel6 = new JLabel();private JLabel jLabel7 = new JLabel();/当前选择的天数按钮private JToggleButton cur=null;/月份天数数组,用来取得当月有多少天/ 1 2 3 4 5 6 7 8 9 10 11 12private int mm=31,28,31,30,31,30,31,31,30,31,30,31;/空日期构造函数public JCalendar() try jbInit();catch(Exception e) e.printStackTrace();/带日期设置的构造函数public JCalendar(int year, int month, int day) cal.set(year, month, day);try jbInit();catch (Exception e) e.printStackTrace();/带日历输入的构造函数public JCalendar(GregorianCalendar calendar) cal=calendar;try jbInit();catch (Exception e) e.printStackTrace();/带日期输入的构造函数public JCalendar(Date date) cal.setTime(date);try jbInit();catch (Exception e) e.printStackTrace();/初始化组件private void jbInit() throws Exception /初始化年、月、日iniCalender();this.setLayout(new BorderLayout();this.setBorder(BorderFactory.createRaisedBevelBorder();this.setMaximumSize(new Dimension(400, 300);this.setMinimumSize(new Dimension(400, 300);this.setPreferredSize(new Dimension(400, 300);Main.setLayout(new BorderLayout();Main.setBackground(SystemC);Main.setBorder(null);Month.setHorizontalAlignment(SwingConstants.CENTER);Month.setEditable(false);Out.setBackground(Color.lightGray);Out.setHorizontalAlignment(SwingConstants.LEFT);Out.setMaximumSize(new Dimension(200, 19);Out.setMinimumSize(new Dimension(200, 19);Out.setPreferredSize(new Dimension(200, 19);jLabel1.setForeground(Color.red);jLabel1.setHorizontalAlignment(SwingConstants.CENTER);jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);jLabel1.setText(星期日);jLabel2.setForeground(Color.blue);jLabel2.setHorizontalAlignment(SwingConstants.CENTER);jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);jLabel2.setText(星期六);jLabel3.setHorizontalAlignment(SwingConstants.CENTER);jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);jLabel3.setText(星期五);jLabel4.setHorizontalAlignment(SwingConstants.CENTER);jLabel4.setHorizontalTextPosition(SwingConstants.CENTER);jLabel4.setText(星期四);jLabel5.setHorizontalAlignment(SwingConstants.CENTER);jLabel5.setHorizontalTextPosition(SwingConstants.CENTER);jLabel5.setText(星期三);jLabel6.setBorder(null);jLabel6.setHorizontalAlignment(SwingConstants.CENTER);jLabel6.setHorizontalTextPosition(SwingConstants.CENTER);jLabel6.setText(星期二);jLabel7.setBackground(Color.lightGray);jLabel7.setForeground(Color.black);jLabel7.setBorder(null);jLabel7.setHorizontalAlignment(SwingConstants.CENTER);jLabel7.setHorizontalTextPosition(SwingConstants.CENTER);jLabel7.setText(星期一);weekPanel.setBackground(UIManager.getColor(InternalFrame.activeTitleGradient);weekPanel.setBorder(BorderFactory.createEtchedBorder();weekPanel.setLayout(new GridLayout(1,7);weekPanel.add(jLabel1, null);weekPanel.add(jLabel7, null);weekPanel.add(jLabel6, null);weekPanel.add(jLabel5, null);weekPanel.add(jLabel4, null);weekPanel.add(jLabel3, null);weekPanel.add(jLabel2, null);MonthUp.setAlignmentX(float) 0.0);MonthUp.setActionMap(null);jPanelMonth.setBackground(SystemC);jPanelMonth.setLayout(new BorderLayout();jPanelMonth.setBorder(BorderFactory.createEtchedBorder();/点击月份减事件MonthDown.setBorder(null);MonthDown.setText();MonthUp.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) MonthUp_actionPerformed(e););jPanelButton.setLayout(null);jPanelButton.setBorder(null);jPanelButton.addComponentListener(new java.awt.event.ComponentAdapter() public void componentResized(java.awt.event.ComponentEvent evt) jPanelButtonComponentResized(evt););jPanelDay.setLayout(new BorderLayout();Days.setLayout(new GridLayout(6,7);Days.setBackground(SystemC);for(int i=0;i42;i+)daysi=new JToggleButton();daysi.setBorder(null);daysi.setBackground(SystemC);daysi.setHorizontalAlignment(SwingConstants.CENTER);daysi.setHorizontalTextPosition(SwingConstants.CENTER);/daysi.setSize(l,l);daysi.addActionListener(new java.awt.event.ActionListener()public void actionPerformed(ActionEvent e) day=Integer.parseInt(JToggleButton)e.getSource().getText();showDate();showDays(););Days.add(daysi);this.add(Main, BorderLayout.NORTH);this.add(jPanelDay, BorderLayout.CENTER);Main.add(jPanelMonth, BorderLayout.CENTER);jPanelDay.add(weekPanel,BorderLayout.NORTH);jPanelDay.add(Days, BorderLayout.CENTER);jPanelDay.add(Out, BorderLayout.SOUTH);jPanelMonth.add(Month, BorderLayout.CENTER);jPanelMonth.add(MonthDown, BorderLayout.WEST);jPanelMonth.add(MonthUp, BorderLayout.EAST);showMonth();showDate();showDays();/自定义重画年选择面板void jPanelButtonComponentResized(java.awt.event.ComponentEvent evt)YearUp.setLocation(0,0);YearDown.setLocation(0,YearUp.getHeight();jPanelButton.setSize(YearUp.getWidth(),YearUp.getHeight()*2);jPanelButton.setPreferredSize(new Dimension(YearUp.getWidth(),YearUp.getHeight()*2);jPanelButton.updateUI();/测试用/* public static void main(String args)JFrame f=new JFrame();f.setContentPane(new JCalendar();f.pack();/f.setResizable(false);f.show(); */public static void main(String args)final JFrame f0=new JFrame();final JFrame f1=new JFrame();final JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p0=new JPanel();JButton b=new JButton();p0.setMaximumSize(new Dimension(200, 90);p0.setMinimumSize(new Dimension(200, 90);p0.setPreferredSize(new Dimension(200, 90);p0.add(p2,BorderLayout.NORTH);p0.add(p1,BorderLayout.SOUTH);b.setText(测试用的 );b.setMaximumSize(new Dimension(200, 30);b.setMinimumSize(new Dimension(200, 30);b.setPreferredSize(new Dimension(200, 30);b.setLocation(0,0);b.setBorder(null);b.setHorizontalAlignment(SwingConstants.CENTER);b.setHorizontalTextPosition(SwingConstants.CENTER);p2.add(b,BorderLayout.CENTER);b.addActionListener(new java.awt.event.ActionListener()public void actionPerformed(ActionEvent e) JCalendar jCalendar = new JCalendar();p1.removeAll();p1.add(jCalendar.Out2,BorderLayout.EAST);if(jCalendar.getIsShow()=false)f1.setContentPane(jCalendar);f1.pack();f1.show();jCalendar.setIsShow(true);else f1.hide();jCalendar.setIsShow(false););f0.setContentPane(p0);f0.pack();f0.show();/减少月份void MonthDown_actionPerformed(ActionEvent e) month-;if(month0) month = 11;year-;showMonth();showDate();showDays();/增加月份void MonthUp_actionPerformed(ActionEvent e) month+;if(month=12) month=0;year+;showMonth();showDate();showDays();/初始化年月日void iniCalender()year=cal.get(Calendar.YEAR);month=cal.get(Calendar.MONTH);day=cal.get(Calendar.DAY_OF_MONTH);/刷新月份void showMonth()Month.setText(Integer.toString(year)+年+Integer.toString(month+1)+月);/刷新日期void showDate()if (this.first = 0)Out.setText(今天: + Integer.toString(year) + 年 + Integer.toString(month + 1) + 月 + Integer.toString(day) + 日);this.first+;Out2.setText(Integer.toString(year)+年+Integer.toString(month+1)+月+Integer.toString(day)+日);/重画天数选择面板void showDays() cal.set(year,month,1);int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);int n=mmmonth;int m=0;/记录当前月前一个月的天数if(month=0) m=mm11;else m=mmmonth-1;if(cal.isLeapYear(year)&month=1) n+;/是闰年又是二月天数就加一if(cal.isLeapYear(year)&(month-1)=1) m+;int i=0;/jLabel1.setForeground(Color.red);for(;ifirstDayOfWeek-1;i+)daysi.setEnabled(false);daysi.setSelected(false);daysi.setText(Integer.toString(m-(firstDayOfWeek-2-i);int d=1;for(;d=n;d+)daysi.setText(Integer.toString(d);daysi.setEnabled(true);if(d=day) daysi.setSelected(true);else daysi.setSelected(false);i+;for(int j=1;i42;i+,j+)daysi.setEnabled(false);daysi.setSelected(false);daysi.setText(Integer.toString(j);/单击月份面板选择整个月份字符串void SelectionMonth()Month.setSelectionStart(0);Month.setSelectionEnd(Month.getText().length();/以字符串形式返回日期,yyyy-mm-ddpublic String getDate()return Out.getText();/以字符串形式输入日期,yyyy-mm-ddpublic void setDate(String date)if(date!=null)StringTokenizer f = new StringTokenizer(date, -);if(f.hasMoreTokens()year = Integer.parseInt(f.nextToken();if(f.hasMoreTokens()month = Integer.parseInt(f.nextToken();if(f.hasMoreTokens()day = Integer.parseInt(f.nextToken();cal.set(year,month,day);this.showMe();/以日期对象形式输入日期public void setTime(Date date)cal.setTime(date);this.iniCalender();this.showMe();/返回日期对象public Date getTime()return cal.getTime();/返回当前的日public int getDay() return day;/设置当前的日public void setDay(int day) this.day = day;cal.set(this.year,this.month,this.day);this.showMe();/设置当前的年public void setYear(int year) this.year = year;cal.set(this.year,this.month,this.day);this.showMe();/返回当前的年public int getYear() return year;/返回当前的月public int getMonth() return month;/设置当前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智慧校园教学资源平台建设:构建高效教育生态圈
- 民法典相伴一生课件
- 《ISO 37001-2025 反贿赂管理体系要求及使用指南》专业深度解读和应用培训指导材料之4:6策划(2025A1)(可编辑!)
- 河北省定兴中学2026届化学高二上期末质量检测模拟试题含答案
- 2025年英语四六级考试阅读理解专项训练试卷 高效解题技巧
- 2025年公务员考试行测数量关系专项突破模拟试题集
- 玩具公司专业知识培训总结课件
- 盐城小学面试题目及答案
- 玉簪花春季养护知识培训
- 2025年高端办公室装饰工程及智能照明系统安装合同
- 淋巴水肿健康科普
- 采购应急计划管理办法
- 上海选调生面试题和考官用题本及答案21套
- 2025年学校食堂从业人员食品安全知识培训考试试题及答案
- 2025年国家电投校园招聘笔试考点考试题库及答案
- 让情绪有着落-2025年情绪营销8大趋势洞察报告
- 教师校园安全培训课件
- 头皮健康与头发生长关系的研究
- Odoo面试题及答案
- 2025年全国I卷英语 高考真题
- 科技论文写作 第2版 课件 第1-5章 科技论文写作概述-英文科技论文的写作
评论
0/150
提交评论