JAVA小日历软件设计报告_第1页
JAVA小日历软件设计报告_第2页
JAVA小日历软件设计报告_第3页
JAVA小日历软件设计报告_第4页
JAVA小日历软件设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

佛山科学技术学院佛山科学技术学院 可视化编程技术可视化编程技术课程设计报告课程设计报告 小日历软件设计小日历软件设计 学生姓名:学生姓名: 冯倩冰冯倩冰 学学 号:号: 年级专业:年级专业:12 级教育技术学级教育技术学 指导老师:指导老师: 容汝佳容汝佳 学学 院:院: 教育科学学院教育科学学院 广东佛山 提交日期:2014 年 6 月 1 目目 录录 1.1. 前言前言22 2 2概要设计概要设计33 2.12.1 开发环境开发环境 33 2.22.2 设计目标设计目标 33 2.32.3 小日历功能小日历功能 33 2.42.4 界面设计界面设计 33 3.3. 详细设计详细设计 44 3.13.1 使用的使用的 JAVAJAVA 类的说明类的说明 44 3.23.2 类的主要方法类的主要方法 55 .1 设计的方法分析设计的方法分析 55 .2 程序大纲程序大纲 55 .3 设计总体认识设计总体认识 66 .4 程序流程图程序流程图 66 4.4. 运行结果运行结果 77 5.5. 测试分析测试分析 77 5.15.1 程序操作程序操作 77 5.25.2 退出程序退出程序 77 6.6. 源程序源程序 88 参考文献参考文献 1313 设计总结设计总结 1313 2 摘要:摘要:该程序是一个图形界面的简单的 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 应用小程序的传输; 3 其次,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 页面设计页面设计 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 5 作用: 主类 继承的父类: 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 表格类,用于布局日历天的显示格式。 6 3.2.2 程序大纲程序大纲 3.2.3 设计的总体认识设计的总体认识 JAVA 设计的摘要 JAVA 设计的目录结构 JAVA 设计的概要和详细设计 JAVA 设计需要编译的环境 JAVA 设计的实用性 7 3.2.4 程序流程图程序流程图 4 运行结果运行结果 图 4 改变年月结果显示 8 5 测试分析测试分析 5.1 程序操作程序操作 对小程序进行调试,没有错误出现。然后弹出了名为“日历”的小窗口,窗口左上角出 现年份显示,按上下按钮可以改变年份;右上角显示月份,按下拉窗口可以选择 112 月;网格窗口中第一行是星期的显示;剩下的行大部分网格的背景色为白色,数字字体为 红色,只有选中(当前系统)的日期显示为粉红色背景。 5.2 退出程序退出程序 小程序弹出的窗口上方有最小化、最大化(还原) 、关闭窗口的按键。 窗口最初大小是程序设计中 frame.setSize(300, 150); 设置的,300 是宽度,150 是高度。 只要按红色关闭按钮,就可以顺利退出程序。不存在无法关闭小程序的问题。 6 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; 9 /设置星期的背景颜色和前景颜色 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); 10 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 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 11 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 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) /日期单元格如果选中,则设置为日期选中的前、背景色 12 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_WEE K) - 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; 13 Object obj = getValueAt(row, column); if (obj != null) calendar.set(Calendar.DAY_OF_MONTH, (Integer)obj).intValue(); /让applet作为一个可执行的程序来运行 public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论