收藏 分享(赏)

小日历-JAVA课程设计实验报告.doc.doc

上传人:精品资料 文档编号:10876201 上传时间:2020-01-17 格式:DOC 页数:16 大小:105.50KB
下载 相关 举报
小日历-JAVA课程设计实验报告.doc.doc_第1页
第1页 / 共16页
小日历-JAVA课程设计实验报告.doc.doc_第2页
第2页 / 共16页
小日历-JAVA课程设计实验报告.doc.doc_第3页
第3页 / 共16页
小日历-JAVA课程设计实验报告.doc.doc_第4页
第4页 / 共16页
小日历-JAVA课程设计实验报告.doc.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、共 17 页第 2 页目 录1.设计目标32.设计思想33.类及对象设计34.程序源代码45.调试记录146.总结157.参考文献17共 17 页第 3 页JAVA 小日历组件设计1设计目标本课程设计是一个 JAVA 小日历组件的设计,利用 Frame 框架类、面板类进行图形化界面设计,实现小日历的公历显示等功能。2设计思想(1)本小日历设计主体结构为:设计一个框架 MainFrame,然后在 MainFrame 里添加一个 MainPanel 面板。定义一个 MainPanel 面板类,该面板以边布局格式,所有其他面板、标签等均添加到该面板中。(2)MainPanel 面板北部(上方) ,添

2、加一个年月面板 YearMonthPanel。该年月面板主要放年份显示、月份显示、标题显示。YearMonthPanel 面板也使用边布局格式,西部添加一个年份面板,放年份信息;中部添加一个 TextPanel 面板,放标题文本显示信息;东部添加一个月份面板 MonthPanel,放月份下拉框信息。(3)MainPanel 主面板的中部,添加一个 DaysPanel 面板用于放置月份的天数表格信息。(4)MainPanel 主面板的南部(下方) ,添加一个 InfoPanel 面板,主要用于放置显示个人信息。(5)InfoPanel 面板上设计添加一个超级链接标签,链接到个人博客。3设计类及对

3、象设计在本程序中:定义了一个 Frame 类,主要定义一个窗体框架,用于显示日历信息,并在主函数中只创建一个该窗体对象实现程序功能。定义了一个主日历面板类 Xiaorili,其中包含了日历设计所用到的全局变量、功能函数等,在 Frame 类里定义了其对象。在该日历面板类里又设计了一个内部类CalendarTable 表格类,用于布局日历天的显示格式。为了设计一个超级链接,定义了一个 LinkLable 类,单独保存在一个文件LinkTbale.java 中,在日历面板类 Xiaorili 里定义了其对象。共 17 页第 4 页4程序源代码(1)xiaoril.java 文件代码:import

4、java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;public class Xiaorili extends JApplet /=/*定义全局变量*/ public static final Color background = Color.white;/背景色public static final Color foreground = Color.black;/前景色public sta

5、tic final Color headerBackground = Color.DARK_GRAY;/星期public static final Color headerForeground = Color.white;/星期前景色public static final Color selectedBackground = Color.green;/选中背景色public static final Color selectedForeground = Color.white;/选中前景色 public static final String WeekSun = “星期日“; /星期标签名称p

6、ublic static final String WeekMon = “星期一“; public static final String WeekTue = “星期二“; public static final String WeekWed = “星期三“; public static final String WeekThu = “星期四“; public static final String WeekFri = “星期五“; public static final String WeekSat = “星期六“;private JPanel MainPanel;/日历面板private

7、JLabel yearsLabel;/“年份”标签private JSpinner yearsSpinner;/年份组合框private JLabel monthsLabel;/“月份”标签共 17 页第 5 页private JComboBox monthsComboBox; /12 月份下拉框private JLabel textLabel;/标题显示标签private JLabel InfoLabel;/个人信息显示标签 private JTable daysTable; /日表格private AbstractTableModel daysModel;/天单元表格private Cal

8、endar calendar;/日历对象/=/*函数定义*/public Xiaorili() /构造函数MainPanel = (JPanel) getContentPane();public void init() /初始化面板界面函数MainPanel.setLayout(new BorderLayout();calendar = Calendar.getInstance();/默认方式,以本地的时区和地区来构造Calendar/-yearsLabel = new JLabel(“年份: “); /设置年份标签显示yearsSpinner = new JSpinner();/构造年份 s

9、pinner 组合框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_MON

10、TH);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 : 共 17 页第 6 页day);updateView();/更新显示);/- JPanel yearMonthPanel = n

11、ew JPanel();/定义年月面板MainPanel.add(yearMonthPanel, BorderLayout.NORTH);/添加年月面板到日历面板的南面(最上方)yearMonthPanel.setLayout(new BorderLayout();/边布局模式JPanel yearPanel = new JPanel();/构建年份面板yearMonthPanel.add(yearPanel, BorderLayout.WEST);/年份面板添加到年月面板西部(左边)yearPanel.setLayout(new BorderLayout();/设置年份面板为边布局并添加年份

12、标签和组合框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();/定义月份面板yearMon

13、thPanel.add(monthPanel, BorderLayout.EAST);/添加月份面板到年月面板的东面(右面)monthPanel.setLayout(new BorderLayout();/月份面板设为边布局方式monthPanel.add(monthsLabel, BorderLayout.WEST);/添加月份名称标签到月份面板西面(左面)monthPanel.add(monthsComboBox, BorderLayout.CENTER);/添加月份下拉框到月份面板中间/-textLabel = new JLabel(“JAVA 小日历-061114052“); /设置标

14、题标签显示 JPanel txetPanel = new JPanel();/定义标题文本显示面板yearMonthPanel.add(txetPanel,BorderLayout.CENTER);/添加标题文本显示面板到年月面板中间txetPanel.add(textLabel,BorderLayout.CENTER);/添加标题文本标签到面板/-InfoLabel = new JLabel(“学号:24072400287 姓名:谢水全 班级:07 计算机班“); /设置个人信息标签显示 JPanel InfoPanel = new JPanel();/定义底部个人信息显示面板MainPan

15、el.add(InfoPanel,BorderLayout.SOUTH);/添加个人信息显示面板到日历面板南方(下方)共 17 页第 8 页InfoPanel.add(InfoLabel);/添加信息标签文本标签到面板/-JPanel Link = new JPanel();/设置超级链接到我的博客InfoPanel.add(new LinkLabel(“访问谢水全工作室 “, “http:/“);/- daysModel = new AbstractTableModel() /设置 7 行 7 列public int getRowCount() return 7; public int ge

16、tColumnCount() return 7; public Object getValueAt(int row, int column) if (row = 0) /第一行显示星期return getHeader(column);row-;Calendar calendar = (Calendar) Xiaorili.this.calendar.clone();calendar.set(Calendar.DAY_OF_MONTH, 1);int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int moreDayC

17、ount = 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);共 17 页第 9 页;daysTable = new CalendarTable(daysModel, calendar); /构造日表格daysTable.setCellSelectionEnabled(true);/设置表格单元格

18、可选择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 = (va

19、lue = 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

20、.setBackground(selectedBackground); else /设置日期单元格的普通前、背景色cell.setForeground(foreground);cell.setBackground(background);return cell; );updateView();共 17 页第 10 页MainPanel.add(daysTable, BorderLayout.CENTER);/添加日面板到日历面板中间 /-public static String getHeader(int index) /设置第一行星期的显示switch (index) case 0:retu

21、rn WeekSun;case 1:return WeekMon;case 2:return WeekTue;case 3:return WeekWed;case 4:return WeekThu;case 5:return WeekFri;case 6:return WeekSat;default:return null;/-public void updateView() /更新面板显示方法daysModel.fireTableDataChanged();daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONT

22、H),calendar.get(Calendar.WEEK_OF_MONTH);daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1,共 17 页第 11 页calendar.get(Calendar.DAY_OF_WEEK) - 1);/=public static class CalendarTable extends JTable /表格类private Calendar calendar;public CalendarTable(TableModel model, Calendar cal

23、endar) /构造方法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(Ca

24、lendar.DAY_OF_MONTH, (Integer)obj).intValue();(2)LinkLabel.java 文件代码:import java.awt.*;import javax.swing.*;import java.awt.event.*;public class LinkLabel extends JLabel private String text, url;共 17 页第 12 页private boolean isSupported;public LinkLabel(String text, String url) this.text = text;/显示文本t

25、his.url = url;/链接地址try this.isSupported = Desktop.isDesktopSupported() catch (Exception e) /捕获浏览器异常this.isSupported = false;setText(false);addMouseListener(new MouseAdapter() /注册鼠标单击事件监听器public void mouseEntered(MouseEvent e) setText(isSupported);if (isSupported)setCursor(new Cursor(Cursor.HAND_CURS

26、OR);/鼠标形状为 hand形式public void mouseExited(MouseEvent e) /移开鼠标时setText(false);public void mouseClicked(MouseEvent e) /鼠标单击时try Desktop.getDesktop().browse(new .URI(LinkLabel.this.url);/调用默认浏览器打开链接catch (Exception ex) 共 17 页第 13 页);private void setText(boolean b) /设置标签显示文本if (!b)setText(“ + text);/鼠标移到

27、标签外显示为红色字体elsesetText(“ + text);/鼠标移到标签上面显示为绿色字体(3)MainFrame.java 文件代码:/* * (#) MainFrame.java* 主窗体* author 谢水全工作室:*/import java.awt.*;import javax.swing.*;/构造窗体类public class MainFrame extends JFramepublic MainFrame()super(“JAVA 小日历-谢水全工作室-http:/“);/创建窗体并设置标题this.setDefaultCloseOperation(JFrame.EXIT

28、_ON_CLOSE);/单击窗口关闭按钮关闭窗体Xiaorili Xiaorili = new Xiaorili();/创建小日历对象Xiaorili.init();/初始化面板this.getContentPane().add(Xiaorili);共 17 页第 14 页this.setSize(450, 200); /框架大小this.setVisible(true);/设置可见性this.setResizable(false);/窗体不可改变大小this.pack();/*主函数调用*/public static void main(String args)new MainFrame()

29、;5.调试记录程序功能调试如下:(1) 运行程序,出现日历界面:(6总结(1)选题目的:本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我决定做一个小日历组件的设计。主要考虑到本学期时间少课程内容多,JAVA共 17 页第 15 页课程基础内容掌握并不是很抓实,而对于设计一个小日历组件,由于其功能简单设计也相对较易,对于我个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对 JAVA 的一些基础知识掌握的更加牢固。(2)对于本小日历的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能

30、和布局构架,考虑用源代码进行实现了。(3)本小日历组件在设计过程中参考了一些网络上的日历组件设计程序,只是那些程序大都使用功能相对较丰富,涉及到的知识也比较多,对于自己目前所掌握的内容来说有点广博。不过那些程序对日历实现的一些思想对我确实有很多启发。本小日历组件设计过程中也参考了一些他人设计的代码。在设计本小日历组件过程中遇到过许多问题,最后都是在网络搜集询问的帮助下一一得以解决。下面列举几个参考中比较重要的相关内容: .JAVA Calendar 方法:Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。我们也可以自己的 Calendar 实现类,然后将它作为 Calenda

31、r 对象返回(面向对象的特性) 。在 Calendar 的方法中,get() 和 add() 会让 Calendar 立刻刷新。本程序的中心设计即是利用 Calendar 类来实现。 javax.swing.JSpinner 用法:让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。它能够方便地选择日期、数字或列表中的选项。Spinner 通常提供一对带小箭头的按钮以便逐步遍历序列元素。键盘的向上/向下方向键也可循环遍历元素。也允许用户在 spinner 中直接输入合法值。JSpinner 显示不同的内容,采用不同的模型,像 SpinnerDateModel,SpinnerList

32、Model, SpinnerNumberModel,只要对模型修改,就可以实现想要的精确的功能。本程序利用该组件实现了年份的修改。 setOpaque 用法:setOpaque (false)的作用是将 button 的背景色改为其 parent 的背景色。如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制其某些或所有像素,从而允许其下面的像素透视出来。 基于 Java Swing 的超链接标签和超链接按钮的实现: java.awt.Desktop 类的java.awt.Desktop.isDesktopSupported()可以获取当前系统是否支持 java awt 桌面

33、扩展.如果支持可以获取当前系统的 Desktop ,则使用:java.awt.Desktop dp = java.awt.Desktop.getDesktop(); 共 17 页第 16 页dp.browse(.URI); 就可以启动系统默认的浏览器。本程序自定义一个超链接标签控件LinkLabel类进行实现该功能。 java 中实现表格的多表头显示:主要就是三个应用类 ColumnGroup, GroupableTableHeader,GroupableTableHeaderU 和一个示例类GroupableHeaderExample。经过了长时间的反复编写调试,课本和网上查阅相关资料相关文

34、章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对 JAVA2 语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报