




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、xxxjava語言課程期末作業(yè) 2015年12月18日一、課程題目 設(shè)計(jì)一個(gè)萬年歷系統(tǒng),實(shí)現(xiàn)以下功能(1)可以查看當(dāng)前的年份、月份和日期;(2)有時(shí)間欄,便于用戶查看當(dāng)前時(shí)間;(3)能夠查找1至9999年的日期與星期的關(guān)系。 其它功能可自行開發(fā)。二、題目分析與設(shè)計(jì) 1.使用的開發(fā)環(huán)境為 eclipsejdk環(huán)境: jdk1.82. (此為萬年歷界面圖)使用了 jtabbedpane 類 對功能頁面分頁,布局策略基本用borderlayout 和gridlayout 。3. 本項(xiàng)共有5個(gè)類,基本一個(gè)功能有一個(gè)類實(shí)現(xiàn),主類 calendarmain 只包含一個(gè)main函數(shù):對創(chuàng)建框架和其屬性設(shè)置。
2、alarmdemo類 則實(shí)現(xiàn)鬧鐘功能;notebook 類實(shí)現(xiàn)記事本功能;calendarsview 類 則實(shí)現(xiàn)基本日歷功能,chooseday 類 是一個(gè)彈窗,被calendarsview 調(diào)用,calendarsview 、alarmdemo 也在該類被調(diào)用;calendarmain -運(yùn)行 .new calendarsview();calendarsview總的框架界面設(shè)計(jì)布局,日歷功能的實(shí)現(xiàn),對其他功能的調(diào)用 new alarmdemo(); new notebook();alarmdemo繼承jpanel ,運(yùn)用線程 和applet 實(shí)現(xiàn)鬧鐘功能,到規(guī)定時(shí)間播放鬧鈴notebook繼
3、承jpanel ,運(yùn)用io ,可以保存文本newchooseday(null, year, month).setvisible(true);chooseday繼承 jdialog ,讓用戶選擇看那一年月的日歷4. 日歷界面使用了 jtable ,功能的實(shí)現(xiàn)邏輯則是1.首先定義兩個(gè)全局變量-年和月,查看不同時(shí)間的日歷,該變量也隨之改變。2. 寫了幾個(gè)函數(shù)獲取今年第一天是星期幾,然后根據(jù)月份天數(shù)即可推算具體某月第一天是星期幾。3. 知道一個(gè)月第一天是星期幾,則該月日歷既可以順序列出。鬧鐘的功能實(shí)現(xiàn)思路:1. 獲取界面設(shè)定的時(shí)間。2. 使用線程,每過一秒急救獲取當(dāng)前時(shí)間,并判斷是否到達(dá)設(shè)定的時(shí)間3.
4、 到設(shè)定的時(shí)間,啟動彈窗,播放鬧鈴4. 鬧鈴科根據(jù)文件選擇器自行選擇記事本功能實(shí)現(xiàn)思路1. 在項(xiàng)目文件夾先新建一個(gè)txt文件作為儲存的數(shù)據(jù)庫2. 利用file 類 和io 數(shù)據(jù)流將界面文本儲存進(jìn)txt文件,實(shí)現(xiàn)保存功能3. 每當(dāng)程序啟動,讀取txt文件內(nèi)容并顯示到界面上三、測試分析1.使用如下拓展包2. 程序界面截圖如下日歷主界面鬧鐘界面記事本界面3. 測試流程及功能介紹(1) 點(diǎn)擊上一月、下一月可查看不同月份日歷,左下角顯示當(dāng)前時(shí)間。點(diǎn)擊藍(lán)色的日期欄可以回到當(dāng)前頁(2)點(diǎn)擊圈中按鈕會出現(xiàn)彈框,可以調(diào)節(jié)年、月,查看指定年月日歷(3)鬧鈴可以使用默認(rèn)鬧鈴,也能自定義選擇鬧鈴,不過鬧鈴格式只能為w
5、av或au時(shí)間到了以后出現(xiàn)彈框 ,并響起鬧鈴(4)記事本輸入文本,按保存即可。(5)點(diǎn)擊最小化按鈕,可以選擇普通縮小或者直接縮小到托盤.附錄:源代碼(注:在工程目錄下新建文件夾 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(設(shè)置 時(shí)間 日-時(shí)-分, jlabel.center);jlabel day
8、label = new jlabel(日, jlabel.center);jlabel hourlabel = new jlabel(時(shí), 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);/ 設(shè)置標(biāo)簽格式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);/按鈕設(shè)置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);/ 設(shè)置屬性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(); / 實(shí)例化文件選擇器filechooser.setfileselectionmode(jfilechooser.files_and_directories); / 設(shè)置文件選擇模式,此處為文件和目錄均可filechooser.setcurrentdirectory(new file(.); / 設(shè)置文件選擇器當(dāng)前目錄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) / 彈出文件選擇器,并判斷是否點(diǎn)擊了打開按鈕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(設(shè)置鬧鐘成功);spinner1.setenabled(false);spinner2.setenabled(false);spinner3.setenabled(false);start(); elsejoptionpane.showmessagedialog(null, 輸入
18、時(shí)間錯(cuò)誤); catch (exception e) joptionpane.showmessagedialog(null, 請輸入正確的時(shí)間); else spinner1.setenabled(true);spinner2.setenabled(true);spinner3.setenabled(true);fo = false;stop();soumd1.stop();sure.settext(確定);jlabel.settext(設(shè)置 時(shí)間 日-時(shí)-分););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(關(guān)閉);simpledateformat ri = new simpledateformat(dd); / 封裝 為了獲取日期simpledateformat shi = new simpledateformat(kk); / 封裝 為了獲取小時(shí)simpledateformat fen = new simpledateformat(mm); / 封裝
20、 為了獲取分int riqi = integer.parseint(ri.format(now); / 獲取日期int shizhong = integer.parseint(shi.format(now); / 獲取小時(shí)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, 時(shí)間到了! (v); catch (exception e) e.printstacktrace();try thread.sleep(1000); catch (interruptedexception ie) public void setspinners(jspinner spinner) / 設(shè)置屬性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;/托盤圖標(biāo) systemtray systemtray;/系統(tǒng)托盤public
30、calendarsview() /托盤化systemtray = systemtray.getsystemtray();/獲得系統(tǒng)托盤的實(shí)例 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();/窗口最小化時(shí)dispose該窗口 try systemtray.add(trayicon); catch (awtexception e1) e1.printstacktrace();/設(shè)置托盤的圖標(biāo) else if (n = joptionpane.no_option) systemtray.remove(trayicon); ); tray
32、icon.addmouselistener( new mouseadapter() public void mouseclicked(mouseevent e) if(e.getclickcount() = 2)/雙擊托盤窗口再現(xiàn) setextendedstate(frame.normal); setvisible(true); systemtray.remove(trayicon); ); /時(shí)間欄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);/ 按鈕監(jiān)聽器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中的列設(shè)置為可選擇的jtable.setselectionbackground(color.pink);/ 當(dāng)選定某一天時(shí)背景顏色為粉jtable.setselectionforeground(color.blue);jtable.setfont(new font(黑體, font.bold, 24);/ 日期數(shù)字字體格式j(luò)table.
41、setrowheight(26);/ 表格的高度jscrollpane js = new jscrollpane(jtable);/ 設(shè)置大小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() / 計(jì)算該
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) / 獲取每個(gè)月的天數(shù)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, 設(shè)置日期, 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);/設(shè)置屬性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); / 不可調(diào)節(jié)窗口大小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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國甲醇燃料汽車行業(yè)發(fā)展分析及市場競爭格局與發(fā)展前景預(yù)測報(bào)告
- 2025至2030中國瑜伽夾克和連帽衫行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國玻璃工藝品行業(yè)深度研究及發(fā)展前景投資評估分析
- 2025至2030中國環(huán)境試驗(yàn)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 初中學(xué)業(yè)水平考試實(shí)驗(yàn)室設(shè)備標(biāo)準(zhǔn)化與統(tǒng)一化研究
- 推動素質(zhì)教育教育機(jī)器人的重要作用與應(yīng)用前景
- 招聘培訓(xùn)課件軟件
- 美術(shù)培訓(xùn)主題課件名稱
- 高效會議管理培訓(xùn)課件
- 多媒體教學(xué)技術(shù)在課堂教學(xué)中的實(shí)踐
- 禁止小孩進(jìn)入車間協(xié)議書
- 工程項(xiàng)目參與經(jīng)歷證明文件(8篇)
- 學(xué)校規(guī)范常規(guī)化管理
- 裝修公司掛靠協(xié)議書范本
- 2025-2030中國水晶玻璃茶具行業(yè)市場發(fā)展現(xiàn)狀及競爭格局與投資前景研究報(bào)告
- 《橋梁減隔震裝置技術(shù)條件 JTT 1062-2025》知識培訓(xùn)
- 大學(xué)生職業(yè)規(guī)劃大賽《日語專業(yè)》生涯發(fā)展展示
- 防打架斗毆課件
- 太陽能路燈采購安裝方案投標(biāo)文件(技術(shù)方案)
- 智慧園藝考核大綱
- 中國經(jīng)皮冠狀動脈介入治療指南(全文版)
評論
0/150
提交評論