歡迎來到裝配圖網! | 幫助中心 裝配圖網zhuangpeitu.com!
裝配圖網
ImageVerifierCode 換一換
首頁 裝配圖網 > 資源分類 > DOC文檔下載  

《Java程序設計》課程設計日歷記事本

  • 資源ID:28248010       資源大?。?span id="dyjr0sq" class="font-tahoma">371KB        全文頁數(shù):29頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

《Java程序設計》課程設計日歷記事本

2 本科生課程設計 課程名稱 Java 程序設計課程設計 課程編號 j1620011 題目 日歷記事本 學號 200811622214 學生姓名 所在專業(yè) 信息管理與信息系統(tǒng) 所在班級 信管 1082 指導教師 成績 教師簽字 評語: 課程設計時間:2010 年 12 月 20 日-2010 年 12 月 24 日 設計總說明 - 1 - 目 錄 摘 要 2 1引 言 2 2. 設計的目的與任 務 2 3設計方 案 3 3.1 總體設 計 3 3.2 設計要 求 3 3.3 系統(tǒng)的主要功 能 設計總說明 - 2 - 3 3.4 各個類的組合結構 圖 4 3.5 各個類說 明 4 3.5.1 CalendarWindow 類4 3.5.2 CalendarMessage 類11 3.5.3 CalendarPad 類 13 3.5.4 NotePad 類 14 3.5.5 CalendarImage 類19 3.5.6 Clock 類 20 設計總說明 - 3 - 4各種功能截 圖 24 5. 課程設計總 結 26 Java 程序設計課程設計 日歷記事本 摘 要 本課程設計通過代碼實現(xiàn)將理論知識和具體實踐相結合,鞏固提高了對 JAVA 的相 關方法與概念的理解,使學生的發(fā)散思維及動手能力進一步加強,加強對計算機及軟 件工程的進一步了解。 在這個課程設計中,我們做成了一個有日歷標記的記事本軟件,日歷記事本面板 由日歷、記事本、圖片、時鐘四部分組成。日歷部分可以選擇不同的年份、月份、日 期和星期;記事本模塊可以實現(xiàn)查看,保存,刪除日志等操作;并且每一步操作都有 相應提示;圖片模塊可以顯示預設的圖片;時鐘模塊可以用時鐘來顯示當前時間。本 軟件是一個實用性較強,簡潔,美觀,方便的功能軟件。 1. 引言 Java 是一種純面向對象的、網絡編程首選的語言。Java 技術作為軟件開 的一種 革命性技術,已被列為當今世界信息技術的主流之一。為了適應時代潮流,我們應該 加強對 Java 的學習,更好的掌握這門課程。為此,我們成了一個課程小組,經過小組 成的商討之后,我們決定以“日歷記事本”為設 題材,借此鞏固加深我們對 Java 的了解。 設計總說明 - 4 - 本次課程設計的實例雖然比較簡單,程序設計也不是很復雜,但在此程序的設計 過程也是一個學習過程,更是對復雜程序的一個學習過程,還能培養(yǎng)我們的數(shù)抽象能 力。因此,我們覺得這次課程設計是非常有意義的,能為我們今后學習面向過程的程 序設計作一些鋪墊。 2.設計目的與任務 本課程設計所要求達到的目的和任務:通過 Java 程序設計的一些重要理論基礎來實現(xiàn) “日 歷記事本”的“日歷”和“記事本”的雙重功能。并通過此次課程設計的訓練,使學生鞏固和 加深對 Java 這門課程的理解,通過利用所學到的計算科學的理論知識,提高解決實際問題的能 力,增強運算、編程和使用技術資料的技能,通過實際問題的分析設計、編程和調試,掌握應 用軟件的分析方法和工程設計方法,能正確闡述設計和實驗結果。通過這次課程設計,培養(yǎng)實 事求是、認真、嚴謹?shù)目茖W態(tài)度和刻苦鉆研不斷創(chuàng)新的精神,逐步建立正確的全局觀念。 3.設計方案 3.1 總體設計 (1)問題定義:創(chuàng)建日歷記事本,實現(xiàn)對某日期的事情進行記錄這主要功能,并能 顯示設置的圖片和時鐘,增加美觀。 (2)問題分析:通過對“日歷記事本”這一題材的分析,我需要四個類來實現(xiàn)其 “日歷”和“記事本”這兩大功能。通過主類 CalendWindow 創(chuàng)建動日歷記事本軟件的 主窗口,該類含有 main 方法,程序從該類開始執(zhí)行。再用余下 CalendarPad、 CalendarMessage 、NotePad 類來顯示并改變日期和實現(xiàn)記事本的功能。 而 CalendarImage 和 Clock 這兩個類用來顯示圖片和時鐘。 (3)研究意義:通過本次課程設計,我們掌握了 Java 語言的基本運用,提高了理論結 合實際的能力。 3.2 設計要求 (1)界面的左側是日歷和一幅圖。該日歷可以按年前后翻動,用鼠標鼠標單擊“上 年”按鈕時,當前日歷的年份將減一;當鼠標左鍵單擊“下年”按鈕,當前日歷的年份將 加一。該日歷還可以在某年內按月前月后翻動,當鼠標左鍵單擊“上月”按鈕時, 當前日 歷的月份將減一;當鼠標左鍵單擊“下月” 當前日歷表的月份將加一。圖片是為了增加 美觀而加進去的。 (2)系統(tǒng)界面的右側是記事本和一個鬧鐘。用鼠標單擊日歷上的日期,就可以通過 該記事本編輯有關日志,并將日志保存到一個文件,該文件的名字由該日期組成的字 設計總說明 - 5 - 符序列命名。用戶可以查看,刪除某個日期的日志,也可以繼續(xù)向某個日志添加新內 容。 時鐘能夠實時顯示當前的時間。 (3)當某個日期有日志時,在日歷表該日期的外觀上就會出現(xiàn)“yes”標記,表明 這個日期有日志,當用戶刪除某個日期的日志后,該日期的外觀上“yes”標志就會消 失。 3.3 系統(tǒng)的主要功能 (1)可以對個人日志進行添加、查閱、刪除; (2)可以方便地在任何日期記載個人日志以及查看某個日期記載的日志 ; (3)可以顯示當前日期與時間。 3.4 各個類的組合結構圖 3.5 各個類說明 (1)主函數(shù) CalendarWindow 類 該類是整個程序的主框架,是 javax.swing 包中 Jframe 的一個子類。并實現(xiàn)了 ActionListener、MouseListener 和 FocusListener 接口。以下是該類的有關數(shù)據說明! 1)成員變量 year,month 和 day 是 int 型變量。它們的值分別確定年份、月份和日期。 CalendarWindow CalendarMessage CalendarImage CalendarPad JTextField FileNotePad JTextArea Clock 設計總說明 - 6 - calendarMessage 是 CalnedarMessage 對象,該對象用來處理與日期有關的數(shù)據。 calendarPad 是 CalendarPad 對象,該對象可以顯示與日期有關的數(shù)據。 notPad 是 NotPad 的對象。具有編輯、讀取、保存和刪除日志的功能。 showYear 和 showMonth 是 JtextField 類創(chuàng)建的文本框,用來顯示年月。 showDay 數(shù)組的每個單元是 JtextField 類創(chuàng)建的用來顯示日期的文本框。 calendarImage 是 CalendarImage 創(chuàng)建的對象,用來顯示圖像。 clock 是 Clock 創(chuàng)建的對象,用來顯示時鐘。 nextYear,PreviousYear,nextMonth 和 PreviousMonth 是 JButton 創(chuàng)建的按鈕 對象,名字依次為“下年、上年、下月、上月” 。這些按鈕都將當前窗口注冊為自 己的 ActionEvent 事件監(jiān)視器。 savaDailyRecord,deleteDailyRecord 和 readDailyRecord 是 JButton 創(chuàng)建的按 鈕對象,名字依次為“保存日志、刪除日志、讀取日志” 。這些按鈕都將當前窗口 注冊為自己的 ActionEvent 事件監(jiān)視器。 2)方法 CalendarWindow()是構造方法,負責完成窗口初始化。 actionPerformed(ActionEvent)方法是 CalendarWindow 類實現(xiàn)的 ActionListener 接口中的方法。CalendarWindow 創(chuàng)建的窗口是 nextYear,previousYear,nextMonth,previousMonth,saveDailyRecord,d eleteDailyRecord 和 readDailyRecord 按鈕的 ActionEvent 事件監(jiān)視器,當用 戶單擊其中按鈕時,窗口將執(zhí)行 actionPerformed(ActionEvent)方法進行相 應的操作。 mousePressed(MouseEvent)方法是 CalendarWindow 類實現(xiàn)的 MouseListener 接口中的方法。CalendarWindow 創(chuàng)建的窗口時 showDay 數(shù)組中的 JtextField 文本框的 MouseEvent 事件監(jiān)視器,當用戶在某個顯示日期的文本框上按下鼠 標左鍵時,窗口將執(zhí)行 mousePress(MouseEvent)方法進行相應操作。 focusGained(FocusEvent)和 focusLost(FocusEvent)方法是 CalendarWindow 類實現(xiàn)的 FocusListener 接口中的方法。CalendarWindow 創(chuàng) 建窗口是 showDay 數(shù)組中的 JtextField 文本框的 FocusEvent 事件監(jiān)視器,當 用戶的操作導致某個顯示日期的文本框的焦點發(fā)生變化時,窗口將執(zhí)行 focusGained(FocusEvent)或 focusLost(FocusEvent)方法進行相應的操作。 doMark()方法負責對有日志的日期作出標志。 main 方法是程序運行的入口方法。 設計總說明 - 7 - 詳細代碼: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.io.*; public class CalendarWindow extends JFrame implements ActionListener, MouseListener,FocusListener int year,month,day; CalendarMessage calendarMessage; CalendarPad calendarPad; NotePad notePad; JTextField showYear,showMonth; JTextField showDay; CalendarImage calendarImage; Clock clock; JButton nextYear,previousYear,nextMonth,previousMonth; JButton saveDailyRecord,deleteDailyRecord,readDailyRecord; File dir; Color backColor=Color.white; public CalendarWindow() dir= new File(./dailyRecord); dir.mkdir(); showDay = new JTextField42; for(int i=0;i12) month=1; showMonth.setText(+month); calendarPad.setCalendarMessage(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day); doMark(); else if (e.getSource()=previousMonth) 設計總說明 - 10 - month-; if(month1) month=12; showMonth.setText(+month); calendarPad.setCalendarMessage(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day); doMark(); else if (e.getSource()=showYear) String s = showYear.getText().trim(); char a = s.toCharArray(); boolean boo = false; for(int i = 0;i a.length;i+) if(!(Character.isDigit(ai) boo = true; if(boo=true) JOptionPane.showMessageDialog(this,你輸入了非法年份,警告!, JOptionPane.WARNING_MESSAGE); else if(boo=false) year = Integer.parseInt(s); showYear.setText(+year); calendarMessage.setYear(year); calendarPad.setCalendarMessage(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day); doMark(); else if (e.getSource()= saveDailyRecord) notePad.save(dir,year,month,day); doMark(); else if(e.getSource()=deleteDailyRecord) notePad.delete(dir,year,month,day); doMark(); else if (e.getSource()=readDailyRecord) notePad.read(dir,year,month,day); 設計總說明 - 11 - doMark(); public void mousePressed(MouseEvent e) JTextField text = (JTextField)e.getSource(); String str = text.getText().trim(); try day = Integer.parseInt(str); catch (NumberFormatException exp) calendarMessage.setDay(day); notePad.setShowMessage(year,month,day); public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) public void focusGained(FocusEvent e) Component com = (Component)e.getSource(); com.setBackground(Color.pink); public void focusLost(FocusEvent e) Component com = (Component)e.getSource(); com.setBackground(backColor); public void doMark() for(int i=0;ishowDay.length;i+) showDayi.removeAll(); String str = showDayi.getText().trim(); try int n = Integer.parseInt(str); if(isHaveDailyRecord(n)=true) 設計總說明 - 12 - JLabel mess = new JLabel(yes); mess.setFont(new Font(TimesRoman,Font.PLAIN,11); mess.setForeground(Color.blue); showDayi.add(mess); catch (Exception exp) calendarPad.repaint(); calendarPad.validate(); public boolean isHaveDailyRecord(int n) String key = +year+month+n; String dayFile = dir.list(); boolean boo = false; for(int k = 0;kdayFile.length;k+) if(dayFilek.equals(key+.txt) boo = true; break; return boo; public static void main(String args) new CalendarWindow(); (2)CalendarMessage 類 CalendarMessage 類創(chuàng)建的對象 calendarMessage 是 CalendarWindow 窗口的重要成員 對象之一,負責處理和日期有關的數(shù)據。該類的有關數(shù)據說明如下: 1)成員變量 year,month,day 是 int 型數(shù)據,它們的值分別確定年份、月份和日期。 2)方法 設計總說明 - 13 - setYear(int)和 getYear()方法分別用來設置 year 和獲取 year 的值。 setMonth(int)和 getMonth()方法分別用來設置 month 和獲取 month 的值。 setDay(int)和 getDay()方法分別用來設置和獲取 day 的值。 getMonthCalendar()方法是用來處理日期數(shù)據,使其按著習慣來顯示。即日 歷牌中每行的第一列為“星期天” 。getMonthCalendar()方法根據 year,month 和 day 的值返回一個存放著“日歷”數(shù)據的 String 類型的數(shù)組, 例如,如果某月有 30 天,而且該月的第一天是星期三,那么返回的 String 類 型的數(shù)組是:“” , “”, “”, “1”, “2”, “30”。 詳細代碼: import java.util.Calendar; public class CalendarMessage int year=-1,month=-1,day=-1; public void setYear(int year) this.year=year; public int getYear() return year; public void setMonth(int month) if(month=1) this.month=month; else this.month=1; public int getMonth() return month; public void setDay(int day) this.day=day; public int getday() return day; public String getMonthCalendar() String day=new String42; Calendar rili=Calendar.getInstance(); 設計總說明 - 14 - rili.set(year,month-1,1);/將日歷翻到 year 年 month 月 1 日 int 星期幾=rili.get(Calendar.DAY_OF_WEEK)-1; int dayAmount=0; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) dayAmount=31; if(month=4|month=6|month=9|month=11) dayAmount=30; if(month=2) if(year%4=0) else dayAmount=28; for(int i=0;i星期幾;i+) dayi= ; for(int i=星期幾,n=1;i星期幾+dayAmount;i+) dayi=String.valueOf(n); n+; for (int i=星期幾+dayAmount;i42;i+ ) dayi= ; return day; (3)CalendarPad 類 CalendarPad 類是 javax.swing 包中 Jpanel 容器的子類,所創(chuàng)建的對象:calendarPad 是 CalendarWindow 類中最重要的成員之一,負責顯示經 CalendarMessage 類處理后的 日期數(shù)據,被添加到 CalendarWindow 窗口的左上側。以下是該類的有關說明: 1)成員變量 year,month 和 day 是 int 型數(shù)據,它們的值分別確定年份、月份和日期 calendarMessage 是 CalendarMessage 對象,該對象可以處理和日期有關的數(shù) 據。 showDay 數(shù)組的每個單元是 JtextField 類創(chuàng)建的用來顯示日期的文本框。 “星期”是 String 數(shù)組,單元的值依次為“SUN 日” 、 “MON 一” 、 “TUE 二” 、 “WED 三” 、 “THU 四” 、 “FRI 五” 、 “SAT 六” 。 2)方法 CalendarPad()是構造方法,用來創(chuàng)建 calendarPad 對象。 setShowDayTextField(JtextField)方法負責設置 showDay 數(shù)組。 設計總說明 - 15 - setCalendarMessage(CalendarMessage)方法負責設置 calendarMessage 對象。 showMonthCalendar()方法負責顯示“日歷” 。 詳細代碼: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class CalendarPad extends JPanel int year,month,day; CalendarMessage calendarMessage; JTextField showDay; JLabel title ; String 星期=SUN 日,MON 一,TUE 二,WED 三,THU 四,FRI 五,SAT 六; JPanel north,center; public CalendarPad() setLayout(new BorderLayout(); north=new JPanel(); north.setLayout(new GridLayout(1,7); center=new JPanel(); center.setLayout(new GridLayout(6,7); add(center,BorderLayout.CENTER); add(north,BorderLayout.NORTH); title=new JLabel7; for(int j=0;j7;j+) titlej=new JLabel(); titlej.setFont(new Font(TimesRoman,Font.BOLD,12); titlej.setText(星期j); titlej.setHorizontalAlignment(JLabel.CENTER); titlej.setBorder(BorderFactory.createRaisedBevelBorder(); north.add(titlej); title0.setForeground(Color.red); title6.setForeground(Color.blue); public void setShowDayTextField(JTextField text) showDay=text; for(int i=0;ishowDay.length;i+) showDayi.setFont(new Font(TimesRoman,Font.BOLD,15); showDayi.setHorizontalAlignment(JTextField.CENTER); showDayi.setEditable(false); center.add(showDayi); 設計總說明 - 16 - public void setCalendarMessage(CalendarMessage calendarMessage) this.calendarMessage=calendarMessage; public void showMonthCalendar() String a=calendarMessage.getMonthCalendar(); for(int i=0;i42;i+) showDayi.setText(ai); validate(); (4)NotePad 類 NotePad 類 javax.swing 包中的 Jpanel 容器的子類,實現(xiàn)了 ActionListener 接口,所創(chuàng)建 的對象:notePad 是 MineGame CalendarWindow 類中的重要成員之一,作為一個容器添 加到 CalendarWindow 窗口的右上側以,下是該類的有關說明: 1)成員變量 text 是 JtextArea 創(chuàng)建的文本區(qū),可在 text 中編譯多行文本。 showMessage 是 JtextField 創(chuàng)建的文本條,用來顯示和日期相關的數(shù)據。 menu 是 JpopupMenu 創(chuàng)建的彈出式菜單。 itemCopy、itemCut、itemPaste、itemClear 是 JmenuItem 創(chuàng)建的菜單項,名字 依次是“復制 ”, “剪切”, “黏貼”, “清空”。 2)方法 NotePad()構造方法,用來創(chuàng)建 notePad 對象。 setShowMessage(int,int,int)方法根據參數(shù)指定的日期數(shù)據顯示有關日期信 息。 save(File,int,int, int)方法根據參數(shù)指定日期保存日志 delete(File ,int,int ,int) 用于刪除日志 read(File ,int,int, int)用于讀取日志。 詳細代碼: import java.awt.*; import javax.swing.*; import java.io.*; import java.awt.event.*; public class NotePad extends JPanel implements ActionListener JTextArea text; JTextField showMessage; JPopupMenu menu; JMenuItem itemCopy,itemCut,itemPaste,itemClear; public NotePad() 設計總說明 - 17 - showMessage=new JTextField(); showMessage.setHorizontalAlignment(JTextField.CENTER); showMessage.setFont(new Font(TimesRoman,Font.BOLD,16); showMessage.setForeground(Color.blue); showMessage.setBackground(Color.pink); showMessage.setBorder(BorderFactory.createRaisedBevelBorder(); showMessage.setEditable(false); menu =new JPopupMenu(); itemCopy=new JMenuItem(復制); itemCut=new JMenuItem(剪切); itemPaste=new JMenuItem(粘貼); itemClear=new JMenuItem(清空); itemCopy.addActionListener(this); itemCut.addActionListener(this); itemPaste.addActionListener(this); itemClear.addActionListener(this); menu.add(itemCopy); menu.add(itemCut); menu.add(itemPaste); menu.add(itemClear); text=new JTextArea(10,10); text.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) if(e.getModifiers()=InputEvent.BUTTON3_MASK) menu.show(text,e.getX(),e.getY(); ); setLayout(new BorderLayout(); add(showMessage,BorderLayout.NORTH); add(new JScrollPane(text),BorderLayout.CENTER); public void setShowMessage(int year,int month, int day) showMessage.setText(+year+年+month+月+day+日); public void save(File dir,int year,int month,int day) String dailyContent=text.getText(); String fileName=+year+month+day+.txt; String key=+year+month+day; String dayFile=dir.list(); boolean boo=false; for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) boo=true; 設計總說明 - 18 - break; if(boo) String m=+year+年+month+月+day+ 已有日志,將新內容添加到日志嗎? ; int ok=JOptionPane.showConfirmDialog(this, m, 詢問, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) try File f=new File(dir,fileName); RandomAccessFile out=new RandomAccessFile(f,rw); long fileEnd=out.length(); byte bb=dailyContent.getBytes(); out.seek(fileEnd); out.write(bb); out.close(); catch(IOException exp) else String m=+year+年+month+月+day+ 還沒有日志,保存日志嗎 ?; int ok=JOptionPane.showConfirmDialog(this, m, 詢問,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) try File f=new File(dir,fileName); RandomAccessFile out= new RandomAccessFile(f,rw); long fileEnd=out.length(); byte bb=dailyContent.getBytes(); out.write(bb); out.close(); catch(IOException exp) public void delete(File dir,int year,int month,int day) String key =+year+month+day; String dayFile=dir.list(); boolean boo=false; for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) 設計總說明 - 19 - boo=true; break; if(boo) String m=刪除+year+年+month+月+day+ 日的日志嗎?; int ok=JOptionPane.showConfirmDialog(this,m,詢問 ,JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) String fileName=+year+month+day+.txt; File deleteFile=new File(dir,fileName); deleteFile.delete(); else String m=+year+年+month+月+day+無日志記錄; JOptionPane.showMessageDialog(this,m,提示,JOptionPane.WARNING_MESSAGE); public void read(File dir,int year,int month,int day) String fileName=+year+month+day+.txt; String key=+year+month+day; String dayFile=dir.list(); boolean boo=false; for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) boo=true; break; if(boo) String m=+year+年+month+月+day+ 有日志,顯示日志內容嗎 ?; int ok=JOptionPane.showConfirmDialog(this,m,詢問 ,JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) text.setText(null); try File f=new File(dir,fileName); FileReader inOne=new FileReader(f); BufferedReader inTwo=new BufferedReader(inOne); String s=null; while (s=inTwo.readLine()!=null) text.append(s+n); 設計總說明 - 20 - inOne.close(); inTwo.close(); catch(IOException exp) else String m=+year+年+month+月+day+ 無日志記錄 ; JOptionPane.showMessageDialog(this,m,提示,JOptionPane.WARNING_MESSAGE); public void actionPerformed(ActionEvent e) if(e.getSource()=itemCopy) text.copy(); else if(e.getSource()=itemCut) text.cut(); else if(e.getSource()=itemPaste) text.paste(); else if(e.getSource()=itemClear) text.setText(null); (5)CalendarImage 類 CalendarImage 創(chuàng)建的對象負責繪制圖像 CalendarImage 類是 javax.swing 包中 Jpanel 容器的一個子類,創(chuàng)建的對象 calendarMessage 是 CalendarWindow 類的成員之一,負責繪制圖像,作為一個容器添加 到 CalendarWindow 窗口的左下側,以下是該類的有關說明: 1) 成員變量 imageFile 是 File 對象,用來存放圖像文件的引用 image 是 Image 對象 tool 是 Tookit 對象,負責創(chuàng)建 image 對象 2) 方法 CalendarImage()是構造方法,負責創(chuàng)建 calendarImage 對象 setImageFile(File)方法負責設置 imageFile 對象,并根據 imageFile 創(chuàng)建 image paintComponent(Griphics)方法負責繪制 image 詳細代碼: import javax.swing.*; 設計總說明 - 21 - import java.io.*; import java.awt.*; public class CalendarImage extends JPanel File imageFile; Image image; Toolkit tool; CalendarImage() tool = getToolkit(); public void setImageFile(File f) imageFile = f; try image = tool.getImage(imageFile.toURI().toURL(); catch (Exception e) repaint(); public void paintComponent(Graphics g) super.paintComponent(g); int w = getBounds().width; int h = getBounds().height; g.drawImage(image,0,0,w,h,this); (6)Clock 類 Clock 類是 javax.swing 包中 Jpanel 容器的子類,并實現(xiàn)了 ActionListener 接口,所創(chuàng)建 的對像:clock 是 CalendarWindow 類中的成員之一,負責顯示時間,被添加到 CalendarWindow 窗口的右下側,以下是該類的有關說明: 1) 成員變量 date 是 Date 對像,負責封裝本地時間 secondTime 是 javax.swing 包中 Timer 類創(chuàng)建的計時 hour,minute 和 second 是 int 型數(shù)據,分別飛“小時” , “分鐘”和“秒” 設計總說明 - 22 - secondLine,minuteLine 和 hourLine 是 Lint2D 對象,分別負責繪制“時針” , “分針” , “秒針” pointSX, pointSY 是 double 型數(shù)組,其單元值用來表示秒針端點的坐標 pointMX,pointMY 是 double 型數(shù)組,其單元值用來表示分針端點坐標 pointHX,pointHY 是 double 型數(shù)組,其單元值用來便是時針端點坐標 2) 方法 Clock()是構造方法,用來創(chuàng)建 clock 對象 initPoint()負責創(chuàng)建表盤所需要的坐標點 paintComponent(Graphics)負責完成繪制工作 actionPerformed(ActionEvent)是接口 ActionListener 中的方法。使用 Timer 類 的構造方法:timer(int a ,Object b )創(chuàng)建一個計時器,其中的參數(shù) a 的單 位是毫秒,確定計時器每隔 a 毫秒“振鈴”一次,參數(shù) b 是計時器的監(jiān)視器。 計時器發(fā)生的振鈴時件是 ActionEvent 類型時件,當振鈴時間發(fā)生時,監(jiān)視器 就會監(jiān)視到這個事件,監(jiān)視器就會回調用 ActionListener 接口中的 actionPerformed(ActionEvent)方法,該方法所做的操作是:每隔 1 秒鐘,讓秒 針前進一個刻度,既 secondLine 改變端點坐標;每隔 1 分鐘,讓分針前進一個 刻度(表盤一周為 360,每個時刻為 6) ,既 muniteLine 改變端點坐標;每 隔 12 分鐘,讓時針前進一個刻度,既 hourLine 改變端點坐標。 詳細代碼: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.geom.*; import java.util.*; public class Clock extends JPanel implements ActionListener Date date; javax.swing.Timer secondTime; int hour,munite,second; Line2D secondLine,muniteLine,hourLine; int a,b,c,width,height; double pointSX = new double60, pointSY = new double60, pointMX = new double60, pointMY = new double60, pointHX = new double60, pointHY = new double60; Clock() 設計總說明 - 23 - setBackground(Color.cyan); initPoint(); secondTime = new javax.swing.Timer(1000,this); secondLine = new Line2D.Double(0,0,0,0); muniteLine = new Line2D.Double(0,0,0,0); hourLine = new Line2D.Double(0,0,0,0); secondTime.start(); private void initPoint() width = getBounds().width; height = getBounds().height; pointSX0 = 0; pointSY0 = -(height/2*5/6); pointMX0 = 0; pointMY0 = -(height/2*4/5); pointHX0 = 0; pointHY0 = -(height/2*2/3); double angle = 6*Math.PI/180; for(int i = 0;i59;i+) pointSXi+1 = pointSXi*Math.cos(angle) - Math.sin(angle)*pointSYi; pointSYi+1 = pointSYi*Math.cos(angle) + pointSXi*Math.sin(angle); pointMXi+1 = pointMXi*Math.cos(angle) - Math.sin(angle)*pointMYi; pointMYi+1 = pointMYi*Math.cos(angle) + pointMXi*Math.sin(angle); pointHXi+1 = pointHXi*Math.cos(angle) - Math.sin(angle)*pointHYi; pointHYi+1 = pointHYi*Math.cos(angle) - pointHXi*Math.sin(angle); for(int i = 0;i60;i+) pointSXi = pointSXi+width/2; pointSYi = pointSYi+height/2; pointMXi = pointMXi+width/2; pointMYi = pointMYi+height/2; pointHXi = pointHXi+width/2; pointHYi = pointHYi+height/2; public void paintComponent(Graphics g) super.paintComponent(g); initPoint(); 設計總說明 - 24 - for(int i = 0;i60;i+) int m = (int)pointSXi; int n = (int)pointSYi; if(i%5 =0) if(i=0|i=15|i=30|i=45) int k = 10; g.setColor(Color.orange); g.fillOval(m-k/2,n-k/2,k,k); else int k = 7; g.setColor(Color.orange); g.fillOval(m-k/2,n-k/2,k,k); else int k =2; g.setColor(Color.black); g.fillOval(m-k/2,n-k/2,k,k); g.fillOval(width/2-5,height/2-5,10,10); Graphics2D g_2d = (Graphics2D)g; g_2d.setColor(Color.red); g_2d.draw(secondLine); BasicStroke bs = new BasicStroke(2f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER); g_2d.setStroke(bs); g_2d.setColor(Color.blue); g_2d.draw(muniteLine); bs = new BasicStroke(4f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER); g_2d.setStroke(bs); g_2d.setColor(Color.orange); g_2d.draw(hourLine); bs = new BasicStroke(8f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER); g_2d.setStroke(bs); public void actionPerformed(ActionEvent e) 設計總說明 - 25 - if(e.getSource()= secondTime) date = new Date(); String s = date.toString(); hour = Integer.parseInt(s.substring(11,13); munite = Integer.parseInt(s.substring(14,16); second = Integer.parseInt(s.substring(17,19); int h = hour%12; a = second; b = munite; c = h*5+munite/12; secondLine.setLine(width/2,height/2,(int)pointSXa,(int)pointSYa); muniteLine.setLine(width/2,height/2,(int)pointMXb,(int)pointMYb); hourLine.setLine(width/2,height/2,(int)pointHXc,(int)pointHYc); repaint(); 4各種功能截圖 主界面 添加日志 設計總說明 - 26 - 附 錄 2

注意事項

本文(《Java程序設計》課程設計日歷記事本)為本站會員(仙***)主動上傳,裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

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

備案號:ICP2024067431-1 川公網安備51140202000466號


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