日历记事本文档

  • 格式:doc
  • 大小:161.50 KB
  • 文档页数:12

GUI综合应用项目:日历记事本设计一、实训目的1、巩固JAVA程序设计的基本理论知识。

2、将理论知识和实践结合起来,将理论知识应用到实践中,编写应用程序。

3、通过实训,掌握基本的编程思想方法,具备一定的编程能力。

二、实训的基本要求2.1 理论要求1、熟悉JAVA基本语法及三种基本结构(顺序、选择、循环)。

2、熟悉JAVA面向对象程序设计思想。

3、熟悉JAVA的类抽象、封装、继承、多态的特性。

在此基础上,多查阅资料,独立思考完成程序代码,并写出详细的设计书。

2.2 设备要求JDK1.5.0以上版本,JBuilder或Eclipse3.0。

三、实训内容运用JA V A语言设计一个GUI 界面的日历记事本。

系统将日历、记事本结合在一起,用户可以方便地在任何日期记载有关内容以及查看某个日期记载的内容。

其内容为:1、界面的左侧是日历。

该日历可以按年前后翻动,当鼠标单击“上一年”按钮时,当前日历的年份将减一;当鼠标左键单击“下年”按钮,当前日历的年份将加一。

2、也可以在某年内按月前后翻动。

当鼠标左键单击“上月”按钮时,当前日历的月份将减一;当鼠标左键单击“下月”当前日历表的月份将加一。

3、使用鼠标左键在要选择的日期上单击,如有记事内容,程序将弹出对话框提示该日有记事内容,提示用户是否用记事本显示该内容。

4、选择具体日期后,可以将记事本的内容保存起来,形成一个日志。

5、日历记事本共有4 个Java 源文件:MyCalendar.java,用来描述日期类;CalendarPad.Java,负责创建日历记事本主窗口,该文件含有main方法,程序从该类开始执行;CalendarFrame.java,用来描述日历记事本窗体;NotePad.Java,负责创建记事本(也可以不单独定义类,将其放在日历记事本窗体中定义)。

6、运行效果图7、附加功能:在完成以上功能基础上为日历记事本增加农历显示、添加背景图片、增加重要事务提醒等功能。

四、实训步骤前期准备:通过JDK1.6API中文版学习java.util.Calendar类,了解日历记事本项目的基本情况,分析其设计思路。

4.1 完成日历类MyCalendar的设计1、完成加粗注释下代码的填写import java.util.Calendar;public class MyCalendar {//定义年year//定义月份month//定义日子day//用于保存相应年月的日历排列的字符串数组dayspublic MyCalendar(){} //不带参数的构造方法public MyCalendar(int year,int month,int day){//初始年月日的构造方法this.year=year; this.month=month; this.day=day;}public int getYear() {//返回年份return year;}public void setYear(int year) {//设置年份this.year = year;}public int getMonth() {//返回月份return month;}public void setMonth(int month) {//设置月份this.month = month;}public int getDay() {//返回日return day;}public void setDay(int day) {//设置日this.day = day;}public String[] getDays(){//返回日历分布字符串数组return days;}public void setDays(){ //设置某年某月的日历//首先,获得某年某月的某天是星期几//创建日历实例对象//设置日历的年、月和日(注意月份减一)//获取当前月第一天是星期几,并保存在整型变量xq中//获取某年某月的天数,并保存在整型变量day_num中//如果是1、3、5、7、8、10、12月,则天数为31天;//如果是4、6、9、11月,则天数为30天;//如果是2月,且闰年,天数为29天,不闰年,天数为28天。

//将日历分布保存到字符串数组days中//创建能保存42个元素的字符串数组days//将days数组中所有元素初始化为空字符串//将日历保存到对应的days数组元素中}}2、编写一个类CalendarPad,创建MyCalendar的实例,并完成2010年10月的日历输出,其输出界面如下:4.2 完成日历记事本窗体的设计1、用子类继承JFrame的方法创建日历记事本的主窗体CalendarFrame,要求满足条件:(1)标题为“我的日历记事本”也可以自己定义;(2)窗体大小为(600,300),并且大小不可以改变;(3)窗体出现在(100,100)的位置;(4)关闭主窗体时退出应用程序。

import java.awt.*;import javax.swing.*;public class CalendarFrame extends JFrame{//定义CalendarFrame的构造方法CalendarFrame(String s){//设置标题//设置窗体出现的位置和大小//设置窗体大小不可改变//设置窗体可见//设置窗体的关闭方式为退出应用程序}}2、将原来的CalendarPad类修改为如下:public class CalendarPad{public static void main(String args[]){new CalendarFrame(“我的日历记事本”);//CalendarFrame f=new CalendarFrame(“我的日历记事本”);}}即可查看窗体的样式。

4.3 完成日历记事本菜单的设计1、在CalendarFrame上面进行修改,增加基本菜单import java.awt.*;import javax.swing.*;public class CalendarFrame extends JFrame{//声明菜单条对象mb//声明菜单m1,m2,m3//声明菜单项对象m11,m12,m21,m22,m23,m31,m32//定义CalendarFrame的构造方法CalendarFrame(String s){//设置标题super(s);//设置窗体出现的位置和大小setBounds(100,100,600,300);//设置窗体大小不可改变setResizable(false);//创建菜单//创建菜单条对象mb//创建菜单m1//创建菜单项m11//将菜单项m11加载到菜单m1中//将菜单m1加载到菜单条mb上//……完成m2,m3菜单的设计与加载//将菜单条mb加载到窗体上//设置窗体的可见setVisible(true);//设置窗体的关闭方式为退出应用程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}2、完成菜单的设置(1)菜单图片加载为打开和保存菜单添加图标open.gif和save.gifm11=new JMenuItem("打开",new ImageIcon("open.gif"));(2)菜单快捷键设置m11.setAccelerator(KeyStroke.getKeyStroke(‘O’));m12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEv ent.CTRL_MASK));(3)在保存和退出菜单之间加一个分隔条m1.addSeparator();(4)将保存菜单设置为不可用 M12.setEnabled(false);3、子菜单的设计(1)如何在原有菜单基础上完成如下子菜单的设计帮助|_帮助主题|_关于…|_升级|_升级设置|_立即升级4.4 完成日历界面的布局与设计1、窗体的布局import java.awt.*;import javax.swing.*;public class CalendarFrame extends JFrame{JMenuBar mb;JMenu m1,m2,m3,m33;JMenuItem m11,m12,m13,m21,m22,m23,m31,m32,m331,m332;//声明容器面板p1,p11,p12,p13,p14,p2,p21JPanel p1,p11,p12,p13,p14,p2,p21;//声明两个列盒bv1,bv2Box bv1,bv2;//声明标签dateLabel并创建初始化JLabel dateLabel;//声明文本区域note并创建初始化JTextArea note;CalendarFrame(String s){super(s);setBounds(100,100,600,300);setResizable(false);mb=new JMenuBar();m1=new JMenu("文件");m11=new JMenuItem("打开", new ImageIcon("open.gif"));m11.setAccelerator(KeyStroke.getKeyStroke(‘O’));m1.add(m11);m12=new JMenuItem("保存",new ImageIcon(".\\images\\save.gif"));m12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputE vent.CTRL_MASK));m1.add(m12);m1.addSeparator();m13=new JMenuItem("退出");m1.add(m13);mb.add(m1);m2=new JMenu("编辑");m21=new JMenuItem("复制");m2.add(m21);m22=new JMenuItem("剪切");m2.add(m22);m23=new JMenuItem("粘贴");m2.add(m23);mb.add(m2);m3=new JMenu("帮助");m31=new JMenuItem("帮助主题");m3.add(m31);m32=new JMenuItem("关于…");m3.add(m32);m33=new JMenu("升级");m331=new JMenuItem("升级设置");m33.add(m331);m332=new JMenuItem("立即升级");m33.add(m332);m3.add(m33);mb.add(m3);setJMenuBar(mb);///////////////布局设计///////////////////////为窗体应用流型布局//向窗体中添加列盒布局容器p1//创建一个面板p1p1=new JPanel();//创建列盒布局bv1bv1=Box.createVerticalBox();//创建改变年月面板容器p11//将p11放入列盒bv1中//创建星期面板容器p12//将p12放入列盒bv1中//创建日历面板容器p13//将p13放入列盒bv1中//创建农历提示面板容器p14//将p14放入列盒bv1中//将列盒bv1加入面板容器p1//将面板容器p1加入窗体//向窗体中添加列盒布局容器p2//创建一个面板p2//创建列盒布局bv2bv2=Box.createVerticalBox();//创建标签dateLabeldateLabel=new JLabel("2010年10月1日");//将dateLabel放入列盒bv2中//创建日志文本区域容器notenote=new JTextArea(10,20);//将note放入列盒bv2中//创建按钮面板容器p21//将p21放入列盒bv2中//将列盒bv2加入面板容器p2//将面板容器p2加入窗体/////////////////////////////////////////// setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}2、日历记事本界面组件的设计首先在CalendarFrame类中声明界面上需要使用的对象, JLabel xqLabel[]=new JLabel[7]; //用于描述星期JButton rlButton[]=new JButton[42];//用于描述日历JButton priYear,nextYear,priMonth,nextMonth,save,delete;JTextField yearText;//用于输入年份的文本框JLabel monthLabel;//用于显示月份的标签JLabel nlLabel;//放在农历面板P14上,用于显示农历信息完成修改日历面板p11的设计:p11=new JPanel();//创建星期面板容器p11//在面板p11上依次创建并加载priYear,yearText,nextYear,priMonth, monthLabel,nextMonthbv1.add(p11);//将p11放入列盒bv1中完成星期面板p12的设计:p12=new JPanel();//创建星期面板容器p12//在面板p12上应用1×7的网格布局//循环创建7个星期标签,并将标签加入面板p12中//完成标签上内容的初始,分别为“日一二三四五六”bv1.add(p12);//将p12放入列盒bv1中完成日历面板p13的设计p13=new JPanel();//创建星期面板容器p13//在面板p13上应用6×7的网格布局//循环创建42个按钮,并将标签加入面板p13中bv1.add(p13);//将p13放入列盒bv1中完成日历面板p13的设计p14=new JPanel();//创建农历面板容器p14//在面板p14上创建并加载农历标签bv1.add(p14);//将p13放入列盒bv1中完成日志处理面板p21的设计:p21=new JPanel();//创建星期面板容器p21//在面板p21上依次创建并加载save,delete按钮bv2.add(p21);//将p21放入列盒bv2中3、完成显示2010年10月的日历展示//首先在CalendarFrame类中声明MyCalendar类的对象mydateMyCalendar mydate;//然后在p13之前创建日历对象mydate,并设定当前年月日//通过date对象调用setDays()的方法完成日历计算p13=new JPanel();//创建星期面板容器p12p13.setLayout(new GridLayout(6,7)); //在p13上应用6×7的网格布局 //循环创建42个按钮,并将标签加入面板p13中for(int i=0;i<rlButton.length;i++){rlButton[i]=new Jbutton();//设置按钮上显示的数字}bv1.add(p13);//将p13放入列盒bv1中思考:如何达到显示系统当前年月的日历呢?4、对界面的优化(1)将日历中周日列和周六列的字体颜色(组件的前景颜色)分别设置为红色和蓝色;(2)将星期的字体设置为12号的隶书,并且加粗;并且将日历的字体设置为12号黑体;(3)在上年、下年、上月和下月按钮设置快捷键;在保存和删除按钮上增加图标;(4)将星期标签凸出显示;(5)将日历按钮凹下显示。