Java課程設(shè)計(jì)實(shí)驗(yàn)分析報(bào)告及全部源碼流程圖_第1頁
Java課程設(shè)計(jì)實(shí)驗(yàn)分析報(bào)告及全部源碼流程圖_第2頁
Java課程設(shè)計(jì)實(shí)驗(yàn)分析報(bào)告及全部源碼流程圖_第3頁
Java課程設(shè)計(jì)實(shí)驗(yàn)分析報(bào)告及全部源碼流程圖_第4頁
Java課程設(shè)計(jì)實(shí)驗(yàn)分析報(bào)告及全部源碼流程圖_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部 源碼流程圖作者:日期:課程設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?加深對(duì)課堂講授內(nèi)容的理解,掌握解決實(shí)際應(yīng)用問題時(shí)所應(yīng)具有的查 閱資料、技術(shù)標(biāo)準(zhǔn)和規(guī)范,以及軟件編程、調(diào)試等能力,掌握面向?qū)ο蟮木?程思想及Java語言程序設(shè)計(jì)的規(guī)律與技巧, 為進(jìn)一步學(xué)習(xí)web應(yīng)用開發(fā)及今 后從事專業(yè)工作打下基礎(chǔ)。.使用本學(xué)期學(xué)習(xí)的Java SE技術(shù)(也可以使用課堂教學(xué)中沒有學(xué)習(xí)過 的Java技術(shù),但是應(yīng)當(dāng)以Java SE技術(shù)為主)完成多功能日歷 GUI程序的設(shè) 計(jì),使之具有如下基本功能:一年日歷用12頁顯示,每頁顯示一個(gè)月的日歷。 日歷可以按年或月前后翻動(dòng),能夠顯示當(dāng)前的日期,可以為每頁日歷選擇背 景

2、圖片。.在完成基本功能的基礎(chǔ)上發(fā)揮自己的想象力與創(chuàng)造力,使程序凸顯出 與眾不同的特點(diǎn)與功能,形成本小組的特性色。二、實(shí)驗(yàn)要求.問題描述準(zhǔn)確、規(guī)范。.程序結(jié)構(gòu)合理,調(diào)試數(shù)據(jù)準(zhǔn)確、有代表性 .o.界面布局整齊,人機(jī)交互方便。.輸出結(jié)果正確。.正確撰寫實(shí)驗(yàn)報(bào)告。三、實(shí)驗(yàn)內(nèi)容編寫一個(gè)GUI程序?qū)崿F(xiàn)日歷的功能。一年日歷用 12頁顯示,每頁顯示 一個(gè)月的日歷。日歷可以按年或月前后翻動(dòng),能夠顯示當(dāng)前的日期以及當(dāng)前 農(nóng)歷,可以為每頁日歷選擇背景圖片??梢詫?shí)現(xiàn)顯示時(shí)鐘,時(shí)鐘能進(jìn)行整點(diǎn)報(bào)時(shí)。可以實(shí)現(xiàn)備忘記事功能,能在每天添加、修改、刪除記事等操作。四、實(shí)驗(yàn)步驟.在上機(jī)實(shí)驗(yàn)前,小組成員進(jìn)行選題討論,確定小組感興趣而

3、又伸縮性 強(qiáng)的題目多功能日歷。.在第一次上機(jī)實(shí)驗(yàn)時(shí)討論分工,分工明確之后,分頭合作進(jìn)行。.各成員完成自己的任務(wù)后, 最后進(jìn)行統(tǒng)籌合并,以及程序最后的優(yōu)化。.根據(jù)實(shí)驗(yàn)結(jié)果,寫出合肥工業(yè)大學(xué)實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)報(bào)告應(yīng)當(dāng)包括:實(shí) 驗(yàn)內(nèi)容,程序流程圖,類結(jié)構(gòu),程序清單,運(yùn)行結(jié)果,以及通過上機(jī)取得的 經(jīng)驗(yàn)。.詳細(xì)的上機(jī)實(shí)驗(yàn)步驟見任務(wù)分工及程序設(shè)計(jì)進(jìn)度表。五、實(shí)驗(yàn)結(jié)果經(jīng)過小組成員的共同努力,最終我們小組設(shè)計(jì)的多功能日歷程序能夠?qū)?現(xiàn)實(shí)驗(yàn)的基本要求一一一年日歷用 12頁顯示,每頁顯示一個(gè)月的日歷。 日歷 可以按年或月前后翻動(dòng),能夠顯示當(dāng)前的日期,可以為每頁日歷選擇背景圖 片。另外,在完成基本要求的基礎(chǔ)上,我們?cè)鎏?/p>

4、了顯示農(nóng)歷、顯示時(shí)鐘、添 加備忘錄、修改備忘錄等功能。整體程序運(yùn)行流暢、功能齊全、符合操作習(xí) 慣。下面是程序運(yùn)行效果截圖:日歷主界面(可以實(shí)現(xiàn)每個(gè)月的日歷,可以按年或按月前后翻動(dòng),能夠 顯示當(dāng)前日期,并能夠選擇背景圖片):備忘錄主界面(實(shí)現(xiàn)備忘錄的添加,及當(dāng)前日歷的顯示)添加2014 農(nóng)歷十布二備忘錄主界面(實(shí)現(xiàn)備忘錄的顯示,及對(duì)當(dāng)前備忘錄的修改刪除等)口區(qū)今日待辦 添加摞程設(shè)計(jì)喔暇時(shí)鐘主界面(顯示當(dāng)前時(shí)間,實(shí)現(xiàn)報(bào)整點(diǎn)報(bào)時(shí)功能)六、實(shí)驗(yàn)總結(jié)兩周的課程設(shè)計(jì)結(jié)束了,在這其中歷盡酸甜苦辣咸各種滋味,不過收獲 頗豐。從學(xué)習(xí)C語言、數(shù)據(jù)庫等等計(jì)算機(jī)編程類課程開始,自己始終有種感 覺,那就是太理論化了、缺

5、少實(shí)踐。而這次的Java程序設(shè)計(jì)可以說與以往大不相同,先是在課堂上老師講述了有關(guān)的基礎(chǔ)理論、基本語法知識(shí),而后再 加上這兩周的課程設(shè)計(jì),可以說是真正能夠體會(huì)到程序編程的樂趣,也第一 次發(fā)現(xiàn)自己原來對(duì)程序設(shè)計(jì)是如此的感興趣。尤其是由于課程時(shí)間較緊,課 上時(shí)間老師只是簡(jiǎn)單給我們講述了一下Java Swing的基礎(chǔ)知識(shí),并沒有去深入,而在此次課程設(shè)計(jì)中大量用到的監(jiān)聽事件的有關(guān)知識(shí)需要自己去查標(biāo)準(zhǔn) 文檔,去網(wǎng)上找相關(guān)系料,這無疑對(duì)自己是一個(gè)挑戰(zhàn)。但是兩周下來,我做 到了,我獨(dú)立完成了對(duì)備忘錄程序的編寫,累積下來這部分共涉及到包括Action Listener , Mouse Listener , Me

6、nu Listener , Document Listener 等各種各類監(jiān)聽18個(gè)監(jiān)聽,分為6個(gè)類,累計(jì)完成程序千余行。而給我印象 最深刻的便監(jiān)聽了,可以說是整個(gè)備忘錄的大部分代碼都是與監(jiān)聽相關(guān),這 也是讓我我學(xué)會(huì)了對(duì)程序監(jiān)聽的運(yùn)用,當(dāng)然只是學(xué)會(huì)遠(yuǎn)遠(yuǎn)談不上精通。我編寫 的類有 Test、MainWin、MyMenuListener1、PoliceListen 、 PoliceListen2 、MyWindowListener。其中Test類主要是用來定義備忘錄主 窗口的各種組件以及在相關(guān)組件上添加監(jiān)聽以實(shí)現(xiàn)備忘錄添加、修改、刪除 等功能。MainWin類主要是用來創(chuàng)建Test對(duì)象,用以顯示窗

7、口的。MyMenuListenerl主要是給今日待辦菜單定義菜單監(jiān)聽,從而使其選中后能 顯示今日待辦的備忘記事,而當(dāng)未被選中時(shí)相關(guān)的文字、按鈕又都會(huì)隱藏掉。PoliceListen 主要是用來定義日歷日期按鈕事件的監(jiān)聽,用以監(jiān)聽當(dāng)點(diǎn)擊相 關(guān)日期時(shí)會(huì)彈出相應(yīng)日期的備忘記事的窗口來。PoliceListen2主要是定義備忘錄窗口中添加按鈕的時(shí)間監(jiān)聽,使其被點(diǎn)擊后能夠顯示添加備忘記事功 能的相關(guān)功能按鈕和相關(guān)文本區(qū)。MyWindowListener主要是定義備忘錄窗口 的窗口監(jiān)聽,和PoliceListen 共同使用來對(duì)窗口的激活狀態(tài)進(jìn)行監(jiān)聽,以保證窗口能夠按照預(yù)定計(jì)劃彈出和關(guān)閉。在實(shí)驗(yàn)過程中遇到了

8、大大小小各種困難,通過自己查資料、詢問老師、 同學(xué)討論基本解決了這些困難。下面我就說一說在這次課程設(shè)計(jì)中遇到的問 題有哪些,以及自己的解決辦法和從中得出的經(jīng)驗(yàn)心得。首先在對(duì)備忘錄窗 口的布局問題上,一開始采用流式布局,按鈕少的時(shí)候效果還算說得過去, 但是當(dāng)按鈕一多整個(gè)布局就不那么好控制了了。為了實(shí)現(xiàn)預(yù)期的效果,最終 采用了 null布局,在該種布局下,需要為每個(gè)組件指定坐標(biāo),否則組件將不 會(huì)顯示。首先我的想法是,根據(jù)窗口的高度和寬度來對(duì)按鈕進(jìn)行布局,我相 信這種方法肯定是正規(guī)程序設(shè)計(jì)中在布局是采用的方法,但是擺在眼前的問 題是時(shí)間比較緊,沒有大量的時(shí)間來進(jìn)行這種比較精確地布局。因此,最終 是通

9、過不斷地嘗試來給組件賦予坐標(biāo)值,最終效果是肉眼感覺起來是不錯(cuò)的,如果時(shí)間充足當(dāng)然可以做的更精確一點(diǎn)。第二個(gè)問題也是一個(gè)比較簡(jiǎn)單的問題,因?yàn)閯傞_始不熟悉監(jiān)聽,因此遇 到了彈出一個(gè)窗口后,再點(diǎn)擊這個(gè)按鈕本來按照效果不應(yīng)該在彈出窗口的, 但是依舊能彈出。為了解決這個(gè)問題,自己想了一個(gè)辦法那就是標(biāo)記,當(dāng)有 窗口彈出時(shí),將標(biāo)記值變成 1,而當(dāng)標(biāo)記值為1的時(shí)候,點(diǎn)擊此按鈕將不會(huì) 觸發(fā)監(jiān)聽事件,只有當(dāng)標(biāo)記值為0的時(shí)候該監(jiān)聽事件才能起到作用,然后當(dāng)此窗口的狀態(tài)為關(guān)閉時(shí),又會(huì)將該標(biāo)記值變成0,這樣的效果主要是通過PoliceListen 和 MyWindowListen 兩個(gè)類來完成的,其中 PoliceLis

10、ten 是鼠 標(biāo)監(jiān)聽,而MyWindowListen則是窗口監(jiān)聽。這是這一個(gè)監(jiān)聽最終在自己的努 力下成功了,才使自己對(duì)監(jiān)聽事件產(chǎn)生了濃厚的興趣,以至于后來加了那么 多監(jiān)聽雖然困難很多也沒有退縮。自己也從中體會(huì)到平時(shí)的程序之所以能夠 相應(yīng)操作的原理,那就是對(duì)命令、對(duì)動(dòng)作進(jìn)行監(jiān)聽。而且,有時(shí)候看起來非 常簡(jiǎn)單的功能實(shí)現(xiàn)起來也不是很容易,就像本例中的所說的那樣。在完成了第一個(gè)監(jiān)聽以后,又在Test里面加入了 N多個(gè)監(jiān)聽,這些監(jiān)聽大部分是ActionListener 監(jiān)聽,也即最常有的一類監(jiān)聽。為了避免類過多, 我大多采用了匿名類的方式內(nèi)嵌于Test類中。這些監(jiān)聽的設(shè)計(jì)中,大部分沒有遇到問題,有少數(shù)是

11、因?yàn)樽约旱倪壿嬳樞虿粚?duì)而沒有達(dá)到預(yù)期的效果,最 后都能調(diào)整過來。遇到的問題是讀取選中日期,以及在那三個(gè)下拉框中怎么根據(jù)年份和月份來添加后面的日期(如此敘述可能不太明了,老師可以對(duì)照 程序截圖中的備忘錄主窗口中的那個(gè)日期下拉框來看),其實(shí)最后解決了就會(huì)發(fā)現(xiàn),其實(shí)這些也并不難,在日期處理上只要監(jiān)聽年份和月份。年份判斷該 年是否為閏年,月份判斷是那個(gè)月,最終可以確定該月應(yīng)該添加多少item到下拉框中。而讀取選中日期則是將日歷主窗口文本框中的年份、下拉框中 的月份以及點(diǎn)擊按鈕上的數(shù)字讀取出來將他們分別設(shè)置成下拉框中的默認(rèn)年 月日則可。另外為了使得后面的備忘記事文件名稱長(zhǎng)度一致,在進(jìn)行加入的 時(shí)候會(huì)先比

12、對(duì)一下該數(shù)字是否為兩位數(shù),如果不是兩位數(shù)則將前面加0后再導(dǎo)入。下一個(gè)問題則是在監(jiān)聽文本框的問題上,因?yàn)檎n本上對(duì) DocumentListener也是簡(jiǎn)單介紹了下,為了實(shí)現(xiàn)預(yù)想的效果,即在文本框有 文字的時(shí)候下面的確定鍵可用,沒有文字的時(shí)候下面的確定鍵不可用而只有 取消鍵可用,通過查閱標(biāo)準(zhǔn)文檔和詢問老師,最終弄清楚了每個(gè)抽象方法的 含義,順利的實(shí)現(xiàn)了該功能。最后,在如何保存每日記事的問題上,解決這一問題可以有兩種思路, 一種是搭建一個(gè)數(shù)據(jù)庫,兩一種是通過保存文件的形式。毫無疑問,通過寫 入數(shù)據(jù)庫的方式更有難度、更有挑戰(zhàn)性,但是考慮到在備忘錄方面一直都是 我一個(gè)人在做,精力方面可能不夠,最后我采用

13、了寫文件的形式來保存,每 日的記事。后來發(fā)現(xiàn)有的組使用數(shù)據(jù)庫實(shí)現(xiàn)的,最后他們組得分B+,我們得分B,其實(shí)有時(shí)候輸在了不敢嘗試上、或者說分工更明確一點(diǎn)更好(畢竟有 些東西一個(gè)人做了,別人或許有幫忙的心也差不上手了)。當(dāng)然雖然寫文件的 形式比較簡(jiǎn)單一點(diǎn),這中間也要做好相關(guān)邏輯的設(shè)計(jì)。在寫文件的時(shí)候采用 選中日期為文件名的方式進(jìn)行保存,在讀文件時(shí)候則讀取以選中日期文件命 名的文件,將其顯示在文本區(qū)中。另外在修改了當(dāng)天記事后,炫耀對(duì)文件以 同樣的方式進(jìn)行保存。最后該程序還有不足,比如說未能實(shí)現(xiàn)相關(guān)的時(shí)間提醒的功能、有些細(xì) 節(jié)處理的不夠使得部分地方缺少人性化。對(duì)于代碼這部分,自己第一次編寫 者這些代碼有

14、些地方還需要鍛煉,比如說對(duì)類的劃分、對(duì)相關(guān)語句進(jìn)行打包 成一個(gè)函數(shù)來重復(fù)調(diào)用提高代碼的重用性等等,因?yàn)橛行┱Z句(像設(shè)置組件 可見不可見的語句)在大量的地方都用到了,但是我寫的時(shí)候只是把他們復(fù) 制下來,這部分代碼應(yīng)該做成一個(gè)函數(shù),或者抽象成類效果能更好點(diǎn)。驗(yàn)收 結(jié)束的那一刻所有的壓力、所有的因遇到而嘗到的苦澀最終都化成滿滿的喜 悅,或者在某種程度上更是一種成就感。七、附件.程序流程圖、類結(jié)構(gòu)圖(1)程序流程圖該程序可以分為三個(gè)部分,即日歷主程序和時(shí)鐘、備忘錄兩個(gè)程序。其 中時(shí)鐘程序是通過日歷主界面上的按鈕觸發(fā)事件來啟動(dòng)并創(chuàng)建相應(yīng)的窗口, 備忘錄程序是通過日歷上按鈕事件觸發(fā)的。日歷主窗口可以實(shí)現(xiàn)分

15、頁顯示、 上下翻動(dòng)、為每月選定背景等功能,時(shí)鐘窗口可以實(shí)現(xiàn)指針和數(shù)字時(shí)鐘顯示、 整點(diǎn)報(bào)時(shí)功能,備忘錄程序可以通過創(chuàng)建、修改、刪除已選定日期為文件名 的文件來實(shí)現(xiàn)添加、修改、刪除多條記事的功能。整個(gè)程序流程如下圖(由 于整個(gè)流程圖較大,為了使其在聽一個(gè)版面中顯現(xiàn)出來,因此有些字體可能 偏小,老師如若看不清,可以用 Visio打開放大查看)所示:開始H切王囪口部件 初始化,并添加 相應(yīng)監(jiān)聽觸發(fā)時(shí)鐘按鈕事件文本框輸入年份節(jié)年份鈕事件初始化時(shí)鐘窗口組件, 并添加相應(yīng)監(jiān)聽監(jiān)聽系 統(tǒng)時(shí)間觸發(fā)年份監(jiān)聽事件繪制時(shí) 鐘表盤顯示選定年份月份日歷時(shí)鐘窗 口顯示(2)類圖整點(diǎn)觸發(fā) 監(jiān)聽事件整點(diǎn)報(bào) 時(shí)日歷程序類圖:下拉

16、框選擇月份觸發(fā)月份監(jiān)聽事件日為主窗口顯示默默認(rèn)為當(dāng)前日期)文本區(qū)顯示空白刪除文件是是否刪除保持當(dāng)前狀態(tài)結(jié)束按新調(diào)節(jié)月份觸發(fā)備忘錄按鈕監(jiān)聽事件觸發(fā)背景監(jiān)聽事件顯示選定年份月份日歷背景否 是否存在以、一t 被選中日期、命名的文件X z讀取該文 件并在文 本區(qū)顯示是否修改%初始化備忘錄窗口組 件,并添加相應(yīng)監(jiān)聽顯示備忘錄窗口點(diǎn)擊今日 待辦按鈕點(diǎn)擊添加 按鈕觸發(fā)今日 待辦按鈕 監(jiān)聽事件觸發(fā)添加 按鈕監(jiān)聽 事件重寫文件是否保存添加記事保存以當(dāng) 前日期命 名的文件時(shí)鐘主程序主要包含四個(gè)類,其中 OurCalender、MainWin、ACalender 三個(gè)類是都是 JFrame的子類。OurCalend

17、er里包含程序的入口, Mainwin主 要用來創(chuàng)建窗口對(duì)象,ACalender主要用來創(chuàng)建日歷對(duì)象,NongLi主要用來 進(jìn)行農(nóng)歷的顯示。日歷程序類圖如下所示:JFrameACalendar+Year : JTextField1#Month : JComboBox #TheYear : JLabel +TheMonth : JLabel +this_date : Date +Label_title : JLabel +Button_day : JButton +Up1 : JButton +Down2 : JButton +Up2 : JButton +Down1 : JButton +To

18、day : 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() : int +setImg(in month_num : int) +actionPerformed(in e : ActionEve

19、nt)時(shí)鐘類圖:時(shí)鐘類主要包含 DrawClock和Clock類,其中DrawClock類主要是用來 創(chuàng)建時(shí)鐘對(duì)象,而 Clock類主要是用來創(chuàng)建窗口對(duì)象和時(shí)鐘監(jiān)聽來進(jìn)行整點(diǎn) 報(bào)時(shí)。時(shí)鐘程序類圖如下所示:Graphics匕 二、x : inty : intx0 : inty0 : intr : inth : 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 : doub

20、le#ord_m : double#RAD : double = Math.PI/180#set : JButton#icon : IconIconJPanelJ一+DrawClock()+paint(in g : Graphics)DrawClockA備忘錄類圖:備忘錄部分主要包含 Test、PoliceListen 、PoliceListen2 MyMenuListeneU、Mainwin等類。其中MainWin類主要是用來創(chuàng)建備忘錄窗 口對(duì)象,Test主要定義備忘錄相關(guān)的組件以及添加相應(yīng)的監(jiān)聽事件以實(shí)現(xiàn)備 忘記事的添加、修改、刪除等功能。PoliceListen類主要用來定義日歷按鈕的監(jiān)

21、聽。PoliceListen2 主要是用來定義備忘錄中添加按鈕的監(jiān)聽 MyMenuListenerl主要是用來定義今日待辦事件監(jiān)聽。Testyear:StringPoliceListen2x:int y:int mousePressed(MouseEvent):void mouseReleased(MouseEvent):void mouseEntered(MouseEvent):void mouseExited(MouseEvent):void mouseClicked(MouseEvent):voidPoliceListenx:int y:intmousePressed(MouseEven

22、t):void mouseReleased(MouseEvent):void mouseEntered(MouseEvent):void mouseExited(MouseEvent):void mouseClicked(MouseEvent):void second():voidmonth:String day:String hour:String minute:String d:Datesdf:SimpleDateFormat str:String stryear:String strday:String strmonth:String strhour:String strminute:S

23、tring x:String 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:JButtonsave:JButton cancel1:JButton music:JTextField text1:

24、JTextArea text2:JTextArea text3:JTextArea sldday:JCheckBox sldtime:JCheckBox yearbox:JComboBox monthbox:JComboBox daybox:JComboBox hourbox:JComboBox minutebox:JComboBox yearlabel:JLabel monthlabel:JLabel daylabel:mhlabel:JLabel menulistener1:MyMenuListener1 menulistener2:MyMenuListener2 policeListen

25、2:Policelistener2Test() init():void text1changedUpdate(DocumentEvent):void text1removeUpdate(DocumentEvent):void text1insertUpdate(DocumentEvent):void slddayActionPerformed(ActionEvent):void sldtimeActionPerformed(ActionEvent):void text3changedUpdate(DocumentEvent):void text3removeUpdate(DocumentEve

26、nt):void text3insertUpdate(DocumentEvent):void cancelActionPerformed(ActionEvent):void yesActionPerformed(ActionEvent):void yearboxActionPerformed(ActionEvent):void monthboxActionPerformed(ActionEvent):void todayActionPerformed(ActionEvent):void changeActionPerformed(ActionEvent):void saveActionPerf

27、ormed(ActionEvent):void cancel1ActionPerformed(ActionEvent):void deleteActionPerformed(ActionEvent):voidMyMenuListener2mark:booleanmenuCanceled(MenuEvent):void menuDeselected(MenuEvent):void menuSelected(MenuEvent):voidMyMenuListener1mark:booleanmenuCanceled(MenuEvent):void menuDeselected(MenuEvent)

28、:void menuSelected(MenuEvent):void.程序清單(要說明程序的功能和程序之間的關(guān)系,如程序很多,可以只附主要的程序代碼)OurCalendar.Javapublic class OurCalendarpublic static void main(String口 args) tryMainWin frame = new MainWin();catch (Exception e)System.out.print(run error!); /這里主要用來創(chuàng)建日歷窗口對(duì)象,顯示日歷主窗口MainWin.javapublic class MainWin extends J

29、Frame implements ActionListener /JPanel jP;public MainWin()ACalendar cal = new ACalendar();Icon img=new ImageIcon(clock.jpg);JButton time=new JButton(img)setLocationRelativeTo(null);setLocation(100,81);setDefaultCloseOperation(EXIT_ON_CLOSE);setSize(560,560);setVisible(true);setResizable(false);this

30、.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.setContentAreaFilled(false);time.addActionListener(this);time.setContentAreaFilled(false);public void actionPerformed(ActionEvent e) Clock ck=n

31、ew Clock();這里主要用來定義日歷主窗口類的組件。ACalender.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import static javax.swing.JFrame.*;import java.util.*;import javax.swing.JFrame.*;import static java.util.Calendar.*;public class ACalendar extends JPanel implements ActionListener public static

32、 final String HOUR_OF_DAY = null;/定義PoliceListen police=new PoliceListen();static String strbuttonyear,strbuttonmonth,strbuttonday;JTextField Year=new JTextField();JComboBox Month = new JComboBox();兒abel TheYear = new 兒abel(年);兒abel TheMonth = new JLabel(月);Date this_date = new Date();JLabel Label_t

33、itle = new JLabel7;JButton口 Button_day=new JButton42;JButton Up1=new JButton();JButton Down2=new JButton();JButton Down1=new JButton();JButton Today=new JButton(TADAY);String background;JPanel jP;ImageIcon img=new ImageIcon();JLabel imgLabel;JPanel pane_ym = new JPanel();JPanel pane_day = new JPanel

34、();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 String getBG()return background;public void setBG(String background)this.background=background;public ACalendar() super();jP=new JPanel();

35、this.setOpaque(false);/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

36、e(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);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

37、(Up1);pane_ym.add(TheMonth); pane_ym.add(new JLabel( );Month.addActionListener(this);Year.addActionListener(this);Up1.addActionListener(this);Up2.addActionListener(this);Down1.addActionListener(this);Down2.addActionListener(this);Today.addActionListener(this);img= new ImageIcon(E:c.jpg);imgLabel = n

38、ew 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);Label_titlei.setFont(newFont( 華文行楷”,Font.TRUETYPE_FONT,56); pane_day.add(Label_titlei); for (int i = 0; i 42; i+) Button_dayi = new JButton();Bu

39、tton_dayi.setFont(new Font( 華 文 行 楷 ”,Font.TRUETYPE_FONT,30);Button_dayi.setBorderPainted(false);Button_dayi.setContentAreaFilled(false); pane_day.add(Button_dayi);Button_dayi.addMouseListener(police); Button_dayi.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Butt

40、on_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(new BorderLayout();this.add(pane_day, BorderLayout.CENTER); this.add(pane_ym, BorderLayout.NORTH); /this.setSize

41、(100,250);this.setSize(1150,750);setSize(1150,750);/setSize(300,300);void setYM() if (bool) year_num = this_year + ;month_num = this_month;else year_num = Year.getText();month_num = Month.getSelectedIndex(); void setDay() int year_set = Integer.parseInt(year_num) - 1900; /獲得年份值Date dt = new Date(yea

42、r_set, month_num, 1); /構(gòu)造一個(gè)日期GregorianCalendar cal = new GregorianCalendar(); / 創(chuàng)建一 個(gè)Calendar實(shí)例cal.setTime(dt);String week口 = 曰,一,二,三,四,五,六;int day = 0;int day_week = 0;for (int i = 0; i 7; i+) Label_titlei.setText(weeki);/月份if (month_num = 0|month_num = 2 |month_num = 4|month_num = 6 |month_num = 7

43、| 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;else 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 =

44、 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.setForeground(Color.red);Button_dayi.setText(count + ); else if (i = day_week + this_date.getDate() -1) Button_dayi.setForeground(Color.blue);

45、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.setText();Button_dayi.setContentAreaFilled(false);Button_dayi.addActionListener(this); else for (int i = 0; i day_week; i+) Button_dayi.s

46、etText();for (int i = day_week + day; i 42; i+) Button_dayi.setText();Calendar calendar= Calendar.getInstance();public int getYear()return Integer.parseInt(year_num);public int getMonth()return month_num;public int getWeek()week=calendar.get(DAY_OF_WEEK);return week;void setImg(int month_num)/System

47、.out.println(month_num);month_num = Month.getSelectedIndex();/*if(mon_num=0)img0 = new ImageIcon(E:tupian1.jpg);這是背景圖imgLabel = new兒abel(img0);/將背景圖放在標(biāo)簽里*/switch(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

48、.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: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; up

49、dateUI();public void actionPerformed(ActionEvent e) if (e.getSource() = Year | e.getSource() = Month) this.setYM();this.setImg(month_num);this.setDay();else if(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

50、);year_num=Integer.toString(y);Year.setText(year_num);this.setImg(month_num);this.setDay();elseMonth.setSelectedIndex(+month_num);this.setDay();this.setImg(month_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.setSelect

51、edIndex(month_num);year_num=Integer.toString(y);Year.setText(year_num);this.setDay();elseMonth.setSelectedIndex(-month_num);this.setDay();this.setImg(month_num);else if(e.getSource()=Down2)this.setYM();int y=Integer.parseInt(year_num);y-;this.setYM();year_num=Integer.toString(y);Year.setText(year_nu

52、m);Xthis.setDayO;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);Year.setText(year_num);this.setDay();this.setImg(month_num);else if(e.getSource()=Today)bool=true;this.setYM();this.setDay();this.setImg(month_

53、num);Year.setText(year_num);Month.setSelectedIndex(month_num);public void Button_dayyearboxActionPerformed(ActionEvent e) strbuttonday=e.getActionCommand();strbuttonyear=Year.getText();day=Integer.parseInt(strbuttonday);strbuttonmonth=Month.getSelectedIndex()+1+”;if(strbuttonday.length()2)strbuttond

54、ay=0+strbuttonday;if(strbuttonmonth.length()2)strbuttonmonth=0+strbuttonmonth;public int getDay()day=calendar.get(DAY_OF_MONTH);return day;public void paintComponent(Graphics g) super.paintComponent(g);Imageicon img=new Imagelcon(background);g.drawImage(img.getImage(),0,0,1150,750,this);這里主要用來定義日歷的排

55、版布局,給日歷添加監(jiān)聽,使其能實(shí)現(xiàn)日歷 的翻頁、相關(guān)背景的變換、點(diǎn)擊日歷上相應(yīng)按鈕能顯示時(shí)鐘及備忘錄等功能。Clock.javaimport java.awt.*;import javax.swing.*;import java.applet.AudioClip;import java.io.*;import java.applet.Applet;import .MalformedURLException;import .URL;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent; import java.u

56、til.Calendar; import java.Iang.String;public class Clock extends JFrame public Clock()DrawClock dc=new DrawClock();add(dc,BorderLayout.CENTER);setSize(640,560);setVisible(true);setExtendedState(JFrame.MAXIMIZED_BOTH);/添加計(jì)時(shí)器 時(shí)間間隔為1sint delayl = 1000;ActionListener drawClockl = new ActionListener() pu

57、blic void actionPerformed(ActionEvent evt)/獲取當(dāng)前時(shí)間Calendar now=Calendar.getInstance();int nowh= now.get(Calendar.HOUR_OF_DAY);int nowm=now.get(Calendar.MINUTE);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

58、(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 = new File(st);URL cb= f.toURL();AudioClip aau;aau = Applet.newAudioClip(cb);aau.play(); catch (MalformedURLException e) ; /new Timer(delay1,drawClock1).

59、start();這里主要用來在創(chuàng)建時(shí)鐘主窗口以及為給是添加監(jiān)視器啊使其能夠完成 整點(diǎn)報(bào)時(shí)的功能。DrawClock.javaimport javax.swing.*;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.*;import java.util.Calendar;import java.util.GregorianCalendar;import java.io.*;import java.awt.Col

60、or;import java.awt.Font;import java.awt.Graphics;import java.util.Date;public class DrawClock extends JPanel/參數(shù)定義區(qū) intx,y,x0,y0,r,h,w,olds_x=-100,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,hh, old_h;/x0,y0 圓心double ang,mm,ss,old_m;final double RAD=Math.PI/180;定義弧度、角度轉(zhuǎn)換常數(shù)JButton set;/ 設(shè)置按鈕 Icon icon;/按鈕圖片/Dr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論