下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计一、实验目的1加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅 资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程 思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。2.使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计, 使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日 历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景 图片。3.在完成基本功能的基础上发挥自己的想象力与创造力,使
2、程序凸显出与众不同的特点与功能,形成本小组的特性色。二、实验要求1.问题描述准确、规范。2程序结构合理,调试数据准确、有代表性.o3界面布局整齐,人机交互方便。4.输出结果正确。5正确撰写实验报告。三、实验内容编写一个GUI程序实现日历的功能。 一年日历用12页显示,每页显示一 个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农 历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。四、实验步骤1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性 强的题目多功能日历。2.在第一次上机实验时讨论
3、分工,分工明确之后,分头合作进行。3.各成员完成自己的任务后, 最后进行统筹合并, 以及程序最后的优化。4.根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实 验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的 经验。5.详细的上机实验步骤见任务分工及程序设计进度表。五、实验结果经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实 现实验的基本要求一年日历用12页显示,每页显示一个月的日历。日历 可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图 片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添 加备忘录、修改备忘录等功能。
4、整体程序运行流畅、功能齐全、符合操作习 惯。下面是程序运行效果截图:日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够 显示当前日期,并能够选择背景图片) :备忘录主界面(实现备忘录的添加,及当前日历的显示)备忘录主界面(实现备忘录的显示,及对当前备忘录的修改删除等)时钟主界面(显示当前时间,实现报整点报时功能)15芒叱.Saturday411六、实验总结两周的课程设计结束了,在这其中历尽酸甜苦辣咸各种滋味,不过收获 颇丰。从学习C语言、数据库等等计算机编程类课程开始,自己始终有种感 觉,那就是太理论化了、缺少实践。而这次的Java程序设计可以说与以往大不相同,先是在课堂上老师讲述
5、了有关的基础理论、基本语法知识,而后再 加上这两周的课程设计,可以说是真正能够体会到程序编程的乐趣,也第一 次发现自己原来对程序设计是如此的感兴趣。尤其是由于课程时间较紧,课 上时间老师只是简单给我们讲述了一下JavaSwing的基础知识,并没有去深入,而在此次课程设计中大量用到的监听事件的有关知识需要自己去查标准 文档,去网上找相关系料,这无疑对自己是一个挑战。但是两周下来,我做 到了,我独立完成了对备忘录程序的编写,累积下来这部分共涉及到包括Action Listener,Mouse Listener,Menu Listener,Document Listener等各种各类监听18个监听,
6、分为6个类,累计完成程序千余行。而给我印象 最深刻的便监听了,可以说是整个备忘录的大部分代码都是与监听相关,这 也是让我我学会了对程序监听的运用,当然只是学会远远谈不上精通。我编写 的类有Test、Mai nWin、MyMe nuListe ner1、PoliceListe n、PoliceListen2、MyWindowListener。其中Test类主要是用来定义备忘录主 窗口的各种组件以及在相关组件上添加监听以实现备忘录添加、修改、删除 等功能。Mai nWin类主要是用来创建Test对象,用以显示窗口的。MyMenuListener1主要是给今日待办菜单定义菜单监听, 从而使其选中后能
7、显 示今日待办的备忘记事, 而当未被选中时相关的文字、 按钮又都会隐藏掉。PoliceListen主要是用来定义日历日期按钮事件的监听,用以监听当点击相 关日期时会弹出相应日期的备忘IZEPM记事的窗口来。PoliceListen2主要是定义备 忘录窗口中添加按钮的时间监听,使其被点击后能够显示添加备忘记事功能 的相关功能按钮和相关文本区。MyWindowListener主要是定义备忘录窗口的 窗口监听,和PoliceListen共同使用来对窗口的激活状态进行监听,以保证 窗口能够按照预定计划弹出和关闭。在实验过程中遇到了大大小小各种困难,通过自己查资料、询问老师、 同学讨论基本解决了这些困难
8、。下面我就说一说在这次课程设计中遇到的问 题有哪些,以及自己的解决办法和从中得出的经验心得。首先在对备忘录窗 口的布局问题上,一开始采用流式布局,按钮少的时候效果还算说得过去, 但是当按钮一多整个布局就不那么好控制了了。为了实现预期的效果,最终 采用了null布局,在该种布局下,需要为每个组件指定坐标,否则组件将不 会显示。首先我的想法是,根据窗口的高度和宽度来对按钮进行布局,我相 信这种方法肯定是正规程序设计中在布局是采用的方法,但是摆在眼前的问 题是时间比较紧,没有大量的时间来进行这种比较精确地布局。因此,最终 是通过不断地尝试来给组件赋予坐标值,最终效果是肉眼感觉起来是不错的, 如果时间
9、充足当然可以做的更精确一点。第二个问题也是一个比较简单的问题,因为刚开始不熟悉监听,因此遇 到了弹出一个窗口后,再点击这个按钮本来按照效果不应该在弹出窗口的, 但是依旧能弹出。为了解决这个问题,自己想了一个办法那就是标记,当有 窗口弹出时,将标记值变成1,而当标记值为1的时候,点击此按钮将不会触 发监听事件,只有当标记值为0的时候该监听事件才能起到作用,然后当此 窗口的状态为关闭时,又会将该标记值变成0,这样的效果主要是通过PoliceListen和MyWindowListen两个类来完成的,其中PoliceListen是鼠 标监听,而MyWindowListen则是窗口监听。这是这一个监听最
10、终在自己的努 力下成功了,才使自己对监听事件产生了浓厚的兴趣,以至于后来加了那么 多监听虽然困难很多也没有退缩。自己也从中体会到平时的程序之所以能够 相应操作的原理,那就是对命令、对动作进行监听。而且,有时候看起来非 常简单的功能实现起来也不是很容易,就像本例中的所说的那样。在完成了第一个监听以后,又在Test里面加入了N多个监听,这些监听 大部分是ActionListener监听,也即最常有的一类监听。为了避免类过多, 我大多采用了匿名类的方式内嵌于Test类中。这些监听的设计中,大部分没 有遇到问题,有少数是因为自己的逻辑顺序不对而没有达到预期的效果,最 后都能调整过来。遇到的问题是读取选
11、中日期,以及在那三个下拉框中怎么 根据年份和月份来添加后面的日期(如此叙述可能不太明了,老师可以对照 程序截图中的备忘录主窗口中的那个日期下拉框来看) ,其实最后解决了就会 发现,其实这些也并不难,在日期处理上只要监听年份和月份。年份判断该 年是否为闰年,月份判断是那个月,最终可以确定该月应该添加多少item到 下拉框中。而读取选中日期则是将日历主窗口文本框中的年份、下拉框中的 月份以及点击按钮上的数字读取出来将他们分别设置成下拉框中的默认年月 日则可。另外为了使得后面的备忘记事文件名称长度一致,在进行加入的时 候会先比对一下该数字是否为两位数,如果不是两位数则将前面加0后再导 入。下一个问题
12、则是在监听文本框的问题上,因为课本上对DocumentListener也是简单介绍了下,为了实现预想的效果,即在文本框有 文字的时候下面的确定键可用,没有文字的时候下面的确定键不可用而只有 取消键可用,通过查阅标准文档和询问老师,最终弄清楚了每个抽象方法的 含义,顺利的实现了该功能。最后,在如何保存每日记事的问题上,解决这一问题可以有两种思路, 一种是搭建一个数据库,两一种是通过保存文件的形式。毫无疑问,通过写 入数据库的方式更有难度、更有挑战性,但是考虑到在备忘录方面一直都是 我一个人在做,精力方面可能不够,最后我采用了写文件的形式来保存,每 日的记事。后来发现有的组使用数据库实现的,最后他
13、们组得分B+,我们得分B,其实有时候输在了不敢尝试上、或者说分工更明确一点更好(毕竟有些 东西一个人做了,别人或许有帮忙的心也差不上手了) 。当然虽然写文件的形 式比较简单一点,这中间也要做好相关逻辑的设计。在写文件的时候采用选 中日期为文件名的方式进行保存,在读文件时候则读取以选中日期文件命名 的文件,将其显示在文本区中。另外在修改了当天记事后,炫耀对文件以同 样的方式进行保存。最后该程序还有不足,比如说未能实现相关的时间提醒的功能、有些细 节处理的不够使得部分地方缺少人性化。对于代码这部分,自己第一次编写 者这些代码有些地方还需要锻炼,比如说对类的划分、对相关语句进行打包 成一个函数来重复
14、调用提高代码的重用性等等,因为有些语句(像设置组件 可见不可见的语句)在大量的地方都用到了,但是我写的时候只是把他们复 制下来,这部分代码应该做成一个函数,或者抽象成类效果能更好点。验收 结束的那一刻所有的压力、所有的因遇到而尝到的苦涩最终都化成满满的喜 悦,或者在某种程度上更是一种成就感。七、附件1.程序流程图、类结构图(1)程序流程图 该程序可以分为三个部分,即日历主程序和时钟、备忘录两个程序。其 中时钟程序是通过日历主界面上的按钮触发事件来启动并创建相应的窗口, 备忘录程序是通过日历上按钮事件触发的。日历主窗口可以实现分页显示、上下翻动、为每月选定背景等功能,时钟窗口可以实现指针和数字时
15、钟显示、 整点报时功能,备忘录程序可以通过创建、修改、删除已选定日期为文件名 的文件来实现添加、修改、删除多条记事的功能。整个程序流程如下图(由 于整个流程图较大,为了使其在听一个版面中显现出来,因此有些字体可能 偏小,老师如若看不清,可以用Visio打开放大查看)所示:开始触发时钟按钮事件文本框输入年份按钮调节年份日历王窗口部件 初始化,并添加 相应监听1r下拉框选择月份按钮调节月份触发备忘录按钮监听事件触发today按钮事件L-,触发年份监听事件触发月份监听事件触发背景监听事件初始化备忘录窗口组件,并添加相应监听初始化时钟窗口组件,并添加相应监听1绘制时 钟表盘监听统时系侗显示选定年份月份
16、日历显示选定年份月份日历背景整点触发监听事件显示备忘录窗口时钟窗整点报口显示时日历主窗口显示(默认为当前日期)是删除文件文本区显示空白是否存在以 被选中日期 命名的文件是是否删除保持当前状态(2)类图日历程序类图:读取该文件并在文本区显示是否修改结束点击今日 待办按钮点击添加 按钮触发今日 待办按钮 监听事件I触发添加 按钮监听 事件添加记事是否保存重写文件保 存 以 当前 日 期 命名的文件时钟主程序主要包含四个类,其中OurCalender、MainWin、ACalender三个类是都是JFrame的子类。OurCalender里包含程序的入口,Mainwin主 要用来创建窗口对象,ACa
17、lender主要用来创建日历对象,NongLi主要用来 进行农历的显示。日历程序类图如下所示:时钟类图:时钟类主要包含DrawClock和Clock类,其中DrawClock类主要是用来 创建时钟对象,而Clock类主要是用来创建窗口对象和时钟监听来进行整点 报时。时钟程序类图如下所示:MainWin+MainWin()+actionPerformed(in e : ActionEvent)NongLi+lYearDays(in y : int) : int+leapDays(in y : int) : int+leapMonth(in y : int) : int+monthDays(in
18、y : int, in m : int) : int +Lunar(iny : int, in m : int) : long +calElement(in y : int, inm : int, in d : int) : long +getchina(in day : int) :string+shower() : stringACalendar+Year : JTextField #Month :JComboBox #TheYear : JLabel+TheMonth : JLabel +this_date : Date+Label_title : JLabel +Button_day
19、:JButton +Up1 : JButton +Down2 :JButton +Up2 : JButton +Down1 :JButton +Today : JButton-background : string +jP : JPanel+this_year : int +this_month : int-bool : bool -year_num : string-month_num : int +week : int +day : int+ACalendar() +setYM() +setDay()+getYear() : int +getMonth() : int+getWeek()
20、: int +setImg(inmonth_num : int)+actionPerformed(in e : ActionEvent)#x : intDrawClock#y : int#x0 : int#yO : int#r : int#h : intIconJPanel#w : int#ords_x : int#ords_y : int#ordm_x : int#ordm_y : int#ordh_x : int#ordh_y : int#hh : int#ord_h : int#ang : double#mm : double#ss : double#ord_m : double#RAD
21、 : double = Math.PI/180#set : JButt on#ic on :1c on+DrawClock()+pa in t(i n g :Graphics)Clock+Clock()JFrame备忘录类图:备忘录 部分主要包含Test、PoliceListen、PoliceListen2 MyMenuListener1、Mainwin等类。其中MainWin类主要是用来创建备忘录窗 口对象,Test主要定义备忘录相关的组件以及添加相应的监听事件以实现备 忘记事的添加、修改、删除等功能。PoliceListe n类主要用来定义日历按钮的监听。PoliceListe n2主要是
22、用来定义备忘录中添加按钮的监听MyMe nuListe ner1主要是用来定义今日待办事件监听。2.程序清单(要说明程序的功能和程序之间的关系,如程序很多,可以只附主要的 程序代码)OurCale ndar.Javapublic class OurCale ndarpublic static void main( Stri ng args) tryMai nWin frame = new Mai nWin();catch (Excepti on e)System.out.pri nt(r un error!);这里主要用来创建日历窗口对象,显示日历主窗口MainWin.javaTestJFra
23、meI_ryear:StringPoliceListen2x:i nty:i ntmousePressed(MouseEve nt):voidmouseReleased(MouseEve nt):voidmouseE ntered(MouseEve nt):voidmouseExited(MouseEve nt):voidmouseClicked(MouseEve nt):voidMouseListe nerPoliceListenx:i nty:i ntmousePressed(MouseEve nt):voidmouseReleased(MouseEve nt):voidmouseE nt
24、ered(MouseEve nt):voidmouseExited(MouseEve nt):voidmouseClicked(MouseEve nt):voidsec on d():voidmonth:Stringday:Stringhour:Stringminute:Stringd:Datesdf:SimpleDateFormatstr:Stringstryear:Stringstrday:Stringstrmonth:String strhour:String strminute:Stringx:Stringy:Stringchangeboolean:booleanyesboolean:
25、booleanyearboolean:booleanmonthboolean:booleanmenubar:JMenuBarnong:NongLi m:Stringnltext:JTextField today:JMenu addb utt on:JButton yes:JBu tton cancel:JB utton change:JButton delete:JBu tton save:JBu ttoncancel1:JBu tton music:JTextFieldtext1:JTextArea text2:JTextAreatext3:JTextArea sldday:JCheckBo
26、xsldtime:JCheckBoxyearbox:JComboBoxmonthbox:JComboBoxdaybox:JComboBoxhourbox:JComboBoxminutebox:JComboBoxyearlabel:JLabel monthlabel:JLabeldaylabel:mhlabel:JLabelmenulistener1:MyMenuListener1menulistener2:MyMenuListener2policeListen2:Policelistener2 Test() init():voidtext1changedUpdate(DocumentEvent
27、):voidtext1removeUpdate(DocumentEvent):voidtext1insertUpdate(DocumentEvent):voidslddayActionPerformed(ActionEvent):voidsldtimeActionPerformed(ActionEvent):voidtext3changedUpdate(DocumentEvent):voidtext3removeUpdate(DocumentEvent):voidtext3insertUpdate(DocumentEvent):voidcancelActionPerformed(ActionE
28、vent):voidyesActionPerformed(ActionEvent):voidyearboxActionPerformed(ActionEvent):voidmonthboxActionPerformed(ActionEvent):voidtodayActionPerformed(ActionEvent):voidchangeActionPerformed(ActionEvent):voidsaveActionPerformed(ActionEvent):voidcancel1ActionPerformed(ActionEvent):voiddeleteActionPerform
29、ed(ActionEvent):voidWin dowAdapterEMyWin dowListe nemark:i ntwin dowClos in g(Wi ndowEve nt):voidpublic class MainWin extends JFrame implements ActionListener /JPanel jP;public MainWin()ACalendar cal = new ACalendar(); Icon img=newImageIcon(clock.jpg); JButton time=new JButton(img)setLocationRelativ
30、eTo(null); setLocation(100,81);setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(560,560);setVisible(true); setResizable(false); this.setLayout(null); this.setTitle(我们的日历); this.add(cal);cal.setBounds(0,30,560,500); this.add(time);time.setBounds(250,0,25,25); time.setBorderPainted(false);time.setCont
31、entAreaFilled(false); time.addActionListener(this);time.setContentAreaFilled(false);public void actionPerformed(ActionEvent e)Clock ck=new Clock(); 这里主要用来定义日历主窗口类的组件。ACalender.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import static javax.swing.JFrame.*;import java.util.*;imp
32、ort javax.swing.JFrame.*;import static java.util.Calendar.*;public class ACalendar extends JPanel implements ActionListenerpublic static final String HOUR_OF_DAY = null;/定义PoliceListen police=new PoliceListen();static String strbuttonyear,strbuttonmonth,strbuttonday;JTextField Year=new JTextField();
33、JComboBox Month = new JComboBox();JLabel TheYear = new JLabel(年);JLabel TheMonth = new JLabel(月);Date this_date = new Date();JLabel Label_title = new JLabel7;JButton Button_day=new JButton42;JButton Up1=new JButton();JButton Down2=new JButton();JButton Down1=new JButton();JButton Today=new JButton(T
34、ADAY);String background;JPanel jP;ImageIcon img=new ImageIcon();JLabel imgLabel;JPanel pane_ym = new JPanel();JPanel pane_day = new JPanel();int this_year = this_date.getYear() + 1900; int this_month =this_date.getMonth(); boolean bool = false;String year_num = null;int month_num;int week,day;public
35、 String getBG()return background;public void setBG(String background) this.background=background;public ACalendar() super();jP=new JPanel();this.setOpaque(false);/this.setOpaque(false); /设定年月TheYear.setFont(new,Font.TRUETYPE_FONT,27);TheMonth.setFont(new,Font.TRUETYPE_FONT,27);Font(华文隶书,Font.TRUETYP
36、E_FONT,27);,Font.TRUETYPE_FONT,27);pane_ym.setOpaque(false);pane_day.setOpaque(false);Year.setText(Integer.toString(this_year); for (int i = 1; i 13; i+) Month.addItem(i + );pane_ym.add(new JLabel( );pane_ym.add(Down2); pane_ym.add(Year);Font(华文隶书Font(华文隶书Year.setFont(newMonth.setFont(newFont(华 文 隶
37、书pane_ym.add(Up2); pane_ym.add(TheYear); pane_ym.add(Today);Month.setSelectedIndex(this_month); pane_ym.add(Down1);pane_ym.add(Month);pane_ym.add(Up1); pane_ym.add(TheMonth); pane_ym.add(newJLabel( );Month.addActionListener(this);Year.addActionListener(this);Up1.addActionListener(this);Up2.addAction
38、Listener(this);Down1.addActionListener(this);Down2.addActionListener(this);Today.addActionListener(this);img= new ImageIcon(E:c.jpg); imgLabel = new JLabel(img);/初始化日期并绘制pane_day.setLayout(new GridLayout(7, 7, 10, 10);for (int i = 0; i 7; i+) Label_titlei = new JLabel( );Label_titlei.setOpaque(false
39、);Label_titlei.setFont(new Font(华 文 行 楷= 4,Font.TRUETYPE_FONT,56);pane_day.add(Label_titlei);for (int i = 0; i 42; i+) Button_dayi = new JButton( );Button_dayi.setFont(new Font(,Font.TRUETYPE_FONT,30);Button_dayi.setBorderPainted(false);Button_dayi.setContentAreaFilled(false);pane_day.add(Button_day
40、i);Button_dayi.addMouseListener(police);Button_dayi.addActionListener(newpublic void actionPerformed(ActionEvent e) Button_dayyearboxActionPerformed(e););this.setYM();this.setImg(month_num);this.setDay();this.add(jP);jP.setOpaque(false);/jp.setSize(1150,750); /jp.setContentAreaFilled(false);this.set
41、Layout(new BorderLayout();this.add(pane_day, BorderLayout.CENTER);this.add(pane_ym, BorderLayout.NORTH);/this.setSize(100,250);this.setSize(1150,750);setSize(1150,750);/setSize(300,300);华文行楷ActionListener()void setYM() if (bool) year_num = this_year + ; month_num =this_month;else year_num = Year.get
42、Text(); month_num =Month.getSelectedIndex();void setDay() int year_set = Integer.parseInt(year_num) - 1900; /年份值Date dt = new Date(year_set, month_num, 1); /构造期GregorianCalendar cal = new GregorianCalendar(); /个Calendar实例cal.setTime(dt);String week = 日, 一,二, 三, 四, 五,int day = 0;int day_week = 0;for
43、(int i = 0; i 7; i+) Label_titlei.setText(weeki);/月份if (month_num = 0|month_num = 2 |month_num |month_num = 6|获得一个日创建一六 ;= 4month_num = 7| month_num = 9 |month_num = 11) day =31;else if (month_num = 3 |month_num = 5 | month_num = 8|month_num = 10) day = 30;elseif (cal.isLeapYear(year_set) day = 29;e
44、lse day = 28;day_week = 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 = 6 |i = 34 |i = 41) if (i = day_week + this_date.getDate() -1) Button_dayi.setForeground(Color.blue);Button_dayi.setText(count + ); else Button_dayi.setForegr
45、ound(Color.red);Button_dayi.setText(count + ); else if (i = day_week + this_date.getDate() -1) Button_dayi.setForeground(Color.blue);Button_dayi.setText(count + ); else Button_dayi.setForeground(Color.black);Button_dayi.setText(count + );if (day_week = 0) for (int i = day; i 42; i+) Button_dayi.setT
46、ext( );Button_dayi.setContentAreaFilled(false);Button_dayi.addActionListener(this); else for (int i = 0; i day_week; i+) Button_dayi.setText( );for (int i = day_week + day; i 42; i+) Button_dayi.setText( );Calendar calendar= Calendar.getInstance();public int getYear()return Integer.parseInt(year_num
47、); public intgetMonth()return month_num;public int getWeek() week=calendar.get(DAY_OF_WEEK);return week;void setImg(int month_num) /System.out.println(month_num);/month_num = Month.getSelectedIndex();/*if(mon_num=0)img0 = new ImageIcon(E:tupian1.jpg);/imgLabel = new JLabel(img0);/这是背景图将背景图放在标签里*/swi
48、tch(month_num)case 0:setBG(./Images/1.jpg);break;case 1:setBG(./Images/2.jpg);break;case 2:setBG(./Images/3.jpg);break;case 3:setBG(./Images/4.jpg);break;case 4:setBG(./Images/5.jpg);break;case 5:setBG(./Images/6.jpg);break;case 6:setBG(./Images/7.jpg);break;case 7:setBG(./Images/8.jpg);break;case 8
49、:setBG(./Images/9.jpg);break;case 9:setBG(./Images/10.jpg);break;case 10:setBG(./Images/11.jpg);break;case 11:setBG(./Images/12.jpg);break; updateUI();public void actionPerformed(ActionEvent e) if (e.getSource() = Year | e.getSource() = Month) this.setYM();this.setImg(month_num);this.setDay();else i
50、f(e.getSource()=Up1)this.setYM();if(month_num=11)int y=Integer.parseInt(year_num);y+;this.setYM();month_num=0;Month.setSelectedIndex(month_num);year_num=Integer.toString(y);Year.setText(year_num);this.setImg(month_num);this.setDay();elseMonth.setSelectedIndex(+month_num);this.setDay();this.setImg(mo
51、nth_num);else if(e.getSource()=Down1)this.setYM();if(month_num=0)int y=Integer.parseInt(year_num);y-;this.setYM();month_num=11;Month.setSelectedIndex(month_num);year_num=Integer.toString(y);Year.setText(year_num);this.setDay();elseMonth.setSelectedIndex(-month_num);this.setDay();this.setImg(month_nu
52、m);else if(e.getSource()=Down2)this.setYM();int y=Integer.parseInt(year_num);y-;this.setYM();year_num=Integer.toString(y);Year.setText(year_num);this.setDay();this.setImg(month_num);else if(e.getSource()=Up2)this.setYM();int y=Integer.parseInt(year_num);y+;this.setYM();year_num=Integer.toString(y);Y
53、ear.setText(year_num);this.setDay();this.setImg(month_num);else if(e.getSource()=Today)bool=true;this.setYM();this.setDay();this.setImg(month_num);Year.setText(year_num);Month.setSelectedIndex(month_num);public void Button_dayyearboxActionPerformed(ActionEvent e)strbuttonday=e.getActionCommand();str
54、buttonyear=Year.getText();day=Integer.parseInt(strbuttonday);strbuttonmonth=Month.getSelectedIndex()+1+;if(strbuttonday.length()2)strbuttonday=0+strbuttonday;if(strbuttonmonth.length()2)strbuttonmonth=0+strbuttonmonth;public int getDay()/day=calendar.get(DAY_OF_MONTH);return day;public void paintCom
55、ponent(Graphics g)super.paintComponent(g);ImageIcon img=new ImageIcon(background);g.drawImage(img.getImage(),0,0,1150,750,this);这里主要用来定义日历的排版布局,给日历添加监听,使其能实现日历 的翻页、相关背景的变换、 点击日历上相应按钮能显示时钟及备忘录等功能。Clock.javaimport java.awt.*;import javax.swing.*;import java.applet.AudioClip;import java.io.*;import jav
56、a.applet.Applet;import .MalformedURLException;import .URL;import java.awt.event.ActionListener; import java.awt.event.ActionEvent;import java.util.Calendar;import java.lang.String;public class Clock extends JFrame public Clock()DrawClock dc=new DrawClock(); add(dc,BorderLayout.CENTER);setSize(640,56
57、0);setVisible(true); setExtendedState(JFrame.MAXIMIZED_BOTH);/添加计时器 时间间隔为1s int delay1 = 1000;ActionListener drawClock1 = new ActionListener() public voidactionPerformed(ActionEvent evt)/获取当前时间Calendar now=Calendar.getInstance() ;int nowh= now.get(Calendar.HOUR_OF_DAY);int nowm=now.get(Calendar.MINU
58、TE);int nows=now.get(Calendar.SECOND);int noww=now.get(Calendar.DAY_OF_WEEK);for(int i=0;i=23;i+)if(nowh=i & nows=0 & nowm=0) /System.out.println(123);try StringBuffer s=new StringBuffer(time/); s.append(Integer.toString(i);s.append(.wav);/System.out.println(s);String st=new String(s);File f
59、 = new File(st);URL cb= f.toURL();AudioClip aau;aau = Applet.newAudioClip(cb);aau.play(); catch (MalformedURLException e) ;new Timer(delay1,drawClock1).start();这里主要用来在创建时钟主窗口以及为给是添加监视器啊使其能够完成 整点报时的功能。DrawClock.javaimport javax.swing.*;import java.awt.event.ActionListener; java.awt.event.ActionEvent;
60、import java.awt.event.KeyEvent; java.awt.*;import java.util.Calendar;import java.util.GregorianCalendar;import java.io.*;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.util.Date;public class DrawClock extends JPanel/参数定义区int x,y,x0,y0,r,h,w,olds_x=-100,olds_y,oldm_x,oldm_y,o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度版权分期付款授权合同
- 二零二四年数据中心建设水泥供应合同
- 二零二四年度健身器材销售代理合同
- 二零二四年度城市道路建设设计与施工合同2篇
- 地铁站务员带教合同(2篇)
- 售后回购协议书(2篇)
- 二零二四年度电子商务数据共享与交换合同3篇
- 借款合同争议上诉状写作
- 长期农产品加工购销合同
- 酒水采购协议样本
- 初二初二初二期中家长会课件-2篇 3初二
- 《劳动创造幸福奋斗成就梦想》主题班会
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- 生涯职业发展展示
- 警校生大学生涯规划
- 餐厅饭店顾客意见反馈表格模板(可修改)
- 2024年中国大地保险公司招聘笔试参考题库含答案解析
- 《口腔医学导论》期末考试复习题库及答案
- 田赛高遠度成绩记录表
- (word完整版)011特殊过程确认准则
- Harry Potter 英文版(word文档集全)
评论
0/150
提交评论