类详细设计
各个类的简要描述(在整个软件中的地位及实现功能的简要描述,其继承层次关系及所实现的接口等);详细设计每个类的成员变量、构造方法与方法;并根据详细设计给出每个类的实现代码。
1.主函数CalendarWindow类
(1)简要描述:
该类是整个程序的主框架,是javax.swing包中Jframe的一个子类。并实现了ActionListener、MouseListener和FocusListener接口。
(2)类详细设计:
该类的成员变量、构造方法及方法设计如下:
1) 成员变量
- year,month和day是int型变量。它们的值分别确定年份、月份和日期。
- calendarMessage是CalnedarMessage对象,该对象用来处理与日期有关的数据。
- calendarPad是CalendarPad对象,该对象可以显示与日期有关的数据。
- notPad是NotPad的对象。具有编辑、读取、保存和删除日志的功能。
- showYear和showMonth是JtextField类创建的文本框,用来显示年月。
- showDay数组的每个单元是JtextField类创建的用来显示日期的文本框。
- calendarImage是CalendarImage创建的对象,用来显示图像。
- clock是Clock创建的对象,用来显示时钟。
- nextYear,PreviousYear,nextMonth和PreviousMonth是JButton创建的按钮对象,名字依次为“下年、上年、下月、上月”。这些按钮都将当前窗口注册为自己的ActionEvent事件监视器。
- savaDailyRecord,deleteDailyRecord和readDailyRecord是JButton创建的按钮对象,名字依次为“保存日志、删除日志、读取日志”。这些按钮都将当前窗口注册为自己的ActionEvent事件监视器。
2) 构造方法
- CalendarWindow()是构造方法,负责完成窗口初始化。
3) 方法
- actionPerformed(ActionEvent)方法是CalendarWindow类实现的ActionListener接口中的方法。CalendarWindow创建的窗口是nextYear,previousYear,nextMonth,previousMonth,saveDailyRecord,deleteDailyRecord和readDailyRecord按钮的ActionEvent事件监视器,当用户单击其中按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。
- mousePressed(MouseEvent)方法是CalendarWindow类实现的MouseListener接口中的方法。CalendarWindow创建的窗口时showDay数组中的JtextField文本框的MouseEvent事件监视器,当用户在某个显示日期的文本框上按下鼠标左键时,窗口将执行mousePress(MouseEvent)方法进行相应操作。
- focusGained(FocusEvent)和focusLost(FocusEvent)方法是CalendarWindow类实现的FocusListener接口中的方法。CalendarWindow创建窗口是showDay数组中的JtextField文本框的FocusEvent事件监视器,当用户的操作导致某个显示日期的文本框的焦点发生变化时,窗口将执行focusGained(FocusEvent)或focusLost(FocusEvent)方法进行相应的操作。
- doMark()方法负责对有日志的日期作出标志。
- main方法是程序运行的入口方法。
2. CalendarMessage类
CalendarMessage类创建的对象calendarMessage是CalendarWindow窗口的重要成员对象之一,负责处理和日期有关的数据。该类的有关数据说明如下:
1) 成员变量
year,month,day是int型数据,它们的值分别确定年份、月份和日期。
2) 方法
- setYear(int)和getYear()方法分别用来设置year和获取year的值。
- setMonth(int)和getMonth()方法分别用来设置month和获取month的值。
- setDay(int)和getDay()方法分别用来设置和获取day的值。
- getMonthCalendar()方法是用来处理日期数据,使其按着习惯来显示。即日历牌中每行的第一列为“星期天”。getMonthCalendar()方法根据year,month和day的值返回一个存放着“日历”数据的String类型的数组,例如,如果某月有30天,而且该月的第一天是星期三,那么返回的String类型的数组是:“”,“”,“”,“1”,“2”,·····,“30”。
3. CalendarPad类
CalendarPad类是javax.swing包中Jpanel容器的子类,所创建的对象:calendarPad是CalendarWindow类中最重要的成员之一,负责显示经CalendarMessage类处理后的日期数据,被添加到CalendarWindow窗口的左上侧。以下是该类的有关说明:
1) 成员变量
- year,month和day是int型数据,它们的值分别确定年份、月份和日期
- calendarMessage是CalendarMessage对象,该对象可以处理和日期有关的数据。
- showDay数组的每个单元是JtextField类创建的用来显示日期的文本框。
- “星期”是String数组,单元的值依次为“SUN日”、“MON一”、“TUE二”、“WED三”、“THU四”、“FRI五”、“SAT六”。
2) 构造方法
- CalendarPad()是构造方法,用来创建calendarPad对象。
3) 方法
- setShowDayTextField(JtextField[])方法负责设置showDay数组。
- setCalendarMessage(CalendarMessage)方法负责设置calendarMessage对象。
- showMonthCalendar()方法负责显示“日历”。
4. NotePad类
NotePad类javax.swing包中的Jpanel容器的子类,实现了ActionListener接口,所创建的对象:notePad是MineGame CalendarWindow类中的重要成员之一,作为一个容器添加到CalendarWindow窗口的右上侧以,下是该类的有关说明:
1)成员变量
- text 是JtextArea创建的文本区,可在text中编译多行文本。
- showMessage 是 JtextField 创建的文本条,用来显示和日期相关的数据。
- menu是 JpopupMenu 创建的弹出式菜单。
- itemCopy、itemCut、itemPaste、itemClear 是JmenuItem 创建的菜单项,名字依次是“复制”, “剪切”, “黏贴”, “清空”。
2) 构造方法
- NotePad()构造方法,用来创建notePad对象。
3) 方法
- setShowMessage(int,int,int)方法根据参数指定的日期数据显示有关日期信息。
- save(File,int,int,int)方法根据参数指定日期保存日志
- delete(File,int,int,int) 用于删除日志
- read(File,int,int, int)用于读取日志。
5. CalendarImage类
CalendarImage创建的对象负责绘制图像
CalendarImage类是javax.swing包中Jpanel容器的一个子类,创建的对象calendarMessage是CalendarWindow类的成员之一,负责绘制图像,作为一个容器添加到CalendarWindow窗口的左下侧,以下是该类的有关说明:
1) 成员变量
- imageFile是File对象,用来存放图像文件的引用
- image 是Image对象
- tool 是Tookit对象,负责创建image对象
2) 构造方法
- CalendarImage()是构造方法,负责创建calendarImage 对象
3) 方法
- setImageFile(File)方法负责设置imageFile 对象,并根据imageFile创建image
- paintComponent(Griphics)方法负责绘制image
6. Clock类
Clock类是javax.swing包中Jpanel容器的子类,并实现了ActionListener接口,所创建的对象:clock是CalendarWindow类中的成员之一,负责显示时间,被添加到CalendarWindow窗口的右下侧,以下是该类的有关说明:
1) 成员变量
- date是Date对象,负责封装本地时间
- secondTime是javax.swing包中Timer类创建的计时
- hour,minute和second 是int型数据,分别飞“小时”,“分钟”和“秒”
- secondLine,minuteLine和hourLine是Lint2D对象,分别负责绘制“时针”,“分针”,“秒针”
- pointSX,pointSY是double型数组,其单元值用来表示秒针端点的坐标
- pointMX,pointMY是double型数组,其单元值用来表示分针端点坐标
- pointHX,pointHY是double型数组,其单元值用来便是时针端点坐标
2) 构造方法
- Clock()是构造方法,用来创建clock对象
3) 方法
- initPoint()负责创建表盘所需要的坐标点
- paintComponent(Graphics)负责完成绘制工作
- actionPerformed(ActionEvent)是接口ActionListener中的方法。使用Timer类的构造方法:timer(int a ,Object b )创建一个计时器,其中的参数a 的单位是毫秒,确定计时器每隔a毫秒“振铃”一次,参数b是计时器的监视器。计时器发生的振铃时件是ActionEvent类型时件,当振铃时间发生时,监视器就会监视到这个事件,监视器就会回调用ActionListener接口中的actionPerformed(ActionEvent)方法,该方法所做的操作是:每隔1秒钟,让秒针前进一个刻度,既secondLine改变端点坐标;每隔1分钟,让分针前进一个刻度(表盘一周为360°,每个时刻为6°),既muniteLine改变端点坐标;每隔12分钟,让时针前进一个刻度,既hourLine改变端点坐标。