Java課程設(shè)計實驗報告及全部源碼流程圖
《Java課程設(shè)計實驗報告及全部源碼流程圖》由會員分享,可在線閱讀,更多相關(guān)《Java課程設(shè)計實驗報告及全部源碼流程圖(71頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 課程設(shè)計 一、實驗?zāi)康? 1 .加深對課堂講授內(nèi)容的理解,掌握解決實際應(yīng)用問題時所應(yīng)具有的查閱資料、技術(shù)標(biāo)準(zhǔn)和規(guī)范,以及軟件編程、調(diào)試等能力,掌握面向?qū)ο蟮木幊趟枷爰癑ava語言程序設(shè)計的規(guī)律與技巧,為進(jìn)一步學(xué)習(xí)web應(yīng)用開發(fā)及今后 從事專業(yè)工作打下基礎(chǔ)。 2 .使用本學(xué)期學(xué)習(xí)的JavaSE技術(shù)(也可以使用課堂教學(xué)中沒有學(xué)習(xí)過的Java技術(shù),但是應(yīng)當(dāng)以JavaSE技術(shù)為主)完成多功能日歷GUI程序的設(shè)計,使之具有如下基本功能:一年日歷用12頁顯示,每頁顯示一個月的日歷。日 歷可以按年或月前后翻動,能夠顯示當(dāng)前的日期,可以為每頁日歷選擇背景圖片。 3 .在完成基本功能的基礎(chǔ)上發(fā)
2、揮自己的想象力與創(chuàng)造力,使程序凸顯出與 眾不同的特點與功能,形成本小組的特性色。 二、實驗要求 1 .問題描述準(zhǔn)確、規(guī)范。 2 .程序結(jié)構(gòu)合理,調(diào)試數(shù)據(jù)準(zhǔn)確、有代表性.o 3 .界面布局整齊,人機(jī)交互方便。 4 .輸出結(jié)果正確。 5 .正確撰寫實驗報告。 三、實驗內(nèi)容 編寫一個GUI程序?qū)崿F(xiàn)日歷的功能。一年日歷用12頁顯示,每頁顯示個月的日歷。日歷可以按年或月前后翻動,能夠顯示當(dāng)前的日期以及當(dāng)前農(nóng)歷,可以為每頁日歷選擇背景圖片。可以實現(xiàn)顯示時鐘,時鐘能進(jìn)行整點報 時。可以實現(xiàn)備忘記事功能,能在每天添加、修改、刪除記事等操作。 四、實驗步驟 1. 在上機(jī)實驗前,小組成員進(jìn)
3、行選題討論,確定小組感興趣而又伸縮性 強的題目多功能日歷。 2. 在第一次上機(jī)實驗時討論分工,分工明確之后,分頭合作進(jìn)行。 3. 各成員完成自己的任務(wù)后,最后進(jìn)行統(tǒng)籌合并,以及程序最后的優(yōu)化。 4. 根據(jù)實驗結(jié)果,寫出合肥工業(yè)大學(xué)實驗報告。實驗報告應(yīng)當(dāng)包括:實 驗內(nèi)容,程序流程圖,類結(jié)構(gòu),程序清單,運行結(jié)果,以及通過上機(jī)取得的 經(jīng)驗。 5. 詳細(xì)的上機(jī)實驗步驟見任務(wù)分工及程序設(shè)計進(jìn)度表。 五、實驗結(jié)果 經(jīng)過小組成員的共同努力,最終我們小組設(shè)計的多功能日歷程序能夠?qū)? 現(xiàn)實驗的基本要求——一年日歷用12頁顯示,每頁顯示一個月的日歷。日歷 可以按年或月前后翻動,能夠顯示當(dāng)前的日
4、期,可以為每頁日歷選擇背景圖 片。另外,在完成基本要求的基礎(chǔ)上,我們增添了顯示農(nóng)歷、顯示時鐘、添 加備忘錄、修改備忘錄等功能。整體程序運行流暢、功能齊全、符合操作習(xí) 慣。 下面是程序運行效果截圖: 日歷主界面(可以實現(xiàn)每個月的日歷,可以按年或按月前后翻動,能夠 顯示當(dāng)前日期,并能夠選擇背景圖片): 精選范本 備忘錄主界面(實現(xiàn)備忘錄的添加,及當(dāng)前日歷的顯示) 添加 20141▼ 琳萬十H初二 備忘
5、錄主界面(實現(xiàn)備忘錄的顯示,及對當(dāng)前備忘錄的修改刪除等) 今日待辦添加 摞程設(shè)計喔暇 時鐘主界面(顯示當(dāng)前時間,實現(xiàn)報整點報時功能) isasSaturday 8. i ,7 六、實驗總結(jié) 兩周的課程設(shè)計結(jié)束了,在這其中歷盡酸甜苦辣咸各種滋味,不過收獲頗豐。從學(xué)習(xí)C語言、數(shù)據(jù)庫等等計算機(jī)編程類課程開始,自己始終有種感覺,那就是太理論化了、缺少實踐。而這次的Java程序設(shè)計可以說與以往大 不相同,先是在課堂上老師講述了有關(guān)的基礎(chǔ)理論、基本語法知識,而后再加上
6、這兩周的課程設(shè)計,可以說是真正能夠體會到程序編程的樂趣,也第一次發(fā)現(xiàn)自己原來對程序設(shè)計是如此的感興趣。尤其是由于課程時間較緊,課上時間老師只是簡單給我們講述了一下JavaSwing的基礎(chǔ)知識,并沒有去深 入,而在此次課程設(shè)計中大量用到的監(jiān)聽事件的有關(guān)知識需要自己去查標(biāo)準(zhǔn)文檔,去網(wǎng)上找相關(guān)系料,這無疑對自己是一個挑戰(zhàn)。但是兩周下來,我做到了,我獨立完成了對備忘錄程序的編寫,累積下來這部分共涉及到包括 ActionListener,MouseListener,MenuListener,DocumentListener等各種各類監(jiān)聽18個監(jiān)聽,分為6個類,累計完成程序千余行。而給我印象最深刻的便
7、監(jiān)聽了,可以說是整個備忘錄的大部分代碼都是與監(jiān)聽相關(guān),這也是讓我我學(xué)會了對程序監(jiān)聽的運用,當(dāng)然只是學(xué)會遠(yuǎn)遠(yuǎn)談不上精通。 我編寫的類有Test、MainWin、MyMenuListener1、PoliceListen、PoliceListen2、MyWindowListener。其中Test類主要是用來定義備忘錄主窗口的各種組件以及在相關(guān)組件上添加監(jiān)聽以實現(xiàn)備忘錄添加、修改、刪除等功能。MainWin類主要是用來創(chuàng)建Test對象,用以顯示窗口的。 MyMenuListener1主要是給今日待辦菜單定義菜單監(jiān)聽,從而使其選中后能顯 示今日待辦的備忘記事,而當(dāng)未被選中時相關(guān)的文字、按鈕又都會隱
8、藏掉。 PoliceListen主要是用來定義日歷日期按鈕事件的監(jiān)聽,用以監(jiān)聽當(dāng)點擊相 關(guān)日期時會彈出相應(yīng)日期的備忘記事的窗口來。PoliceListen2主要是定義備 忘錄窗口中添加按鈕的時間監(jiān)聽,使其被點擊后能夠顯示添加備忘記事功能 的相關(guān)功能按鈕和相關(guān)文本區(qū)。MyWindowListener主要是定義備忘錄窗口的 窗口監(jiān)聽,和PoliceListen共同使用來對窗口的激活狀態(tài)進(jìn)行監(jiān)聽,以保證 窗口能夠按照預(yù)定計劃彈出和關(guān)閉。 在實驗過程中遇到了大大小小各種困難,通過自己查資料、詢問老師、 同學(xué)討論基本解決了這些困難。下面我就說一說在這次課程設(shè)計中遇到的問 題有哪些,以及
9、自己的解決辦法和從中得出的經(jīng)驗心得。首先在對備忘錄窗 口的布局問題上,一開始采用流式布局,按鈕少的時候效果還算說得過去, 但是當(dāng)按鈕一多整個布局就不那么好控制了了。為了實現(xiàn)預(yù)期的效果,最終 采用了null布局,在該種布局下,需要為每個組件指定坐標(biāo),否則組件將不 會顯示。首先我的想法是,根據(jù)窗口的高度和寬度來對按鈕進(jìn)行布局,我相 信這種方法肯定是正規(guī)程序設(shè)計中在布局是采用的方法,但是擺在眼前的問 題是時間比較緊,沒有大量的時間來進(jìn)行這種比較精確地布局。因此,最終 是通過不斷地嘗試來給組件賦予坐標(biāo)值,最終效果是肉眼感覺起來是不錯的, 如果時間充足當(dāng)然可以做的更精確一點。 第二個問
10、題也是一個比較簡單的問題,因為剛開始不熟悉監(jiān)聽,因此遇 到了彈出一個窗口后,再點擊這個按鈕本來按照效果不應(yīng)該在彈出窗口的, 但是依舊能彈出。為了解決這個問題,自己想了一個辦法那就是標(biāo)記,當(dāng)有 窗口彈出時,將標(biāo)記值變成1,而當(dāng)標(biāo)記值為1的時候,點擊此按鈕將不會觸 發(fā)監(jiān)聽事件,只有當(dāng)標(biāo)記值為0的時候該監(jiān)聽事件才能起到作用,然后當(dāng)此 窗口的狀態(tài)為關(guān)閉時,又會將該標(biāo)記值變成0,這樣的效果主要是通過 PoliceListen和MyWindowListen兩個類來完成的,其中PoliceListen是鼠 標(biāo)監(jiān)聽,而MyWindowListen則是窗口監(jiān)聽。這是這一個監(jiān)聽最終在自己的努 力下
11、成功了,才使自己對監(jiān)聽事件產(chǎn)生了濃厚的興趣,以至于后來加了那么 多監(jiān)聽雖然困難很多也沒有退縮。自己也從中體會到平時的程序之所以能夠 相應(yīng)操作的原理,那就是對命令、對動作進(jìn)行監(jiān)聽。而且,有時候看起來非 常簡單的功能實現(xiàn)起來也不是很容易,就像本例中的所說的那樣。 在完成了第一個監(jiān)聽以后,又在Test里面加入了N多個監(jiān)聽,這些監(jiān)聽 大部分是ActionListener監(jiān)聽,也即最常有的一類監(jiān)聽。為了避免類過多, 我大多采用了匿名類的方式內(nèi)嵌于Test類中。這些監(jiān)聽的設(shè)計中,大部分沒 有遇到問題,有少數(shù)是因為自己的邏輯順序不對而沒有達(dá)到預(yù)期的效果,最 后都能調(diào)整過來。遇到的問題是讀取選
12、中日期,以及在那三個下拉框中怎么 根據(jù)年份和月份來添加后面的日期(如此敘述可能不太明了,老師可以對照 程序截圖中的備忘錄主窗口中的那個日期下拉框來看),其實最后解決了就會 發(fā)現(xiàn),其實這些也并不難,在日期處理上只要監(jiān)聽年份和月份。年份判斷該 年是否為閏年,月份判斷是那個月,最終可以確定該月應(yīng)該添加多少item到 下拉框中。而讀取選中日期則是將日歷主窗口文本框中的年份、下拉框中的 月份以及點擊按鈕上的數(shù)字讀取出來將他們分別設(shè)置成下拉框中的默認(rèn)年月 日則可。另外為了使得后面的備忘記事文件名稱長度一致,在進(jìn)行加入的時 候會先比對一下該數(shù)字是否為兩位數(shù),如果不是兩位數(shù)則將前面加0后再導(dǎo)
13、 入。 下一個問題則是在監(jiān)聽文本框的問題上,因為課本上對 DocumentListener也是簡單介紹了下,為了實現(xiàn)預(yù)想的效果,即在文本框有 文字的時候下面的確定鍵可用,沒有文字的時候下面的確定鍵不可用而只有 取消鍵可用,通過查閱標(biāo)準(zhǔn)文檔和詢問老師,最終弄清楚了每個抽象方法的 含義,順利的實現(xiàn)了該功能。 最后,在如何保存每日記事的問題上,解決這一問題可以有兩種思路, 一種是搭建一個數(shù)據(jù)庫,兩一種是通過保存文件的形式。毫無疑問,通過寫 入數(shù)據(jù)庫的方式更有難度、更有挑戰(zhàn)性,但是考慮到在備忘錄方面一直都是 我一個人在做,精力方面可能不夠,最后我采用了寫文件的形式來保存,每 日的記
14、事。后來發(fā)現(xiàn)有的組使用數(shù)據(jù)庫實現(xiàn)的,最后他們組得分B+,我們得 分B,其實有時候輸在了不敢嘗試上、或者說分工更明確一點更好(畢竟有些 東西一個人做了,別人或許有幫忙的心也差不上手了)。當(dāng)然雖然寫文件的形 式比較簡單一點,這中間也要做好相關(guān)邏輯的設(shè)計。在寫文件的時候采用選 中日期為文件名的方式進(jìn)行保存,在讀文件時候則讀取以選中日期文件命名 的文件,將其顯示在文本區(qū)中。另外在修改了當(dāng)天記事后,炫耀對文件以同 樣的方式進(jìn)行保存。 最后該程序還有不足,比如說未能實現(xiàn)相關(guān)的時間提醒的功能、有些細(xì) 節(jié)處理的不夠使得部分地方缺少人性化。對于代碼這部分,自己第一次編寫 者這些代碼有些地方還需
15、要鍛煉,比如說對類的劃分、對相關(guān)語句進(jìn)行打包 成一個函數(shù)來重復(fù)調(diào)用提高代碼的重用性等等,因為有些語句(像設(shè)置組件 可見不可見的語句)在大量的地方都用到了,但是我寫的時候只是把他們復(fù) 制下來,這部分代碼應(yīng)該做成一個函數(shù),或者抽象成類效果能更好點。驗收 結(jié)束的那一刻所有的壓力、所有的因遇到而嘗到的苦澀最終都化成滿滿的喜 悅,或者在某種程度上更是一種成就感。 七、附件 1.程序流程圖、類結(jié)構(gòu)圖 (1)程序流程圖 該程序可以分為三個部分,即日歷主程序和時鐘、備忘錄兩個程序。其 中時鐘程序是通過日歷主界面上的按鈕觸發(fā)事件來啟動并創(chuàng)建相應(yīng)的窗口, 備忘錄程序是通過日歷上按鈕事件觸發(fā)的
16、。日歷主窗口可以實現(xiàn)分頁顯示、 上下翻動、為每月選定背景等功能,時鐘窗口可以實現(xiàn)指針和數(shù)字時鐘顯示、 整點報時功能,備忘錄程序可以通過創(chuàng)建、修改、刪除已選定日期為文件名 的文件來實現(xiàn)添加、修改、刪除多條記事的功能。整個程序流程如下圖(由 于整個流程圖較大,為了使其在聽一個版面中顯現(xiàn)出來,因此有些字體可能 偏小,老師如若看不清,可以用Visio打開放大查看)所示: 開始 日歷王囪口都件 初始化,并添加 相應(yīng)監(jiān)聽 觸發(fā)時鐘按鈕事 件 文本框輸入年份 節(jié)年份 鈕事件 觸發(fā)年份監(jiān)聽事 件 繪制時鐘表盤 初始化時鐘窗口組件,并添加相應(yīng)監(jiān)聽 監(jiān)聽系統(tǒng)時間 顯示選定年
17、份月 份日歷 時鐘窗口顯示 整點觸發(fā)監(jiān)聽事件 整點報時 (2)類圖 日歷程序類圖: 下拉框選擇月份 按鈕調(diào) 節(jié)月份 觸發(fā)備忘錄按鈕 監(jiān)聽事件 觸發(fā)月份監(jiān)聽事 件 顯示選定年份月 份日歷背景 點擊今日待辦按鈕 初始化備忘錄窗口組件,并添加相應(yīng)監(jiān)聽 觸發(fā)背景監(jiān)聽事件 點擊添加 按鈕 顯示備忘錄窗口 日歷主窗口顯示 (默認(rèn)為當(dāng)前日 期) /X 否是否存在以 被選中日期 命名的文件「 結(jié)束 觸發(fā)今日觸發(fā)添加 待辦按鈕按鈕監(jiān)聽 監(jiān)聽事件事件 刪除文件 文本區(qū)顯示空白 是否刪除 保持當(dāng)前 狀態(tài) 是否保存 X. 讀取該文件并在文
18、本區(qū)顯示 保存以當(dāng)前日期命名的文件 是否修改 重寫文件 畢 MainWin +MainWin() +actionPerformed(in e : ActionEvent) NongLi +lYearDays(in y : int) : int +leapDays(in y : int) : int +leapMonth(in y :
19、 int) : int +monthDays(in y : int, in m : int) : int +Lunar(in y : int, in m : int) : long +calElement(in y : int, in m : int, in d : int) : long +getchina(in day : int) : string +shower() : string 1 時鐘主程序主要包含四個類,其中OurCalender、MainWin、ACalender三個類是都是JFrame的子類。OurCalender里包含程序的入口,Mainwin主要
20、用來創(chuàng)建窗口對象,ACalender主要用來創(chuàng)建日歷對象,NongLi主要用來進(jìn)行農(nóng)歷的顯示。日歷程序類圖如下所示: ACalendar +Year:JTextField #Month:JComboBox #TheYear:JLabel +TheMonth:JLabel +this_date:Date +Label_title:JLabel +Button_day:JButton +Up1:JButton +Down2:JButton +Up2:JButton +Down1:JButton +Today:JButton -background:string +jP
21、: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():int +setImg(inmonth_num:int) +actionPerformed(ine:ActionEvent) 時鐘類圖: 時鐘類主要包含DrawClock和Clock類,其中DrawClock類
22、主要是用來創(chuàng)建時鐘對象,而Clock類主要是用來創(chuàng)建窗口對象和時鐘監(jiān)聽來進(jìn)行整點報時。時鐘程序類圖如下所示: DrawClock # x:int # y:int # x0:int -#y0:int #r:int #h:int #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:double=Math.
23、PI/180 #set:JButton #icon:Icon +DrawClock() +paint(ing:Graphics) 備忘錄類圖: 備忘錄部分主要包含Test、PoliceListen、PoliceListen2 MyMenuListener1、Mainwin等類。其中MainWin類主要是用來創(chuàng)建備忘錄窗 口對象,Test主要定義備忘錄相關(guān)的組件以及添加相應(yīng)的監(jiān)聽事件以實現(xiàn)備 忘記事的添加、修改、刪除等功能。PoliceListen類主要用來定義日歷按鈕 的監(jiān)聽。PoliceListen2主要是用來定義備忘錄中添加按鈕的監(jiān)聽MyMenuListener1主要是
24、用來定義今日待辦事件監(jiān)聽。 JFrame PoliceListen2 y:int mousePressed(MouseEvent):void mouseReleased(MouseEvent):void mouseEntered(MouseEvent):void mouseExited(MouseEvent):void mouseClicked(MouseEvent):void MouseListener PoliceListen x:int y:int mousePressed(MouseEvent):void mouseReleased(MouseEvent):
25、void mouseEntered(MouseEvent):void mouseExited(MouseEvent):void mouseClicked(MouseEvent):void second():void Test year.Stling month:String day:String hour:String minute:String d:Date sdf:SimpleDateFormat str:String stryear:String strday:String strmonth:String strhour:String strminute:String x:Stri
26、ng y:String changeboolean:boolean yesboolean:boolean yearboolean:boolean monthboolean:boolean menubar:JMenuBar nong:NongLi ,m:String nltext:JTextField today:JMenu addbutton:JButton yes:JButton cancel:JButton change:JButton delete:JButton save:JButton cancel1:JButton music:JTextField text1:JTextA
27、rea text2:JTextArea text3:JTextArea sldday:JCheckBox sldtime:JCheckBox yearbox:JComboBox
28、ener2:MyMenuListener2 policeListen2:Policelistener2 Test() init():void text1changedUpdate(DocumentEvent):void text1removeUpdate(DocumentEvent):void text1insertUpdate(DocumentEvent):void slddayActionPerformed(ActionEvent):void sldtimeActionPerformed(ActionEvent):void text3changedUpdate(Documen
29、tEvent):void text3removeUpdate(DocumentEvent):void text3insertUpdate(DocumentEvent):void cancelActionPerformed(ActionEvent):void yesActionPerformed(ActionEvent):void yearboxActionPerformed(ActionEvent):void monthboxActionPerformed(ActionEvent):void todayActionPerformed(ActionEvent):void changeAction
30、Performed(ActionEvent):void saveActionPerformed(ActionEvent):void cancel1ActionPerformed(ActionEvent):void deleteActionPerformed(ActionEvent):void WindowAdapter MyWindowListener -mark:int- ''windowClosing(WindowEvent):void MyMenuListener2 mark:boolean -menuCanceTed(MenuEvenf):void men
31、uDeselected(MenuEvent):void menuSelected(MenuEvent):void MouseListener MyMenuListenerl mark:boolean menuCanceled(MenuEvent):void menuDeselected(MenuEvent):void menuSelected(MenuEvent):void 2.程序清單 (要說明程序的功能和程序之間的關(guān)系,如程序很多,可以只附主要的程序代碼) OurCalendar.Java publicclassOurCalendar{ publicstaticvoi
32、dmain(String口args){try{ MainWinframe=newMainWin(); } catch(Exceptione){ System.out.print("runerror!"); } 這里主要用來創(chuàng)建日歷窗口對象,顯示日歷主窗口 MainWin.java publicclassMainWinextendsJFrameimplementsActionListener{//JPaneljP; publicMainWin(){ ACalendarcal=newACalendar(); Iconimg=newImageIcon("clock.jpg");
33、 JButtontime=newJButton(img) setLocationRelativeTo(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
34、.setBounds(250,0,25,25); time.setBorderPainted(false); time.setContentAreaFilled(false); time.addActionListener(this); time.setContentAreaFilled(false); } publicvoidactionPerformed(ActionEvente){ Clockck=newClock(); } } 這里主要用來定義日歷主窗口類的組件。 ACalender.java importjava.awt.*; importjava.awt.
35、event.*; importjavax.swing.*; importstaticjavax.swing.JFrame.*; importjava.util.*; importjavax.swing.JFrame.*; importstaticjava.util.Calendar.*; publicclassACalendarextendsJPanelimplementsActionListener{ publicstaticfinalStringHOUR_OF_DAY=null; //定義 PoliceListenpolice=newPoliceListen(); st
36、aticStringstrbuttonyear,strbuttonmonth,strbuttonday; JTextFieldYear=newJTextField(); JComboBoxMonth=newJComboBox(); JLabelTheYear=newJLabel("年"); JLabelTheMonth=newJLabel("月"); Datethis_date=newDate(); JLabel[]Label_title=newJLabel[7]; JButton[]Button_day=newJButton[42]; JButtonUp1=newJButto
37、n(">"); JButtonDown2=newJButton("<"); JButtonUp2=newJButton(">"); JButtonDown1=newJButton("<"); JButtonToday=newJButton("TADAY"); Stringbackground; JPaneljP; ImageIconimg=newImageIcon(); JLabelimgLabel; JPanelpane_ym=newJPanel(); JPanelpane_day=newJPanel(); intthis_year=this_date.getYear(
38、)+1900; intthis_month=this_date.getMonth(); booleanbool=false; Stringyear_num=null; intmonth_num; intweek,day; publicStringgetBG(){returnbackground; } publicvoidsetBG(Stringbackground){ this.background=background; } publicACalendar(){ super(); jP=newJPanel(); this.setOpaque(false); //
39、this.setOpaque(false); //設(shè)定年月 TheYear.setFont(newFont("華文隸書",Font.TRUETYPE_FONT,27)); TheMonth.setFont(newFont("華文隸書",Font.TRUETYPE_FONT,27)); Year.setFont(newFont("華文隸書",Font.TRUETYPE_FONT,27)); Month.setFont(newFont("華文隸書",Font.TRUETYPE_FONT,27)); pane_ym.setOpaque(false); pane_day.setOpaqu
40、e(false); Year.setText(Integer.toString(this_year)); for(inti=1;i<13;i++){ Month.addItem(i+""); pane_ym.add(newJLabel("")); pane_ym.add(Down2); pane_ym.add(Year); pane_ym.add(Up2); pane_ym.add(TheYear); pane_ym.add(Today); Month.setSelectedIndex(this_month); pane_ym.add(Down1); pane_ym.a
41、dd(Month); pane_ym.add(Up1); pane_ym.add(TheMonth); pane_ym.add(newJLabel("")); Month.addActionListener(this); Year.addActionListener(this); Up1.addActionListener(this); Up2.addActionListener(this); Down1.addActionListener(this); Down2.addActionListener(this); Today.addActionListener(this)
42、; img=newImageIcon("E:\\c.jpg"); imgLabel=newJLabel(img); //初始化日期并繪制 pane_day.setLayout(newGridLayout(7,7,10,10)); for(inti=0;i<7;i++){ Label_title[i]=newJLabel(""); Label_title[i].setOpaque(false); 文行楷 Label_title[i].setFont(newFont("華 ",Font.TRUETYPE_FONT,56)); pane_day.add(Label_title[
43、i]); } for(inti=0;i<42;i++){ Button_day[i]=newJButton(""); Button_day[i].setFont(newFont("華文行楷",Font.TRUETYPE_FONT,30)); Button_day[i].setBorderPainted(false); Button_day[i].setContentAreaFilled(false); pane_day.add(Button_day[i]); Button_day[i].addMouseListener(police); Button_day[i].addAc
44、tionListener(newActionListener() { publicvoidactionPerformed(ActionEvente){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.setLayout(newBor
45、derLayout()); 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); voidsetYM(){ if(bool){ year_num=this_year+""; month_num=this_month; } else{ year_num=Year.getText(); month
46、_num=Month.getSelectedIndex(); } } voidsetDay(){ intyear_set=Integer.parseInt(year_num)-1900;//獲得 年份值 Datedt=newDate(year_set,month_num,1);//構(gòu)造一個日 期 GregorianCalendarcal=newGregorianCalendar();//創(chuàng)建一 個Calendar實例 cal.setTime(dt); Stringweek[]={"日","一","二","三","四","五","六"}; intday=0; intda
47、y_week=0; for(inti=0;i<7;i++){ Label_title[i].setText(week[i]); } //月份 if(month_num==0||month_num==2||month_num==4||month_num==6|| month_num==7||month_num==9||month_num==11){day=31; } elseif(month_num==3||month_num==5||month_num==8||month_num==10){day=30; } else{ if(cal.isLeapYear(year_se
48、t)){day=29;
}
else{day=28;
}
}
day_week=dt.getDay();
intcount=1;
for(inti=day_week;i 49、_day[i].setForeground(Color.red);Button_day[i].setText(count+"");
}
}else{
if(i==day_week+this_date.getDate()-1){Button_day[i].setForeground(Color.blue);Button_day[i].setText(count+"");
}else{
Button_day[i].setForeground(Color.black);
Button_day[i].setText(count+"");
}
}
if(day_week==0){
f 50、or(inti=day;i<42;i++){Button_day[i].setText("");
Button_day[i].setContentAreaFilled(false);
Button_day[i].addActionListener(this);
}
}else{
for(inti=0;i 51、tInstance();
publicintgetYear(){returnInteger.parseInt(year_num);}
publicintgetMonth(){returnmonth_num;}
publicintgetWeek(){
week=calendar.get(DAY_OF_WEEK);
returnweek;}
voidsetImg(intmonth_num){
//System.out.println(month_num);
//month_num=Month.getSelectedIndex();
/*if(mon_num==0){
img[0 52、]=newImageIcon("E:\\tupian\\1.jpg");//這是背景圖
片
將背景圖放在標(biāo)簽里
imgLabel=newJLabel(img[0]);//
}*/
switch(month_num){
case0:setBG("./Images/1.jpg");break;
case1:setBG("./Images/2.jpg");break;
case2:setBG("./Images/3.jpg");break;
case3:setBG("./Images/4.jpg");break;
case4:setBG("./Images/5.jpg");bre 53、ak;
case5:setBG("./Images/6.jpg");break;
case6:setBG("./Images/7.jpg");break;
case7:setBG("./Images/8.jpg");break;
case8:setBG("./Images/9.jpg");break;
case9:setBG("./Images/10.jpg");break;
case10:setBG("./Images/11.jpg");break;
case11:setBG("./Images/12.jpg");break;
}updateUI();
}
publicv 54、oidactionPerformed(ActionEvente){
if(e.getSource()==Year||e.getSource()==Month){this.setYM();
this.setImg(month_num);
this.setDay();
}
elseif(e.getSource()==Up1){
this.setYM();
if(month_num==11){
inty=Integer.parseInt(year_num);
y++;
this.setYM();
month_num=0;
Month.setSelectedIndex(mont 55、h_num);
year_num=Integer.toString(y);
Year.setText(year_num);
this.setImg(month_num);
this.setDay();
}
else{
Month.setSelectedIndex(++month_num);
this.setDay();
this.setImg(month_num);
}
}
elseif(e.getSource()==Down1){
this.setYM();
if(month_num==0){
inty=Integer.parseInt(year_num);
56、y--;
this.setYM();
month_num=11;
Month.setSelectedIndex(month_num);
year_num=Integer.toString(y);
Year.setText(year_num);
this.setDay();
}
else{
Month.setSelectedIndex(--month_num);
this.setDay();
this.setImg(month_num);
}
}
elseif(e.getSource()==Down2){
this.setYM();
inty=Integer.pa 57、rseInt(year_num);
y--;
this.setYM();
year_num=Integer.toString(y);
Year.setText(year_num);
this.setDay();
this.setImg(month_num);
}
elseif(e.getSource()==Up2){
this.setYM();
inty=Integer.parseInt(year_num);
y++;
this.setYM();
year_num=Integer.toString(y);
Year.setText(year_num);
this. 58、setDay();
this.setImg(month_num);
}
elseif(e.getSource()==Today){
bool=true;
this.setYM();
this.setDay();
this.setImg(month_num);
Year.setText(year_num);
Month.setSelectedIndex(month_num);
}
}
publicvoidButton_dayyearboxActionPerformed(ActionEvente){strbuttonday=e.getActionCommand();
st 59、rbuttonyear=Year.getText();
day=Integer.parseInt(strbuttonday);
strbuttonmonth=Month.getSelectedIndex()+1+"";
if(strbuttonday.length()<2){strbuttonday="0"+strbuttonday;}
if(strbuttonmonth.length()<2){strbuttonmonth="0"+strbuttonmonth;}
};
publicintgetDay(){
//day=calendar.get(DAY_OF_MONTH);
60、returnday;}
publicvoidpaintComponent(Graphicsg){super.paintComponent(g);
ImageIconimg=newImageIcon(background);
g.drawImage(img.getImage(),0,0,1150,750,this);
}
}
這里主要用來定義日歷的排版布局,給日歷添加監(jiān)聽,使其能實現(xiàn)日歷
相關(guān)背景的變換、點擊日歷上相應(yīng)按鈕能顯示時鐘及備忘錄等功能。
Clock.java
importjava.awt.*;
importjavax.swing.*;
importjava.ap 61、plet.AudioClip;
importjava.io.*;
importjava.applet.Applet;
.MalformedURLException;
.URL;
importjava.awt.event.ActionListener;import
java.awt.event.ActionEvent;
importjava.util.Calendar;
importjava.lang.String;
publicclassClockextendsJFrame{
publicClock(){
DrawClockdc=newDrawClock();
add( 62、dc,BorderLayout.CENTER);
setSize(640,560);
setVisible(true);
setExtendedState(JFrame.MAXIMIZED_BOTH);
//添加計時器時間間隔為1s
intdelay1=1000;
ActionListenerdrawClock1=newActionListener(){
publicvoidactionPerformed(ActionEventevt){
//獲取當(dāng)前時間
Calendarnow=Calendar.getInstance();
intnowh=now.get(Calenda 63、r.HOUR_OF_DAY);
intnowm=now.get(Calendar.MINUTE);
intnows=now.get(Calendar.SECOND);
intnoww=now.get(Calendar.DAY_OF_WEEK);for(inti=0;i<=23;i++){
if(nowh==i&&nows==0&&nowm==0){
//System.out.println("123");
try{
StringBuffers=newStringBuffer("time/");
s.append(Integer.toString(i));
s.append(" 64、.wav");
//System.out.println(s);
Stringst=newString(s);
Filef=newFile(st);
URLcb=f.toURL();
AudioClipaau;
aau=Applet.newAudioClip(cb);
aau.play();
}catch(MalformedURLExceptione){}
};
new Timer(delay1,drawClock1).start();
}
這里主要用來在創(chuàng)建時鐘主窗口以及為給是添加監(jiān)視器啊使其能夠完成 整點報時的功能。
DrawClock.java
import 65、 javax.swing.*;
import
java.awt.event.ActionListener;
java.awt.event.ActionEvent;
java.awt.*;
import java.awt.event.KeyEvent;
import
import
importjava.util.Calendar;
importjava.util.GregorianCalendar;
importjava.io.*;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics; 66、
importjava.util.Date;
publicclassDrawClockextendsJPanel{
//參數(shù)定義區(qū)
int
x,y,x0,y0,r,h,w,olds_x=-100,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,hh,old_h;//x0,y0圓心
doubleang,mm,ss,old_m;
finaldoubleRAD=Math.PI/180;//定義弧度、角度轉(zhuǎn)換常數(shù)
JButtonset;//"設(shè)置"按鈕
Iconicon;//按鈕圖片
//DrawClock構(gòu)造方法publicDrawClock(){
this.setLayout(null);//設(shè)置布局為空
icon=newImageIcon("clock2.png");
set=newJButton(icon);
set.setMnemonic(KeyEvent.VK_ALT);//設(shè)置按鈕快捷鍵為:“Alt”
set.setSize(30,30);//按鈕大小
add(set);
- 溫馨提示:
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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機(jī)關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告