




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、xxxjava语言课程期末作业 2015年12月18日一、课程题目 设计一个万年历系统,实现以下功能(1)可以查看当前的年份、月份和日期;(2)有时间栏,便于用户查看当前时间;(3)能够查找1至9999年的日期与星期的关系。 其它功能可自行开发。二、题目分析与设计 1.使用的开发环境为 eclipsejdk环境: jdk1.82. (此为万年历界面图)使用了 jtabbedpane 类 对功能页面分页,布局策略基本用borderlayout 和gridlayout 。3. 本项共有5个类,基本一个功能有一个类实现,主类 calendarmain 只包含一个main函数:对创建框架和其属性设置。
2、alarmdemo类 则实现闹钟功能;notebook 类实现记事本功能;calendarsview 类 则实现基本日历功能,chooseday 类 是一个弹窗,被calendarsview 调用,calendarsview 、alarmdemo 也在该类被调用;calendarmain -运行 .new calendarsview();calendarsview总的框架界面设计布局,日历功能的实现,对其他功能的调用 new alarmdemo(); new notebook();alarmdemo继承jpanel ,运用线程 和applet 实现闹钟功能,到规定时间播放闹铃notebook继
3、承jpanel ,运用io ,可以保存文本newchooseday(null, year, month).setvisible(true);chooseday继承 jdialog ,让用户选择看那一年月的日历4. 日历界面使用了 jtable ,功能的实现逻辑则是1.首先定义两个全局变量-年和月,查看不同时间的日历,该变量也随之改变。2. 写了几个函数获取今年第一天是星期几,然后根据月份天数即可推算具体某月第一天是星期几。3. 知道一个月第一天是星期几,则该月日历既可以顺序列出。闹钟的功能实现思路:1. 获取界面设定的时间。2. 使用线程,每过一秒急救获取当前时间,并判断是否到达设定的时间3.
4、 到设定的时间,启动弹窗,播放闹铃4. 闹铃科根据文件选择器自行选择记事本功能实现思路1. 在项目文件夹先新建一个txt文件作为储存的数据库2. 利用file 类 和io 数据流将界面文本储存进txt文件,实现保存功能3. 每当程序启动,读取txt文件内容并显示到界面上三、测试分析1.使用如下拓展包2. 程序界面截图如下日历主界面闹钟界面记事本界面3. 测试流程及功能介绍(1) 点击上一月、下一月可查看不同月份日历,左下角显示当前时间。点击蓝色的日期栏可以回到当前页(2)点击圈中按钮会出现弹框,可以调节年、月,查看指定年月日历(3)闹铃可以使用默认闹铃,也能自定义选择闹铃,不过闹铃格式只能为w
5、av或au时间到了以后出现弹框 ,并响起闹铃(4)记事本输入文本,按保存即可。(5)点击最小化按钮,可以选择普通缩小或者直接缩小到托盘.附录:源代码(注:在工程目录下新建文件夹 source ,并添加了闹铃文件,txt,托盘图片,如图)alarmdemo.javaimport java.applet.applet;import java.applet.audioclip;import java.awt.borderlayout;import java.awt.dimension;import java.awt.font;import java.awt.gridlayout;import jav
6、a.awt.event.actionevent;import java.awt.event.actionlistener;import java.io.file;import java.text.simpledateformat;import java.util.calendar;import java.util.date;import javax.swing.*;import javax.swing.text.defaultformatterfactory;import javax.swing.text.numberformatter;public class alarmdemo exten
7、ds jpanel implements runnable private static final long serialversionuid = -7066237267822356675l;thread alarm;public audioclip soumd1;calendar c = calendar.getinstance();jbutton sure = new jbutton(确定);jbutton open = new jbutton(可选择闹铃);jlabel jlabel = new jlabel(设置 时间 日-时-分, jlabel.center);jlabel day
8、label = new jlabel(日, jlabel.center);jlabel hourlabel = new jlabel(时, jlabel.center);jlabel minutelabel = new jlabel(分, jlabel.center);jpanel jpanel1 = new jpanel();jpanel jpanel2 = new jpanel();jpanel jpanel3 = new jpanel();jpanel jpanel4 = new jpanel();jtextfield music = new jtextfield(system.getp
9、roperty(user.dir)+sourcealarm.wav);int y = 0, m = 0, h = 0, mi = 0, d = 0;boolean fo = false;public alarmdemo() music.seteditable(false);/ 设置标签格式daylabel.setfont(new font(dialog, 1, 30);hourlabel.setfont(new font(dialog, 1, 30);minutelabel.setfont(new font(dialog, 1, 30);jlabel.setfont(new font(dial
10、og, 1, 30);/按钮设置sure.setcontentareafilled(false);sure.setfocuspainted(false);open.setcontentareafilled(false);open.setfocuspainted(false);jspinner spinner1 = new jspinner();jspinner spinner2 = new jspinner();jspinner spinner3 = new jspinner();spinner3.setmodel(new spinnernumbermodel(c.get(calendar.d
11、ate), 1, 31, 1);spinner1.setmodel(new spinnernumbermodel(c.get(calendar.hour_of_day),0, 23, 1);spinner2.setmodel(new spinnernumbermodel(c.get(calendar.minute), 0, 59,1);/ 设置属性setspinners(spinner1);setspinners(spinner2);setspinners(spinner3);jpanel4.add(jlabel);jpanel4.setpreferredsize(new dimension(
12、500, 100);jpanel1.setlayout(new gridlayout(1, 6);jpanel1.add(spinner3);jpanel1.add(daylabel);jpanel1.add(spinner1);jpanel1.add(hourlabel);jpanel1.add(spinner2);jpanel1.add(minutelabel);jpanel1.setpreferredsize(new dimension(500, 100);jpanel2.setlayout(new borderlayout();jpanel2.add(jpanel4, borderla
13、yout.north);jpanel2.add(music, borderlayout.center);jpanel2.add(open, borderlayout.east);jpanel3.setlayout(new gridlayout(1, 1);jpanel3.add(sure);setlayout(new borderlayout();add(jpanel1, borderlayout.north);add(jpanel2, borderlayout.center);add(jpanel3, borderlayout.south);open.addactionlistener(ne
14、w actionlistener() public void actionperformed(actionevent event) jfilechooser filechooser = new jfilechooser(); / 实例化文件选择器filechooser.setfileselectionmode(jfilechooser.files_and_directories); / 设置文件选择模式,此处为文件和目录均可filechooser.setcurrentdirectory(new file(.); / 设置文件选择器当前目录filechooser.setfilefilter(ne
15、w javax.swing.filechooser.filefilter() public boolean accept(file file) / 可接受的文件类型string name = file.getname().tolowercase();return name.endswith(.wav)| name.endswith(.au)| file.isdirectory();public string getdescription() / 文件描述return 音乐文件(*.wav,*.au););if (filechooser.showopendialog(alarmdemo.this
16、) = jfilechooser.approve_option) / 弹出文件选择器,并判断是否点击了打开按钮string filename = filechooser.getselectedfile().getabsolutepath(); / 得到选择文件或目录的绝对路径music.settext(filename););sure.addactionlistener(new actionlistener() public void actionperformed(actionevent event) if (sure.gettext().equals(确定) try d = (int) s
17、pinner3.getvalue();h = (int) spinner1.getvalue();mi = (int) spinner2.getvalue();if (1 = d & d = 31 & 0 = h & h = 23 & 0 = mi& mi = 59) fo = true;jlabel.settext(设置闹钟成功);spinner1.setenabled(false);spinner2.setenabled(false);spinner3.setenabled(false);start(); elsejoptionpane.showmessagedialog(null, 输入
18、时间错误); catch (exception e) joptionpane.showmessagedialog(null, 请输入正确的时间); else spinner1.setenabled(true);spinner2.setenabled(true);spinner3.setenabled(true);fo = false;stop();soumd1.stop();sure.settext(确定);jlabel.settext(设置 时间 日-时-分););public void start() if (alarm = null) alarm = new thread(this);a
19、larm.start();public void stop()/ 停止线程alarm = null;public void run() while (true) date now = new date();if (fo) sure.settext(关闭);simpledateformat ri = new simpledateformat(dd); / 封装 为了获取日期simpledateformat shi = new simpledateformat(kk); / 封装 为了获取小时simpledateformat fen = new simpledateformat(mm); / 封装
20、 为了获取分int riqi = integer.parseint(ri.format(now); / 获取日期int shizhong = integer.parseint(shi.format(now); / 获取小时int fenzhong = integer.parseint(fen.format(now); / 获取分钟if (riqi = d & shizhong = h & fenzhong = mi) / 判断条件try soumd1 = applet.newaudioclip(new file(music.gettext().tourl(); / 播放音乐soumd1.loo
21、p();fo = false;joptionpane.showmessagedialog(null, 时间到了! (v); catch (exception e) e.printstacktrace();try thread.sleep(1000); catch (interruptedexception ie) public void setspinners(jspinner spinner) / 设置属性jspinner.numbereditor editor = new jspinner.numbereditor(spinner, 0);spinner.seteditor(editor)
22、;jformattedtextfield textfield = (jspinner.numbereditor) spinner.geteditor().gettextfield();textfield.setfont(new font(dialog, 1, 45);textfield.seteditable(true);defaultformatterfactory factory = (defaultformatterfactory) textfield.getformatterfactory();numberformatter formatter = (numberformatter)
23、factory.getdefaultformatter();formatter.setallowsinvalid(false);calendarsview.javaimport java.awt.awtexception;import java.awt.borderlayout;import java.awt.color;import java.awt.dimension;import java.awt.font;import java.awt.frame;import java.awt.gridlayout;import java.awt.systemtray;import java.awt
24、.trayicon;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.mouseadapter;import java.awt.event.mouseevent;import java.awt.event.mouselistener;import java.awt.event.windowadapter;import java.awt.event.windowevent;import java.io.file;import java.io.ioexceptio
25、n;import java.text.simpledateformat;import java.util.calendar;import java.util.date;import javax.imageio.imageio;import javax.swing.jbutton;import javax.swing.jframe;import javax.swing.jlabel;import javax.swing.joptionpane;import javax.swing.jpanel;import javax.swing.jscrollpane;import javax.swing.j
26、tabbedpane;import javax.swing.jtable;import javax.swing.timer;import javax.swing.table.defaulttablemodel;public class calendarsview extends jframe private static final long serialversionuid = 1l;static calendar c = calendar.getinstance();static int year = c.get(calendar.year);static int month = c.ge
27、t(calendar.month) + 1;int monthday = 0;string weekdaystr = 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六 ;object monthview = new string67;jpanel daypanel = new jpanel();jpanel panel1 = new jpanel();jpanel calpanel = new jpanel();jpanel alarmdemo = new alarmdemo();jpanel notebook = new notebook();jtabbedpane jta
28、bbedpane = new jtabbedpane(jtabbedpane.top);jbutton prebutton = new jbutton(上一月);jbutton nextbutton = new jbutton(下一月);jbutton preyear = new jbutton(上一年);jbutton nextyear = new jbutton(下一年);jbutton change = new jbutton(c.get(calendar.year) + 年+ (c.get(calendar.month) + 1) + 月);jlabel nowlabel = new
29、jlabel(c.get(calendar.year) + 年+ (c.get(calendar.month) + 1) + 月 + (c.get(calendar.date) + 日,jlabel.center);jlabel timelabel = new jlabel(-, jlabel.left);defaulttablemodel model = new defaulttablemodel();jtable jtable;jscrollpane jscrollpane;trayicon trayicon;/托盘图标 systemtray systemtray;/系统托盘public
30、calendarsview() /托盘化systemtray = systemtray.getsystemtray();/获得系统托盘的实例 try trayicon = new trayicon(imageio.read(new file(system.getproperty(user.dir)+source360.png); catch (ioexception e1) e1.printstacktrace(); this.addwindowlistener( new windowadapter() public void windowiconified(windowevent e) in
31、t n = joptionpane.showconfirmdialog(null, 是否缩小到托盘?, 缩小, joptionpane.yes_no_option); if (n = joptionpane.yes_option) dispose();/窗口最小化时dispose该窗口 try systemtray.add(trayicon); catch (awtexception e1) e1.printstacktrace();/设置托盘的图标 else if (n = joptionpane.no_option) systemtray.remove(trayicon); ); tray
32、icon.addmouselistener( new mouseadapter() public void mouseclicked(mouseevent e) if(e.getclickcount() = 2)/双击托盘窗口再现 setextendedstate(frame.normal); setvisible(true); systemtray.remove(trayicon); ); /时间栏timer timer = new timer(1000, new actionlistener() public void actionperformed(actionevent evt) ti
33、melabel.settext(new simpledateformat(yyyy-mm-dd hh:mm:ss).format(new date(););timer.start();nowlabel.setfont(new java.awt.font(dialog, 1, 15);nowlabel.setforeground(color.blue);dataofday();daypanel.setlayout(new borderlayout();daypanel.add(nowlabel, borderlayout.north);daypanel.add(jscrollpane, bord
34、erlayout.center);/ 上方按钮panel1.setlayout(new gridlayout(1, 3);panel1.setbackground(color.white);prebutton.setcontentareafilled(false);prebutton.setfocuspainted(false);change.setcontentareafilled(false);change.setfocuspainted(false);nextbutton.setcontentareafilled(false);nextbutton.setfocuspainted(fal
35、se);panel1.add(prebutton);panel1.add(change);panel1.add(nextbutton);calpanel.setlayout(new borderlayout();calpanel.add(panel1, borderlayout.north);calpanel.add(daypanel, borderlayout.center);calpanel.add(timelabel, borderlayout.south);jtabbedpane.add(calpanel, 日历);jtabbedpane.add(alarmdemo,闹钟); jtab
36、bedpane.add(notebook,记事本); add(jtabbedpane, borderlayout.north);/ 按钮监听器prebutton.addactionlistener(new pressbutton();nextbutton.addactionlistener(new pressbutton();change.addmouselistener(new mouselistener() public void mouseclicked(mouseevent e) if (e.getbutton() = mouseevent.button1)new chooseday(
37、null, year, month).setvisible(true);dataofday();change.settext(year + 年 + month + 月);public void mousepressed(mouseevent e) public void mousereleased(mouseevent e) public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) );nowlabel.addmouselistener(new mouselistener() public void
38、 mouseclicked(mouseevent e) if (e.getbutton() = mouseevent.button1)year = c.get(calendar.year);month = c.get(calendar.month) + 1;dataofday();change.settext(year + 年 + month + 月);public void mousepressed(mouseevent e) public void mousereleased(mouseevent e) public void mouseentered(mouseevent e) publ
39、ic void mouseexited(mouseevent e) );public void dataofday() int n = 1;int k = getdays();for (int i = 0; i 6; i+) for (int j = 0; j 7; j+) if (i = 0 & j getmonthday(month) monthviewij = ; else monthviewij = string.valueof(n);n+;model.setrowcount(0);model.setdatavector(monthview, weekdaystr);jtable =
40、new jtable(model);jtable.setgridcolor(color.gray);jtable.setbackground(color.white);jtable.setcolumnselectionallowed(true);/ 将table中的列设置为可选择的jtable.setselectionbackground(color.pink);/ 当选定某一天时背景颜色为粉jtable.setselectionforeground(color.blue);jtable.setfont(new font(黑体, font.bold, 24);/ 日期数字字体格式jtable.
41、setrowheight(26);/ 表格的高度jscrollpane js = new jscrollpane(jtable);/ 设置大小dimension dimension = new dimension(500, 185);js.setpreferredsize(dimension);jscrollpane = js;public boolean isleapyear(int year1) / 判断是否是闰年return (year1 % 4 = 0 & year1 % 100 != 0) | (year1 % 400 = 0);public int firstday() / 计算该
42、年第一天是星期几long n = year * 365;for (int i = 1; i year; i+) if (isleapyear(i) n+;return (int) n % 7;public int getmonthday(int m) / 获取每个月的天数switch (m) case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 4:case 6:case 9:case 11:return 30;case 2:if (isleapyear(year)return 29;elsereturn 28;de
43、fault:return 0;/ 获取该月月第一天是星期几public int getdays() monthday = 0;for (int i = 1; i month; i+)monthday += getmonthday(i);return (firstday() + (monthday % 7) % 7;public class pressbutton implements actionlistener overridepublic void actionperformed(actionevent e) jbutton button = (jbutton) e.getsource()
44、;if (button = prebutton) month-;if (month 12) year+;month -= 12;dataofday();change.settext(year + 年 + month + 月);chooseday.javaimport java.awt.borderlayout;import java.awt.gridlayout;import java.awt.event.actionevent;import java.awt.event.actionlistener;import javax.swing.jbutton;import javax.swing.
45、jdialog;import javax.swing.jformattedtextfield;import javax.swing.jpanel;import javax.swing.jspinner;import javax.swing.spinnernumbermodel;import javax.swing.text.defaultformatterfactory;import javax.swing.text.numberformatter;public class chooseday extends jdialog private static final long serialve
46、rsionuid = -3230014153625851275l;private jbutton sure = new jbutton(完成);private jbutton cancel = new jbutton(取消);public chooseday(calendarsview calendarsview, int year, int mouth) super(calendarsview, 设置日期, true);jpanel panel1 = new jpanel();jpanel panel2 = new jpanel();jspinner spinner1 = new jspin
47、ner();jspinner spinner2 = new jspinner();spinner1.setmodel(new spinnernumbermodel(year, 0, 9999, 1);spinner2.setmodel(new spinnernumbermodel(mouth, 1, 12, 1);/设置属性setspinners(spinner1);setspinners(spinner2);panel1.add(spinner1);panel1.add(spinner2);sure.setcontentareafilled(false);sure.setfocuspaint
48、ed(false);cancel.setcontentareafilled(false);cancel.setfocuspainted(false);panel2.setlayout(new gridlayout(1, 2);panel2.add(cancel);panel2.add(sure);add(panel1, borderlayout.north);add(panel2, borderlayout.south);pack(); / 按组件天界大小setresizable(false); / 不可调节窗口大小setlocationrelativeto(null); / 居中显示窗口sure.addactionlistener(new actionlistener() public void actionperformed(actionevent evt) dispose();calendarsview.year = (in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 逻辑思维训练课程教案:逻辑推理与论证方法
- 长方体结构认识与性质学习教案
- 电力系统运行与维护习题集
- 音乐分析考试试题及答案
- 医院停水考试试题及答案
- 医院库房考试试题及答案
- 六一俱乐部活动方案
- 六一光影活动方案
- 六一创意夜晚活动方案
- 六一宠物活动策划方案
- 军营超市环境卫生管理方案
- 快乐海豚课件教学课件
- 国开《农村社会学》形考作业1-4参考答案
- 电子烟质量管理手册
- 城市数字底座CIM数字城市发展方向与技术
- 财政学学习通题库及答案
- 2023-2024学年全国初二下历史人教版期末试卷(含答案解析)
- 形势与政策智慧树知到答案2024年西北师范大学
- 2024-2030年中国射击场行业市场发展趋势与前景展望战略分析报告
- 施工现场建筑垃圾减量化专项方案
- 高三数学一轮复习题型与战法精准训练(新高考专用)7.2.2点线面的位置关系(针对练习)(原卷版+解析)
评论
0/150
提交评论