java课程设计--万年历.doc_第1页
java课程设计--万年历.doc_第2页
java课程设计--万年历.doc_第3页
java课程设计--万年历.doc_第4页
java课程设计--万年历.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

JAVA软件项目设计1项 目 报 告11.设计分析:31.1需求分析31.2功能设计32.程序结构:43.各模块功能及程序说明:43.1 各种包的导入:43.2控件的初始化53.3绘制万年历的界面63.4 增加控件63.5增加监听73.6封装操作84.源程序85.操作方法(流程)226.实验结果237.心得体会:251.设计分析:1.1需求分析 对于万年历系统,其主要功能是:查看当日日期(年、月、日)、查看当时时间、查看其他年月的月历、对选中的日期进行标识。主要使用流程是:查看万年历系统,查看其他月份或年份日历,选中其他日期查看,查看当日日期。1.2功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1) 通过JDK环境运行,实现图像界面。(2) 能以月历的形式显示日期与星期。(3) 支持用户自己用下拉形式来选择年份和月份。(4) 通过点击“更新时间”按钮来刷新当前时间。开始程序初始化 获取当前系统时间 年份等数据绘制界面显示结果 返回2.程序结构:3.各模块功能及程序说明:3.1 各种包的导入:import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;3.2控件的初始化contentPane = new JPanel(new BorderLayout();/ 主面板northPane = new JPanel(new BorderLayout(); / 放按钮面板的面板centerPane = new JPanel(new GridLayout(7, 7); / 中间的日期(七行七列)面板buttonPane = new JPanel(); / 按钮面板labelYear = new JButton(年份:); / 显示年份文字labelMonth = new JButton(月份:); / 显示月份文字buttonPreYear = new JButton(); / 下一年的按钮buttonPreMonth = new JButton();/ 下一月按钮newTime = new JButton(更新时间);boxYear = new JComboBox(); / 年的下拉列表boxMonth = new JComboBox(); / 月的下拉列表ca = new GregorianCalendar();Jhour = new JTextField(2);Jminute = new JTextField(2);Jsecond = new JTextField(2);date = new JPanel();dateTime1 = new JLabel(时);dateTime2 = new JLabel(分);dateTime3 = new JLabel(秒);3.3绘制万年历的界面public WanNianLi() this.setTitle(万年历); this.setSize(500, 400); / 将面板居中处理 Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth = d.width; int screenHeight = d.height; this.setLocation(screenWidth - this.getWidth() / 2, (screenHeight - this.getHeight() / 2); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(true);3.4 增加控件/ 把按钮放到了按钮面板里buttonPane.add(labelYear);buttonPane.add(buttonPreYear);buttonPane.add(boxYear);buttonPane.add(buttonNextYear);buttonPane.add(labelMonth);buttonPane.add(buttonPreMonth);buttonPane.add(boxMonth);buttonPane.add(buttonNextMonth);/ 把按钮面板放到了northPane中northPane.add(buttonPane, BorderLayout.CENTER);/ 把northPane和centerPane放到主面板中contentPane.add(northPane, BorderLayout.NORTH);contentPane.add(centerPane, BorderLayout.CENTER);contentPane.add(date,BorderLayout.SOUTH);3.5增加监听/给年份下拉列表添加事件监听器boxYear.addActionListener(new ActionListener()/给月份下拉列表添加事件监听器boxMonth.addActionListener(new ActionListener()/上一年的按钮监听buttonPreYear.addActionListener(new ActionListener()/下一年的按钮监听buttonNextYear.addActionListener(new ActionListener()/上一月的监听buttonPreMonth.addActionListener(new ActionListener()/下一月的监听buttonNextMonth.addActionListener(new ActionListener()/更新时间按钮的监听newTime.addActionListener(new ActionListener() )3.6封装操作/ 封装给年份下拉列表赋值的操作private void initBoxYear() /封装给月份下拉列表赋值的操作private void initBoxMonth() 4.源程序package 万年历;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class WanNianLi extends JFrame private int temp0 = 0;private int year = 0;private int month = 0;private int hour = 0;private int minute = 0;private int second = 0;Calendar ca = null;private JTextField Jhour = null;private JTextField Jminute = null;private JTextField Jsecond = null;private JPanel contentPane = null;/ 主面板private JPanel northPane = null; / 放按钮面板的面板private JPanel centerPane = null; / 中间的日期面板private JPanel buttonPane = null; / 按钮面板private JPanel time = null; /时钟面板private JPanel date = null;private JButton labelYear = null; / 显示年份文字private JButton labelMonth = null; / 显示月份文字private JButton buttonPreYear = null; / 上一年按钮private JButton buttonNextYear = null; / 下一年的按钮private JButton buttonPreMonth = null; / 上一月按钮private JButton buttonNextMonth = null;/ 下一月按钮private JButton newTime = null;private JComboBox boxYear = null; / 年的下拉列表private JComboBox boxMonth = null; / 月的下拉列表private JLabel labelDays = null; / 存储天private JLabel dateTime1 = null;private JLabel dateTime2 = null;private JLabel dateTime3 = null;public WanNianLi() this.setTitle(万年历);this.setSize(500, 400);/ 将面板居中处理Dimension d = Toolkit.getDefaultToolkit().getScreenSize();int screenWidth = d.width;int screenHeight = d.height;this.setLocation(screenWidth - this.getWidth() / 2,(screenHeight - this.getHeight() / 2);init(); / 封装初始化主控件的操作this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(true);/ 初始化主控件private void init() contentPane = new JPanel(new BorderLayout();/ 主面板northPane = new JPanel(new BorderLayout(); / 放按钮面板的面板centerPane = new JPanel(new GridLayout(7, 7); / 中间的日期(七行七列)面板buttonPane = new JPanel(); / 按钮面板labelYear = new JButton(年份:); / 显示年份文字labelMonth = new JButton(月份:); / 显示月份文字buttonPreYear = new JButton(); / 下一年的按钮buttonPreMonth = new JButton();/ 下一月按钮newTime = new JButton(更新时间);boxYear = new JComboBox(); / 年的下拉列表initBoxYear();boxMonth = new JComboBox(); / 月的下拉列表initBoxMonth();ca = new GregorianCalendar();hour = ca.get(Calendar.HOUR_OF_DAY);minute = ca.get(Calendar.MINUTE);second = ca.get(Calendar.SECOND);Jhour = new JTextField(2);Jhour.setText(hour+);Jminute = new JTextField(2);Jminute.setText(minute+);Jsecond = new JTextField(2);Jsecond.setText(second+);date = new JPanel();dateTime1 = new JLabel(时);dateTime2 = new JLabel(分);dateTime3 = new JLabel(秒);date.add(Jhour);date.add(dateTime1);date.add(Jminute);date.add(dateTime2);date.add(Jsecond);date.add(dateTime3);date.add(newTime);/ 把按钮放到了按钮面板里buttonPane.add(labelYear);buttonPane.add(buttonPreYear);buttonPane.add(boxYear);buttonPane.add(buttonNextYear);buttonPane.add(labelMonth);buttonPane.add(buttonPreMonth);buttonPane.add(boxMonth);buttonPane.add(buttonNextMonth);/ 把按钮面板放到了northPane中northPane.add(buttonPane, BorderLayout.CENTER);/ 初始化放日期的labellabelDays = new JLabel49; / 存储天for (int i = 0; i labelDays.length; i+) labelDaysi = new JLabel(, JLabel.CENTER);centerPane.add(labelDaysi);boxYear.setSelectedItem(2013);boxMonth.setSelectedItem(12);YMD();/将第一界面设为系统当前事件setDate();/ 把northPane和centerPane放到主面板中contentPane.add(northPane, BorderLayout.NORTH);contentPane.add(centerPane, BorderLayout.CENTER);contentPane.add(date,BorderLayout.SOUTH);this.add(contentPane);/更新时分秒newTime.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Calendar ca = null;ca = new GregorianCalendar();int a = ca.get(Calendar.HOUR_OF_DAY);int b = ca.get(Calendar.MINUTE);int c = ca.get(Calendar.SECOND);Jhour.setText(a+);Jminute.setText(b+);Jsecond.setText(c+););/给年份下拉列表添加事件监听器boxYear.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) year = (Integer)boxYear.getSelectedItem();setDate(););/给月份下拉列表添加事件监听器boxMonth.addActionListener(new ActionListener()Overridepublic void actionPerformed(ActionEvent e) month = (Integer)boxMonth.getSelectedItem();setDate(););/上一年的按钮监听buttonPreYear.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) int resertYear = (Integer) boxYear.getSelectedItem();boxYear.setSelectedItem(resertYear-1););/下一年的按钮监听buttonNextYear.addActionListener(new ActionListener()Overridepublic void actionPerformed(ActionEvent e) int resertYear = (Integer) boxYear.getSelectedItem();boxYear.setSelectedItem(resertYear+1););/上一月的监听buttonPreMonth.addActionListener(new ActionListener()Overridepublic void actionPerformed(ActionEvent e) int resertMonth =(Integer)boxMonth.getSelectedItem();int resertYear = (Integer) boxYear.getSelectedItem();if(resertMonth = 1)if(resertYear = 1901)boxMonth.setSelectedItem(resertMonth);boxYear.setSelectedItem(resertYear);elseresertMonth = 12;boxMonth.setSelectedItem(resertMonth);boxYear.setSelectedItem(resertYear-1);elseboxMonth.setSelectedItem(resertMonth-1););/下一月的监听buttonNextMonth.addActionListener(new ActionListener()Overridepublic void actionPerformed(ActionEvent e) int resertMonth =(Integer)boxMonth.getSelectedItem();if(resertMonth = 12)resertMonth = 1;boxMonth.setSelectedItem(resertMonth);int resertYear = (Integer) boxYear.getSelectedItem();boxYear.setSelectedItem(resertYear+1);elseboxMonth.setSelectedItem(resertMonth+1););/ 封装给年份下拉列表赋值的操作private void initBoxYear() for (int i = 0; i 1000; i+) boxYear.addItem(1901 + i);/封装给月份下拉列表赋值的操作private void initBoxMonth() for (int i = 1; i = 12; i+) boxMonth.addItem(i);public void setDate() String tempDate = new String42;tempDate = initDate();/ 给前七个label赋属性String logs = new String 日, 一, 二, 三, 四, 五, 六 ;/将logs数组中的值放到label中for (int i = 0; i 7; i+) labelDaysi.setText(logsi);/初始化label的颜色for (int i = 0; i labelDays.length; i+) labelDaysi.setForeground(Color.BLACK);/ 设置星期日的颜色为红色for (int i = 0; i labelDays.length; i += 7) labelDaysi.setForeground(Color.red); / 设置星期六的颜色为蓝色for (int i = 6; i labelDays.length; i += 7) labelDaysi.setForeground(Color.blue); /将日期放到label中,并把系统当天的时间设为绿色for (int i = 7; i 49; i+) int t = 0;t = day();labelDaysi.setText(tempDatei-7);if(i = Calendar.getInstance().get(Calendar.DAY_OF_MONTH)labelDaysi+t+6.setForeground(Color.GREEN);/设置面板第一次显示的内容void YMD()year=0; month=0; Calendar c=Calendar.getInstance();/获得系统当前日期 year=c.get(Calendar.YEAR); month=c.get(Calendar.MONTH)+1;/系统日期从0开始算起 boxYear.setSelectedItem(Integer)year); boxMonth.setSelectedItem(Integer)month); /将某年某月中的日期放到一个数组中返回,包括前面的空余部分public String initDate() String date = new String42;int sum = 0;int m = 0;for (int i = 1900; i year; i+) if (i % 4 = 0) & (i % 100 != 0) | (i % 400 = 0) sum = sum + 366; else sum = sum + 365;for (int nomonth = 1; nomonth = month; nomonth+) if (nomonth = 1 | nomonth = 3 | nomonth = 5 | nomonth = 7| nomonth = 8 | nomonth = 10 | nomonth = 12) m = 31; else if (nomonth = 2) if (year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0) m = 29; else m = 28; else m = 30;if (nomonth month) sum = sum + m;sum += 1;temp0 = (sum % 7);for (int p = 0; p temp0; p+) datep = ;for (int w = 1; w = m; w+) datetemp0+ = w + ;return date;/获取系统当前月第一天离星期天有几天public int day

温馨提示

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

评论

0/150

提交评论