《小日历 java课程设计实验报告》由会员分享,可在线阅读,更多相关《小日历 java课程设计实验报告(17页珍藏版)》请在金锄头文库上搜索。
1、软软 件件 学学 院院 课程设计课程设计报告书报告书 课程名称课程名称 设计题目设计题目 专业班级专业班级 学学号号 姓姓名名 指导教师指导教师 年年月月 共 17 页第 2 页 目录目录 JAVA 日历设计.3 1.设计目标.3 2.设计要求.3 3.制作要点:3 4.设计思想.3 5.设计类及对象设计.4 6.代码分析.4 6.程序源代码.10 7.调试记录.15 8.总结.16 9.参考文献.17 共 17 页第 3 页 JAVA 日历设计日历设计 1.设计目标设计目标 本课程设计实现一个日历的功能,可显示当前的年,月,日和星期.也可以查询,选择年, 月后,显示当时的日历. 2.设计要求
2、设计要求 (1)界面是日历。该日历可以按年前后翻动,当鼠标单击“上一年”按钮时,当前日 历的年份将减一;当鼠标左键单击“下年”按钮,当前日历的年份将加一。 (2)也可以在某年内按月前后翻动。当鼠标左键单击“上月”按钮时,当前日历的月份 将减一;当鼠标左键单击“下月” 当前日历表的月份将加一。 (3)使用鼠标左键在要选择的日期上单击,变颜色. 3.制作要点制作要点: (1).AWT 与 Swing 的使用. (2)应用 JApplet 生成界面. 4.设计思想设计思想 (1)本小日历设计主体结构为:设计一个框架 MainFrame,然后在 MainFrame 里 添加一个 MainPanel 面
3、板。定义一个 MainPanel 面板类,该面板以边布局格式,所有其 他面板、标签等均添加到该面板中。 (2)MainPanel 面板北部(上方) ,添加一个年月面板 YearMonthPanel。该年月面 板主要放年份显示、月份显示、标题显示。YearMonthPanel 面板也使用边布局格式,西 部添加一个年份面板,放年份信息;中部添加一个 TextPanel 面板,放标题文本显示信 息;东部添加一个月份面板 MonthPanel,放月份下拉框信息。 共 17 页第 4 页 (3)MainPanel 主面板的中部,添加一个 DaysPanel 面板用于放置月份的天数表格 信息。 (4)Ma
4、inPanel 主面板的南部(下方) ,添加一个 InfoPanel 面板,主要用于放置显 示个人信息。 (5)InfoPanel 面板上设计添加一个超级链接标签,链接到个人博客。 5.设计类及对象设计设计类及对象设计 在本程序中:定义了一个 Frame 类,主要定义一个窗体框架,用于显示日历信息, 并在主函数中只创建一个该窗体对象实现程序功能。 定义了一个主日历面板类 MyCalendar, 其中包含了日历设计所用到的全局变量、 功 能函数等,在 Frame 类里定义了其对象。在该日历面板类里又设计了一个内部类 CalendarTable 表格类,用于布局日历天的显示格式。 为了设计一个超级
5、链接,定义了一个 LinkLable 类,单独保存在一个文件 LinkTbale.java 中,在日历面板类 MyCalendar 里定义了其对象。 6.代码分析代码分析 定义星期天到星期六全局变量 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
6、 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.black;/设置前景颜色 public static final Color headerBackground = Color.blue;/设置题
7、头星期的背景 颜色 public static final Color headerForeground = Color.white;/设置题头星期的前景颜 色 public static final Color selectedBackground = Color.green;/设置被选中的日期的 共 17 页第 5 页 背景颜色 public static final Color selectedForeground = Color.white;/设置被选中的日期的前 景颜色 private JPanel cPane;/日历面板 private JLabel yearsLabel;/“年份
8、“标签 private JSpinner yearsSpinner;/年调控,年份组合框 private JLabel monthsLabel;/“月份“标签 private JComboBox monthsComboBox;/12 月下拉框 private JTable daysTable;/用来显示日期的 table,日表格 privateAbstractTableModel daysModel;/天单元表格 private Calendar calendar;/日历对象 函数定义 public MyCalendar() /构造函数 cPane = (JPanel) getContentP
9、ane(); public void init() /初始化,对所有的空间进行布局,面板界面函数 cPane.setLayout(new BorderLayout(); /使用 border 布局管理器 calendar = Calendar.getInstance();/默认方式,以本地的时区和地区来构造 Calendar yearsLabel = new JLabel(“年份: “);/设置年份标签显示 yearsSpinner = new JSpinner();/构造年份 spinner 组合框 yearsSpinner.setEditor(new JSpinner.NumberEdit
10、or(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_MONT
11、H, 1); calendar.set(Calendar.YEAR,(Integer) yearsSpinner.getValue().intValue(); intmaxDay= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH,day maxDay ? maxDay : day); updateView();/更新显示 ); JPanel yearMonthPanel = new JPanel();/定义年月面板 共 17 页第 6 页 cPane.add(yearMon
12、thPanel, BorderLayout.NORTH);/添加年月面板到日历面 板的南面(最上方) yearMonthPanel.setLayout(new BorderLayout();/边布局模式 yearMonthPanel.add(new JPanel(), BorderLayout.CENTER); JPanel yearPanel = new JPanel();/构建年份面板 yearMonthPanel.add(yearPanel, BorderLayout.WEST);/年份面板添加到年月 面板西部(左边) yearPanel.setLayout(new BorderLayo
13、ut();/设置年份面板为边布局并添加年 份标签和组合框 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
14、= new JPanel();/定义月份面板 yearMonthPanel.add(monthPanel, BorderLayout.EAST);/添加月份面板到年 月面板的东面(右面) monthPanel.setLayout(new BorderLayout();/月份面板设为边布局方式 monthPanel.add(monthsLabel, BorderLayout.WEST);/添加月份名称标签到 月份面板西面(左面) monthPanel.add(monthsComboBox, BorderLayout.CENTER);/添加月份下拉 框到月份面板中间 daysModel = new
15、AbstractTableModel() /设置 7 行 7 列 public int getRowCount() /设置 7 行 共 17 页第 7 页 return 7; public int getColumnCount() /设置列 7 return 7; public Object getValueAt(int row, int column) if (row = 0) /第一行显示星期 return getHeader(column); row-; Calendarcalendar=(Calendar) MyCalendar.this.calendar.clone(); calen
16、dar.set(Calendar.DAY_OF_MONTH, 1); intdayCount= 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);/构造日表格 /设置每个 call 可以被选中 daysTable.setCellSelectionEn