为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

JAVA小日历软件设计报告

2019-01-13 24页 doc 59KB 50阅读

用户头像

is_037433

暂无简介

举报
JAVA小日历软件设计报告佛山科学技术学院 《可视化编程技术》课程设计报告 小日历软件设计 学生姓名:  冯倩冰  学    号:  2012914204 年级专业:12级教育技术学 指导老师:    容汝佳 学    院: 教育科学学院 广东★佛山 提交日期:2014年6月 目    录 1. 前言………………………………………………………………………………2 2.概要设计…………………………………………………………………………3 2.1 开发环境 ……………………………………………………………………3 2.2 设计目标 ………………………………...
JAVA小日历软件设计报告
佛山科学技术学院 《可视化编程技术》课程 小日历软件设计 学生姓名:  冯倩冰  学    号:  2012914204 年级专业:12级教育技术学 指导老师:    容汝佳 学    院: 教育科学学院 广东★佛山 提交日期:2014年6月 目    录 1. 前言………………………………………………………………………………2 2.概要设计…………………………………………………………………………3 2.1 开发环境 ……………………………………………………………………3 2.2 设计目标 ……………………………………………………………………3 2.3 小日历功能 …………………………………………………………………3 2.4 界面设计 ……………………………………………………………………3 3. 详细设计  ………………………………………………………………………4 3.1 使用的java类的说明  ……………………………………………………4 3.2 类的主要方法 ………………………………………………………………5 3.2.1 设计的方法 ………………………………………………………5 3.2.2 程序大纲  ……………………………………………………………5 3.2.3 设计总体认识 …………………………………………………………6 3.2.4 程序流程图 ……………………………………………………………6 4. 运行结果  ………………………………………………………………………7 5. 测试分析  ………………………………………………………………………7 5.1 程序操作  …………………………………………………………………7 5.2 退出程序  …………………………………………………………………7 6. 源程序  …………………………………………………………………………8 参考文献  …………………………………………………………………………13 设计总结  …………………………………………………………………………13 摘要:该程序是一个图形界面的简单的Java小日历,具有美观舒适的界面,使用者能快捷简单地进行操作。即时点击就能准确地获得需要的日期信息,充分降低了日期查找的难度和节约了时间,对人们的生活有重要的作用。点击年份上下箭头可以选取所查年份,通过月份下拉箭头可以选择月份,然后页面就会出现你选择的那月进行每一天日期和星期的查询。界面以红色系为主,给人舒适的感觉。 关键字:java小日历软件,日历类,查询,事件 1 前言 Java技术在1995年被互联网所接受,通过不断的发展和完善,已由单一的编程语言演变成为具有广泛实用性的开发大平台。Java技术已被IT业内的主要公司所接受并加以运用。Java技术的高效性、通用性、平台移植性和安全性等使之成为网络应用的首选技术。从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java无处不在! Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。 Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C++语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。 Java应用小程序(JavaApplets)是需要Web浏览器(这种Web浏览器必须具有Java虚拟机和Java类库。例如Netseave的Navigator、Mlerosoft的Explorer和Sun的Hotjava等)支持运行的Java应用程序。利用Java应用小程序,就可以由Java应用小程序直接与应用服务软件进行交互。这样,首先可以减轻HTTP协议的传输负荷,使其专用于HTML文件和Java应用小程序的传输;其次,Java应用小程序可以同时与多个应用服务软件之间建立连接,同时接受多个应用服务器的服务。因此,Java的引入不仅给Web页面带来了动态性,而且使Web客户可以访问更强大的应用服务软件,进一步提高信息共享的质量。 2 概要设计 2.1开发环境 开发平台:Microsoft Windows XP Professional Service Pack 2 开发工具:JBuilder 2007 + JDK 1.6.0_02 2.2设计目标 (1)显示当月日历、当前日期、当前时间; (2)可查寻任意月以及任意年的日历; (3)使用图形化界面能够弹出对话框; (4)正常退出程序。  2.3小日历功能 功能 1:启动小程序,日历就会显示系统当天的日期,这是最初的功能。 功能 2:点击其他日期,该日期小框的背景色会变成粉红色,数字变成白色,突出显示你选中的日期。 功能 3:点击年份上下箭头可以选取所查年份,此时月份和日期还是原来你选取的,不会改变。 功能 4:通过月份下拉箭头可以选择月份,页面就会出现你选择的年份、月份,便可进行每一天日期和星期的查询。然后可重复功能 3 和功能 4 。 功能5:窗口可以进行缩小放大,以及可以正常关闭程序。 2.4页面设计 图2.3 小日历面板 3 详细设计                                                3.1小日历使用的Java类的说明 类名: MyCalendar 作用: 主类 继承的父类: JApplet类  public class MyCalendar extends JApplet  {  } 让applet作为一个可执行的程序来运行      public static void main(String[] args) {          JFrame frame = new JFrame("日历");          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        MyCalendar myCalendar = new MyCalendar();        myCalendar.init();          frame.getContentPane().add(myCalendar);        frame.setSize(270, 200);        frame.show();    }  }  类名: CalendarTable 作用: 主类 继承的父类: JTable类 class CalendarTable extends JTable {  } 设置日历的 table      public static class CalendarTable extends JTable {//表格类          private Calendar calendar;          public CalendarTable(TableModel model, Calendar calendar) {//构造方法            super(model);            this.calendar = calendar;        }          public void changeSelection(int row, int column, boolean toggle, boolean extend) {//选择表格单元格时            super.changeSelection(row, column, toggle, extend);            if (row == 0) {//选择为第一行(星期)时不改变单元格                return;            }              Object obj = getValueAt(row, column);            if (obj != null) {                  calendar.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue());            }        }    }  3.2类的主要方法 3.2.1设计的方法分析 在本程序中:定义了一个Frame类,主要定义一个窗体框架,用于显示日历信息,并在主函数中只创建一个该窗体对象实现程序功能。  定义了一个主日历面板类MyCalendar,其中包含了日历设计所用到的全局变量、功能函数等,在Frame类里定义了其对象。在该日历面板类里又设计了一个内部类CalendarTable表格类,用于布局日历天的显示格式。    3.2.2程序大纲 3.2.3设计的总体认识 ● JAVA设计的摘要 ● JAVA设计的目录结构 ● JAVA设计的概要和详细设计 ● JAVA设计需要编译的环境 ● JAVA设计的实用性 3.2.4程序流程图 4运行结果 图4 改变年月结果显示 5测试分析 5.1 程序操作 对小程序进行调试,没有错误出现。然后弹出了名为“日历”的小窗口,窗口左上角出现年份显示,按上下按钮可以改变年份;右上角显示月份,按下拉窗口可以选择1——12月;网格窗口中第一行是星期的显示;剩下的行大部分网格的背景色为白色,数字字体为红色,只有选中(当前系统)的日期显示为粉红色背景。 5.2 退出程序 小程序弹出的窗口上方有最小化、最大化(还原)、关闭窗口的按键。 窗口最初大小是程序设计中frame.setSize(300, 150); 设置的,300是宽度,150是高度。只要按红色关闭按钮,就可以顺利退出程序。不存在无法关闭小程序的问。 6 程序清单: import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; public class MyCalendar extends JApplet {    //定义周日到周六全局变量 public static final String WEEK_SUN = " 周日";    public static final String WEEK_MON = "周一";    public static final String WEEK_TUE = " 周二";    public static final String WEEK_WED = " 周三";    public static final String WEEK_THU = " 周四";    public static final String WEEK_FRI = " 周五";    public static final String WEEK_SAT = " 周六";    //设置背景的颜色 public static final Color background = Color.white;  //设置前景的颜色  public static final Color foreground = Color.red; //设置星期的背景颜色和前景颜色    public static final Color headerBackground = Color.pink;    public static final Color headerForeground = Color.white;    //设置被选中的日期的背景颜色和前景颜色 public static final Color selectedBackground = Color.pink;    public static final Color selectedForeground = Color.white;    private JPanel cPane;    private JLabel yearsLabel;    //年的改变 private JSpinner yearsSpinner;      //年调控 private JLabel monthsLabel;    private JComboBox monthsComboBox;  //月份的下拉框  private JTable daysTable;      //用来显示日期的table private AbstractTableModel daysModel;    private Calendar calendar;  public MyCalendar() {        //构造初始化方法panel cPane = (JPanel) getContentPane();    }    //初始化,对所有的空间进行布局 public void init() {        cPane.setLayout(new BorderLayout());  //使用border布局管理器      calendar = Calendar.getInstance();        calendar = Calendar.getInstance();      yearsLabel = new JLabel("年:");        yearsSpinner = new JSpinner();        yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000"));      yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR))); //增加监听,监听年份的改变 yearsSpinner.addChangeListener(new ChangeListener() {                public void stateChanged(ChangeEvent changeEvent) {                    int day = calendar.get(Calendar.DAY_OF_MONTH);                    calendar.set(Calendar.DAY_OF_MONTH, 1);                  calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue()).intValue());                  int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);                  calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);                    updateView();              }            });        JPanel yearMonthPanel = new JPanel();        cPane.add(yearMonthPanel, BorderLayout.NORTH);        yearMonthPanel.setLayout(new BorderLayout());        yearMonthPanel.add(new JPanel(), BorderLayout.CENTER);        JPanel yearPanel = new JPanel();        yearMonthPanel.add(yearPanel, BorderLayout.WEST);        yearPanel.setLayout(new BorderLayout());        yearPanel.add(yearsLabel, BorderLayout.WEST);        yearPanel.add(yearsSpinner, BorderLayout.CENTER);        monthsLabel = new JLabel("月: ");                //向月份下拉框中添加内容      monthsComboBox = new JComboBox();        for (int i = 1; i <= 12; i++) {              //构造下拉框的12个月份        monthsComboBox.addItem(new Integer(i));      }        monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH)); //下拉框当前月份为选中状态  monthsComboBox.addActionListener(new ActionListener() //注册月份下拉框的事件监听器              {    public void actionPerformed(ActionEvent actionEvent) {                    int day = calendar.get(Calendar.DAY_OF_MONTH);                    calendar.set(Calendar.DAY_OF_MONTH, 1);                  calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());                  int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);                    calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);                  updateView();        //更新显示        }            }); JPanel monthPanel = new JPanel();        yearMonthPanel.add(monthPanel, BorderLayout.EAST);        monthPanel.setLayout(new BorderLayout());        monthPanel.add(monthsLabel, BorderLayout.WEST);        monthPanel.add(monthsComboBox, BorderLayout.CENTER);        daysModel = new AbstractTableModel() {                public int getRowCount() {                    return 7;            //设置行数为7    }                public int getColumnCount() {                    return 7;            //设置列数为7    }                public Object getValueAt(int row, int column) {                    if (row == 0) {      //第一行显示星期                return getHeader(column);                    }                    row--;                    Calendar calendar = (Calendar) MyCalendar.this.calendar.clone();                    calendar.set(Calendar.DAY_OF_MONTH, 1);                    int  dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);                    int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;                    int index = row * 7 + column;                    int dayIndex = index - moreDayCount + 1;                    if (index < moreDayCount || dayIndex > dayCount) {                        return null;                    } else {                        return new Integer(dayIndex);                    }            }          }; daysTable = new CalendarTable(daysModel, calendar);        //设置每个cell可以被选中 daysTable.setCellSelectionEnabled(true);    //设置表格单元格可选择  daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);        daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int column) {                    String text = (value == null) ? "" : value.toString();                    JLabel cell = new JLabel(text);                    cell.setOpaque(true);                    if (row == 0) {          //第一行显示星期,设置为星期的前景色和背景                      cell.setForeground(headerForeground);                        cell.setBackground(headerBackground);                    } else {                if(isSelected) {    //日期单元格如果选中,则设置为日期选中的前、背景色                            cell.setForeground(selectedForeground);                            cell.setBackground(selectedBackground); } else {          //设置日期单元格的普通前、背景色                        cell.setForeground(foreground);                            cell.setBackground(background);                        }                    }                    return cell;                }            });        updateView();        cPane.add(daysTable, BorderLayout.CENTER);      }; //返回指定索引index位置上的字符,索引范围从头开始 public static String getHeader(int index) {        switch (index) {        case 0:            return WEEK_SUN;        case 1:            return WEEK_MON;        case 2:            return WEEK_TUE;        case 3:            return WEEK_WED;        case 4:            return WEEK_THU;        case 5:            return WEEK_FRI;        case 6:            return WEEK_SAT;        default:            return null;        }    }    public void updateView() {        daysModel.fireTableDataChanged();        daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),                                          calendar.get(Calendar.WEEK_OF_MONTH));        daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1,                                            calendar.get(Calendar.DAY_OF_WEEK) - 1);    }    public static class CalendarTable extends JTable {        private Calendar calendar;        public CalendarTable(TableModel model, Calendar calendar) {            super(model);            this.calendar = calendar;        }        public void changeSelection(int row, int column, boolean toggle, boolean extend) {            super.changeSelection(row, column, toggle, extend);            if (row == 0) {                return;            }            Object obj = getValueAt(row, column);            if (obj != null) {                calendar.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue());            }      }    }    //让applet作为一个可执行的程序来运行 public static void main(String[] args) {  JFrame frame = new JFrame("日历");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        MyCalendar myCalendar = new MyCalendar();      myCalendar.init();        frame.getContentPane().add(myCalendar);        frame.setSize(800, 200);    //设置窗口的大小  frame.show();    } } 参考文献 马亮亮  李晋    《Java语言与其开发技术未来展望》  信息与电脑期刊 刘浦迎  谢春      《java程序设计实用教程》      科学出版社 张白一  崔尚林    《面向对象程序设计—java》  西安电子科技大学出版社 潘浩    李芙玲    《Java程序设计》            清华大学出版社 谢俊青  张晖      《Java技术概述》            技术专栏期刊 设计总结 次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我决定做一个小日历组件的设计。主要考虑到本学期时间少课程内容多,JAVA课程基础内容掌握并不是很扎实,而对于设计一个小日历组件,由于其功能简单设计也相对较易,对于我个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。  对于小日历的设计,首先考虑它的功能有哪些,需要显示什么,如何进行窗口构建布局,色彩的搭配使用,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架。  小日历组件在设计过程中参考了一些网络上的日历设计程序,在参考程序的基础上,进行自己个性化的改造,包括全部颜色的调整,将英文显示改为中文显示等。经过了反复编写调试,课本和网上查阅相关资料相关文章,完成了整个课程设计。在这个过程中,在把本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。 通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力,善于思考。还要熟悉常用的编程技巧和编程思想,编程者更要有严谨地态度。还有通过设计过程中要查阅网络文章,善于向老师寻求解决问题的办法,对一些关键知识点逐个地了解并解决相关问题。
/
本文档为【JAVA小日历软件设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索