版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)報(bào)告(2012-2013年第二學(xué)期)很棒的日歷特定主題計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生班學(xué)生編號(hào)教師完工日期目錄TOC\o"1-5"\h\z\u目錄21概述41.1課程設(shè)計(jì)目的41.2課程設(shè)計(jì)容和要求42系統(tǒng)需求分析52.1系統(tǒng)目標(biāo)52.2主體功能52.3開發(fā)環(huán)境53系統(tǒng)總體設(shè)計(jì)53.1系統(tǒng)的功能模塊劃分53.2系統(tǒng)流程圖64系統(tǒng)詳細(xì)設(shè)計(jì)64.1主窗口模塊設(shè)計(jì)64.1.1效果圖64.1.2類的主要成員變量和方法74.1.3主要程序代碼84.2日期模塊設(shè)計(jì)194.2.1效果圖194.2.2類的主要成員變量和方法194.2.3主要程序代碼194.3日歷模塊設(shè)計(jì)214.3.1效果圖214.3.2類的主要成員變量和方法224.3.3主要程序代碼224.4記事本模塊設(shè)計(jì)244.4.1效果圖244.4.2類的主要成員變量和方法244.4.3主要程序代碼254.5圖像模塊設(shè)計(jì)344.5.1效果圖344.5.2類的主要成員變量和方法344.5.3主要程序代碼354.6時(shí)鐘模塊設(shè)計(jì)364.6.1效果圖364.6.2類的主要成員變量和方法364.6.3主要程序代碼375代碼調(diào)試416軟件發(fā)布427小結(jié)42參考文獻(xiàn)44很棒的日歷1概述1.1課程設(shè)計(jì)的目的(1)加深對(duì)Java語言和面向?qū)ο蠹夹g(shù)基礎(chǔ)知識(shí)的理解,掌握J(rèn)ava語言面向?qū)ο缶幊痰拈_發(fā)方法和步驟;(2)進(jìn)一步了解面向?qū)ο缶幊痰乃枷牒头椒?,以及使用Java語言進(jìn)行編程的能力;(3)課程設(shè)計(jì)將課本上的理論知識(shí)與實(shí)際應(yīng)用相結(jié)合,培養(yǎng)學(xué)生發(fā)現(xiàn)問題、分析問題、解決問題的能力。加強(qiáng)學(xué)生開發(fā)、編寫和調(diào)試程序的能力;(4)培養(yǎng)學(xué)生的團(tuán)隊(duì)精神、創(chuàng)新意識(shí)和項(xiàng)目開發(fā)能力;(5)提高學(xué)生科技論文寫作能力,完成課程設(shè)計(jì)報(bào)告。1.2課程設(shè)計(jì)能力和要求設(shè)計(jì)GUI界面的日歷記事本。該系統(tǒng)將日歷和記事本結(jié)合在一起,可以方便地保存和查看日志,即記錄任意日期的內(nèi)容或查看某一日期記錄的內(nèi)容。具體要求如下:界面左側(cè)是日歷和圖片。日歷可以逐年翻轉(zhuǎn)。用鼠標(biāo)點(diǎn)擊“上一年”按鈕,當(dāng)前日歷的年份會(huì)減一;當(dāng)鼠標(biāo)左鍵點(diǎn)擊“下一年”按鈕時(shí),當(dāng)前日歷的年份將增加一。日歷也可以在某一年的月份之前和之后翻轉(zhuǎn)。鼠標(biāo)左鍵點(diǎn)擊“上個(gè)月”按鈕,當(dāng)前日歷的月份會(huì)減一;當(dāng)你用鼠標(biāo)左鍵點(diǎn)擊“下個(gè)月”時(shí),當(dāng)前日歷的月份將增加一。同時(shí)在圖片中加入了日歷圖片選擇功能,增加了美觀度。(2)系統(tǒng)界面右側(cè)是記事本和鬧鐘。用鼠標(biāo)點(diǎn)擊日歷上的日期,可以通過記事本編輯相關(guān)日志,并將日志保存到一個(gè)文件中,文件名稱以日期組成的字符序列命名。用戶可以查看和刪除某個(gè)日期的日志,繼續(xù)向日志添加新內(nèi)容,或者根據(jù)自己的心情改變字體大小和樣式。(3)當(dāng)某一日期有日志時(shí),該日期的日歷上會(huì)出現(xiàn)“是”標(biāo)記,表示該日期有日志。當(dāng)用戶在某個(gè)日期刪除日志時(shí),該日期的“是”標(biāo)記將會(huì)消失。2系統(tǒng)需求分析2.1系統(tǒng)目標(biāo)創(chuàng)建一個(gè)日歷記事本,實(shí)現(xiàn)記錄某個(gè)日期的事件的主要功能,顯示設(shè)定的圖片和字體,增強(qiáng)美觀。2.2主要功能(1)可以添加、查閱、刪除個(gè)人日志;(2)方便記錄任意日期的個(gè)人日志,查看某一天記錄的日志;(3)您可以顯示當(dāng)前日期和時(shí)間,并在整點(diǎn)報(bào)時(shí)。(5)可以為日歷更換自己喜歡的圖片。(6)可以改變字體大小和樣式。2.3開發(fā)環(huán)境黯然失色3總體系統(tǒng)設(shè)計(jì)3.1系統(tǒng)功能模塊的劃分本系統(tǒng)主要有以下功能模塊:日歷、記事本、時(shí)鐘、圖片等。軟件的主要組成及各模塊之間的調(diào)用關(guān)系如下圖所示:很棒的日歷很棒的日歷日歷主窗口日歷主窗口時(shí)鐘模塊日期模塊日歷模塊記事本模塊圖像模塊時(shí)鐘模塊日期模塊日歷模塊記事本模塊圖像模塊3.2系統(tǒng)流程圖日歷窗口日歷窗口日歷消息日歷圖像主類單行文本文件筆記本文本域時(shí)鐘4系統(tǒng)詳細(xì)設(shè)計(jì)4.1主窗口模塊的設(shè)計(jì)效果圖4.1.2類的主要成員變量和方法(1)成員變量1)年、月、日是整型變量。它們的值分別決定年、月和日。2)calendarMessage是一個(gè)calendarMessage對(duì)象,用于處理日期相關(guān)的數(shù)據(jù)。3)calendarPad是一個(gè)calendarPad對(duì)象,可以顯示日期相關(guān)的數(shù)據(jù)。4)記事本是NoetPad的對(duì)象。它具有編輯、讀取、保存和刪除日志的功能。5)showYear和showMonth是由JtextField類創(chuàng)建的用于顯示年份和月份的文本框。6)6)showDay數(shù)組的每個(gè)單元格都是由JtextField類創(chuàng)建的用于顯示日期的文本框。7)calendarImage是calendarImage創(chuàng)建的用于顯示圖像的對(duì)象。8)clock是clock創(chuàng)建的顯示時(shí)鐘的對(duì)象。9)nextYear、PreviousYear、nextMonth和PreviousMonth是由utton創(chuàng)建的按鈕對(duì)象,它們的名稱依次為“nextYear、lastyear、nextmonth和lastmonth”。這些按鈕都將當(dāng)前窗口注冊(cè)為它們自己的ActionEvent事件監(jiān)視器。10)savaDailyRecord、deleteDailyRecord和readDailyRecord是由utton創(chuàng)建的按鈕對(duì)象,它們的名稱依次為“保存日志、刪除日志和讀取日志”。這些按鈕都將當(dāng)前窗口注冊(cè)為它們自己的ActionEvent事件監(jiān)視器。2)方法1)CalendarWindow()是一個(gè)構(gòu)造方法,負(fù)責(zé)窗口初始化。2)actionPerformed(ActionEvent)方法是由CalendarWindow類實(shí)現(xiàn)的ActionListener接口中的方法。CalendarWindow創(chuàng)建的窗口是nextYear、previousYear、nextMonth、previousMonth、saveDailyRecord、deleteDailyRecord和readDailyRecord按鈕的ActionEvent事件監(jiān)視器。當(dāng)用戶點(diǎn)擊按鈕時(shí),窗口將執(zhí)行actionPerformed(ActionEvent)方法來執(zhí)行相應(yīng)的操作。3)mousePressed(MouseEvent)方法是CalendarWindow類實(shí)現(xiàn)的MouseListener接口中的方法。CalendarWindow創(chuàng)建的窗口是showDay數(shù)組中JtextField文本框的MouseEvent事件監(jiān)視器。當(dāng)用戶在顯示日期的文本框上按下鼠標(biāo)左鍵時(shí),窗口將執(zhí)行mousePress(MouseEvent)方法來執(zhí)行相應(yīng)的操作。4)focusgain(focusevent)和focusLost(FocusEvent)方法是由CalendarWindow類實(shí)現(xiàn)的FocusListener接口中的方法。CalendarWindow創(chuàng)建的窗口是showDay數(shù)組中JtextField文本框的FocusEvent監(jiān)視器。當(dāng)用戶的操作導(dǎo)致顯示日期的文本框的焦點(diǎn)發(fā)生變化時(shí),窗口將執(zhí)行focusgain(focusevent)或focusLost(FocusEvent)方法來執(zhí)行相應(yīng)的操作。5)doMark()方法負(fù)責(zé)用日志標(biāo)記日期。6)主要方法是程序運(yùn)行的入口方法[3]。主程序代碼導(dǎo)入javax.swing.*;導(dǎo)入Java.awt.*;導(dǎo)入Java.awt.event.*;導(dǎo)入Java.util.*;導(dǎo)入Java.io.*;導(dǎo)入Java.awt.splashscreen;公共類CalendarWindow擴(kuò)展JFrame實(shí)現(xiàn)ActionListener,鼠標(biāo)監(jiān)聽器,焦點(diǎn)監(jiān)聽器{int年、月、日;CalendarMessage日歷消息;CalendarPadcalendarPad記事本記事本;JTextFieldshowYear,showMonthJTextFieldshowday[];CalendarImagecalendarImage字符串picturename//圖像名稱;StringgetPicture_address時(shí)鐘clock;按鈕下一年、上一年、下一個(gè)月、上一個(gè)月;按鈕saveDailyRecord,deleteDailyRecord,readDailyRecord文件目錄;顏色backColor=Color.white公共日歷窗口(){dir=新文件("。/dailyrecord");dir.mkdir();showDay=newJTextField[42];for(intI=0;i<showDay.lengthi++){showDay[I]=newJTextField();showDay[i]。setbackground(backcolor);showDay[i]。setLayout(newGridLayout(3,3));showDay[i]。addmouselistener(this);showDay[i]。addFocusListener(this);}calendarmessage=newcalendarmessage();calendarpad=newcalendarpad();記事本=新記事本();calendarcalendar=calendar.getinstance();calendar.settime(newDate());year=calendar.get(Calendar。年份);month=calendar.get(日歷。月)+1;day=calendar.get(日歷。月日);calendarMessage.setYear(年份);calendarMessage.setMonth(月);calendarMessage.setDay(日);calendarpad.setcalendarmessage(calendarmessage);calendarpad.setshowdaytextfield(showDay);notePad.setMessage(年、月、日);calendarpad.showmonthcalendar();doMark();calendarimage=newcalendarimage();picturename=getpicture_address();//calendarImage.setImageFile(新文件(picturename));JMenuBarmenuBar=newJMenuBar();JMenumenusetting=newJMenu();JMenuItemchangepicture=newJMenuItem();menusetting.settext("image");//設(shè)置標(biāo)題Changepicture.setText("改變圖片的背景");//設(shè)置標(biāo)題//添加菜單欄;menusetting.add(changepicture);menubar.add(menusetting);setJMenuBar(菜單欄);//注冊(cè)偵聽器changepicture.addactionlistener(this);Clock=newClock();JSplitPanesplitv1=newJSplitPane(JSplitPane。VERTICAL_SPLIT,calendarPad,calendarimage);JSplitPanesplitv2=newJSplitPane(JSplitPane。豎排_(tái)拆分,記事本,時(shí)鐘);JSplitPanesplitH=newJSplitPane(JSplitPane。HORIZONTAL_SPLIT,splitV1,SPLITv2);add(splitH,BorderLayout。中心);showyear=newJTextField("+year,6);showYear.setFont(新字體("TimesRoman",字體。粗體,12));showyear.sethorizontalalignment(JTextField。中心);showmonth=newJTextField("+month,4);showMonth.setFont(新字體("TimesRoman",字體。粗體,12));showmonth.sethorizontalalignment(JTextField。中心);NextYear=newutton("下一年");PreviousYear=newutton("前一年");NextMonth=newutton("下個(gè)月");PreviousMonth=newutton("上個(gè)月");nextyear.addactionlistener(this);previousyear.addactionlistener(this);nextmonth.addactionlistener(this);previousmonth.addactionlistener(this);showyear.addactionlistener(this);JPanelnorth=newJPanel();north.add(前一年);north.add(showyear);north.add(下一年);north.add(前一個(gè)月);north.add(showmonth);north.add(下個(gè)月);添加(north,BorderLayout。北);SaveDailyRecord=newutton("保存日志");DeleteDailyRecord=newutton("刪除日志");ReadDailyRecord=newutton("readlog");savedailyrecord.addactionlistener(this);deletedailyrecord.addactionlistener(this);readdailyrecord.addactionlistener(this);JPanelpSouth=newJPanel();psouth.add(saveDailyRecord);psouth.add(deleteDailyRecord);psouth.add(readDailyRecord);add(pSouth,BorderLayout。南);setvisible(true);setBounds(70,70,770,500);validate();setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);}公共字符串getPicture_address(){字符串地址=null嘗試{fileinputstreamoutone=newfileinputstream("picture_address.txt");ObjectInputStreamouttwo=newObjectInputStream(outone);try{address=(String)outtwo.readobject();}catch(Exceptionex){}outtwo.close();}捕捉(IOExceptioneee){}如果(地址!=空){回郵地址;}其他{返回“picture.jpg”;}}公共無效操作已執(zhí)行(操作事件e){If(e.getActionCommand()。equals("改變圖片的背景")){FileDialogdia=newFileDialog(this,“所選圖片”,filedialog。負(fù)載);//新建一個(gè)文件選擇對(duì)話框,使用dia獲取選擇的信息;dia.setmodal(true);//設(shè)置為模式對(duì)話框;dia.setvisible(true);//將獲取的內(nèi)容保存在“picture_address.txt”文件中,下次打開軟件時(shí)可以記住上次的圖片路徑選擇;if((dia.getDirectory()!=null)&&(dia.getFile()!=null))//如果獲取的路徑和文件名不為空;{嘗試{fileoutputstreaminone=newfileoutputstream("picture_address.txt");objectoutputstreamintwo=newobjectoutputstream(inOne);intwo.writeobject(dia.getdirectory()+dia.getfile());intwo.close();}捕捉(IOExceptionee){}picturename=getpicture_address();//從文件中讀取顯示圖片的路徑地址;calendarImage.setImageFile(新文件(picturename));//將獲取的路徑傳遞給圖片,顯示路徑指定的圖片。}}if(e.getSource()==nextYear){year++;showyear.settext("+year);calendarMessage.setYear(年份);calendarpad.setcalendarmessage(calendarmessage);calendarpad.showmonthcalendar();notePad.setMessage(年、月、日);doMark();}elseif(e.getsource()==previousyear){年份-;showyear.settext("+year);calendarMessage.setYear(年份);calendarpad.setcalendarmessage(calendarmessage);calendarpad.showmonthcalendar();notePad.setMessage(年、月、日);doMark();}elseif(e.getsource()==nextmonth){month++;if(month>12)month=1;showmonth.settext("+month);calendarpad.setcalendarmessage(calendarmessage);calendarpad.showmonthcalendar();notePad.setMessage(年、月、日);doMark();}elseif(e.getsource()==previousmonth){月-;if(month<1)month=12;showmonth.settext("+month);calendarpad.setcalendarmessage(calendarmessage);calendarpad.showmonthcalendar();notePad.setMessage(年、月、日);doMark();}elseif(e.getSource()==showYear){Strings=showYear.getText()。trim();chara[]=s.tochararray();布爾boo=falsefor(intI=0;i<a.長(zhǎng)度;i++){如果(!(Character.isDigit(a[i]))boo=true}if(boo==true)Joption窗格。顯示消息對(duì)話框(這個(gè),“你輸入了一個(gè)非法的年份”,“警告!”,JOptionPane。WARNING_MESSAGE);elseif(boo==false)year=integer.parseint(s);showyear.settext("+year);calendarMessage.setYear(年份);calendarpad.setcalendarmessage(calendarmessage);calendarpad.showmonthcalendar();notePad.setMessage(年、月、日);doMark();}elseif(e.getsource()==saveDailyRecord){notePad.savefile(目錄、年、月、日);doMark();}elseif(e.getsource()==deleteDailyRecord){notePad.deletefile(目錄,年,月,日);doMark();}elseif(e.getsource()==readDailyRecord){notePad.readfile(目錄,年,月,日);doMark();}}公共voidmousePressed(MouseEvente){JTextFieldtext=(JTextField)e.getsource();Stringstr=text.getText()。trim();嘗試{day=integer.parseint(str);}catch(NumberFormatExceptionexp){}calendarMessage.setDay(日);notePad.setMessage(年、月、日);}publicvoidmousereleased(mouseevente){}publicvoidmouseenter(mouseevente){}publicvoidmouseexited(mouseevente){}publicvoidmouseclicked(mouseevente){}公共void焦點(diǎn)增益(焦點(diǎn)事件e){Component=(Component)e.getsource();。setbackground(color.pink);}公共voidfocusLost(FocusEvente){Component=(Component)e.getsource();。setbackground(backcolor);}publicvoiddoMark(){for(intI=0;i<showDay.lengthi++){showDay[i]。removeall();Stringstr=showDay[i]。getText()。trim();嘗試{intn=integer.parseint(str);if(isHaveDailyRecord(n)==true){JLabelmess=newJLabel("yes");mess.setFont(新字體("TimesRoman",字體。平原,11));mess.setforeground(color.blue);showDay[i]。補(bǔ)充(亂七八糟);}}catch(異常表達(dá)式){}}calendarpad.repaint();calendarpad.validate();}publicbooleanisHaveDailyRecord(intn){stringkey=""+年+""+月+""+n;string[]dayfile=dir.list();布爾boo=falsefor(intk=0;k<dayFile.lengthk++){if(dayFile[k].等于(key+"。txt")){boo=true打破;}}返回boo}公共靜態(tài)voidmain(Stringargs[]){newcalendarwindow();}}4.2數(shù)據(jù)模塊的設(shè)計(jì)效果圖4.2.2類的主要成員變量和方法(1)成員變量年、月、日是int數(shù)據(jù),它們的值分別決定年、月、日。2)方法1)setYear(int)和getYear()方法分別用于設(shè)置Year和獲取Year的值。2)setMonth(int)和getMonth()方法分別用于設(shè)置Month和獲取Month的值。3)setday(int)和getDay()方法分別用于設(shè)置和獲取day的值。4)使用getMonthCalendar()方法處理日期數(shù)據(jù),并使其按習(xí)慣顯示。即日歷卡片中每一行的第一列是“星期日”。getMonthCalendar()方法根據(jù)年、月和日的值返回包含日歷數(shù)據(jù)的字符串?dāng)?shù)組。例如,如果一個(gè)月有30天,并且該月的第一天是星期三,則返回的字符串?dāng)?shù)組是:""、"、"1"、"2",...主程序代碼導(dǎo)入Java.util.calendar;公共類日歷消息{intyear=-1,month=-1,day=-1;publicvoidsetYear(intyear){this.year=year}publicintgetYear(){返回年份;}公共voidsetMonth(intmonth){if(月<=12&&月>=1)this.month=月;其他this.month=1;}publicintgetMonth(){返回月份;}publicvoidsetDay(intday){this.day=day}publicintgetday(){返回日;}publicString[]getMonthCalendar(){String[]day=新字符串[42];calendarrili=calendar.getinstance();rili.set(年,月-1,1);//將日歷轉(zhuǎn)到一年的第一個(gè)月。Int星期幾=rili.get(calendar.day_of_week)-1;intDayamount=0;if(月==1||月==3||月==5||月==7||月==8||月==10||月==12)dayAmount=31if(month==4||month==6||month==9||month==11)dayAmount=30if(month==2)if(((年%4==0)&&(年%100!=0))||年%400==0)dayAmount=29其他dayAmount=28for(intI=0;I<星期幾;i++)day[I]="";For(inti=星期幾,n=1;I<星期幾+Dayamount;i++){day[I]=string.valueof(n);n++;}For(inti=星期幾+dayAmount;i<42i++)day[I]="";返回日;}}4.3日歷模塊設(shè)計(jì)效果圖4.3.2類的主要成員變量和方法(1)成員變量1)年、月、日是int數(shù)據(jù),它們的值分別決定年、月、日。2)calendarMessage是一個(gè)calendarMessage對(duì)象,可以處理日期相關(guān)的數(shù)據(jù)。Showday數(shù)組的每個(gè)單元格都是由JtextField類創(chuàng)建的顯示日期的文本框。4)“周”是一個(gè)字符串?dāng)?shù)組。單元格的值依次為星期日、星期一、TUE、星期三、THU、星期五和星期六。2)方法1)calendarPad()是用于創(chuàng)建calendarPad對(duì)象的構(gòu)造方法。2)setshowDayTextField(jtextField[])方法負(fù)責(zé)設(shè)置Showday數(shù)組。3)setcalendarMessage(calendarMessage)方法負(fù)責(zé)設(shè)置calendarmessage對(duì)象。showmonthcalendar()方法負(fù)責(zé)顯示“日歷”[4]。主程序代碼導(dǎo)入javax.swing.*;導(dǎo)入Java.awt.*;導(dǎo)入Java.awt.event.*;導(dǎo)入Java.util.*;公共類CalendarPad擴(kuò)展JPanel{int年、月、日;CalendarMessage日歷消息;JTextField[]showDay;JLabeltitle[];String[]week={"太陽日","星期一","TUE二","星期三","THU四","星期五五","星期六六"};JPanel北,中;公共日歷Pad(){setlayout(newBorderLayout());north=newJPanel();north.setlayout(newGridLayout(1,7));center=newJPanel();center.setlayout(newGridLayout(6,7));添加(center,BorderLayout。中心);添加(north,BorderLayout。北);title=newJLabel[7];for(intj=0;j<7;j++){title[j]=newJLabel();標(biāo)題[j]。setFont(新字體(“TimesRoman”,字體。粗體,12));標(biāo)題[j]。setText(week[j]);標(biāo)題[j]。setHorizontalAlignment(JLabel。中心);標(biāo)題[j]。setborder(borderfactory.createraisedbevelborder());north.add(title[j]);}標(biāo)題[0]。setforeground(color.red);標(biāo)題[6]。setforeground(color.blue);}publicvoidsetShowDayTextField(JTextField[]text){showDay=textfor(intI=0;i<showDay.lengthi++){showDay[i]。setFont(新字體(“TimesRoman”,字體。粗體,15));showDay[i]。sethorizontalalignment(JTextField。中心);showDay[i]。seteditable(false);center.add(showDay[I]);}}publicvoidsetcalendarmessage(calendarmessagecalendarmessage){this.calendarmessage=calendarmessage;}publicvoidshowMonthCalendar(){string[]a=calendarmessage.getmonthcalendar();for(intI=0;i<42i++)showDay[i]。setText(a[I]);validate();}}4.4記事本模塊設(shè)計(jì)4.4.1效果圖4.4.2類的主要成員變量和方法(1)成員變量1)text是JtextArea創(chuàng)建的文本區(qū)域,可以在text中編譯多行文本。2)showMessage是JTextField創(chuàng)建的文本欄,用于顯示日期相關(guān)的數(shù)據(jù)。3)popup是JpopupMenu創(chuàng)建的彈出菜單。4)復(fù)制、剪切、粘貼是JmenuItem創(chuàng)建的菜單項(xiàng),它們的名字依次為“復(fù)制”、“剪切”、“粘貼”。5)列表1和列表2是由列表框選項(xiàng)創(chuàng)建的兩個(gè)列表對(duì)象。6)btn是由utton創(chuàng)建的按鈕,稱為“顏色”。7)labl是JLabel創(chuàng)建的一個(gè)標(biāo)簽,叫做“事件時(shí)間(HH:MM)”。2)方法1)使用notepad()構(gòu)造方法創(chuàng)建notePad對(duì)象。2)setshowmessage(int,int,int)方法根據(jù)參數(shù)指定的日期數(shù)據(jù)顯示相關(guān)的日期信息。3)save(file,int,int,int)方法根據(jù)參數(shù)指定的日期保存日志。4)delete(File,int,int,int)用于刪除日志。5)read(File,int,int,int)用于讀取日志。主程序代碼導(dǎo)入Java.awt.*;導(dǎo)入javax.swing.*;導(dǎo)入Java.io.*;導(dǎo)入Java.awt.event.*;記事本類擴(kuò)展JPanel實(shí)現(xiàn)ActionListener、MouseListener、ItemListener{JPopupMenu彈出菜單;JMenuItem剪切、復(fù)制、粘貼;JTextFieldShowMessage,timeJTextAreataJPanelp1,p2,P3;選擇列表1,列表2;uttonbtnJLabellablStringSize[]={"10","12","14","16","18","20","22","24","26","28","30","32","34","36"};記事本(){popup=newJPopupMenu();showmessage=newJTextField();showmessage.seteditable(false);ta=newJTextArea(5,20);P1=newJPanel();p2=newJPanel();P3=newJPanel();BTN=newutton("color");Labl=newJLabel("事件時(shí)間(hh:mm):");time=newJTextField(10);list1=newChoice();list2=newChoice();graphicsenvironmentge=graphicsenvironment.getlocalgraphicsenvironment();stringfontname[]=ge.getavailablefontfamilynames();for(intI=0;i<fontname.lengthi++){list1.add(fontname[I]);}for(intI=0;I<大小.長(zhǎng)度;i++){list2.add(Size[I]);}cut=newJMenuItem("cut");cut.setaccelerator(keystroke.getkeystroke(keyevent。VKX,輸入事件。CTRL_MASK));copy=newJMenuItem("copy");copy.setaccelerator(keystroke.getkeystroke(keyevent。VK特區(qū),輸入事件。CTRL_MASK));paste=newJMenuItem("paste");paste.setaccelerator(keystroke.getkeystroke(keyevent。VKV,輸入事件。CTRL_MASK));popup.add(剪切);popup.add(復(fù)制);popup.add(粘貼);P1.add(list1);P1.add(list2);//P1.add(BTN);P3.add(labl);p3.add(時(shí)間);setlayout(newBorderLayout());add(ShowMessage,BorderLayout。北);p2.setlayout(newBorderLayout());p2.add(newJScrollPane(ta),BorderLayout。中心);//p2.add(p3,BorderLayout。南);添加(p2,BorderLayout。中心);add(p1,BorderLayout。南);setBounds(0,0,600,600);setvisible(true);BTN.addactionlistener(this);list1.additemlistener(this);list2.additemlistener(this);cut.addactionlistener(this);copy.addactionlistener(this);paste.addactionlistener(this);ta.addMouseListener(這個(gè));}publicvoidsetMessage(int年,int月,int日){ShowMessage.setText(year+“年”+month+“月”+day+“日”);showmessage.setforeground(color.blue);ShowMessage.setFont(新字體("ììììì",字體。粗體,15));}公共無效操作已執(zhí)行(操作事件e){if(e.getSource()==cut){cut();}if(e.getSource()==copy){copy();}if(e.getSource()==paste){paste();}if(e.getSource()==btn){colorcolor=jcolorchooser.showdialog(this,"selectcolor",ta.getforeground());如果(newColor!=空){ta.setforeground(newcolor);}}}公共voiditemStateChanged(itemevente){stringn1=list2.getselecteditem();stringname=list1.getselecteditem();intN2=integer.parseint(n1);字體f=新字體(名稱,字體。平原,N2);ta.setfont(f);}publicvoidmousereleased(mouseevente){if(e.getButton()==MouseEvent。按鈕3){popup.show(ta,e.getX(),e.gety());}if(e.getButton()==MouseEvent。按鈕1){popup.setvisible(false);}}publicvoidmousepressed(mouseevente){}publicvoidmouseenter(mouseevente){}publicvoidmouseexited(mouseevente){}publicvoidmouseclicked(mouseevente){}公共空切割(){ta.cut();popup.setvisible(false);}公共無效副本(){ta.copy();popup.setvisible(false);}公共void粘貼(){ta.paste();popup.setvisible(false);}publicvoidsavefile(文件目錄,整數(shù)年,整數(shù)月,整數(shù)日){stringdailyrecord=time.gettext()+"#"+ta.gettext()+"#";字符串fileName=""+year+""+month+""+day+"。txt";stringkey=""+年+""+月+""+日;stringdialyfile[]=dir.list();布爾b=假;for(intI=0;I<dialyfile.length;i++){if(dialyFile[i].startsWith(鍵)){b=真;打破;}}如果(b){int=joptionpane.showconfirmatialog(this,""+year+"year"+month+"month"+day+"day"+"已經(jīng)有日志了,要添加嗎?",“確認(rèn)對(duì)話框”,JOptionPane。YES_NO_OPTION);if(n==JOptionPane。是_選項(xiàng)){嘗試{Filefile=新文件(dir,fileName);RandomAccessFileout=newRandomAccessFile(file,"rw");longend=out.length();byte[]bb=dailyrecord.getbytes();out.seek(end);out.write(bb);out.close();}catch(IOExceptione){}ta.settext("");}其他{ta.settext("");}}其他{嘗試{Filefile=新文件(dir,fileName);FileWriterfw=新的FileWriter(文件);bufferedwriterbw=newbufferedwriter(fw);bw.write(dailyrecord);bw.close();fw.close();}catch(IOExceptione){}Joption窗格。顯示消息對(duì)話框(這,“添加日志成功”,“消息對(duì)話框”,選項(xiàng)窗格。信息_消息);ta.settext("");time.settext("");}}publicvoiddeletefile(文件目錄,整數(shù)年,整數(shù)月,整數(shù)日){stringkey=""+年+""+月+""+日;stringdialyfile[]=dir.list();布爾b=假;for(intI=0;I<dialyfile.length;i++){if(dialyFile[i].startsWith(鍵)){b=真;打破;}}如果(b){int=joptionpane.showconfirmatialog(this,“要?jiǎng)h除“+year+"year"+month+"month"+day+"day”的日志嗎?”,“確認(rèn)對(duì)話框”,JOptionPane。YES_NO_OPTION);if(n==JOptionPane。是_選項(xiàng)){嘗試{字符串fileName=""+year+""+month+""+day+"。txt";Filefile=新文件(dir,fileName);file.delete();}catch(異常e){}ta.settext("");}}其他{Joption窗格。顯示消息對(duì)話框(this,""+year+"year"+month+"month"+day+"無每日日志!",“消息對(duì)話框”,rmation_message);}}公共voidreadfile(文件目錄,整數(shù)年,整數(shù)月,整數(shù)日){字符串fileName=""+year+""+month+""+day+"。txt";stringkey=""+年+""+月+""+日;stringdialyfile[]=dir.list();布爾b=假;for(intI=0;I<dialyfile.length;i++){if(dialyFile[i].startsWith(鍵)){b=真;打破;}}如果(b){ta.settext("");time.settext("");嘗試{Filefile=新文件(dir,fileName);FileReaderinone=newFileReader(file);bufferedreaderintwo=newbufferedreader(inone);字符串s;while((s=inTwo.readLine())!=空){ta.append(s+"\n");}inone.close();intwo.close();}catch(IOExceptione){}}其他{Joption窗格。顯示消息對(duì)話框(this,""+year+"year"+month+"month"+day+"無每日日志!",“消息對(duì)話框”,rmation_message);}}}4.5圖像模塊的設(shè)計(jì)效果圖4.5.2類的主要成員變量和方法(1)成員變量1)imageFile是一個(gè)文件對(duì)象,用于存儲(chǔ)圖像文件的引用。2)圖像是一個(gè)圖像對(duì)象。3)tool是Tookit對(duì)象,負(fù)責(zé)創(chuàng)建圖像對(duì)象。2)方法1)calendarImage()是一個(gè)構(gòu)造方法,負(fù)責(zé)創(chuàng)建calendarImage對(duì)象。2)setimageFile(file)方法負(fù)責(zé)設(shè)置imageFile對(duì)象,根據(jù)imagefile創(chuàng)建圖像。paintcomponent(紋理)方法負(fù)責(zé)繪制圖像主程序代碼導(dǎo)入javax.swing.*;導(dǎo)入Java.io.*;導(dǎo)入Java.awt.*;公共類CalendarImage擴(kuò)展JPanel{文件圖像文件;形象形象;工具包工具;//構(gòu)造方法公共日歷圖像(){tool=getToolkit();//獲取工具;}//設(shè)置圖像文件;公共voidsetImageFile(文件f){imagefile=f;嘗試{image=tool.getimage(imagefile.touri()。toURL());//獲取圖像文件;}catch(例外eeee){}repaint();//重繪;}//重載paintComponent方法,覆蓋原來的方法,供repaint()調(diào)用;公共voidpaintComponent(圖形g){super.paintcomponent(g);intw=getBounds()。寬度;inth=getBounds()。身高;g.drawImage(image,0,0,w,h,this);}}4.6時(shí)鐘模塊設(shè)計(jì)效果圖4.6.2類的主要成員變量和方法(1)成員變量1)Date是Date的對(duì)象,負(fù)責(zé)封裝本地時(shí)間。2)secondTime是javax.swing包中Timer類創(chuàng)建的計(jì)時(shí)。3)時(shí)、分、秒是int數(shù)據(jù),分別飛“時(shí)”、“分”、“秒”。4)secondLine、minuteLine和hourLine是Lint2D對(duì)象,分別負(fù)責(zé)繪制時(shí)針、分針和秒針。5)pointSX,pointSY是一個(gè)雙數(shù)組,它的單元格值用來表示秒針端點(diǎn)的坐標(biāo)。6)pointMX,pointMY是一個(gè)雙數(shù)組,它的單元格值用來表示分針終點(diǎn)的坐標(biāo)。7)pointHX,pointHY是一個(gè)雙數(shù)組,它的單元格值被用作時(shí)針端點(diǎn)坐標(biāo)[5]2)方法1)Clock()是創(chuàng)建時(shí)鐘對(duì)象的構(gòu)造函數(shù)。2)initPoint()負(fù)責(zé)創(chuàng)建撥號(hào)盤需要的坐標(biāo)點(diǎn)。3)paintComponent(圖形)負(fù)責(zé)完成繪制工作。4)actionPerformed(ActionEvent)是接口ActionListener中的一個(gè)方法。使用Timer類的構(gòu)造方法:timer(inta,Objectb)創(chuàng)建一個(gè)定時(shí)器,其中參數(shù)A的單位是毫秒,確定定時(shí)器每A毫秒“響”一次,參數(shù)B是定時(shí)器的監(jiān)視器。計(jì)時(shí)器的響鈴時(shí)間是ActionEvent類型。當(dāng)?shù)竭_(dá)響鈴時(shí)間時(shí),監(jiān)視器將監(jiān)視此事件,監(jiān)視器將回調(diào)ActionListener接口中的actionPerformed(ActionEvent)方法。這種方法的操作是:每一秒,秒針前進(jìn)一個(gè)刻度,即秒線改變端點(diǎn)坐標(biāo);每1分鐘,分針前進(jìn)一個(gè)刻度(表盤一圈360,每一瞬間6),即muniteLine改變端點(diǎn)坐標(biāo);每隔12分鐘,時(shí)針前進(jìn)一個(gè)刻度,即小時(shí)線改變端點(diǎn)坐標(biāo)[6]。主程序代碼導(dǎo)入Java.awt.*;導(dǎo)入Java.awt.event.*;導(dǎo)入javax.swing.*;導(dǎo)入Java.awt.geom.*;導(dǎo)入Java.util.*;導(dǎo)入J.*;導(dǎo)入Java.applet.*;導(dǎo)入Java.io.*;公共類Clock擴(kuò)展JPanel實(shí)現(xiàn)ActionListener{日期日期;javax.swing.timersecondtime;int小時(shí)、分鐘、秒;Line2D秒線、分線、小時(shí)線;inta,b,c,width,heightDouble[]pointsx=newdouble[60],//用于表示秒針端點(diǎn)坐標(biāo)的數(shù)組pointSY=newdouble[60],MX=newdouble[60],//用于表示分針終點(diǎn)坐標(biāo)的數(shù)組。pointMY=newdouble[60],PointHX=newdouble[60],//用于表示時(shí)針終點(diǎn)坐標(biāo)的數(shù)組。pointhy=newdouble[60];時(shí)鐘(){setbackground(color.cyan);initpoint();secondtime=newjavax.swing.timer(1000,這個(gè));secondLine=新的Line2D。Double(0,0,0,0);分鐘線=新線2D。Double(0,0,0,0);hourLine=新的Line2D。Double(0,0,0,0);secondtime.start();//秒針開始計(jì)數(shù)。}私有voidinitPoint(){width=getBounds()。寬度;height=getBounds()。身高;pointSX[0]=0;//12點(diǎn)秒針位置pointSY[0]=-高度/2*5/6;pointMX[0]=0;//12點(diǎn)位置的分針pointMY[0]=-(高度/2*4/5);pointhx[0]=0;//12點(diǎn)的小時(shí)位置pointHY[0]=-(高度/2*2/3);雙角度=6*數(shù)學(xué)。PI/180;//刻度是6度for(intI=0;i<59++){//計(jì)算數(shù)組中的坐標(biāo)pointSX[I+1]=pointSX[I]*math.cos(角度)-Math.sin(角度)*pointSY[I];pointSY[I+1]=pointSY[I]*math.cos(角度)+pointSX[i]*Math.sin(角度);pointMX[I+1]=pointMX[I]*math.cos(角度)-Math.sin(角度)*pointmy[I];pointmy[I+1]=pointmy[I]*math.cos(角度)+pointMX[i]*Math.sin(角度);pointhx[I+1]=pointhx[I]*math.cos(角度)-Math.sin(角度)*pointhy[I];pointhy[I+1]=pointhy[I]*math.cos(角度)+pointHX[i]*Math.sin(角度);}for(intI=0;i<60i++){pointSX[I]=pointSX[I]+width/2;//坐標(biāo)平移pointSY[I]=pointSY[I]+height/2;pointMX[I]=pointMX[I]+width/2;//坐標(biāo)平移pointMY[I]=pointMY[I]+height/2;pointhx[I]=pointhx[I]+width/2;//坐標(biāo)平移pointHY[I]=pointHY[I]+height/2;}}publicvoidpaintcomponent(Graphicsg){super.paintcomponent(g);initpoint();for(intI=0;i<60++){//在表盤上畫小刻度和大刻度。intm=(int)pointSX[I];intn=(int)pointSY[I];if(i%5==0){if(i==0||i==15||i==30||i==45){intk=10g.setcolor(color.orange);g.菲羅瓦爾(m-k/2,n-k/2,k,k);}否則{intk=7;g.setcolor(color.orange);g.菲羅瓦爾(m-k/2,n-k/2,k,k);}}否則{intk=2;g.setcolor(color.black);g.菲羅瓦爾(m-k/2,n-k/2,k,k);}}g.fillOval(寬度/2-5,高度/2-5,10,10);//時(shí)鐘中心的實(shí)心圓graphics2dg_2d=(graphics2d)g;g_2d.setcolor(color.red);g_2d.draw(secondline);基本行程bs=新BasicSt
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育法規(guī)真題練習(xí)試卷B卷附答案
- 2024年光學(xué)纖維面板系列項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 第七章 面談?wù)n件
- “雙減”背景下小學(xué)數(shù)學(xué)作業(yè)設(shè)計(jì)的策略研究實(shí)施方案范文
- 2024年適用職工勞動(dòng)協(xié)議格式文件
- 2024年專業(yè)期貨交易中介服務(wù)協(xié)議
- 揚(yáng)州大學(xué)封志明老師預(yù)測(cè)《導(dǎo)游基礎(chǔ)知識(shí)》模擬試題參考答案
- 設(shè)備設(shè)施運(yùn)行維護(hù)管理方案5篇
- 2024年化工業(yè)品買賣協(xié)議
- 2024閣樓房屋銷售協(xié)議模板
- 2024-2030年中國(guó)?;沸袠I(yè)發(fā)展趨勢(shì)與投資前景展望報(bào)告
- 中國(guó)企業(yè)投資緬甸光伏發(fā)電市場(chǎng)機(jī)會(huì)分析及戰(zhàn)略規(guī)劃報(bào)告2024-2030年
- 2024年廣東省深圳市中考?xì)v史試題
- 化工(危險(xiǎn)化學(xué)品)企業(yè)主要負(fù)責(zé)人、安管員安全生產(chǎn)管理專項(xiàng)培訓(xùn)考核試卷(附參考答案)
- 2024年人教版小學(xué)三年級(jí)語文(上冊(cè))期中考卷及答案
- 《信息化項(xiàng)目驗(yàn)收工作規(guī)范》
- 2024年全國(guó)軟件水平考試之高級(jí)網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)師考試重點(diǎn)黑金模擬題(詳細(xì)參考解析)
- 經(jīng)濟(jì)學(xué)題庫(200道)
- 2024年巴西私人安保服務(wù)市場(chǎng)機(jī)會(huì)及渠道調(diào)研報(bào)告
- 課《聞王昌齡左遷龍標(biāo)遙有此寄》跨學(xué)科公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 2024年江蘇省連云港市中考英語真題(含解析)
評(píng)論
0/150
提交評(píng)論