版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p><b> 目錄</b></p><p><b> 正文</b></p><p><b> 一.設(shè)計(jì)目的</b></p><p><b> 二.總體設(shè)計(jì)</b>
2、;</p><p><b> 三.關(guān)鍵技術(shù)</b></p><p><b> 四.程序流程</b></p><p><b> 五.主要源代碼</b></p><p> 六. 運(yùn)行結(jié)果及結(jié)論</p><p><b> 一:設(shè)計(jì)目的:&l
3、t;/b></p><p> 在掌握了基本的java編程之后,通過課程設(shè)計(jì)鞏固和提高java編程技術(shù),培養(yǎng)程序設(shè)計(jì)的基本思路和方法,加強(qiáng)研發(fā)與調(diào)試程序的能力,增強(qiáng)分析解決問題的能力,培養(yǎng)學(xué)習(xí)java的興趣以及以及提高論文寫作能力。</p><p> 設(shè)計(jì)GUI界面的日歷記事本,能查看具體時(shí)間(年月日以及時(shí)刻)以及作記錄。</p><p><b>
4、 二:總體設(shè)計(jì)</b></p><p> 在設(shè)計(jì)日歷記事本時(shí),需要編寫6個(gè)基本的Java源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CanlendarImage.java、Clock.java和CalendarMessage.java。此外還有Java系統(tǒng)提供的一些重要類,如JTextField、JTextArea和File類。日歷記
5、事本所用到的一些重要的類以及之間的組合關(guān)系如下所示:</p><p> 對(duì)6個(gè)基本的Java源文件簡(jiǎn)單介紹:</p><p> (1)CalendarWindow是主類,該類含有main方法,程序從該類開始執(zhí)行,負(fù)責(zé)創(chuàng)建動(dòng)日歷記事本的主窗口,含有5個(gè)重要類型的對(duì)象:CalendarPad、NotePad、CanlendarImage、Clock和CalendarMessage對(duì)象。&l
6、t;/p><p> ?。?)CalendarMessage類所創(chuàng)建的對(duì)象刻畫與“日期”有關(guān)的數(shù)據(jù)。</p><p> ?。?)CalendarPad類所創(chuàng)建的對(duì)象用來表示“日歷”,負(fù)責(zé)顯示和修改CalendarMessage對(duì)象中的日期數(shù)據(jù)。</p><p> (4)NotePad類創(chuàng)建的對(duì)象表示“記事本”,提供編輯、讀取、保存和刪除日志的功能。</p>
7、<p> ?。?)CalendarImage類創(chuàng)建的對(duì)象負(fù)責(zé)繪制圖像。</p><p> ?。?)Clock類創(chuàng)建的對(duì)象負(fù)責(zé)顯示時(shí)鐘。</p><p><b> 三、關(guān)鍵技術(shù)</b></p><p> 主要介紹基本類的數(shù)據(jù)與方法:</p><p> 1.CalendarWindow類</p>
8、<p><b> 1)成員變量</b></p><p> ?。?)year,mouth和day是int型數(shù)據(jù),分別表示年、月、日。</p><p> ?。?)calendarMessage是CalendarMessage對(duì)象,calendarPad是CalendarPad的對(duì)象,notePad是NotePad對(duì)象,calendarImage是Calen
9、darImage對(duì)象,clock是Clock對(duì)象</p><p> ?。?)showYear、showMouth和showDay是JtextField類創(chuàng)建的文本框,顯示年份,月份,日期。</p><p> (4)nextYear,previousYear,nextMouth和previousMouth是Jbutton創(chuàng)建的按鈕對(duì)象,名字依次為“下年”、“上年”、“下月”和“上月”。這些
10、按鈕都將當(dāng)前窗口注冊(cè)為自己的ActionEvent事件監(jiān)視器。</p><p> ?。?)saveDailyRwcord,deleteDailyRecord和readDailyRecord是Jbutton創(chuàng)建的按鈕對(duì)象,名字為“保存日志”、“刪除日志”和“讀取日志”。這些按鈕都將當(dāng)前窗口注冊(cè)為自己的ActionEvent事件監(jiān)視器。</p><p><b> 2)方法</
11、b></p><p> ?。?)CalendarWindow()是構(gòu)造方法,負(fù)責(zé)完成窗口的初始化。</p><p> ?。?)ActionPerformed(ActionEvent)方法是CalendarWindow類實(shí)現(xiàn)</p><p> ActionListener接口中的方法。CalendarWindow創(chuàng)建的窗口是nextYear,previousY
12、ear,nextMonth,previousMonth,saveDailyRwcord,deleteDailyRecord和readDailyRecord按鈕ActionEent事件監(jiān)視器,當(dāng)用戶單擊其中按鈕時(shí),窗口將執(zhí)行ActionPerformed(ActionEvent)方法進(jìn)行相應(yīng)的操作。</p><p> ?。?)mousePressed(MouseEvent)方法是CalendarWindow類實(shí)現(xiàn)的
13、MouseListener接口中的方法。CalendarWindow創(chuàng)建的窗口是showDay數(shù)組中的JtextField文本框的MouseEvent事件監(jiān)視器,當(dāng)用戶在某個(gè)顯示日期的文本框上按下鼠標(biāo)左鍵時(shí),窗口將執(zhí)行mousePressed(MouseEvent)方法進(jìn)行相應(yīng)的操作。</p><p> ?。?)focusGained(FocusEvent)和focusLost(FocusEvent)方法是Cal
14、endarWindow類實(shí)現(xiàn)的FocusListener接口中的方法。CalendarWindow創(chuàng)建的窗口是showDay 數(shù)組中 的JtextField文本框的FouseEvent事件監(jiān)視器,當(dāng)用戶的操作導(dǎo)致某個(gè)顯示*期的文本框的焦點(diǎn)發(fā)生變化時(shí),窗口將執(zhí)行focusGained(FocusEvent)和focusLost(FocusEvent)方法進(jìn)行相應(yīng)的操作。</p><p> ?。?)doMark方法
15、負(fù)責(zé)對(duì)有日志的日期作標(biāo)記。</p><p> ?。?)main方法是程序運(yùn)行的入口方法。</p><p> 2.CalendarMessage類</p><p><b> 1)成員變量</b></p><p> year,mouth和day是int型數(shù)據(jù),分別表示年、月、日。</p><p>
16、;<b> 2)方法</b></p><p> ?。?)setYear(int)和getYear()方法分別用來設(shè)置year和獲取year的值。</p><p> ?。?)setMonth(int)和getMonth()方法分別用來設(shè)置month和獲取month的值。</p><p> ?。?)setDay(int)和getDay()方法分別
17、用來設(shè)置day和獲取day的值。</p><p> (4)getMonthCalendar()方法按習(xí)慣來處理數(shù)據(jù),日歷牌中的每行的第一列為“星期日”。getMonthCalendar()方法根據(jù)year,month和day的值返回一個(gè)存放這“日歷”數(shù)據(jù)的String類型的數(shù)組。</p><p> 3.CalendarPad類</p><p><b>
18、 1)成員變量</b></p><p> ?。?)year,mouth和day是int型數(shù)據(jù),分別表示年、月、日。</p><p> ?。?)calendarMessage是CalendarMessage對(duì)象,處理與日期相關(guān)的數(shù)據(jù)。</p><p> ?。?)showDay數(shù)組的每個(gè)單元是JtextField類創(chuàng)建的用來顯示日期的文本框。</p&
19、gt;<p> ?。?)“星期”是String數(shù)組,單元的值依次為:“SUN日”、“MON一”、“TUE二”、“WED三”、“THU四”、“FRI五”、“SAT六”。</p><p><b> 2)方法</b></p><p> (1)CalendarPad()是構(gòu)造方法,用來創(chuàng)造calendarPad對(duì)象。</p><p>
20、 (2)setShowDayTextField(JtextField[])方法負(fù)責(zé)設(shè)置showDay數(shù)組。</p><p> ?。?)setCalendarMessage(CalendarMessage)方法負(fù)責(zé)設(shè)置calendarMessage對(duì)象</p><p> ?。?)showMonthCalendar()方法負(fù)責(zé)顯示“日歷”。</p><p> 4.N
21、otePad類</p><p><b> 1)成員變量</b></p><p> ?。?)text是JtextArea創(chuàng)建的文本區(qū),可在text中編輯多行文本。</p><p> ?。?)showMessage是JtextField創(chuàng)建的文本條,用來顯示和日期有關(guān)的數(shù)據(jù)。</p><p> ?。?)menu是Jpopu
22、pMenu創(chuàng)建的彈出式菜單。</p><p> ?。?)itemCopy、itemCut、itemPaste和itemClear是JmenuItem創(chuàng)建的菜單項(xiàng),名字依次是“復(fù)制”、“剪切”、“粘貼”、和“清空”。</p><p><b> 2)方法</b></p><p> ?。?)NotePad()是構(gòu)造方法,用來創(chuàng)建notePad對(duì)象。
23、</p><p> ?。?)setShowMessage(int,int,int)方法根據(jù)參數(shù)指定的日期數(shù)據(jù)顯示有關(guān)日期信息。</p><p> ?。?)save(File,int,int,int)方法根據(jù)參數(shù)指定的日期保存日志。</p><p> ?。?)delete(file,int,int,int)方法刪除參數(shù)日期所指定日志。</p><p
24、> ?。?)read(Fild,int,int,int)方法讀取參數(shù)日期所指定日志。</p><p> 5.CalendarImage類</p><p><b> 1)成員變量</b></p><p> ?。?)imageFile是File對(duì)象,用來存放圖像文件的引用。</p><p> (2)image是I
25、mage對(duì)象。</p><p> ?。?)tool是Toolkit對(duì)象,負(fù)責(zé)創(chuàng)建image對(duì)象。</p><p><b> 2)方法</b></p><p> ?。?)CalendarImage()是構(gòu)造方法,負(fù)責(zé)創(chuàng)建calendarImage對(duì)象。</p><p> (2)setImageFile(File)方法負(fù)
26、責(zé)設(shè)置imageFile對(duì)象,并根據(jù)imageFile創(chuàng)建image</p><p> ?。?)paintComponent(Graphics)方法負(fù)責(zé)繪制image。</p><p><b> 6.clock類</b></p><p><b> 1)成員變量</b></p><p> ?。?)
27、date是Date對(duì)象,負(fù)責(zé)封裝本地時(shí)間。</p><p> (2)secondTime是javax.swing包中Timer類創(chuàng)建的計(jì)時(shí)器。</p><p> (3)hour,munite和secord是int型數(shù)據(jù),其值分別代表“小時(shí)”、“分鐘”和“秒”。</p><p> ?。?)secondLine,muniteLine和hourLine是Line2D對(duì)
28、象,分別負(fù)責(zé)繪制“時(shí)針”,“分針”和“秒針”。</p><p> ?。?)pointSX,pointSY是double型數(shù)組,其單元值用來表示秒針端點(diǎn)坐標(biāo)。</p><p> ?。?)pointSX,pointMY是double型數(shù)組,其單元值用來表示分針端點(diǎn)坐標(biāo)。</p><p> (7)pointHX,pointHY是double型數(shù)組,其單元值用來表示時(shí)針端
29、點(diǎn)坐標(biāo)。</p><p><b> 2)方法</b></p><p> (1)Clock()是構(gòu)造方法,用來創(chuàng)建clock對(duì)象。</p><p> ?。?)initPoint()負(fù)責(zé)創(chuàng)建表盤所需要的坐標(biāo)點(diǎn)。</p><p> ?。?)paintComponent(Graphics)負(fù)責(zé)完成繪制工作。</p>
30、;<p> ?。?)actionPerformed(ActionEvent)是ActionListener中的方法。使用Timer類的構(gòu)造方法:Timer(int a,Object b)創(chuàng)建一個(gè)計(jì)時(shí)器,其中的參數(shù)a 的單位是毫秒,規(guī)定計(jì)時(shí)器每隔a毫秒“振鈴”一次,參數(shù)b是計(jì)時(shí)器的監(jiān)視器。計(jì)時(shí)器發(fā)生的振鈴事件是ActionEvent類型事件,當(dāng)振鈴事件發(fā)生時(shí),監(jiān)視器就會(huì)監(jiān)視到這個(gè)事件,監(jiān)視器就回調(diào)用ActionListene
31、r接口中的actionPerformed(ActionEvent)方法,該方法所做的操作是:每隔1秒鐘,讓“秒針”前進(jìn)一個(gè)刻度(表盤一周為360°,每個(gè)刻度為6°),muniteLine改變端點(diǎn)坐標(biāo);每隔12分鐘,讓“時(shí)針”前進(jìn)一個(gè)刻度,即hourLine改變端點(diǎn)坐標(biāo)。</p><p><b> 7.所需圖像</b></p><p> 名字為f
32、lower.jpg的圖像文件,這是日歷記事本所使用的圖像。見下:</p><p><b> 四、程序流程</b></p><p><b> 五、主要源代碼</b></p><p> import javax.swing.*;</p><p> import java.awt.*;</p
33、><p> import java.awt.event.*;</p><p> import java.util.*;</p><p> import java.io.*;</p><p> public class CalendarWindow extends JFrame implements ActionListener,</
34、p><p> MouseListener,FocusListener{</p><p> int year,month,day;</p><p> CalendarMessage calendarMessage;</p><p> CalendarPad calendarPad;</p><p> NotePad
35、 notePad;</p><p> JTextField showYear,showMonth;</p><p> JTextField [] showDay;</p><p> CalendarImage calendarImage;</p><p> Clock clock; </p><p> JBu
36、tton nextYear,previousYear,nextMonth,previousMonth;</p><p> JButton saveDailyRecord,deleteDailyRecord,readDailyRecord,SoundRecord;</p><p><b> File dir;</b></p><p> Co
37、lor backColor=Color.pink; </p><p> public CalendarWindow(){</p><p> dir=new File("./dailyRecord");</p><p> dir.mkdir(); </p><p> showDay=new JTextField[
38、42];</p><p> for(int i=0;i<showDay.length;i++){</p><p> showDay[i]=new JTextField();</p><p> showDay[i].setBackground(backColor);</p><p> showDay[i].setLayout(ne
39、w GridLayout(3,3)); </p><p> showDay[i].addMouseListener(this); </p><p> showDay[i].addFocusListener(this);</p><p><b> }</b></p><p> calendarMessage=new
40、 CalendarMessage();</p><p> calendarPad=new CalendarPad();</p><p> notePad=new NotePad(); </p><p> Calendar calendar=Calendar.getInstance(); </p><p> calendar.setT
41、ime(new Date()); </p><p> year=calendar.get(Calendar.YEAR);</p><p> month=calendar.get(Calendar.MONTH)+1;</p><p> day=calendar.get(Calendar.DAY_OF_MONTH);</p><p> c
42、alendarMessage.setYear(year);</p><p> calendarMessage.setMonth(month);</p><p> calendarMessage.setDay(day);</p><p> calendarPad.setCalendarMessage(calendarMessage);</p>&l
43、t;p> calendarPad.setShowDayTextField(showDay);</p><p> notePad.setShowMessage(year,month,day); </p><p> calendarPad.showMonthCalendar();</p><p> doMark(); //給有日志的號(hào)碼做標(biāo)記,見后面的d
44、oMark()方法</p><p> calendarImage=new CalendarImage();</p><p> calendarImage.setImageFile(new File("flower.jpg"));</p><p> clock=new Clock();</p><p> JSplit
45、Pane splitV1=</p><p> new JSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarImage);</p><p> JSplitPane splitV2=</p><p> new JSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,cl
46、ock); </p><p> JSplitPane splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);</p><p> add(splitH,BorderLayout.CENTER);</p><p> showYear=new JTextField(""
47、;+year,6);</p><p> showYear.setFont(new Font("TimesRoman",Font.BOLD,12));</p><p> showYear.setHorizontalAlignment(JTextField.CENTER);</p><p> showMonth=new JTextField(&
48、quot; "+month,4);</p><p> showMonth.setFont(new Font("TimesRoman",Font.BOLD,12));</p><p> showMonth.setHorizontalAlignment(JTextField.CENTER);</p><p> nextYear=new
49、 JButton("下年");</p><p> previousYear=new JButton("上年");</p><p> nextMonth=new JButton("下月");</p><p> previousMonth=new JButton("上月");</
50、p><p> nextYear.addActionListener(this);</p><p> previousYear.addActionListener(this);</p><p> nextMonth.addActionListener(this);</p><p> previousMonth.addActionListen
51、er(this);</p><p> showYear.addActionListener(this);</p><p> JPanel north=new JPanel(); </p><p> north.add(previousYear); </p><p> north.add(showYear);</p>&l
52、t;p> north.add(nextYear);</p><p> north.add(previousMonth);</p><p> north.add(showMonth);</p><p> north.add(nextMonth);</p><p> add(north,BorderLayout.NORTH);&l
53、t;/p><p> saveDailyRecord=new JButton("保存日志") ;</p><p> deleteDailyRecord=new JButton("刪除日志");</p><p> readDailyRecord=new JButton("讀取日志");</p>
54、<p> SoundRecord=new JButton("音樂播放");</p><p> saveDailyRecord.addActionListener(this);</p><p> deleteDailyRecord.addActionListener(this);</p><p> readDailyRecord.
55、addActionListener(this);</p><p> SoundRecord.addActionListener(this);</p><p> JPanel pSouth=new JPanel(); </p><p> pSouth.add(saveDailyRecord);</p><p> pSouth
56、.add(deleteDailyRecord);</p><p> pSouth.add(readDailyRecord);</p><p> pSouth.add(SoundRecord);</p><p> add(pSouth,BorderLayout.SOUTH);</p><p> setVisible(true);<
57、/p><p> setBounds(60,60,660,480);</p><p> validate();</p><p> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); </p><p><b> }</b></p><p> publi
58、c void actionPerformed(ActionEvent e){</p><p> if(e.getSource()==nextYear){</p><p><b> year++;</b></p><p> showYear.setText(""+year);</p><p>
59、calendarMessage.setYear(year);</p><p> calendarPad.setCalendarMessage(calendarMessage);</p><p> calendarPad.showMonthCalendar();</p><p> notePad.setShowMessage(year,month,day); &
60、lt;/p><p> doMark(); </p><p><b> }</b></p><p> else if(e.getSource()==previousYear){</p><p><b> year--;</b></p><p> showYear.setT
61、ext(""+year);</p><p> calendarMessage.setYear(year);</p><p> calendarPad.setCalendarMessage(calendarMessage);</p><p> calendarPad.showMonthCalendar();</p><p&
62、gt; notePad.setShowMessage(year,month,day); </p><p> doMark(); </p><p><b> }</b></p><p> else if(e.getSource()==nextMonth){</p><p><b> month++;&
63、lt;/b></p><p> if(month>12) month=1;</p><p> showMonth.setText(" "+month);</p><p> calendarMessage.setMonth(month);</p><p> calendarPad.setCalendarM
64、essage(calendarMessage);</p><p> calendarPad.showMonthCalendar(); </p><p> notePad.setShowMessage(year,month,day); </p><p><b> doMark();</b></p><p><b
65、> }</b></p><p> else if(e.getSource()==SoundRecord){</p><p> Sound s=new Sound("E:\\mp3\\翅膀.wma");</p><p> s.start();}</p><p> else if(e.getSour
66、ce()==previousMonth){</p><p><b> month--;</b></p><p> if(month<1) month=12;</p><p> showMonth.setText(" "+month);</p><p> calendarMessage.s
67、etMonth(month);</p><p> calendarPad.setCalendarMessage(calendarMessage);</p><p> calendarPad.showMonthCalendar();</p><p> notePad.setShowMessage(year,month,day); </p><
68、p> doMark(); </p><p><b> }</b></p><p> else if(e.getSource()==showYear){</p><p> String s=showYear.getText().trim();</p><p> char a[]=s.toCharArray(
69、);</p><p> boolean boo=false;</p><p> for(int i=0;i<a.length;i++)</p><p> if(!(Character.isDigit(a[i])))</p><p> boo=true; </p><p> if(boo=
70、=true) //彈出“警告”消息對(duì)話框</p><p> JOptionPane.showMessageDialog(this,"您輸入了非法年份","警告",</p><p> JOptionPane.WARNING_MESSAGE);</p><p> else if(boo==false)</p>
71、<p> year=Integer.parseInt(s);</p><p> showYear.setText(""+year);</p><p> calendarMessage.setYear(year);</p><p> calendarPad.setCalendarMessage(calendarMessage)
72、;</p><p> calendarPad.showMonthCalendar(); </p><p> notePad.setShowMessage(year,month,day); </p><p> doMark(); </p><p><b> }</b></p><p> e
73、lse if(e.getSource()==saveDailyRecord){</p><p> notePad.save(dir,year,month,day);</p><p><b> doMark();</b></p><p><b> }</b></p><p> else if(
74、e.getSource()==deleteDailyRecord){</p><p> notePad.delete(dir,year,month,day);</p><p><b> doMark();</b></p><p><b> } </b></p><p> else if(e.
75、getSource()==readDailyRecord)</p><p> notePad.read(dir,year,month,day);</p><p><b> }</b></p><p> public void mousePressed(MouseEvent e){</p><p> JTextFi
76、eld text=(JTextField)e.getSource();</p><p> String str=text.getText().trim();</p><p> try{ day=Integer.parseInt(str);</p><p><b> }</b></p><p> catch(Num
77、berFormatException exp){</p><p><b> } </b></p><p> calendarMessage.setDay(day); </p><p> notePad.setShowMessage(year,month,day); </p><p><b> }<
78、;/b></p><p> public void mouseReleased(MouseEvent e){}</p><p> public void mouseEntered(MouseEvent e) {}</p><p> public void mouseExited(MouseEvent e) {}</p><p>
79、 public void mouseClicked(MouseEvent e) {}</p><p> public void focusGained(FocusEvent e){</p><p> Component com=(Component)e.getSource();</p><p> com.setBackground(Color.pink);&
80、lt;/p><p><b> }</b></p><p> public void focusLost(FocusEvent e){</p><p> Component com=(Component)e.getSource();</p><p> com.setBackground(backColor);</
81、p><p><b> }</b></p><p> public void doMark(){</p><p> for(int i=0;i<showDay.length;i++){</p><p> showDay[i].removeAll();</p><p> String st
82、r=showDay[i].getText().trim();</p><p><b> try{</b></p><p> int n=Integer.parseInt(str);</p><p> if(isHaveDailyRecord(n)==true){ //見后面的isHaveDailyRecord()方法</p>
83、<p> JLabel mess=new JLabel("有");</p><p> mess.setFont(new Font("TimesRoman",Font.PLAIN,11));</p><p> mess.setForeground(Color.blue) ; </p><p> showDay
84、[i].add(mess);</p><p><b> }</b></p><p><b> }</b></p><p> catch(Exception exp){}</p><p><b> }</b></p><p> calendarP
85、ad.repaint(); </p><p> calendarPad.validate(); </p><p><b> }</b></p><p> public boolean isHaveDailyRecord(int n){</p><p> String key=""+year
86、+""+month+""+n;</p><p> String [] dayFile=dir.list();</p><p> boolean boo=false;</p><p> for(int k=0;k<dayFile.length;k++){</p><p> if(dayFil
87、e[k].equals(key+".txt")){</p><p><b> boo=true;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> } </b>
88、;</p><p> return boo;</p><p><b> } </b></p><p> public static void main(String args[]){</p><p> new CalendarWindow();</p><p><b> }&l
89、t;/b></p><p><b> } </b></p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import javax.swing.*;</p><p> import java.
90、awt.geom.*;</p><p> import java.util.*;</p><p> public class Clock extends JPanel implements ActionListener{</p><p> Date date;</p><p> javax.swing.Timer secondTime
91、; </p><p> int hour,munite,second;</p><p> Line2D secondLine,muniteLine,hourLine;</p><p> int a,b,c,width,height;</p><p> double [] pointSX=new double[60], //用來表示秒針
92、端點(diǎn)坐標(biāo)的數(shù)組</p><p> pointSY=new double[60], </p><p> pointMX=new double[60], //用來表示分針端點(diǎn)坐標(biāo)的數(shù)組</p><p> pointMY=new double[60], </p><p> pointHX=new double[60], //用來表示時(shí)針端點(diǎn)
93、坐標(biāo)的數(shù)組</p><p> pointHY=new double[60];</p><p><b> Clock(){</b></p><p> setBackground(new Color(20,50,100));</p><p> initPoint();</p><p> se
94、condTime=new javax.swing.Timer(1000,this);</p><p> secondLine=new Line2D.Double(0,0,0,0);</p><p> muniteLine=new Line2D.Double(0,0,0,0);</p><p> hourLine=new Line2D.Double(0,0,0,
95、0);</p><p> secondTime.start(); //秒針開始計(jì)時(shí)</p><p><b> }</b></p><p> private void initPoint(){</p><p> width=getBounds().width;</p&g
96、t;<p> height=getBounds().height;</p><p> pointSX[0]=0; //12點(diǎn)秒針位置</p><p> pointSY[0]=-height/2*5/6;</p><p> pointMX[0]=0;
97、//12點(diǎn)分針位置</p><p> pointMY[0]=-(height/2*4/5);</p><p> pointHX[0]=0; //12點(diǎn)時(shí)針位置</p><p> pointHY[0]=-(height/2*2/3);</p><p> double angle=6*Mat
98、h.PI/180; //刻度為6度</p><p> for(int i=0;i<59;i++) { //計(jì)算數(shù)組中的坐標(biāo)</p><p> pointSX[i+1]=pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i];</p><p> pointSY
99、[i+1]=pointSY[i]*Math.cos(angle)+pointSX[i]*Math.sin(angle);</p><p> pointMX[i+1]=pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i];</p><p> pointMY[i+1]=pointMY[i]*Math.cos(angle)+pointMX
100、[i]*Math.sin(angle);</p><p> pointHX[i+1]=pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];</p><p> pointHY[i+1]=pointHY[i]*Math.cos(angle)+pointHX[i]*Math.sin(angle);</p><p>
101、;<b> }</b></p><p> for(int i=0;i<60;i++){ </p><p> pointSX[i]=pointSX[i]+width/2; //坐標(biāo)平移</p><p> pointSY[i]=pointSY[i]+height/2;</p>
102、<p> pointMX[i]=pointMX[i]+width/2; //坐標(biāo)平移</p><p> pointMY[i]=pointMY[i]+height/2;</p><p> pointHX[i]=pointHX[i]+width/2; //坐標(biāo)平移</p><p> pointHY[i]=
103、pointHY[i]+height/2;</p><p><b> }</b></p><p><b> }</b></p><p> public void paintComponent(Graphics g){</p><p> super.paintComponent(g);</
104、p><p> initPoint(); </p><p> for(int i=0;i<60;i++){ //繪制表盤上的小刻度和大刻度</p><p> int m=(int)pointSX[i];</p><p> int n=(int)pointSY[i];</p><p> if(i%5==
105、0){</p><p> if(i==0||i==15||i==30||i==45){</p><p> int k=10; </p><p> g.setColor(Color.white);</p><p> g.fillOval(m-k/2,n-k/2,k,k);</p><p><b>
106、}</b></p><p><b> else{ </b></p><p> int k=7; </p><p> g.setColor(Color.white);</p><p> g.fillOval(m-k/2,n-k/2,k,k);</p><p><b>
107、 }</b></p><p><b> }</b></p><p><b> else{</b></p><p><b> int k=2;</b></p><p> g.setColor(Color.black);</p><p>
108、; g.fillOval(m-k/2,n-k/2,k,k);</p><p><b> }</b></p><p><b> }</b></p><p> g.fillOval(width/2-5,height/2-5,10,10); //鐘表中心的實(shí)心圓</p><p> Graphi
109、cs2D g_2d=(Graphics2D)g;</p><p> g_2d.setColor(Color.red);</p><p> g_2d.draw(secondLine);</p><p> BasicStroke bs=</p><p> new BasicStroke(2f,BasicStroke.CAP_ROUND,B
110、asicStroke.JOIN_MITER);</p><p> g_2d.setStroke(bs);</p><p> g_2d.setColor(Color.blue);</p><p> g_2d.draw(muniteLine);</p><p> bs=new BasicStroke(4f,BasicStroke.CAP_
111、BUTT,BasicStroke.JOIN_MITER);</p><p> g_2d.setStroke(bs);</p><p> g_2d.setColor(Color.orange);</p><p> g_2d.draw(hourLine);</p><p><b> }</b></p>
112、<p> public void actionPerformed(ActionEvent e){</p><p> if(e.getSource()==secondTime){</p><p> date=new Date();</p><p> String s=date.toString();</p><p> hou
113、r=Integer.parseInt(s.substring(11,13)); </p><p> munite=Integer.parseInt(s.substring(14,16));</p><p> second=Integer.parseInt(s.substring(17,19)); //獲取時(shí)間中的秒</p><p> int h=hour%12
114、;</p><p> a=second; //秒針端點(diǎn)的坐標(biāo)</p><p> b=munite; //分針端點(diǎn)的坐標(biāo)</p><p> c=h*5+munite/12; //時(shí)針端點(diǎn)的坐標(biāo)</p><p> secondLine.se
115、tLine(width/2,height/2,(int)pointSX[a],(int)pointSY[a]);</p><p> muniteLine.setLine(width/2,height/2,(int)pointMX[b],(int)pointMY[b]);</p><p> hourLine.setLine(width/2,height/2,(int)pointHX[c]
116、,(int)pointHY[c]);</p><p> repaint();</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> import java.io.F
117、ile;</p><p> import javax.sound.sampled.AudioFormat;</p><p> import javax.sound.sampled.AudioInputStream;</p><p> import javax.sound.sampled.AudioSystem;</p><p> im
118、port javax.sound.sampled.DataLine;</p><p> import javax.sound.sampled.SourceDataLine;</p><p> public class Sound extends Thread{</p><p> private String filename;</p><p
119、> public Sound(String soundfile){</p><p> filename=soundfile;</p><p><b> }</b></p><p> public void run(){</p><p> File soundFile=new File(filename);
120、</p><p> AudioInputStream audioInputStream=null;</p><p><b> try{</b></p><p> audioInputStream=AudioSystem.getAudioInputStream(soundFile);</p><p> }catch
121、(Exception e){</p><p> e.printStackTrace();</p><p><b> return;</b></p><p><b> }</b></p><p> AudioFormat format=audioInputStream.getFormat();
122、</p><p> SourceDataLine auline=null;</p><p> DataLine.Info info =new DataLine.Info(SourceDataLine.class, format);</p><p><b> try{</b></p><p> auline=(So
123、urceDataLine)AudioSystem.getLine(info);</p><p> auline.open(format);</p><p> }catch(Exception e){</p><p> e.printStackTrace();</p><p><b> return;</b><
124、;/p><p><b> }</b></p><p> auline.start();</p><p> int nBytesRead=0;</p><p> byte[] abData=new byte[1024];</p><p><b> try{</b><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)--日歷記事本
- java課程設(shè)計(jì)日歷記事本
- 基于java的記事本程序課程設(shè)計(jì)
- java課程設(shè)計(jì)--日歷記事本
- 日歷記事本-java課程設(shè)計(jì)
- 日歷記事本java課程設(shè)計(jì)
- 基于java的記事本程序課程設(shè)計(jì)
- 日歷記事本java課程設(shè)計(jì)論文
- java記事本程序課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--- 記事本程序設(shè)計(jì)
- java記事本課程設(shè)計(jì)
- java課程設(shè)計(jì)--簡(jiǎn)單記事本程序的設(shè)計(jì)
- java課程設(shè)計(jì)記事本(含代碼)1
- java課程設(shè)計(jì)報(bào)告--實(shí)現(xiàn)記事本功能
- java課程設(shè)計(jì)---設(shè)計(jì)一個(gè)記事本
- java語言課程設(shè)計(jì)---記事本程序設(shè)計(jì)
- java記事本課程設(shè)計(jì)
- 基于java的記事本程序課程設(shè)計(jì)畢業(yè)設(shè)計(jì)
- java記事本課程設(shè)計(jì)報(bào)告
- java記事本課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論