




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用Java实现日历记事本1. 实验目的掌握RandomAccessFile类的使用;掌握字符输入、输出流和缓冲输入、输出流的使用。2. 实验要求 实验前,应事先熟悉相关知识点,拟出相应的实验操作步骤,明确实验目的和要求;实验过程中,服从实验指导教师安排,遵守实验室的各项规章制度,爱护实验仪器设备;实验操作完成后,认真书写实验报告,总结实验经验,分析实验过程中出现的问题。3. 实验内容编程实现日历记事本。具体要求如下:(1)该日历可以通过在文本框中输入年份和月份设置日期,也可按年前后翻动,用鼠标左键单击“上年”和“下年”按钮,将当前日历的年份减一和加一。还可以在某年内按月前后翻动,用鼠标左键单击
2、“上月”和“下月”按钮,将日历的月份减一和加一。(2)左键单击日历上的日期,可以通过右侧的记事本(文本区)编辑有关日志,并将日志保存到一个文件,该文件的名字是由当前日期组成的字符序列。用户可以读取、删除某个日期的日志,也可以继续向某个日志添加新的内容。在保存、删除和读取日志时都会先弹出一个确认对话框,以确认保存、删除和读取操作。(3)当某个日期有日志时,该日期以粗体16号字显示,表明这个日期有日志;当用户删除某个日期的日志后,该日期恢复原来的外观。实现效果图(参考)如下:提示:(1)组件调用public void setFont(Font f)方法可以设置组件上的字体,Font类的构
3、造方法为:public Font(String name,int style,int size),其中name是字体的名字,style决定字体的样式(如Font.BOLD表示粗体)size决定字体的大小。(具体请参考JDK API)(2)当左键单击日历上的日期时,如要获取该日期,可通过处理该组件上的鼠标事件来实现。4实验步骤、实施过程、关键代码、实验结果及分析说明等1. CalendarPad类(1) 进行整体布局,建立日历记事本文件,设置日历卡,把日期按星期顺序排列,并用窗口监视器实现。(2)用窗口监视器实现,结果如下:2. Notepad类(1) 对日期的设置
4、和获取,设置信息条,对文本框进行设置,保存日志、删除日志和读取日志按钮的事件实现。(2)保存日志按钮事件实现如下:(3)读取日志按钮事件实现如下:(4.)删除日志按钮事件实现如下:3 Year类(1)输入年份可以实现输出,给上下年按钮设置监视器,对上下年按钮事件的实现。(2)其结果如下:4. Month类(1)设置上下月监视器,对上下月按钮的事件实现,区分闰年和平年,对天数不同的月份进行分类。(2)其结果如下:(续上页,可加页)5 各个类的源代码如下: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); /设置监视器 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); /进行整体布局 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() /设置窗口监视器 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) /设置日历卡 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) /保存日志按钮事件实现 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) /删除日志按钮事件实现 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) /读取日志按钮事件实现 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); /设置监视器 public void setYear(int year) this.year=year; showYear.setText(""+ye
40、ar); public int getYear() return year; public void actionPerformed(ActionEvent e) /上下年按钮事件的实现 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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年厢货运输车项目发展计划
- 护理学基础:预防与感染
- 陕西邮电职业技术学院《水产动物育种学》2023-2024学年第二学期期末试卷
- 集安市2025年四年级数学第二学期期末预测试题含解析
- 霍城县2025届三年级数学第二学期期末考试模拟试题含解析
- 青岛城市学院《大规模数据挖掘与分布式处理》2023-2024学年第二学期期末试卷
- 青岛幼儿师范高等专科学校《影视鉴赏与批评》2023-2024学年第一学期期末试卷
- 青岛港湾职业技术学院《中国文化概要非语》2023-2024学年第二学期期末试卷
- 青岛理工大学《建筑力学与结构形式》2023-2024学年第二学期期末试卷
- 青岛第二十六中学2025年高三3月联合调研考试生物试题含解析
- 《学记》的教育思想及其当代价值解析课件
- 律师的职业道德执业规范与执业风险防范
- 国家电网公司施工项目部标准化管理手册(2021年版)线路工程分册
- 装配式建筑深化设计(PPT81P)
- 2022年《中央企业合规管理办法》新制订《中央企业合规管理办法》全文内容课件
- 吊篮使用安全技术交底
- 草船借箭示范课件第2课时
- 利益冲突审查表
- 办公室平面图模板
- 移动机器人机械臂的设计
- 电气控制与plc应用技术》期末试卷c卷
评论
0/150
提交评论