Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部源碼流程圖

上傳人:簡(jiǎn)****9 文檔編號(hào):56971206 上傳時(shí)間:2022-02-22 格式:DOCX 頁(yè)數(shù):71 大?。?31.04KB
收藏 版權(quán)申訴 舉報(bào) 下載
Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部源碼流程圖_第1頁(yè)
第1頁(yè) / 共71頁(yè)
Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部源碼流程圖_第2頁(yè)
第2頁(yè) / 共71頁(yè)
Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部源碼流程圖_第3頁(yè)
第3頁(yè) / 共71頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部源碼流程圖》由會(huì)員分享,可在線閱讀,更多相關(guān)《Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告及全部源碼流程圖(71頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

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

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

3、行選題討論,確定小組感興趣而又伸縮性 強(qiáng)的題目多功能日歷。 2. 在第一次上機(jī)實(shí)驗(yàn)時(shí)討論分工,分工明確之后,分頭合作進(jìn)行。 3. 各成員完成自己的任務(wù)后,最后進(jìn)行統(tǒng)籌合并,以及程序最后的優(yōu)化。 4. 根據(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é)果,以及通過(guò)上機(jī)取得的 經(jīng)驗(yàn)。 5. 詳細(xì)的上機(jī)實(shí)驗(yàn)步驟見(jiàn)任務(wù)分工及程序設(shè)計(jì)進(jìn)度表。 五、實(shí)驗(yàn)結(jié)果 經(jīng)過(guò)小組成員的共同努力,最終我們小組設(shè)計(jì)的多功能日歷程序能夠?qū)? 現(xiàn)實(shí)驗(yàn)的基本要求——一年日歷用12頁(yè)顯示,每頁(yè)顯示一個(gè)月的日歷。日歷 可以按年或月前后翻動(dòng),能夠顯示當(dāng)前的日

4、期,可以為每頁(yè)日歷選擇背景圖 片。另外,在完成基本要求的基礎(chǔ)上,我們?cè)鎏砹孙@示農(nóng)歷、顯示時(shí)鐘、添 加備忘錄、修改備忘錄等功能。整體程序運(yùn)行流暢、功能齊全、符合操作習(xí) 慣。 下面是程序運(yùn)行效果截圖: 日歷主界面(可以實(shí)現(xiàn)每個(gè)月的日歷,可以按年或按月前后翻動(dòng),能夠 顯示當(dāng)前日期,并能夠選擇背景圖片): 精選范本 備忘錄主界面(實(shí)現(xiàn)備忘錄的添加,及當(dāng)前日歷的顯示) 添加 20141▼ 琳萬(wàn)十H初二 備忘

5、錄主界面(實(shí)現(xiàn)備忘錄的顯示,及對(duì)當(dāng)前備忘錄的修改刪除等) 今日待辦添加 摞程設(shè)計(jì)喔暇 時(shí)鐘主界面(顯示當(dāng)前時(shí)間,實(shí)現(xiàn)報(bào)整點(diǎn)報(bào)時(shí)功能) isasSaturday 8. i ,7 六、實(shí)驗(yàn)總結(jié) 兩周的課程設(shè)計(jì)結(jié)束了,在這其中歷盡酸甜苦辣咸各種滋味,不過(guò)收獲頗豐。從學(xué)習(xí)C語(yǔ)言、數(shù)據(jù)庫(kù)等等計(jì)算機(jī)編程類課程開(kāi)始,自己始終有種感覺(jué),那就是太理論化了、缺少實(shí)踐。而這次的Java程序設(shè)計(jì)可以說(shuō)與以往大 不相同,先是在課堂上老師講述了有關(guān)的基礎(chǔ)理論、基本語(yǔ)法知識(shí),而后再加上

6、這兩周的課程設(shè)計(jì),可以說(shuō)是真正能夠體會(huì)到程序編程的樂(lè)趣,也第一次發(fā)現(xiàn)自己原來(lái)對(duì)程序設(shè)計(jì)是如此的感興趣。尤其是由于課程時(shí)間較緊,課上時(shí)間老師只是簡(jiǎn)單給我們講述了一下JavaSwing的基礎(chǔ)知識(shí),并沒(méi)有去深 入,而在此次課程設(shè)計(jì)中大量用到的監(jiān)聽(tīng)事件的有關(guān)知識(shí)需要自己去查標(biāo)準(zhǔn)文檔,去網(wǎng)上找相關(guān)系料,這無(wú)疑對(duì)自己是一個(gè)挑戰(zhàn)。但是兩周下來(lái),我做到了,我獨(dú)立完成了對(duì)備忘錄程序的編寫,累積下來(lái)這部分共涉及到包括 ActionListener,MouseListener,MenuListener,DocumentListener等各種各類監(jiān)聽(tīng)18個(gè)監(jiān)聽(tīng),分為6個(gè)類,累計(jì)完成程序千余行。而給我印象最深刻的便

7、監(jiān)聽(tīng)了,可以說(shuō)是整個(gè)備忘錄的大部分代碼都是與監(jiān)聽(tīng)相關(guān),這也是讓我我學(xué)會(huì)了對(duì)程序監(jiān)聽(tīng)的運(yùn)用,當(dāng)然只是學(xué)會(huì)遠(yuǎn)遠(yuǎn)談不上精通。 我編寫的類有Test、MainWin、MyMenuListener1、PoliceListen、PoliceListen2、MyWindowListener。其中Test類主要是用來(lái)定義備忘錄主窗口的各種組件以及在相關(guān)組件上添加監(jiān)聽(tīng)以實(shí)現(xiàn)備忘錄添加、修改、刪除等功能。MainWin類主要是用來(lái)創(chuàng)建Test對(duì)象,用以顯示窗口的。 MyMenuListener1主要是給今日待辦菜單定義菜單監(jiān)聽(tīng),從而使其選中后能顯 示今日待辦的備忘記事,而當(dāng)未被選中時(shí)相關(guān)的文字、按鈕又都會(huì)隱

8、藏掉。 PoliceListen主要是用來(lái)定義日歷日期按鈕事件的監(jiān)聽(tīng),用以監(jiān)聽(tīng)當(dāng)點(diǎn)擊相 關(guān)日期時(shí)會(huì)彈出相應(yīng)日期的備忘記事的窗口來(lái)。PoliceListen2主要是定義備 忘錄窗口中添加按鈕的時(shí)間監(jiān)聽(tīng),使其被點(diǎn)擊后能夠顯示添加備忘記事功能 的相關(guān)功能按鈕和相關(guān)文本區(qū)。MyWindowListener主要是定義備忘錄窗口的 窗口監(jiān)聽(tīng),和PoliceListen共同使用來(lái)對(duì)窗口的激活狀態(tài)進(jìn)行監(jiān)聽(tīng),以保證 窗口能夠按照預(yù)定計(jì)劃彈出和關(guān)閉。 在實(shí)驗(yàn)過(guò)程中遇到了大大小小各種困難,通過(guò)自己查資料、詢問(wèn)老師、 同學(xué)討論基本解決了這些困難。下面我就說(shuō)一說(shuō)在這次課程設(shè)計(jì)中遇到的問(wèn) 題有哪些,以及

9、自己的解決辦法和從中得出的經(jīng)驗(yàn)心得。首先在對(duì)備忘錄窗 口的布局問(wèn)題上,一開(kāi)始采用流式布局,按鈕少的時(shí)候效果還算說(shuō)得過(guò)去, 但是當(dāng)按鈕一多整個(gè)布局就不那么好控制了了。為了實(shí)現(xiàn)預(yù)期的效果,最終 采用了null布局,在該種布局下,需要為每個(gè)組件指定坐標(biāo),否則組件將不 會(huì)顯示。首先我的想法是,根據(jù)窗口的高度和寬度來(lái)對(duì)按鈕進(jìn)行布局,我相 信這種方法肯定是正規(guī)程序設(shè)計(jì)中在布局是采用的方法,但是擺在眼前的問(wèn) 題是時(shí)間比較緊,沒(méi)有大量的時(shí)間來(lái)進(jìn)行這種比較精確地布局。因此,最終 是通過(guò)不斷地嘗試來(lái)給組件賦予坐標(biāo)值,最終效果是肉眼感覺(jué)起來(lái)是不錯(cuò)的, 如果時(shí)間充足當(dāng)然可以做的更精確一點(diǎn)。 第二個(gè)問(wèn)

10、題也是一個(gè)比較簡(jiǎn)單的問(wèn)題,因?yàn)閯傞_(kāi)始不熟悉監(jiān)聽(tīng),因此遇 到了彈出一個(gè)窗口后,再點(diǎn)擊這個(gè)按鈕本來(lái)按照效果不應(yīng)該在彈出窗口的, 但是依舊能彈出。為了解決這個(gè)問(wèn)題,自己想了一個(gè)辦法那就是標(biāo)記,當(dāng)有 窗口彈出時(shí),將標(biāo)記值變成1,而當(dāng)標(biāo)記值為1的時(shí)候,點(diǎn)擊此按鈕將不會(huì)觸 發(fā)監(jiān)聽(tīng)事件,只有當(dāng)標(biāo)記值為0的時(shí)候該監(jiān)聽(tīng)事件才能起到作用,然后當(dāng)此 窗口的狀態(tài)為關(guān)閉時(shí),又會(huì)將該標(biāo)記值變成0,這樣的效果主要是通過(guò) PoliceListen和MyWindowListen兩個(gè)類來(lái)完成的,其中PoliceListen是鼠 標(biāo)監(jiān)聽(tīng),而MyWindowListen則是窗口監(jiān)聽(tīng)。這是這一個(gè)監(jiān)聽(tīng)最終在自己的努 力下

11、成功了,才使自己對(duì)監(jiān)聽(tīng)事件產(chǎn)生了濃厚的興趣,以至于后來(lái)加了那么 多監(jiān)聽(tīng)雖然困難很多也沒(méi)有退縮。自己也從中體會(huì)到平時(shí)的程序之所以能夠 相應(yīng)操作的原理,那就是對(duì)命令、對(duì)動(dòng)作進(jìn)行監(jiān)聽(tīng)。而且,有時(shí)候看起來(lái)非 常簡(jiǎn)單的功能實(shí)現(xiàn)起來(lái)也不是很容易,就像本例中的所說(shuō)的那樣。 在完成了第一個(gè)監(jiān)聽(tīng)以后,又在Test里面加入了N多個(gè)監(jiān)聽(tīng),這些監(jiān)聽(tīng) 大部分是ActionListener監(jiān)聽(tīng),也即最常有的一類監(jiān)聽(tīng)。為了避免類過(guò)多, 我大多采用了匿名類的方式內(nèi)嵌于Test類中。這些監(jiān)聽(tīng)的設(shè)計(jì)中,大部分沒(méi) 有遇到問(wèn)題,有少數(shù)是因?yàn)樽约旱倪壿嬳樞虿粚?duì)而沒(méi)有達(dá)到預(yù)期的效果,最 后都能調(diào)整過(guò)來(lái)。遇到的問(wèn)題是讀取選

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

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

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

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

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

17、份月 份日歷 時(shí)鐘窗口顯示 整點(diǎn)觸發(fā)監(jiān)聽(tīng)事件 整點(diǎn)報(bào)時(shí) (2)類圖 日歷程序類圖: 下拉框選擇月份 按鈕調(diào) 節(jié)月份 觸發(fā)備忘錄按鈕 監(jiān)聽(tīng)事件 觸發(fā)月份監(jiān)聽(tīng)事 件 顯示選定年份月 份日歷背景 點(diǎn)擊今日待辦按鈕 初始化備忘錄窗口組件,并添加相應(yīng)監(jiān)聽(tīng) 觸發(fā)背景監(jiān)聽(tīng)事件 點(diǎn)擊添加 按鈕 顯示備忘錄窗口 日歷主窗口顯示 (默認(rèn)為當(dāng)前日 期) /X 否是否存在以 被選中日期 命名的文件「 結(jié)束 觸發(fā)今日觸發(fā)添加 待辦按鈕按鈕監(jiān)聽(tīng) 監(jiān)聽(tīng)事件事件 刪除文件 文本區(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 時(shí)鐘主程序主要包含四個(gè)類,其中OurCalender、MainWin、ACalender三個(gè)類是都是JFrame的子類。OurCalender里包含程序的入口,Mainwin主要

20、用來(lái)創(chuàng)建窗口對(duì)象,ACalender主要用來(lái)創(chuàng)建日歷對(duì)象,NongLi主要用來(lái)進(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) 時(shí)鐘類圖: 時(shí)鐘類主要包含DrawClock和Clock類,其中DrawClock類

22、主要是用來(lái)創(chuàng)建時(shí)鐘對(duì)象,而Clock類主要是用來(lái)創(chuàng)建窗口對(duì)象和時(shí)鐘監(jiān)聽(tīng)來(lái)進(jìn)行整點(diǎn)報(bào)時(shí)。時(shí)鐘程序類圖如下所示: 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類主要是用來(lái)創(chuàng)建備忘錄窗 口對(duì)象,Test主要定義備忘錄相關(guān)的組件以及添加相應(yīng)的監(jiān)聽(tīng)事件以實(shí)現(xiàn)備 忘記事的添加、修改、刪除等功能。PoliceListen類主要用來(lái)定義日歷按鈕 的監(jiān)聽(tīng)。PoliceListen2主要是用來(lái)定義備忘錄中添加按鈕的監(jiān)聽(tīng)MyMenuListener1主要是

24、用來(lái)定義今日待辦事件監(jiān)聽(tīng)。 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 monthbox:JComboBox daybox:JComboBox hourbox:JComboBox minutebox:JComboBox yearlabel:JLabel monthlabel:JLabel daylabel:mhlabel:JLabel menulistener1:MyMenuListener1 menulist

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.程序清單 (要說(shuō)明程序的功能和程序之間的關(guān)系,如程序很多,可以只附主要的程序代碼) OurCalendar.Java publicclassOurCalendar{ publicstaticvoi

32、dmain(String口args){try{ MainWinframe=newMainWin(); } catch(Exceptione){ System.out.print("runerror!"); } 這里主要用來(lái)創(chuàng)建日歷窗口對(duì)象,顯示日歷主窗口 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(); } } 這里主要用來(lái)定義日歷主窗口類的組件。 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("華文隸書(shū)",Font.TRUETYPE_FONT,27)); TheMonth.setFont(newFont("華文隸書(shū)",Font.TRUETYPE_FONT,27)); Year.setFont(newFont("華文隸書(shū)",Font.TRUETYPE_FONT,27)); Month.setFont(newFont("華文隸書(shū)",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)造一個(gè)日 期 GregorianCalendarcal=newGregorianCalendar();//創(chuàng)建一 個(gè)Calendar實(shí)例 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); } } 這里主要用來(lái)定義日歷的排版布局,給日歷添加監(jiān)聽(tīng),使其能實(shí)現(xiàn)日歷 相關(guān)背景的變換、點(diǎn)擊日歷上相應(yīng)按鈕能顯示時(shí)鐘及備忘錄等功能。 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); //添加計(jì)時(shí)器時(shí)間間隔為1s intdelay1=1000; ActionListenerdrawClock1=newActionListener(){ publicvoidactionPerformed(ActionEventevt){ //獲取當(dāng)前時(shí)間 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(); } 這里主要用來(lái)在創(chuàng)建時(shí)鐘主窗口以及為給是添加監(jiān)視器啊使其能夠完成 整點(diǎn)報(bào)時(shí)的功能。 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);

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!