6时钟日历设计JAVA实验报告
java日历实验报告
java日历实验报告Java日历实验报告引言在计算机科学领域中,日历是一种常见的应用程序。
它不仅可以帮助我们追踪时间和日期,还可以提供一些方便的功能,如提醒、日程安排等。
在本次实验中,我们将使用Java编程语言来实现一个简单的日历应用程序,并对其进行测试和评估。
实验目的本次实验的主要目的是通过实现一个日历应用程序来加深对Java编程语言的理解和掌握。
通过这个实验,我们将学习如何使用Java的日期和时间类来处理日期和时间相关的操作,并且能够将这些操作应用到实际的应用程序中。
实验步骤1. 设计日历应用程序的功能和界面:在开始编写代码之前,我们首先需要确定日历应用程序的功能和界面设计。
我们可以考虑添加以下功能:显示当前日期、切换月份、添加日程安排等。
在界面设计方面,我们可以使用图形用户界面(GUI)来提供更好的用户体验。
2. 实现日历应用程序的核心功能:在设计完成后,我们可以开始编写代码来实现日历应用程序的核心功能。
首先,我们需要使用Java的日期和时间类来获取当前日期,并将其显示在界面上。
然后,我们可以添加一些按钮或菜单来实现切换月份的功能。
最后,我们可以使用文本框或文本区域来让用户输入日程安排,并将其保存到文件或数据库中。
3. 进行测试和评估:在完成编码后,我们需要对日历应用程序进行测试和评估。
我们可以输入一些测试用例,如切换月份、添加日程安排等,来验证程序的正确性和稳定性。
如果发现了问题或错误,我们需要进行调试和修复,直到程序能够正常运行。
实验结果经过测试和评估,我们的日历应用程序能够正常运行,并且具备基本的功能。
用户可以通过界面来查看当前日期,并且可以方便地切换月份。
用户还可以添加日程安排,并且程序能够将其保存和显示。
讨论与总结通过本次实验,我们深入学习了Java的日期和时间类,并将其应用到实际的日历应用程序中。
我们了解了如何获取当前日期、切换月份以及添加日程安排等操作。
同时,我们也发现了一些问题和改进的空间,如界面设计可以更加美观,功能可以更加完善等。
日历时钟设计总结报告
日历时钟设计总结报告1. 引言日历时钟是一种常见的时间管理工具,它不仅能显示当前的时间,还可以提供日期、星期、月份等信息,帮助人们更好地安排和管理时间。
本文将总结我们设计师团队在开发日历时钟过程中的经验和教训,并对设计方案进行评估和改进。
2. 设计背景随着人们生活节奏的加快和压力的增加,时间管理变得越来越重要。
一款功能全面、操作简便的日历时钟对于人们合理安排时间、提高生产效率至关重要。
基于此背景,我们团队决定设计一款简洁实用的日历时钟产品。
3. 设计方案3.1 功能设计我们确定了以下主要功能:- 显示当前时间,包括小时、分钟和秒钟;- 显示当前日期、星期和月份;- 闹钟功能,用户可以设置闹钟时间并收到提醒;- 定时器功能,用户可以设置定时器时间并收到倒计时提醒。
3.2 用户界面设计为了简化操作,我们设计了以下界面布局:- 顶部为时间显示区域;- 左侧为日期和星期显示区域;- 右侧为月份显示区域;- 下方为功能按钮区域。
4. 开发过程我们采用敏捷开发方法,分为需求分析、设计、编码和测试四个阶段进行。
在需求分析阶段,我们与用户进行了需求沟通,确保功能需求和界面设计符合用户期望。
在设计阶段,我们团队进行了头脑风暴,获得了多个设计方案,并经过讨论和评估选择了最终方案。
在编码阶段,我们团队协同工作,分工合作,确保代码的质量和可维护性。
在测试阶段,我们进行了单元测试、功能测试和系统测试,确保软件的正确性和稳定性。
5. 评估与改进在开发过程中,我们遇到了一些挑战和问题,需要进行评估和改进:- 介面设计规划是否足够清晰,用户易于接受和操作;- 功能是否足够全面,是否满足用户的实际需求;- 代码的可维护性和扩展性是否良好,方便后续版本的改进。
根据评估的结果,我们决定改进方案:- 进一步优化界面设计,提高用户的使用体验;- 增加一些实用的功能,如倒计时、备忘录等,以满足不同用户的需求;- 优化代码结构,提高代码的可维护性和扩展性。
java课程设计报告_简单日历程序
. . ..课程设计题目2. 题目说明通过编写一个基于JAVA的应用系统综合实例,自定义一个日历组件显示日期和时间并进行适当的功能扩充,实践Java语言编程技术。
3. 系统设计2.1 设计目标一个完整的程序应具有以下功能:1)显示当月日历、当前日期、当前时间;2)可查寻任意月以及任意年的日历;3)使用图形化界面能够弹出对话框;5)正常退出程序。
2.2 设计思想设计一个类用来构成日历系统的主窗口,然后编写一个框架类显示时间和提示信息。
在设计中应用了多种容器和控件。
2.3 系统模块划分图1:简易日历的程序结构图2.3.1初始化:public void init()完成界面初始化,形成一个以挂历形式显示当前日期的窗口。
2.3.2日历描述:(1)public void updateView()改变日期后完成更新界面;(2)抽象类java.util.Calendar获取系统日期并传递日期数据而且在人工改变日期后得出当天是周几;(3)public static void main(String[] args)主函数完成系统各算法的调用并对主窗口的一些属性进行设置;2.3.3滚动时间:将时间以文本的形式在文本框中滚动播出,并能改变滚动的速度。
4. 使用类及接口仅仅简单说明类的功能,详细资料请参看《JavaTM2PlatformStandard Ed. 6》的电子文档,常规的接口与包则省略不屑。
//以下是日历程序块中使用的类package fancy;import java.awt.*;import java.awt.event.*;import java.util.*; //主要用此包中的日期和时间类import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;//以下是对滚动时间程序块所使用的类和接口,用到定时器类Timerimport java.awt.Color;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.event.FocusListener;、//用于监听鼠标单击(焦点改变)事件import java.awt.event.FocusEvent;//用于响应鼠标单击(焦点改变)事件、import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JSpinner;//让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。
Java日历记事本课程设计报告毕业用资料
Java日历记事本课程设计报告在设计日历记事本时,需要编写6个JAVA源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CalendarImage.java、Clock.java和CalendarMesssage.java效果图如下.CalendarWindow类import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener{int year,month,day;CalendarMessage calendarMessage;CalendarPad calendarPad;NotePad notePad;JTextField showYear,showMonth;JTextField[]showDay;CalendarImage calendarImage;String picturename;Clock clock;JButton nextYear,previousYear,nextMonth,previousMonth;JButtonsaveDailyRecord,deleteDailyRecord,readDailyRecord;JButton getPicture;File dir;Color backColor=Color.white;public CalendarWindow(){dir=new File("./dailyRecord");dir.mkdir();showDay=new JTextField[42];for(int i=0;i<showDay.length;i++){showDay[i]=new JTextField();showDay[i].setBackground(backColor);showDay[i].setLayout(new GridLayout(3,3));showDay[i].addMouseListener(this);showDay[i].addFocusListener(this);}calendarMessage=new CalendarMessage();calendarPad=new CalendarPad();notePad=new NotePad();Calendar calendar=Calendar.getInstance();calendar.setTime(new Date());year=calendar.get(Calendar.YEAR);month=calendar.get(Calendar.MONTH)+1;day=calendar.get(Calendar.DAY_OF_MONTH);calendarMessage.setYear(year);calendarMessage.setMonth(month);calendarMessage.setDay(day);calendarPad.setCalendarMessage(calendarMessage);calendarPad.setShowDayTextField(showDay);notePad.setShowMessage(year,month,day);calendarPad.showMonthCalendar();doMark();calendarImage=new CalendarImage();calendarImage.setImageFile(new File("flower.jpg"));clock=new Clock();JSplitPane splitV1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarIm age);JSplitPane splitV2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock);JSplitPane splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);add(splitH,BorderLayout.CENTER);showYear=new JTextField(""+year,6);showYear.setFont(newFont("TimesRoman",Font.BOLD,12));showYear.setHorizontalAlignment(JTextField.CENTER);showMonth=new JTextField(""+month,4);。
java日历设计报告参考模板
华东交通大学理工学院课程设计报告书所属课程名称 java语言程序设计课程设计题目利用java完成日历的制作分院电信分院专业班级电商二班学号 20120410210129学生姓名方槐指导教师葛菁20 13 年12 月29 日课程设计(论文)评阅意见评阅人职称20 年月日目录第1章课程设计内容及要求. (4)第2章编写程序及结果 (5)第3章课程设计心得 (11)第4章参考文献 (12)第一章课程设计内容及要求内容一设计内容利用java程序编写我们生活中的经常使用的日历,当你想看哪个月的具体情况时,只需运行我们的程序就可以达到目的。
二要求内容利用我们所学的编写一个简单的日历表三设计原理运用课堂所学知识和上机课的练习的基础上在Java运行环境JCreaor中编写程序,还有在课外自己学的扫描仪。
四设计目的1.运用我们自学的扫描仪实现我们的操作。
2.该日历可以实现与生活中的日历一样。
3.先随机输入几年,随机输入几月,就能显示当月的天数,每一天的星期第二章编写程序及结果一程序编程Import java.util.Scanner;public class Qsr_2013{public static void main(String[] args){Scanner in=new Scanner(System.in);System.out.println("请输入月份:");int month=in.nextInt();int sum=0;for(int i=1;i<month;i++){if(i==2){if(year%4==0&&year%100!=0||year%400==0){sum+=29;}else{sum+=28;}}else{if(i==4||i==6||i==9||i==11){sum+=30;}else{sum+=31;}}}sum+=1;int wekday=sum%7;System.out.println("日\t一\t二\t三\t四\t五\t六"); for(int i=1;i<=wekday;i++){System.out.print("\t");}for(int i=1;i<=30;i++){if(sum%7==6){System.out.print(i+"\n");}else{System.out.print(i+"\t");}sum++;}}}二运行结果来两张程序截图先确定下没有错误的2013年输入月份然后运行 1月哦4月来张第三章心得通过这次课程设计,使我灵活应用所学java知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
java实验报告 日历设计
班级:**** 姓名:*** 学号:****10010127Java实验报告实验7 日历一、实验目的1. 掌握SWT 的容器概念及使用方法。
2. 掌握SWT 中的工具栏与菜单的使用方法。
3. 掌握SWT 中的表格组件的使用。
4. 掌握SWT 各种对话框的使用方法。
二、实验内容:简单日历系统的设计与实现。
三、实验步骤:1. 简单日历系统的设计与实现1) 创建Java 类。
在“包资源管理器”中用鼠标右击项目“Practical”,选择快捷菜单中“新建”→“Visual Class”;在打开的“New Java Visual Class ”窗口中,“源文件夹”的默认值是项目的文件夹,不需要更改,“包”栏中输入程序包的名称“ch7”。
“名称”栏中输入类名“Su”,在“Style ”列表框中选择“SWT”→“Shell”,选中“public static void main(String[] args) ”复选框,使之自动创建一个main 方法,单击“完成”按钮,一个含有GUI 程序界面以及代码的编辑器窗口被打开。
2) 添加组件。
用鼠标右键单击GUI 程序界面的任何位置,在快捷菜单中选择“Set Layout”→“FillLayout”。
在“Palette”面板中用鼠标单击“SWT Containers ”中的“ViewForm”,在程序界面sShell 中添加ViewForm 容器viewForm 。
从Pallete 工具栏中依次单击组件:T oolBar 和T able ,在ViewForm 容器添加一个工具栏toolBar 和一个表格table ,并在工具栏toolBar 中添加4 个工具栏按钮toolItem~toolItem3;在表格中添加7 个表列tableColumn~tableColumn6 。
更改4 个工具栏按钮的T ext 属性分别为“上一年”、“上个月”、“下个月”和“下一年”;更改7 个表列的T ext 属性分别为“日”~“六”,如图下所示。
java日历课程设计报告
软件学院课程设计报告书课程名称面向对象课程设计设计题目专业班级学号姓名指导教师年 1 月int selYear1=Integer.parseInt(calLis.Year.getSelectedItem());int selYear = selYear1- 1900;Date d1 = new Date(selYear,selMonth,1);int day = d1.getDay();calLis.setVal(d1,day,selMonth,selYear);}}class myAction implements ActionListener{CalenderCreator calAc;int newyear;public myAction(CalenderCreator ca{calAc=ca;}//为“关闭”按钮添加监听事件,当“关闭”按钮被点击时就执行这里的部分public void actionPerformed(ActionEvent e){String s=calAc.textfield.getText();// newyear=Integer.parseInt(s);System.out.println("Year upto::::::::"+s);calAc.setYear(s);TextField tf = (TextField)e.getSource();tf.removeActionListener(this);}}4.3用图片辅助认识程序的具体操作和执行图4-1:月份和年份的效果图图4-2:星期的效果图图4-3:日期的效果图图4-4:日历整体效果图4.4附注完整程序设计import java.awt.*;import java.awt.event.*;import java.util.*;public class CalenderCreator extends Frame{Button days[]=new Button[49];Choice Month=new Choice();Choice Year=new Choice();Label lmonth=new Label("MONTH");Label lyear=new Label("Year");Label ltext=new Label("YEAR UPTO");Panel p1,p2;GregorianCalendar gc=new GregorianCalendar();int totdays;TextField textfield=new TextField(2);public CalenderCreator(){setTitle("日历");setSize(400,400);。
时钟与日历课程设计报告
报告编号:第六组综合课程设计报告时钟与日历系统的设计与实现学生姓名:指导教师:所在系:电子信息系所学专业:计算机科学与技术年级:2009年12月目录第1章前言 (1)1.1 系统前景 (1)1.2 系统主要功能 (1)第2章需求分析 (2)第3章概要设计 (3)3.1 主界面模块 (3)3.2 时钟模块 (3)3.3 日历模块 (5)第4章详细设计 (6)4.1 主界面 (6)4.2日历部分 (7)4.3时钟部分 (10)第5章系统测试 (12)第6章小结 (16)参考文献 (16)附录 (17)摘要针对用户对日历与时间的系统要求,本应用软件运用java语言编写,在swing组件中通过程序的编写,实现了基本的时钟和日历功能,本应用软件中的时钟时间以所在电脑的系统时间为准,用户可在修改时间的界面中修改系统时间来调整时钟的指向。
日历中可以通过单击日历中的数字实现时间的修改。
时钟部分可以在动态显示数字钟和图形钟,并且两个互相不影响。
修改时钟的时间的时候修改的是本操作系统的时间。
本系统中多次运用到了线程机制。
可视化主界面里面添加了两个panel,分别放时间和日期的板块。
关键字:swing组件时钟日历多线程可视化界面第1章前言1.1系统前景随着社会的发展,时间在人的生活中扮演着越来越重要的角色,本系统用JAVA实现的日历和时间的显示更新。
现在大部分JAVA写的程序时时钟和日历分开的并且无法改变时间,本系统把时间里面的日历和时钟整合在了一块,而且实现了对时间的修改。
Java是一个面向对象的程序设计语言,可以让我们更好的掌握面向对象思想解决实际问题的能力。
Java拥有庞大的API,其中ng包下的80%的类都是我们必须熟练掌握的,还有其他如:java.awt包,java.math包等等,AWT 的基本内容,包括各种组件事件、监听器、布局管理器、常用组件、打印,还有Swing组件的基本内容等。
运用这些强大的API我们可以开发出很多的应用程序。
java课程设计万年历报告
java课程设计万年历报告一、课程目标知识目标:1. 掌握Java语言基础,包括数据类型、运算符、控制结构等;2. 学会使用Java中的类和对象,理解面向对象编程思想;3. 了解Java中日期时间处理类,如java.util.Calendar和java.time包的使用;4. 能够运用所学知识设计并实现一个简单的万年历程序。
技能目标:1. 培养学生运用Java语言解决实际问题的能力;2. 提高学生的编程实践能力,使其能够独立完成程序的设计、编码、测试和调试;3. 培养学生查阅资料、自学新知识的能力,为后续学习打下基础。
情感态度价值观目标:1. 培养学生热爱编程,对计算机科学产生浓厚兴趣;2. 培养学生积极思考、主动探究的学习态度,提高其解决问题的自信心;3. 培养学生良好的团队合作精神,学会在团队中沟通与协作。
分析课程性质、学生特点和教学要求:本课程为Java语言编程课程,旨在让学生掌握Java编程基础,并能运用所学知识解决实际问题。
学生处于初中年级,具备一定的逻辑思维能力,对新鲜事物充满好奇心,但编程实践经验不足。
因此,教学要求注重理论与实践相结合,以项目驱动教学,激发学生兴趣,培养其编程技能和解决问题的能力。
课程目标分解:1. 知识目标:通过讲解和练习,使学生掌握Java基础知识和日期时间处理类;2. 技能目标:通过项目实践,培养学生编程能力和解决问题的能力;3. 情感态度价值观目标:通过团队合作和互动交流,激发学生兴趣,培养其积极的学习态度和价值观。
二、教学内容1. Java基础知识回顾- 数据类型与变量- 运算符与表达式- 控制结构(顺序、分支、循环)2. 面向对象编程基础- 类与对象- 方法- 封装、继承、多态3. Java日期时间处理类- java.util.Calendar类- java.time包(LocalDate、LocalTime、LocalDateTime)4. 万年历项目实践- 项目需求分析- 程序设计(界面设计、功能模块划分)- 编码实现(关键代码:日期计算、界面展示)- 测试与调试5. 教学内容的安排和进度- Java基础知识回顾(1课时)- 面向对象编程基础(2课时)- Java日期时间处理类(1课时)- 万年历项目实践(3课时)6. 教材章节及内容列举- 《Java编程思想》第3章:控制结构- 《Java编程思想》第4章:面向对象编程- 《Java核心技术 卷I》第9章:日期时间处理教学内容确保科学性和系统性,结合课程目标,注重理论与实践相结合,以项目驱动教学,使学生在实践中掌握Java编程知识。
java课程设计报告---实用万年历记事本
java课程设计报告---实用万年历记事本Java应用技术实践报告题目实用万年历记事本起讫日期所在院系学生姓名专业班级学号指导教师职称所在单位2010年 1 月 11 日一(总体设计NotePad 1(类之间的关系如图1-1所示。
CalendarWindowClockCalendarImagCalendarMessCalendarPade age图1-1 类之间的关系 2(java源文件及其功能如表1-1所示。
表1-1 java源文件及其功能序文件名主要功能备注号CalendarWindow.jav创建实用万年历记事本程序的主窗含有main方法 1 a 口CalendarMessage.ja该文件用来刻画和“日期”有关的数 2 va 据该文件负责显示和修改 3 CalendarPad.java CalendarMessage对象中的日期数据该文件负责提供编辑、读取、保存和 4 NotePad.java 删除日志的该文件负责绘制图像 5 CalendarImage.java该文件负责显示时钟 6 Clock.java- 1 -二(详细设计1( CalendarWindow(1)成员变量主要成员变量(属性)成员变量描述变量类型名称年、月、日 Year,month,day Int显示日期 showDay JTextField[]日历对象 calendarPad CalendarPad日志对象 notepad NotePad月 JTextField[] ShowMonth年 JTextField[] ShowYear图像对象 CalendarImage calendarImage时钟对象 Clock clock处理日期 CalendarMessae calendarMessaenextYear、nextMonth、previousYear、previousMonth、按钮对象 JButton saveDailyRecord、deleteDailyRecord、readDailyRecord (2)方法见表主要方法方法名功能备注 CalendarWindow 创建程序主窗口构造方法doMark 对日志日期做出标记 focusGained 处理FocusListener事件mousePressed 处理MouseEvent事件处理ActionEvent事件 actionPerformed 接口方法程序开始运行 main- 2 -(3)源代码见文件CalendarWindow二(CalendarMessage(1)成员变量见表表1-4 主要成员变量(属性)成员变量描述变量类型名称记录日志的年、月、日 int year、month、day (2)方法见表1-5表1-5 主要方法方法名功能备注SetDay、getDay 设置、获取日期 setMonth/getMonth 设置、获取月份setYear、getYear 设置、获取年份 getMonthCalendar() 处理日期数据 (3)源代码见文件CalendarMessage.javaimport java.util.Calendar; public class CalendarMessage{int year=-1,month=-1,day=-1;public void setYear(int year){this.year=year;}public int getYear(){return year;}public void setMonth(int month){if(month<=12&&month>=1)this.month=month;elsethis.month=1;}public int getMonth(){return month;}public void setDay(int day){this.day=day;}public int getDay(){return day;}public String [] getMonthCalendar(){String [] day=new String[42];- 3 -Calendar rili=Calendar.getInstance();rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1;int dayAmount=0;if(month==1||month==3||month==5||month==7||month==8||month==10 ||month==12)dayAmount=31;if(month==4||month==6||month==9||month==11)dayAmount=30;if(month==2)if(((year%4==0)&&(year%100!=0))||(year%400==0))dayAmount=29;elsedayAmount=28;for(int i=0;i<星期几;i++)day[i]="";for(int i=星期几,n=1;i<星期几+dayAmount;i++){day[i]=String.valueOf(n) ;n++;}for(int i=星期几+dayAmount;i<42;i++)day[i]="";return day;}}3(CalendarPad(1)成员变量见表表1-6 主要成员变量(属性)成员变量描述变量类型名称确定年份、月份、日期的整数 year、month、day IntcalendarPad 处理和日期有关的数据 CalendarPadshowDay 显示日期 JTextField星期 String[](2)方法见表表1-7 主要方法方法名功能备注CalendarPad 创建calendarPad对象构造方法- 4 -setShowDayTextField负责设置showDay数组 (JTextField[])setCalendarMes负责设置sage(CalendarM calendarMessage对象 essage) showMonthCalen负责显示“日历” dar()(3)源代码见文件CalendarPad.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class CalendarPad extends JPanel{int year,month,day;CalendarMessage calendarMessage;JTextField [] showDay;JLabel title[];String [] 星期={"SUN日","MON一","TUE二","WED三","THU四","FRI 五","SAT六"};JPanel north,center;public CalendarPad(){setLayout(new BorderLayout());north=new JPanel();north.setLayout(new GridLayout(1,7));center=new JPanel();center.setLayout(new GridLayout(6,7));add(center,BorderLayout.CENTER);add(north,BorderLayout.NORTH);title=new JLabel[7];for(int j=0;j<7;j++){title[j]=new JLabel();title[j].setFont(new Font("TimesRoman",Font.BOLD,12)); [j]); title[j].setText(星期title[j].setHorizontalAlignment(JLabel.CENTER);title[j].setBorder(BorderFactory.createRaisedBevelBorder()); north.add(title[j]);}title[0].setForeground(Color.red);title[6].setForeground(Color.blue);}public void setShowDayTextField(JTextField [] text){ showDay=text;for(int i=0;i<showDay.length;i++){showDay[i].setFont(newFont("TimesRoman",Font.BOLD,15));showDay[i].setHorizontalAlignment(JTextField.CENTER); - 5 -showDay[i].setEditable(false);center.add(showDay[i]);}}public void setCalendarMessage(CalendarMessage calendarMessage){this.calendarMessage=calendarMessage;}public void showMonthCalendar(){String [] a=calendarMessage.getMonthCalendar();for(int i=0;i<42;i++)showDay[i].setText(a[i]);validate();}}4(NotePad1)成员变量见表1-8 (表1-8 主要成员变量(属性)成员变量描述变量类型名称JTextArea 可编辑多行文本 text显示和日期有关的数据 showMessage JTextFieldmenu JpopupMenu 下月,上月itmeCopy、itmeCut、复制,剪切,粘贴,清空 JMenuItem itemPaste、itmeClear (2)方法见表9表9 主要方法方法名功能备注NotePad 创建notePad 构造方法 setShowMessage指定日期数据,显示日(int,int,int) 期信息Save(File,指定日期,保存日志 int,int,int)Save(File,指定日期,删除日志 int,int,int)read(File,int,读取参数日期日志 int,int)(3)源代码见文件NotePad.java- 6 -import java.awt.*;import javax.swing.*;import java.io.*;import java.awt.event.*;public class NotePad extends JPanel implements ActionListener{ JTextArea text;JTextField showMessage;JPopupMenu menu;JMenuItem itemCopy,itemCut,itemPaste,itemClear;public NotePad(){showMessage=new JTextField();showMessage.setHorizontalAlignment(JTextField.CENTER); showMessage.setFont(new Font("TimesRoman",Font.BOLD,16)); showMessage.setForeground(Color.blue);showMessage.setBackground(Color.pink);showMessage.setBorder(BorderFactory.createRaisedBevelBorder()); showMessage.setEditable(false);menu=new JPopupMenu();itemCopy=new JMenuItem("复制");itemCut=new JMenuItem("剪切");itemPaste=new JMenuItem("粘贴");itemClear=new JMenuItem("清空");itemCopy.addActionListener(this);itemCut.addActionListener(this);itemPaste.addActionListener(this);itemClear.addActionListener(this);menu.add(itemCopy);menu.add(itemCut);menu.add(itemPaste);menu.add(itemClear);text=new JTextArea(10,10);text.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvente){if(e.getModifiers()==InputEvent.BUTTON3_MASK)menu.show(text,e.getX(),e.getY());}});setLayout(new BorderLayout());add(showMessage,BorderLayout.NORTH);add(new JScrollPane(text),BorderLayout.CENTER);}public void setShowMessage(int year,int month,int day){ showMessage.setText(""+year+"年"+month+"月"+day+"日"); }public void save(File dir,int year,int month,int day){ String dailyContent=text.getText();String fileName=""+year+""+month+""+day+".txt";- 7 -String key=""+year+""+month+""+day;String [] dayFile=dir.list();boolean boo=false;for(int k=0;k<dayFile.length;k++){if(dayFile[k].startsWith(key)){boo=true;break;}}if(boo){String m=""+year+"年"+month+"月"+day+"已有日志,将新的内容添加到日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){try{File f=new File(dir,fileName);RandomAccessFile out=new RandomAccessFile(f,"rw");long fileEnd=out.length();byte []bb=dailyContent.getBytes();out.seek(fileEnd);out.write(bb);out.close();}catch(IOException exp){}}}else{String m=""+year+"年"+month+"月"+day+"还没有日志,保存日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){try{File f=new File(dir,fileName);RandomAccessFile out=new RandomAccessFile(f,"rw");long fileEnd=out.length();byte []bb=dailyContent.getBytes();out.write(bb);out.close();}catch(IOException exp){}}}}public void delete(File dir,int year,int month,int day){ String key=""+year+""+month+""+day;- 8 -String [] dayFile=dir.list();boolean boo=false;for(int k=0;k<dayFile.length;k++){if(dayFile[k].startsWith(key)){boo=true;break;}}if(boo){String m="删除"+year+"年"+month+"月"+day+"日的日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){String fileName=""+year+""+month+""+day+".txt";File deleteFile=new File(dir,fileName);deleteFile.delete();}}else{String m=""+year+"年"+month+"月"+day+"无日志记录";JOptionPane.showMessageDialog(this,m,"提示",JOptionPane.WARNING_MESSAGE);}}public void read(File dir,int year,int month,int day){ String fileName=""+year+""+month+""+day+".txt";String key=""+year+""+month+""+day;String [] dayFile=dir.list();boolean boo=false;for(int k=0;k<dayFile.length;k++){if(dayFile[k].startsWith(key)){boo=true;break;}}if(boo){String m=""+year+"年"+month+"月"+day+"有日志,显示日志内容吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){text.setText(null);try{File f=new File(dir,fileName);FileReader inOne=new FileReader(f);BufferedReader inTwo= new BufferedReader(inOne);String s=null;while((s=inTwo.readLine())!=null)- 9 -text.append(s+"\n");inOne.close();inTwo.close();}catch(IOException exp){}}}else{String m=""+year+"年"+month+"月"+day+"无日志记录";JOptionPane.showMessageDialog(this,m,"提示",JOptionPane.WARNING_MESSAGE);}}public void actionPerformed(ActionEvent e){if(e.getSource()==itemCopy)text.copy();else if(e.getSource()==itemCut)text.cut();else if(e.getSource()==itemPaste)text.paste();else if(e.getSource()==itemClear)text.setText(null);}}5(CalendarImage1)成员变量见表1-8 (表1-8 主要成员变量(属性)成员变量描述变量类型名称File 存放图像文件的引用 imageFileImage Image负责创建image对象 Toolkit tool (2)方法见表9表9 主要方法方法名功能备注 CalendarImage创建calendarImage对构造方法 () 象负责设置imageFile对setImageFile象,根据imageFile创 (File) 建image paintComponent负责绘制image- 10 -(Graphics)(3)源代码见文件CalendarImage.java import javax.swing.*;import java.io.*;import java.awt.*;public class CalendarImage extends JPanel{File imageFile;Image image;Toolkit tool;CalendarImage(){tool=getToolkit();}public void setImageFile(File f){imageFile=f;try{ image=tool.getImage(imageFile.toURI().toURL());}catch(Exception exp){}repaint();}public void paintComponent(Graphics g){super.paintComponent(g);int w=getBounds().width;int h=getBounds().height;g.drawImage(image,0,0,w,h,this);}}6(Clock(1)成员变量见表主要成员变量(属性)成员变量描述变量类型名称Clock 时钟 clock (2)方法见表主要方法方法名功能备注Clock() 创建clock对象构造方法负责设置imageFile对paint(Graphics象,根据imageFile创 ) 建image start() 开始线程- 11 -stop() 停止线程run() (3)源代码见文件Clock.java import java.awt.*;import java.util.*;import javax.swing.*;import java.awt.geom.*; public class Clock extends JPanel implements Runnable{Thread clock;public Clock(){super();setFont(new Font("Times new Roman",Font.BOLD,60));start();setSize(280,100);Dimensionscreen=Toolkit.getDefaultToolkit().getScreenSize();}public void start(){if(clock==null){clock=new Thread(this);clock.start();}}public void run(){while(clock!=null){repaint();try{Thread.sleep(1000);}catch (InterruptedException ex){ex.printStackTrace();}}}public void stop(){clock=null;}public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g;- 12 -Calendar now=new GregorianCalendar(); String timeInfo="";int hour=now.get(Calendar.HOUR_OF_DAY); int minute=now.get(Calendar.MINUTE);int second=now.get(Calendar.SECOND);if(hour<=9)timeInfo+="0"+hour+":";elsetimeInfo+=hour+":";if(minute<=9)timeInfo+="0"+minute+":";elsetimeInfo+=minute+":";if(second<=9)timeInfo+="0"+second;elsetimeInfo+=second;g.setColor(Color.PINK);Dimension dim=getSize();g.fillRect(0,0,dim.width,dim.height);g.setColor(Color.BLACK);g.drawString(timeInfo,40,80); }}三(运行效果1(使用eclipse软件运行该系统后,即可进入实用万年历记事本程序的主窗口。
Java课程设计报告——桌面日历
Java课程设计报告——桌面日历目录一、需求分析 (2)二、概要设计 (3)三、详细设计 (4)四、调试分析 (9)五、用户说明 (9)六、运行结果 (10)七、附录 (10)一、需求分析选题意义:自上世纪以来,随着电脑的逐渐普及,人们的工作和生活越来越方便和快捷,也使越来越多的人依赖于电脑办公。
而传统的日历记事本显现出在当今时代的不足和局限性,比如不便携带、不便查找、不能自动提醒等等,电脑桌面日历由此孕育而生。
本设计就是针对当前网络上众多的桌面日历,综合其各项基本功能来开发一套属于自己的个性化日历系统。
本设计主要采用NetBeans开发平台,通过java语言来实现记事,日期查询以及日志提醒等工作。
为客户带来方便,同时系统的阐述开发采用的过程及方法。
功能实现:1、通过标签类jLabel显示日、月,程序主体框架。
2、通过按钮类jPanelButton,▲和▼调整年份通过代码“\u25C4”和“"\u25BA"”调整月份。
3、添加鼠标事件,键盘事件,分别可以通过按钮和键盘输入调整显示日期。
4、程序通过读取计算机当前日期,显示当前日期二、概要设计1、取得月份天数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}; //空日期构造函数2、带日期设置的构造函数public JCalendar() {try {jbInit();}catch(Exception e) {e.printStackTrace();}}//带日期设置的构造函数3、带日历输入的构造函数public JCalendar(int year, int month, int day) {cal.set(year, month, day);try {jbInit();}catch (Exception e) {e.printStackTrace();}}//带日历输入的构造函数4、带日期输入的构造函数public JCalendar(GregorianCalendar calendar) {cal=calendar;try {jbInit();}catch (Exception e) {e.printStackTrace();}}//带日期输入的构造函数5、初始化组件public JCalendar(Date date) {cal.setTime(date);try {jbInit();}catch (Exception e) {e.printStackTrace();}}//初始化组件三、详细设计部分代码void jPanelButtonComponentResized(ponentEvent evt){ YearUp.setLocation(0,0);YearDown.setLocation(0,YearUp.getHeight());jPanelButton.setSize(YearUp.getWidth(),YearUp.getHeight()*2); jPanelButton.setPreferredSize(newDimension(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();}//增加年份void YearUp_actionPerformed(ActionEvent e) {year++;showYear();showDate();showDays();}//减少年份void YearDown_actionPerformed(ActionEvent e) {year--;showYear();showDate();showDays();}//减少月份void MonthDown_actionPerformed(ActionEvent e) {month--;if(month<0) {month = 11;year--;showYear();}showMonth();showDate();showDays();}//增加月份void MonthUp_actionPerformed(ActionEvent e) {month++;if(month==12) {month=0;year++;showYear();}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(month+1)+"月");}//刷新年份void showYear(){Year.setText(Integer.toString(year)+"年");}//刷新日期void showDate(){Out.setText(Integer.toString(year)+"-"+Integer.toString(month+1)+"-"+In teger.toString(day));}//重画天数选择面板void showDays() {cal.set(year,month,1);int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK); int n=mm[month];if(cal.isLeapYear(year)&&month==1) n++;int i=0;for(;i<firstDayOfWeek-1;i++){days[i].setEnabled(false);days[i].setSelected(false);days[i].setText("");}int d=1;for(;d<=n;d++){days[i].setText(Integer.toString(d));days[i].setEnabled(true);if(d==day) days[i].setSelected(true);else days[i].setSelected(false);;i++;}for(;i<42;i++){days[i].setEnabled(false);days[i].setSelected(false);days[i].setText("");}}//单击年份面板选择整个年份字符串void SelectionYear(){Year.setSelectionStart(0);Year.setSelectionEnd(Year.getText().length());}//单击月份面板选择整个月份字符串void SelectionMonth(){Month.setSelectionStart(0);Month.setSelectionEnd(Month.getText().length());}//月份面板响应鼠标单击事件void Month_mouseClicked(MouseEvent e) {//SelectionMonth();inputMonth();}//检验输入的月份void inputMonth(){String s;if(Month.getText().endsWith("月")){s=Month.getText().substring(0,Month.getText().length()-1); }else s=Month.getText();month=Integer.parseInt(s)-1;this.showMe();}//月份面板键盘敲击事件响应void Month_keyPressed(KeyEvent e) {if(e.getKeyChar()==10)inputMonth();}//年份面板响应鼠标单击事件void Year_mouseClicked(MouseEvent e) {//SelectionYear();inputYear();}//年份键盘敲击事件响应void Year_keyPressed(KeyEvent e) {//System.out.print(new Integer(e.getKeyChar()).byteValue()); if(e.getKeyChar()==10)inputYear();}//检验输入的年份字符串void inputYear() {String s;if(Year.getText().endsWith("年")){s=Year.getText().substring(0,Year.getText().length()-1);}else s=Year.getText();year=Integer.parseInt(s);this.showMe();}//以字符串形式返回日期,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;}//设置当前的月public void setMonth(int month) {this.month = month;cal.set(this.year,this.month,this.day); this.showMe();}//刷新public void showMe(){this.showDays();this.showMonth();this.showYear();this.showDate();}}public class TestJCalendar {public static void main(String[] args) {JFrame f=new JFrame();f.setContentPane(new JCalendar());f.pack();//f.setResizable(false);f.show();}}四、调试分析1、程序调试初期,按钮无法调整程序日期,后重写Year_mouseClicked(MouseEvent e)添加void showYear()使得功能得以完善。
JAVA时钟日历报告期末课程设计
JAVA时钟日历报告import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics;import java.util.Date;import java.awt.event.*;import javax.swing.*;import javax.swing.border.TitledBorder;import java.util.*;import javax.swing.JPanel;import javax.swing.JTextField;import java.awt.GridLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.SwingUtilities;import javax.swing.UIManager;publicclass Test extends JFrame{privatestaticfinallong serialVersionUID = 1L;//测试public Test(){Clock clock =new Clock();Calendercal = new Calender();@SuppressWarnings("unused")JPanel jp2 = new JPanel();setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(560,300);setVisible(true);this.setContentPane(clock);this.getContentPane().add(cal,BorderLayout.WEST); setResizable(false);}//////////////////////////////////////画时钟publicclass DrawClock extends JPanel implements Runnableprivatestaticfinallong serialVersionUID = 1L;Thread newThread; //线程publicint RADIUS = 80; //时钟的半径//设置时钟位置publicint centerX = 150; //设置时钟x轴publicint centerY = 120; //设置时钟y轴publicint hr, min, sec; //小时,分钟,秒publicint[] xPoint = newint[4]; //指针的4个坐标publicint[] yPoint = newint[4];publicdouble hrAlpha, minAlpha, secAlpha, theta;private JTextField timeZone;//启动时钟publicvoid start(){newThread = new Thread(this);newThread.start(); //启动线程}//终止线程publicvoid stop(){newThread = null;}@SuppressWarnings("deprecation")publicvoid paint(Graphics g){super.paint(g);//画出时钟刻度double minuteAlpha = Math.PI/30.0;int count = 0;for(double alpha=0; alpha<2.0*Math.PI; alpha+=minuteAlpha) {int tX = (int)(centerX+RADIUS*0.9*Math.sin(alpha));int tY = (int)(centerY-RADIUS*0.9*Math.cos(alpha));if(count%5 == 0){g.setColor(Color.CYAN);g.fill3DRect(tX, tY, 3, 3, false);{int m = count /15;switch(m){case 1: g.drawString("3", centerX+RADIUS-18, centerY+5);break;case 2: g.drawString("6", centerX-3, centerY+RADIUS-10);break;case 3: g.drawString("9", centerX-RADIUS+11,centerY+6);break;default: g.drawString("12", centerX-5, centerY-RADIUS+22); }}}else{g.setColor(Color.DARK_GRAY);g.fill3DRect(tX, tY, 2, 2, false);}count++;}//画出时钟时针g.setColor(Color.gray); // 定义颜色drawPointer(g, centerX+2, centerY+2, (int)(RADIUS*0.75), hrAlpha);g.setColor(Color.CYAN); // 定义颜色drawPointer(g, centerX, centerY, (int)(RADIUS*0.75), hrAlpha);//画出分针g.setColor(Color.gray); // 定义颜色drawPointer(g, centerX+2, centerY+2, (int)(RADIUS*0.83), minAlpha);g.setColor(Color.CYAN); // 定义颜色drawPointer(g, centerX, centerY, (int)(RADIUS*0.83), minAlpha);//画出秒针g.setColor(Color.DARK_GRAY); //定义颜色g.drawLine(centerX,centerY,(int)(centerX+(int)(RADIUS*0.79)*Math.sin(secAlpha)),(int)(centerY-(int)(RADIUS*0.79)*Math.cos(secAlpha)));setBorder(new TitledBorder("时间"));setBackground(Color.white); // 定义颜色g.drawRect(85, 210, 130, 20);g.setColor(Color.WHITE);g.setColor(Color.DARK_GRAY);g.drawString(timeNow.toLocaleString(), 100,225);}public Date getDate(){Date timeNow = new Date();return timeNow;}// 刷新图层publicvoid update(Graphics g){paint(g);}// 画出一个帧的图像publicvoid run() {while(newThread != null){repaint();try{Thread.sleep(800);} catch(InterruptedException E) {}Date timeNow = new Date();@SuppressWarnings("deprecation")int hours = timeNow.getHours(); //这里不知道为什么会画横线的@SuppressWarnings("deprecation")int minutes = timeNow.getMinutes(); //这里不知道为什么会画横线的@SuppressWarnings("deprecation")int seconds = timeNow.getSeconds(); //这里不知道为什么会画横线的hr = hours;min = minutes;sec = seconds;theta = Math.PI/6.0/20.0;hrAlpha = (double)(hr*3600 + min*60 + sec)minAlpha = (double)(min*60 + sec)/3600.0*2.0*Math.PI; secAlpha = (double)sec/60.0 * 2.0*Math.PI;}}privatevoid drawPointer(Graphics g, int x, int y,int len, double theta){xPoint[0] = (int)(x+len*0.3*Math.sin(theta-Math.PI)); yPoint[0] = (int)(y-len*0.3*Math.cos(theta-Math.PI)); xPoint[1] = (int)(xPoint[0]+len*0.3*Math.sin(theta-(double)(10.0/180)*Math.PI)); yPoint[1] = (int)(yPoint[0]-len*0.3*Math.cos(theta-(double)(10.0/180)*Math.PI)); xPoint[2] = (int)(xPoint[0]+len * Math.sin(theta)); yPoint[2] = (int)(yPoint[0]-len * Math.cos(theta)); xPoint[3] = (int)(xPoint[0]+len*0.3*Math.sin(theta+(double)(10.0/180)*Math.PI)); yPoint[3] = (int)(yPoint[0]-len*0.3*Math.cos(theta+(double)(10.0/180)*Math.PI));g.fillPolygon(xPoint, yPoint, 4);}public JTextFieldgetTimeZone() {return timeZone;}publicvoid setTimeZone(JTextFieldtimeZone) {this.timeZone = timeZone;}}////////////////////////////////////时钟publicclass Clock extends JPanel{privatestaticfinallong serialVersionUID = 1L;private UIManager.LookAndFeelInfo looks[];private DrawClock clock ;@SuppressWarnings("unused")private JPanel pane_clock ;public Clock(){super();looks = UIManager.getInstalledLookAndFeels(); changeTheLookAndFeel(2);clock = new DrawClock();clock.start();this.setBackground(Color.GRAY);this.setLayout(new BorderLayout());this.setOpaque(false);this.add(clock);this.setBorder(new TitledBorder("时间日期"));this.setBorder(new TitledBorder("时区"));this.setBorder(new TitledBorder("Internet时间"));setSize( 300, 300 );setVisible(true );}privatevoid changeTheLookAndFeel(int i){try{UIManager.setLookAndFeel(looks[i].getClassName()); SwingUtilities.updateComponentTreeUI(this);}catch(Exception exception){exception.printStackTrace();}}}/////////////////////////////////////设计日历publicclass Calender extends JPanel implements ActionListener {privatestaticfinallong serialVersionUID = 1L;publicfinal String HOUR_OF_DAY = null;//定义@SuppressWarnings("rawtypes")JComboBox Month = new JComboBox();@SuppressWarnings("rawtypes")JComboBox Year = new JComboBox();JLabel Month_l = new JLabel("");JLabel Year_l = new JLabel("");Date now_date = new Date();JLabel[] Label_day = new JLabel[49];@SuppressWarnings("deprecation")int now_year = now_date.getYear() + 1900;@SuppressWarnings("deprecation")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();@SuppressWarnings("unchecked")public Calender(){super();//设定年月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);pane_ym.add(new JLabel(" "));pane_ym.add(Year);pane_ym.add(Year_l);Month.setSelectedIndex(now_month);pane_ym.add(Month);pane_ym.add(Month_l);pane_ym.add(new JLabel(" "));Month.addActionListener(this);Year.addActionListener(this);//初始化日期并绘制for (int i = 0; i< 49; i++) {Label_day[i] = new JLabel(" ");pane_day.add(Label_day[i]);}this.setDay();this.setLayout(new BorderLayout());this.add(pane_day, BorderLayout.CENTER);this.add(pane_ym, BorderLayout.NORTH);this.setSize(100,200);this.setBorder(new TitledBorder("日期(D)"));setSize(300,300);}@SuppressWarnings("deprecation")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; //获得年份值//@SuppressWarnings("deprecation")Date dt = new Date(year_sel, month_int, 1); //构造一个日期GregorianCalendarcal = new GregorianCalendar(); //创建一个Calendar实例cal.setTime(dt);String week[] = { "日", "一","二", "三", "四", "五", "六" };int day = 0;int day_week = 0;for (int i = 0; i< 7; i++) {Label_day[i].setText(week[i]);}//月份if (month_int == 0||month_int == 2 ||month_int == 4 ||month_int == 6 ||month_int == 9 ||month_int == 11){day = 31;elseif (month_int == 3 ||month_int == 5 || month_int == 7|| month_int == 8 ||month_int == 10|| month_int == 1){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){Label_day[i].setForeground(Color.blue);Label_day[i].setText(count + "");}else{Label_day[i].setForeground(Color.red);Label_day[i].setText(count + "");}}else{if (i == day_week + now_date.getDate() - 1){Label_day[i].setForeground(Color.blue);Label_day[i].setText(count + "");}else{Label_day[i].setForeground(Color.black);Label_day[i].setText(count + "");}}if (day_week == 0){for (int i = day; i< 49; i++){Label_day[i].setText(" ");}}else{for (int i = 7; i<day_week; i++){Label_day[i].setText(" ");}for (int i = day_week + day; i< 49; i++){Label_day[i].setText(" ");}}}publicvoid actionPerformed(ActionEvent e) {if (e.getSource() == Year || e.getSource() == Month) { bool = false;this.setDay();}}}//////////////////////////////////publicstaticvoid main(String[] args){try{Test frame = new Test();frame.setTitle("日历");}catch (Exception e){System.out.print("run error!");}}}。
JAVA时钟日历报告
《Java语言》课程期末作业题目第三题时间日历学院计算机学院专业XXX班别学号姓名2011年11月一、课程题目设计一个时间日历,交互性要求:能够设置时间。
例如:Windows7系统自带日历:其它功能可自行扩展。
二、题目分析与设计1.使用的开发环境:Eclipse+JDK1.6+windows7(64bit) sp12.题目的需求由题目的要求可以分析得出以下基本需求:(1)系统有三个模块,左边显示的是时间,右边显示的日历。
日期部分是一台历形式显示,时间部分包括图形钟和数字钟。
(2)有指针时钟和数字时钟模块,可以同步系统时间,动态准确走时(3)日历初始态是根据部分是本地系统时间为准,在日历内用标记显示当前月的今天。
(4)在日历模块内,日历可以通过点击选择下拉框查看过去和未来某一年月的日期。
(5)有设置模块,允许用户输入正确格式的时间而改变程序的当前日期。
系统的日期不受影响,在同步系统时间后,更改此程序的时间不再与系统同步。
3.软件功能架构图。
本程序主要有三个功能: (1) 设置当前日期 (2) 显示时钟时间(时分秒 (3) 显示日历(年月日)时钟功能的实现:类名为Clock ,首先在构造时钟面板,并对时钟面板的参数设定(标题,大小,背景,布局)。
然后重写方法void paint(Graphics g)在此方法内将绘制时钟的一帧,此方法中先获取时钟面板容器的一些参数(边界大小,面板高度),然后用得到的参数确定所要绘制的时钟的圆心位置,再根据几何知识计算出表盘12个刻度的位置计算出,并将12个数字绘制在对应的位置,然后获取系统的或者用户设置的时间(时分秒),将该时间转化为字符串表示并根据设定的字体和颜色绘制到时钟面板内的指定位置作为数字时钟。
再根据几何知识计算出时、分、秒针的位置,然后根据设置线宽和颜色绘制到面板中。
日历功能的实现:类名为MyCalendar,首先创建日历面板,并对日历面板的参数设定(标题,大小,布局)。
日历记事本实验报告
题目:日历记事本一、实验内容用所学的Java知识,设计出日历记事本程序。
(其中:保存、读取和删除过程)二、需求分析◆建立日历记事本界面,其中包括时钟、日历和记事大部分操作、显示、清除◆所编写的程序可以正常运算;◆所编写的程序可以正确记事;三、实验目的★ 1、加深对Java语言的了解,增强Java的编写能力;★ 2、巩固专业知识,Java复习语言的类及其他基础内容;★ 3、增强学生的动手实践能力,开拓学生的视野;★ 4、丰富学生的想象力及独立思考能力。
四、组员及分工廖俊军:CalendarMessage、CalendarPad、NotePad刘伟才:CalendarWindow伍星:Clock五、系统总体设计:主要功能模块的算法设计思路如下:1、主类(CalendarWindow.java)主要功能介绍:(1)运行的标志;(2)调用包中的各种类。
(3)界面代码及主函数的书写(4)窗口的排版及按钮的位置摆放(5)实现各按钮和标签的创建和功能2、数据类(CalendarMessage.java)主要功能介绍:用来刻画和“日期”有关的数据。
3、数据显示和修改类(CalendarPad.java)主要功能介绍:用来表示“日历”,即负责显示和修改CalendarMessage对象中的日期数据。
4、记事本类(NotePad.java)主要功能介绍:创建以提供编辑、读取、保存和删除日志的功能。
5、时钟类(Clock.java)主要功能介绍:负责显示时钟。
6、图像类(CalendarImage.java)主要功能介绍:负责绘制图像。
六、程序详细设计:代码如下:1、主类(CalendarWindow.java)import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;public class CalendarWindow extends JFrame implements ActionListener, MouseListener,FocusListener{int year,month,day;CalendarMessage calendarMessage;CalendarPad calendarPad;NotePad notePad;JTextField showYear,showMonth;JTextField [] showDay;CalendarImage calendarImage;Clock clock;JButton nextYear,previousYear,nextMonth,previousMonth;JButton saveDailyRecord,deleteDailyRecord,readDailyRecord;File dir;Color backColor=Color.white;public CalendarWindow(){dir=new File("./dailyRecord");dir.mkdir();showDay=new JTextField[42];for(int i=0;i<showDay.length;i++){showDay[i]=new JTextField();showDay[i].setBackground(backColor);showDay[i].setLayout(new GridLayout(3,3));showDay[i].addMouseListener(this);showDay[i].addActionListener(this);showDay[i].addFocusListener(this);}calendarMessage=new CalendarMessage();calendarPad=new CalendarPad();notePad=new NotePad();Calendar calendar=Calendar.getInstance();calendar.setTime(new Date());year=calendar.get(Calendar.YEAR);month=calendar.get(Calendar.MONTH)+1;day=calendar.get(Calendar.DAY_OF_MONTH);calendarMessage.setYear(year);calendarMessage.setMonth(month);calendarMessage.setDay(day);calendarPad.setCalendarMessage(calendarMessage);calendarPad.setShowDayTextField(showDay);notePad.setShowMessage(year,month,day);calendarPad.showMonthCalendar();doMark(); //给有日志的号码做标记,见后面的doMark()方法calendarImage=new CalendarImage();calendarImage.setImageFile(new File("flower.jpg"));clock=new Clock();JSplitPane splitV1=newJSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarImage); JSplitPane splitV2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock); JSplitPane splitH=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);add(splitH,BorderLayout.CENTER);showYear=new JTextField(""+year,6);showYear.setFont(new Font("TimesRoman",Font.BOLD,12));showYear.setHorizontalAlignment(JTextField.CENTER);showMonth=new JTextField(" "+month,4);showMonth.setFont(new Font("TimesRoman",Font.BOLD,12));showMonth.setHorizontalAlignment(JTextField.CENTER);nextYear=new JButton("下年");previousYear=new JButton("上年");nextMonth=new JButton("下月");previousMonth=new JButton("上月");nextYear.addActionListener(this);previousYear.addActionListener(this);nextMonth.addActionListener(this);previousMonth.addActionListener(this);showYear.addActionListener(this);JPanel north=new JPanel();north.add(previousYear);north.add(showYear);north.add(nextYear);north.add(previousMonth);north.add(showMonth);north.add(nextMonth);add(north,BorderLayout.NORTH);saveDailyRecord=new JButton("保存日志") ;deleteDailyRecord=new JButton("删除日志");readDailyRecord=new JButton("读取日志");saveDailyRecord.addActionListener(this);deleteDailyRecord.addActionListener(this);readDailyRecord.addActionListener(this); //怎么实现的按钮上附加的日记读取功能???JPanel pSouth=new JPanel();pSouth.add(saveDailyRecord);pSouth.add(deleteDailyRecord);pSouth.add(readDailyRecord);add(pSouth,BorderLayout.SOUTH);setVisible(true);setBounds(60,60,660,480);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e){ //鼠标获取按钮内容的动作函数if(e.getSource()==nextYear){ //“下一年”year++;showYear.setText(""+year);calendarMessage.setYear(year);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();}else if(e.getSource()==previousYear){ //“上一年”year--;showYear.setText(""+year);calendarMessage.setYear(year);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();}else if(e.getSource()==nextMonth){ //“下一月”month++;if(month>12) month=1;showMonth.setText(" "+month);calendarMessage.setMonth(month);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();}else if(e.getSource()==previousMonth){ //、“上一月”month--;if(month<1) month=12;showMonth.setText(" "+month);calendarMessage.setMonth(month);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();}else if(e.getSource()==showYear){String s=showYear.getText().trim();char a[]=s.toCharArray();boolean boo=false;for(int i=0;i<a.length;i++)if(!(Character.isDigit(a[i])))boo=true;if(boo==true) //弹出“警告”消息对话框JOptionPane.showMessageDialog(this,"您输入了非法年份","警告",JOptionPane.WARNING_MESSAGE);else if(boo==false)year=Integer.parseInt(s);showYear.setText(""+year);calendarMessage.setYear(year);calendarPad.setCalendarMessage(calendarMessage);calendarPad.showMonthCalendar();notePad.setShowMessage(year,month,day);doMark();}else if(e.getSource()==saveDailyRecord){ //“保存日记”notePad.save(dir,year,month,day);doMark();}else if(e.getSource()==deleteDailyRecord){ //“删除日记”notePad.delete(dir,year,month,day);doMark();}else if(e.getSource()==readDailyRecord) //“读取日记”notePad.read(dir,year,month,day);}public void mousePressed(MouseEvent e){JTextField text=(JTextField)e.getSource();String str=text.getText().trim();try{ day=Integer.parseInt(str);}catch(NumberFormatException exp){}calendarMessage.setDay(day);notePad.setShowMessage(year,month,day);}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void focusGained(FocusEvent e){Component com=(Component)e.getSource();com.setBackground(Color.pink);}public void focusLost(FocusEvent e){ //此事件指示Component 不再是焦点所有者。
JAVA实验报告一(运用JavaFx画时钟)
JA V A实验报告实验一运用JavaFx画时钟班级:计算机科学与技术1306 学号:***********名:***指导教师:***2014 年12 月 1 日目录一.概述 (3)二.总体方案设计 (4)三.详细设计 (4)四.程序的调试与运行结果说明 (5)五.课程设计总结 (6)六.后记 (6)七.附录 (6)参考文献 (11)一概述1.课程设计的目的1、设计一个带有指针、数字时钟,能方便我们的使用和操作,为我们以后的使用创造一个良好的平台。
了解和掌握JavaFx基本概念和用法。
2、把自己所学的理论知识运用到实际操作中去,以此来发现自己的不足,及时的改正。
在实际的操作中学习及运用还没有学过的知识。
最后在调试与测试的过程还可以提升自己的改错能力也是自己经验的积累。
2.课程设计的要求编写一个模拟时钟程序,此程序在屏幕左方有一指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。
用菜单选项或按钮设置时间和秒表。
时间不必与机器系统时间相同,只要可任意设置即可。
在设计的过程中,需要用到awt组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。
还有自己还没有掌握的2D绘制图形,以及绘制各指针及之间的关系。
为了完成自己的设计,必须API、教材以及相关的资料来解决这些尚未掌握的问题。
老师的要求就是尽量实现设计的功能,尽可能的锻炼自己的动手能力,提高自己的基础知识。
3.课程设计的主要设计思想先是利用构造函数创建一个长为500,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小,并且创建一个监听事件进行监听。
随即创建一个时间计数器,最后实现ActionListener接口的实现方法。
利用2D绘制图形的方法,在窗体左方画一个圆,并且绘制时钟上的12个数字刻度,然后利用Calendar类提供的HOUR,MINUTE,SECOND和MILLISECOND方法获得现在的时间,在计算时间和度数的关系;在利用2D绘制图形的方法绘制出各指针,并设置不同的颜色。
Java课程设计报告(LED时钟)
攀枝花学院学生课程设计(论文)题目: LED时钟学生姓名:张奕学号: 201210802028 所在院(系):数学与计算机学院专业:信息与计算科学班级: 2012级信息与计算科学1班指导教师:吴建兵职称:讲师二O一四年六月十六日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书题目时钟(LED方式)1、课程设计的目的通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)编写一个时钟(LED方式)程序,要求:(1)在屏幕上用文字显示日期(年、月、日、星期)与时间。
(2)时间显示要求能动态显示时、分、秒。
3、主要参考文献[1]朱福喜.《Java语言程序设计》(第二版).科学出版社[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社[3] Deitel.《Java大学基础教程》(第六版).电子工业出版社[4] MaryCampione.《Java语言导学》(第四版).机械工业出版社[5] Y.Daniel Liang.《Java语言程序设计基础篇》(第六版). 机械工业出版社[6] Kathy Sierra.《Head First Java》(第二版).东南大学出版社4、课程设计工作进度计划1、设计动员,布置任务,选题(1天)2、查阅资料,分析、讨论与设计(1天)3、编写程序,进行调试(4天)4、完成模块联调,进行测试(2天)5、成果验收,完成设计报告(2天)指导教师(签字)日期年月日教研室意见:年月日学生(签字):接受任务时间:年月日注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表题目名称时钟(LED方式)评分项目分值得分评价内涵工作表现20% 01 学习态度 6 遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02 科学实践、调研7 通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
佛山科学技术学院《可视化编程技术》课程设计报告时钟日历设计学生姓名:学号:年级专业:指导老师:学院:广东★佛山提交日期:2014年6月目录1.前言 (2)2.概要设计 (3)2.1开发环境 (3)2.2时钟日历功能 (3)2.3界面设计 (3)2.4类的框架结构图 (4)3.详细设计 (5)3.1使用的JAVA类的说明 (5)3.2类的主要方法 (6)3.2.1设置3个按钮 (6)3.2.2日历、时钟、界面的绘制 (7)3.2.3导入素材文件 (10)3.2.4设计总体认识 (11)4.运行结果 (11)5.测试分析 (11)5.1程序运行情况 (11)5.2程序异常处理 (12)6.源程序 (13)参考文献 (23)设计总结 (24)摘要:该程序是一个图形界面的简单的java时钟日历,具有良好的界面。
该程序可以自动获取系统日期和时间。
还可以翻看万年历,在点选日期的时候会有音效。
程序中还有个会移动的图形条,在右侧则有一个时钟图形,会跟着实时时间动。
下方三个按钮可以播放一个声音,PLAY则播放一次,LOOP则循环播放,STOP则停止播放声音。
关键字:java、日历类、时钟类、声音类、方法、事件1前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
Java基本版本叫Java2标准版(Java2Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。
Java 2移动版(The Java2Mobile Edition,J2ME)包含创建无线Java应用程序的API。
还有Java2企业版(The Java2Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。
Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。
作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。
Java 语言去掉了C++语言的一些容易引起错误的特性。
Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。
2概要设计2.1开发环境开发平台:Microsoft Windows7旗舰版Service Pack1开发工具:Eclipse+JDK1.6.0_022.2时钟日历功能功能1:显示实时日期功能2:显示实时时间功能3:翻看万年历功能4:单次播放声音功能5:循环播放声音功能6:停止播放声音2.3界面设计图2.3时钟日历面板2.4类的框架结构//Film是描述滚动图片的类.class Film extends Canvas implements Runnable{ public void run(){}public void paint(Graphics g){}public void update(Graphics g){}}//AudioPlayer是描述底部音乐播放条的类.class AudioPlayer extends Panel{public boolean action(Event e,Object p){}}//Calendar是描述日历和时钟的类.class Calendar extends Panel implements Runnable{ public void run(){}public void paint(Graphics g){}public void update(Graphics g){}public boolean action(Event evt,Object arg){}public boolean mouseDown(Event evt,int x,int y){} public boolean lostFocus(Event evt,Object what){} public boolean keyDown(Event evt,int key){} }//主类public class MyApplet extends Applet{public void init(){}public void start(){}public void stop(){}public void destroy(){}}3详细设计3.1使用的Java类的说明类名:Film作用:描述滚动图片的继承的父类:Canvas类实现的接口:没有class Film extends Canvas implements Runnable{public void run(){}public void paint(Graphics g){}public void update(Graphics g){}}类名:AudioPlayer作用:描述底部音乐播放条的类.继承的父类:Panel类实现的接口:没有class AudioPlayer extends Panel{public boolean action(Event e,Object p){}}类名:Calendar作用:描述日历和时钟的类.继承的父类:Panel类实现的接口:Filmclass Calendar extends Panel implements Runnable{public void run(){}public void paint(Graphics g){}public void update(Graphics g){}public boolean action(Event evt,Object arg){} public boolean mouseDown(Event evt,int x,int y){}public boolean lostFocus(Event evt,Object what){}public boolean keyDown(Event evt,int key){} }类名:MyApplet作用:主类.继承的父类:Applet类实现的接口:Calendar、AudioPlayerpublic class MyApplet extends Applet{public void init(){}public void start(){}public void stop(){}public void destroy(){}}3.2类的主要方法3.2.1设置3个按钮:public boolean action(Event e,Object p){if(e.target==play){au.play();}else if(e.target==loop){au.loop();}else if(e.target==stop){au.stop();}return super.action(e,p);}3.2.2日历、时钟、界面的绘制:public void update(Graphics g){int i,j;Dimension d=size();Image offImage=createImage(d.width,d.height);Graphics offG=offImage.getGraphics();//set the background colorsetBackground(new Color(242,160,255));offG.setColor(getBackground());offG.fillRect(0,0,500,350);//draw calendar shadowoffG.setColor(new Color(80,150,80));offG.fillRect(25,100,340,230);//draw calendar baseoffG.setColor(new Color(100,230,195));offG.fillRect(15,90,340,230);offG.setFont(new Font("Helvetica",Font.BOLD,20));for(i=0;i<=6;i++){offG.setColor(Color.darkGray);offG.drawString(weekName[i],26+i*48,110);offG.setColor(Color.white);offG.drawString(weekName[i],24+i*48,108);}//draw author informationoffG.setColor(Color.gray);offG.drawString("12教育技术2班刘思华2012914205",10,350);//draw vertical barsfor(i=350;i>0;i-=10){offG.setColor(new Color(170+85*i/350,255,170+85*i/350));offG.fillRect(380,i,40,9);}//draw yearoffG.setColor(new Color(200,255,200));offG.setFont(new Font("Courier",Font.ITALIC,66));String yearString=""+(1900+today.getYear());for(j=0;j<=6;j+=2)for(i=0;i<=3;i++)offG.drawString(yearString.substring(i,i+1),415+j,168+49*i);//draw horizontal barsoffG.setColor(Color.black);offG.drawLine(6,60,250,60);offG.setColor(new Color(100,200,100));offG.drawLine(5,65,495,65);offG.drawLine(5,66,495,66);//draw circlesoffG.setColor(Color.black);offG.drawOval(560,5,120,120);offG.setColor(Color.black);offG.drawOval(570,15,100,100);//draw MonthoffG.setFont(newFont("Monospaced",Font.BOLD+Font.ITALIC,25));offG.setColor(Color.orange);offG.drawString(monthName[today.getMonth()],280,57);//draw dateFont myFont=new Font("DialogInput",Font.BOLD,50);FontMetrics fontSize=getFontMetrics(myFont);offG.setFont(myFont);String temp=""+today.getDate();Color dateColor=new Color(weekColor[today.getDay()]);int x=380-fontSize.stringWidth(temp)/2;int y=59;offG.setColor(dateColor.brighter());offG.drawString(temp,x-1,y-1);offG.setColor(dateColor.darker());offG.drawString(temp,x+1,y+1);offG.setColor(dateColor);offG.drawString(temp,x,y);//draw clockoffG.setColor(Color.black);offG.drawOval(560,60,10,10);//9点offG.drawOval(670,60,10,10);//3点offG.drawOval(615,5,10,10);//12点offG.drawOval(615,115,10,10);//6点offG.drawOval(571,36,5,5);//10点offG.drawOval(591,16,5,5);//11点offG.drawOval(644,16,5,5);//1点offG.drawOval(663,36,5,5);//2点offG.drawOval(663,89,5,5);//4点offG.drawOval(644,109,5,5);//5点offG.drawOval(591,109,5,5);//7点offG.drawOval(571,89,5,5);//8点Date now=new Date();double hour=now.getHours()+now.getMinutes()/60.;double minute=now.getMinutes()+now.getSeconds()/60.;double second=now.getSeconds();offG.setColor(Color.black);offG.drawLine(620,65,(int)(620+30*Math.sin(hour*Math.PI/6)),(int)(65-30 *Math.cos(hour*Math.PI/6)));offG.drawLine(620,65,(int)(620+45*Math.sin(minute*Math.PI/30)),(int)(65 -45*Math.cos(minute*Math.PI/30)));offG.setColor(Color.black);offG.drawLine(620,65,(int)(620+48*Math.sin(second*Math.PI/30)),(int)(65 -48*Math.cos(second*Math.PI/30)));//draw calendar datesboolean raised;offG.setFont(new Font("Serif",Font.PLAIN,15));Date newDay=new Date(today.getYear(),today.getMonth(),1);newDay.setDate(1-newDay.getDay());//找出日历左上角的日期for(j=0;j<=5;j++){for(i=0;i<=6;i++){offG.setColor(new Color(220,255,165));if(today.getDate()!=newDay.getDate()||today.getMonth()!=newDay.getMonth())raised=true;//其他日期,按钮上浮elseraised=false;//当前日期,按钮下沉offG.fill3DRect(17+i*48,114+j*34,48,34,raised);if(today.getMonth()==newDay.getMonth())offG.setColor(Color.black);//本月日期,黑色elseoffG.setColor(Color.black);//他月日期,浅色offG.drawString(""+newDay.getDate(),20+i*48,129+j*34);newDay.setDate(newDay.getDate()+1);}}g.drawImage(offImage,0,0,this);}3.2.3导入素材文件:public void init(){String auname=getParameter("auname");if(auname==null){auname="ding.au";}AudioClip au=getAudioClip(getCodeBase(),auname);audioPlayer=new AudioPlayer(au);Image thumb=getImage(getCodeBase(),"thumb.gif");au=getAudioClip(getCodeBase(),"chirp.au");calendar=new Calendar(thumb,au);setLayout(new BorderLayout());add("Center",calendar);add("South",audioPlayer);}3.2.4设计的总体认识●JAV A设计的摘要●JAV A设计的目录结构●JAV A设计的概要和详细设计●JAV A设计的版权意识●JAV A设计需要编译的环境●JAV A设计的实用性4运行结果图4程序运行结果5测试分析5.1程序运行情况:程序正常的响应按钮事件,输入到输入框的数据数值可能不是数字,导致程序异常,因此使用了try{}catch(NumberFormatException e){}setDateText();return true;将数据变回原来的数据值,防止程序异常。