




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用Java實(shí)現(xiàn)日歷記事本1. 實(shí)驗(yàn)?zāi)康恼莆誖andomAccessFile類的使用;掌握字符輸入、輸出流和緩沖輸入、輸出流的使用。2. 實(shí)驗(yàn)要求 實(shí)驗(yàn)前,應(yīng)事先熟悉相關(guān)知識(shí)點(diǎn),擬出相應(yīng)的實(shí)驗(yàn)操作步驟,明確實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn)過程中,服從實(shí)驗(yàn)指導(dǎo)教師安排,遵守實(shí)驗(yàn)室的各項(xiàng)規(guī)章制度,愛護(hù)實(shí)驗(yàn)儀器設(shè)備;實(shí)驗(yàn)操作完成后,認(rèn)真書寫實(shí)驗(yàn)報(bào)告,總結(jié)實(shí)驗(yàn)經(jīng)驗(yàn),分析實(shí)驗(yàn)過程中出現(xiàn)的問題。3. 實(shí)驗(yàn)內(nèi)容編程實(shí)現(xiàn)日歷記事本。具體要求如下:(1)該日歷可以通過在文本框中輸入年份和月份設(shè)置日期,也可按年前后翻動(dòng),用鼠標(biāo)左鍵單擊“上年”和“下年”按鈕,將當(dāng)前日歷的年份減一和加一。還可以在某年內(nèi)按月前后翻動(dòng),用鼠標(biāo)左鍵單擊
2、“上月”和“下月”按鈕,將日歷的月份減一和加一。(2)左鍵單擊日歷上的日期,可以通過右側(cè)的記事本(文本區(qū))編輯有關(guān)日志,并將日志保存到一個(gè)文件,該文件的名字是由當(dāng)前日期組成的字符序列。用戶可以讀取、刪除某個(gè)日期的日志,也可以繼續(xù)向某個(gè)日志添加新的內(nèi)容。在保存、刪除和讀取日志時(shí)都會(huì)先彈出一個(gè)確認(rèn)對(duì)話框,以確認(rèn)保存、刪除和讀取操作。(3)當(dāng)某個(gè)日期有日志時(shí),該日期以粗體16號(hào)字顯示,表明這個(gè)日期有日志;當(dāng)用戶刪除某個(gè)日期的日志后,該日期恢復(fù)原來的外觀。實(shí)現(xiàn)效果圖(參考)如下:提示:(1)組件調(diào)用public void setFont(Font f)方法可以設(shè)置組件上的字體,F(xiàn)ont類的構(gòu)
3、造方法為:public Font(String name,int style,int size),其中name是字體的名字,style決定字體的樣式(如Font.BOLD表示粗體)size決定字體的大小。(具體請(qǐng)參考JDK API)(2)當(dāng)左鍵單擊日歷上的日期時(shí),如要獲取該日期,可通過處理該組件上的鼠標(biāo)事件來實(shí)現(xiàn)。4實(shí)驗(yàn)步驟、實(shí)施過程、關(guān)鍵代碼、實(shí)驗(yàn)結(jié)果及分析說明等1. CalendarPad類(1) 進(jìn)行整體布局,建立日歷記事本文件,設(shè)置日歷卡,把日期按星期順序排列,并用窗口監(jiān)視器實(shí)現(xiàn)。(2)用窗口監(jiān)視器實(shí)現(xiàn),結(jié)果如下:2. Notepad類(1) 對(duì)日期的設(shè)置
4、和獲取,設(shè)置信息條,對(duì)文本框進(jìn)行設(shè)置,保存日志、刪除日志和讀取日志按鈕的事件實(shí)現(xiàn)。(2)保存日志按鈕事件實(shí)現(xiàn)如下:(3)讀取日志按鈕事件實(shí)現(xiàn)如下:(4.)刪除日志按鈕事件實(shí)現(xiàn)如下:3 Year類(1)輸入年份可以實(shí)現(xiàn)輸出,給上下年按鈕設(shè)置監(jiān)視器,對(duì)上下年按鈕事件的實(shí)現(xiàn)。(2)其結(jié)果如下:4. Month類(1)設(shè)置上下月監(jiān)視器,對(duì)上下月按鈕的事件實(shí)現(xiàn),區(qū)分閏年和平年,對(duì)天數(shù)不同的月份進(jìn)行分類。(2)其結(jié)果如下:(續(xù)上頁,可加頁)5 各個(gè)類的源代碼如下:CalendarPad 類:/CalendarPad.javaimport java.util.Calendar;import javax.sw
5、ing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.Hashtable;public class CalendarPad extends JFrame implements MouseListener,ActionListener int year,month,day; Hashtable hashtable; JButton Save,Delete,Read; File file; JTextField showDay; JLabel title; Calendar Date; i
6、nt Weekday; NotePad notepad=null; Month ChangeMonth; Year ChangeYear ; String week="星期日","星期一","星期二","星期三","星期四","星期五","星期六" JPanel leftPanel,rightPanel; public CalendarPad(int year,int month,int day) leftPanel=new JPanel(); JPane
7、l leftCenter=new JPanel(); JPanel leftNorth=new JPanel(); leftCenter.setLayout(new GridLayout(7,7); rightPanel=new JPanel(); this.year=year; this.month=month; this.day=day; ChangeYear=new Year(this); ChangeYear.setYear(year); ChangeMonth=new Month(this); ChangeMonth.setMonth(month); title=new JLabel
8、7; showDay=new JTextField42; for(int j=0;j<7;j+) titlej=new JLabel(); titlej.setText(weekj); titlej.setBorder(BorderFactory.createRaisedBevelBorder(); titlej.setForeground(Color.blue); leftCenter.add(titlej); for(int i=0;i<42;i+) showDayi=new JTextField(); showDayi.addMouseListener(this); show
9、Dayi.setEditable(false); leftCenter.add(showDayi); Save=new JButton("保存日志") ; Delete=new JButton("刪除日志") ; Read=new JButton("讀取日志") ; Read.addActionListener(this); Save.addActionListener(this); Delete.addActionListener(this); /設(shè)置監(jiān)視器 JPanel pSouth=new JPanel(); pSouth.ad
10、d(Save); pSouth.add(Delete); pSouth.add(Read); Date=Calendar.getInstance(); Box box=Box.createHorizontalBox(); box.add(ChangeYear); box.add(ChangeMonth); leftNorth.add(box); leftPanel.setLayout(new BorderLayout(); add(leftNorth,BorderLayout.NORTH); leftPanel.add(leftCenter,BorderLayout.CENTER); add(
11、pSouth,BorderLayout.SOUTH); leftPanel.validate(); notepad=new NotePad(this); rightPanel.add(notepad); Container con=getContentPane(); JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,rightPanel); con.add(split,BorderLayout.CENTER); /進(jìn)行整體布局 con.validate(); hashtable=new Hashtabl
12、e(); file=new File("日歷記事本.txt"); if(!file.exists() try FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(hashtable); objectOut.close(); out.close(); catch(IOException e) setCalendar(year,month); addWindowListene
13、r(new WindowAdapter() /設(shè)置窗口監(jiān)視器 public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,60,524,335); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=Save) notepad.Save(file,year,month,day); else if(e.getSource()=Delete) notepad.Delete(file,y
14、ear,month,day); else if(e.getSource()=Read) notepad.Read(file,year,month,day); public void setCalendar(int year,int month) /設(shè)置日歷卡 Date.set(year,month-1,1); Weekday=Date.get(Calendar.DAY_OF_WEEK)-1; if(month=1|month=2|month=3|month=5|month=7 |month=8|month=10|month=12) Arrange(Weekday,31); else if(mo
15、nth=4|month=6|month=9|month=11) Arrange(Weekday,30); else if(month=2) if(year%4=0&&year%100!=0)|(year%400=0) Arrange(Weekday,29); else Arrange(Weekday,28); public void Arrange(int Weekday,int Monthday) /把日期,按星期排列 for(int i=Weekday,n=1;i<Weekday+Monthday;i+) showDayi.setText(""+n
16、); if(n=day) showDayi.setForeground(Color.blue); showDayi.setFont(new Font("TimesRoman",Font.BOLD,20); else showDayi.setFont(new Font("TimesRoman",Font.BOLD,12); showDayi.setForeground(Color.black); n+; for(int i=0;i<Weekday;i+) showDayi.setText(""); for(int i=Weekda
17、y+Monthday;i<42;i+) showDayi.setText(""); public int getYear() return year; public void setYear(int y) year=y; notepad.setYear(year); public int getMonth() return month; public void setMonth(int m) month=m; notepad.setMonth(month); public int getDay() return day; public void setDay(int
18、d) day=d; notepad.setDay(day); public Hashtable getHashtable() return hashtable; public File getFile() return file; public void mousePressed(MouseEvent e) JTextField source=(JTextField)e.getSource();try day=Integer.parseInt(source.getText(); notepad.setDay(day); notepad.setNews(year,month,day); note
19、pad.setText(null); catch(Exception ee) public void mouseClicked(MouseEvent e)public void mouseReleased(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseEntered(MouseEvent e)public static void main(String args) Calendar calendar=Calendar.getInstance(); int y=calendar.get(Calendar.YE
20、AR); int m=calendar.get(Calendar.MONTH)+1; int d=calendar.get(Calendar.DAY_OF_MONTH); new CalendarPad(y,m,d); NotePad類/ NotePad.javaimport java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import java.io.*;public class NotePad extends JPanel implem
21、ents ActionListener JTextArea text; Hashtable table; JLabel News; int year,month,day; File file; CalendarPad calendar; public NotePad(CalendarPad calendar) this.calendar=calendar; year=calendar.getYear(); month=calendar.getMonth(); day=calendar.getDay(); table=calendar.getHashtable(); file=calendar.
22、getFile(); News=new JLabel(""+year+"年"+month+"月"+day+"日",JLabel.CENTER); News.setFont(new Font("TimesRoman",Font.BOLD,20); text=new JTextArea(10,15); setLayout(new BorderLayout(); JPanel pSouth=new JPanel(); add(News,BorderLayout.NORTH); add(pSouth,B
23、orderLayout.SOUTH); add(new JScrollPane(text),BorderLayout.CENTER); public void setYear(int year) this.year=year; public int getYear() return year; public void setMonth(int month) this.month=month; public int getMonth() return month; public void setDay(int day) this.day=day; public int getDay() retu
24、rn day; public void setNews(int year,int month,int day) News.setText(""+year+"年"+month+"月"+day+"日"); public void setText(String s) text.setText(s); public void actionPerformed(ActionEvent e) public void Save(File file,int year,int month,int day) /保存日志按鈕事件實(shí)現(xiàn) St
25、ring LogCenter=text.getText(); String key=""+year+""+month+""+day; try FileInputStream inOne=new FileInputStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne); table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); catch(Exception ee) if(table.
26、containsKey(key) String m=""+year+"年"+month+"月"+day+"已存在日志,是否更新?" /是更新已有的日志 int ok=JOptionPane.showConfirmDialog(this,m,"詢問",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) try FileInputStream inOne=new FileInp
27、utStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne); table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); table.remove(key); FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(table); objectO
28、ut.close(); out.close(); text.setText(null); catch(Exception ee) String f="日志已更新" JOptionPane.showMessageDialog(this,f,"提示",JOptionPane.WARNING_MESSAGE); else String m=""+year+"年"+month+"月"+day+"還沒有日志,是否保存日志?" /保存還沒有的日志 int ok=JOptionPane.s
29、howConfirmDialog(this,m,"詢問",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) try FileInputStream inOne=new FileInputStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne); table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close();
30、 table.put(key,LogCenter); FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(table); objectOut.close(); out.close(); catch(Exception ee) String f="日志保存成功" JOptionPane.showMessageDialog(this,f,"提示",JOpt
31、ionPane.WARNING_MESSAGE); public void Delete(File file,int year,int month,int day) /刪除日志按鈕事件實(shí)現(xiàn) String key=""+year+""+month+""+day; if(table.containsKey(key) String m="刪除"+year+"年"+month+"月"+day+"日的日志嗎?" int yes=JOptionPane.showCon
32、firmDialog(this,m,"詢問",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(yes=JOptionPane.YES_OPTION) try FileInputStream inOne=new FileInputStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne); table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); tabl
33、e.remove(key); FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(table); objectOut.close(); out.close(); text.setText(null); catch(Exception ee) String f="日志刪除成功" JOptionPane.showMessageDialog(this,f,"提示&qu
34、ot;,JOptionPane.WARNING_MESSAGE); else String f=""+year+"年"+month+"月"+day+" 無記錄" JOptionPane.showMessageDialog(this,f,"提示",JOptionPane.WARNING_MESSAGE); public void Read(File file,int year,int month,int day) /讀取日志按鈕事件實(shí)現(xiàn) String key=""+year+&
35、quot;"+month+""+day; try FileInputStream inOne=new FileInputStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne); table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); catch(Exception ee) if(table.containsKey(key) String m=""+year+"年"+mon
36、th+"月"+day+"已有日志,是否讀取?" int ok=JOptionPane.showConfirmDialog(this,m,"詢問",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) text.setText(String)table.get(key); text.setText(""+year+"年"+month+"月"+day+"
37、;日的日志"); else text.setText(""); else String f=""+year+"年"+month+"月"+day+"日,暫無記錄" JOptionPane.showMessageDialog(this,f,"提示",JOptionPane.WARNING_MESSAGE); Year類/Year.java其源代碼為:import javax.swing.*;import java.awt.*;import java.awt.event.
38、*;public class Year extends Box implements ActionListener int year; JTextField showYear=null; JButton Year1,Year2; CalendarPad CAL; public Year(CalendarPad CAL) super(BoxLayout.X_AXIS); showYear=new JTextField(4); showYear.setFont(new Font("TimesRomn",Font.BOLD,14);this.CAL=CAL; year=CAL.g
39、etYear(); Year2=new JButton("下年"); Year1=new JButton("上年"); add(Year1); add(showYear); add(Year2); showYear.addActionListener(this); Year1.addActionListener(this); Year2.addActionListener(this); /設(shè)置監(jiān)視器 public void setYear(int year) this.year=year; showYear.setText(""+ye
40、ar); public int getYear() return year; public void actionPerformed(ActionEvent e) /上下年按鈕事件的實(shí)現(xiàn) if(e.getSource()=Year1) /上年按鈕 year=year-1; showYear.setText(""+year); CAL.setYear(year); CAL.setCalendar(year,CAL.getMonth(); else if(e.getSource()=Year2) /下年按鈕 year=year+1; showYear.setText("
41、;"+year); CAL.setYear(year); CAL.setCalendar(year,CAL.getMonth(); else if(e.getSource()=showYear) /輸入年份 try year=Integer.parseInt(showYear.getText(); showYear.setText(""+year); CAL.setYear(year); CAL.setCalendar(year,CAL.getMonth(); catch(NumberFormatException ee) showYear.setText(""+year); CAL.setYear(year); CAL.setCalendar(year,CAL.getMonth(); Month類/Mont
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (1)-專題01 字音字形辨析
- 《國(guó)電南瑞內(nèi)部路》課件
- 初中數(shù)學(xué)浙教版九年級(jí)上冊(cè)第2章 簡(jiǎn)單事件的概率綜合與測(cè)試教案
- 九年級(jí)物理上冊(cè) 13.5怎樣認(rèn)識(shí)和測(cè)量電壓教學(xué)設(shè)計(jì) (新版)粵教滬版
- 廈門軟件職業(yè)技術(shù)學(xué)院《品牌策劃與設(shè)計(jì)管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東傳媒職業(yè)學(xué)院《滑雪II》2023-2024學(xué)年第一學(xué)期期末試卷
- 紹興文理學(xué)院《資產(chǎn)評(píng)估》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏民族大學(xué)《合唱與重唱》2023-2024學(xué)年第二學(xué)期期末試卷
- 無錫商業(yè)職業(yè)技術(shù)學(xué)院《化學(xué)電池設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 呂梁職業(yè)技術(shù)學(xué)院《團(tuán)體操編排》2023-2024學(xué)年第二學(xué)期期末試卷
- 園林植物識(shí)別-藤本植物的識(shí)別
- 銅陵介紹-銅陵簡(jiǎn)介PPT(經(jīng)典版)
- 醫(yī)院廉潔行醫(yī)廉政教育專題課件
- 財(cái)務(wù)預(yù)算表格
- 安全組織機(jī)構(gòu)圖
- 2023年新改版教科版四年級(jí)下冊(cè)科學(xué)練習(xí)題(一課一練+單元+期中+期末)
- 舊石器時(shí)代考古-基礎(chǔ)知識(shí)課件
- GB/T 10228-2023干式電力變壓器技術(shù)參數(shù)和要求
- 超市商品分類明細(xì)表
- 完整解讀中華人民共和國(guó)政府信息公開條例課件
- YS/T 724-2016多晶硅用硅粉
評(píng)論
0/150
提交評(píng)論