Java课程设计+文档+源代码(万年历+闹钟+记事本)
JAVA课程设计 万年历 源代码
测试用例设计:根据 需求文档和功能描述, 设计出能够覆盖所有 功能的测试用例
测试工具:使用JUnit 等测试框架进行单元 测试,使用Selenium 等工具进行UI测试
测试结果分析:根 据测试结果,分析 代码存在的问题, 并进行修改和优化
集成测试:验证各个模块之间的接口是否正确,数据传输是否正常 性能测试:测试系统的响应时间、吞吐量、资源利用率等性能指标
提醒功能:用户可以设置提醒功能,在节日或假期到来之前,系统会自动提醒用户。
删除事件:用户可以删除不 再需要的事件
编辑事件:用户可以对已添加 的事件进行编辑,如修改事件 名称、时间等
添加事件:用户可以在万年历 中添加新的事件,如生日、纪 念日等
查询事件:用户可以查询特定 日期或时间段内的事件,如查
界面显示:万年历界面将显示年、 月、日、星期等信息,用户可以通 过点击相应的按钮来切换日期。
添加标题
添加标题
添加标题
添加标题
系统响应:当用户输入日期后,系统 将根据输入的日期显示相应的万年历 信息,包括年、月、日、星期等信息。
用户操作:用户可以通过点击相应 的按钮来切换日期,系统将根据用 户的操作显示相应的万年历信息。
添加标题
界面设计:简洁明了,易于阅读
添加标题
添加标题
交互性:用户可以选择查看不同日 期的日历信息
功能描述:在万年历中,用户可以选择标注节日和假期,以便于查看和提醒。
节日标注:用户可以在万年历中设置自己喜欢的节日,如春节、中秋节等,系统会自动 标注这些节日。
假期标注:用户可以在万年历中设置自己的假期,如年假、病假等,系统会自动标注这 些假期。
,a click to unlimited possibilities
Java日历记事本课程设计报告毕业用资料
Java日历记事本课程设计报告在设计日历记事本时,需要编写6个JAVA源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CalendarImage.java、Clock.java和CalendarMesssage.java效果图如下.CalendarWindow类import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener{int year,month,day;CalendarMessage calendarMessage;CalendarPad calendarPad;NotePad notePad;JTextField showYear,showMonth;JTextField[]showDay;CalendarImage calendarImage;String picturename;Clock clock;JButton nextYear,previousYear,nextMonth,previousMonth;JButtonsaveDailyRecord,deleteDailyRecord,readDailyRecord;JButton getPicture;File dir;Color backColor=Color.white;public CalendarWindow(){dir=new File("./dailyRecord");dir.mkdir();showDay=new JTextField[42];for(int i=0;i<showDay.length;i++){showDay[i]=new JTextField();showDay[i].setBackground(backColor);showDay[i].setLayout(new GridLayout(3,3));showDay[i].addMouseListener(this);showDay[i].addFocusListener(this);}calendarMessage=new CalendarMessage();calendarPad=new CalendarPad();notePad=new NotePad();Calendar calendar=Calendar.getInstance();calendar.setTime(new Date());year=calendar.get(Calendar.YEAR);month=calendar.get(Calendar.MONTH)+1;day=calendar.get(Calendar.DAY_OF_MONTH);calendarMessage.setYear(year);calendarMessage.setMonth(month);calendarMessage.setDay(day);calendarPad.setCalendarMessage(calendarMessage);calendarPad.setShowDayTextField(showDay);notePad.setShowMessage(year,month,day);calendarPad.showMonthCalendar();doMark();calendarImage=new CalendarImage();calendarImage.setImageFile(new File("flower.jpg"));clock=new Clock();JSplitPane splitV1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarIm age);JSplitPane splitV2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock);JSplitPane splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);add(splitH,BorderLayout.CENTER);showYear=new JTextField(""+year,6);showYear.setFont(newFont("TimesRoman",Font.BOLD,12));showYear.setHorizontalAlignment(JTextField.CENTER);showMonth=new JTextField(""+month,4);。
JAVA课程设计 闹钟的设计与实现项目报告 附源代码
Java 设计报告书课程名称:JAVA语言程序设计设计题目:闹钟的设计与实现院系:计算机科学与信息工程系学生姓名:学号:专业班级:指导教师:许研2010 年12 月28 日目录一、题目描述 (1)二、设计思路 (1)三、运行结果 (5)四、源代码 (6)五、总结 (10)六、参考文献 (10)闹钟的设计与实现一、题目描述:结合JAVA图形界面的知识设计一个闹钟二、设计思路1、设计要求:编写闹钟钟程序,要求画出时钟面板,动态的显示当前时间,可设定或解除闹钟时间,并提供闹钟服务相应的文字提示功能与可以自己选择闹钟提示声音提示功能,并在闹钟设定的输入框中有简单的排错功能。
2、算法基本描述:本程序先是在框架中新建了一个容器,然后用GridLayout类对面板进行划分,程序引入java.util.Date来显示当前时间,并用一个永真循环,来对当前时间显示的更新,引入java.io.File来实现对文件的读写操作,程序设计了一个选择按钮,用来选择文件,并且声明只能选择,WAU、MID的文件,引入用java.applet.Applet 来播放音乐文件,用getText()函数获取输入的闹钟设定时间,并永真循环和当前的时间进行对比,若相等则播放音乐,若不相等则显示离目标设定时间的差距。
3、设计思想与内容1、画出类的UML简图Clock类:Clock类中的变量ri, shi, fen, miao, dangqian, guanji: JLabe lqueding, dakai: JButtonmusic, RI, SHI, FEN, MIAO: JTextFieldh = 0, f = 0, m = 0, r = 0 :intFo, foo: booleansoumd1: public AudioClipClock类中的函数public clock()public static void main(String agrs[])public void run()2、各方法功能描述列表Clock类方法功能Main()执行main函数Clock()Clock类的构造函数,用于对时钟界面的初始化Run()用于对时钟的动态显示的执行,并判断是否设定了闹钟时间,若当前时间与设定的时间相等则播放选定的音乐3、主要模块算法描述(1)当前动态时间的显示的设计与实现。
java万年历源代码
java万年历源代码第一个类:chaxun.javapackage wannianli;import java.util.*;public class chaxun {public static void main(String[] args) {Scanner input =new Scanner(System.in);String answer="y";for(;answer.equals("y");){week cn=new week();cn.weekDay();//调用方法System.out.print("\是否继续?");answer=input.next();}}}第二个类:tianshu.javapackage wannianli;import java.util.*;public class tianshu {int totalDay;//总共的天数int yueTian;//每月的天数public void jsts(){int days=0;//输入月份到当年的天数System.out.println("*************************************欢迎使用万年历*************************************");Scanner input=new Scanner(System.in);System.out.print("请输入年份:");//从键盘输入年份int year=input.nextInt();System.out.print("请输入月份:");//从键盘输入月份int yue=input.nextInt();/**判断每月的天数*/for(int index=1;index<=yue;index++){if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==1 2){//满足闰年的条件yueTian=31;}elseif(yue==2&&((year%4==0)&&(!(year%100==0))||(year%400== 0))){yueTian=29;}elseif(yue==2&&(!((year%4==0)&&(!(year%100==0))||(year%400= =0)))){yueTian=28;}else if(yue==4||yue==6||yue==9||yue==11){yueTian=30;}else{System.out.print("输入的月份不正确");}if(index<=yue){days=days+yueTian;}}/**判断是否是闰年*/for(int i=100;i<year;i++){< bdsfid="116" p=""></year;i++){<>if ((year%4==0)&&(!(year%100==0))||(year%400==0)){//满足闰年的条件totalDay=totalDay+366;}else{totalDay=totalDay+365;}}totalDay=totalDay+days;//System.out.println(totalDay+"天");//return totalDay+yueTian;}}第三个类:week.jvapackage wannianli;public class week {public void weekDay() {int monDay;//星期几tianshu cn=new tianshu();cn.jsts();int week=1+cn.totalDay%7;//System.out.println(""+week);if (week==7){// 求当月第一天monDay=0;// 周日}else{monDay=week;}/* 输出日历*/System.out.println("星期日\星期一\星期二\星期三\星期四\星期五\星期六");for(int nullNo=0;nullNo<monday;nullno++){< bdsfid="145"p=""></monday;nullno++){<>System.out.print("\");// 输出空格}for(int i=1;i<=cn.yueTian;i++){System.out.print(i+"\");//输出每月的号数if((cn.totalDay + i - 1) % 7 == 5){// 如果当天为周六,输出换行System.out.println();}}} }。
java课程设计基于java的万年历设计与实现(附源代码)贯
Java课程设计报告课程设计题目:万年历指导老师:**********学生姓名:*********专业:**********学号:*******Java课程设计-万年历1、课程设计目的:这学期我们学习了Java语言,Java语言是面向对象的开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。
它具有面向对象、跨平台、分布应用等特点。
它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
很多程序开发人员得第一选择。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
让学生自己动手动脑,将书本上得知识运用到实践当中去,使知识能更好得融会贯通。
为了达到这个目的,我们需要自己动手做一个Java的课程设计,在这个课程设计里我们需要根据我们手中现有得软件与知识基础,独立得将它完成,只有这样,我们才能把理论变成实践,将知识真正得做到学以致用。
这次课程设计我主要研究了利用已学的Java知识编辑一个电子万年历。
通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。
并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识。
2、需求分析:2.1、本程序要求:1、使用图形用户界面;2、本程序能够实现日期与星期查询,同时显示此时的时间。
2.2、功能设计:本程序要构建万年历程序,其功能如下:(1)通过窗口形式运行,实现界面功能;(2)以月历的形式来显示日期与星期;(3)为用户提供年份与月份的下拉形式菜选择年份与月份;(4)同时显示查看时的时刻。
3、课程设计的基本算法public class wnl extends JFrame implements ActionListener,ItemListener{Date date = new Date();private GregorianCalendar gregorianCalendar = new GregorianCalendar();//定义中英文字符数组存储星期信息,用于转换显示private String[] stringWeekEn = new String[] { "SUN", "MON", "TUE", "WED","THU", "FRI", "SAT" };private String[] stringWeekCn = new String[] { "星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六" };//定义存储月份的信息数组,用于转换显示方式private String[] stringMonthEn = new String[] { "Jan", "Feb", "Mar", "Apr","May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" };private String[] stringMonthCn = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};private String[] sysNowTime = new String[6];//sysNowTime 用于存储系统时间的变量private String[] sysRunTime = new String[6];private JLabel []labelWeek = new JLabel[7];private JLabel []labelDay = new JLabel[42];private JLabel labelTime = new JLabel();private JPanel panel1 = new JPanel();private JPanel panel2 = new JPanel();private JPanel panel3 = new JPanel();private JComboBox combo1 = new JComboBox();private JComboBox combo2 = new JComboBox();private JButton buttonToday = new JButton();private Border border = BorderFactory.createRaisedBevelBorder(); private Border border1 = BorderFactory.createLineBorder(Color.cyan,3); public wnl (String title) {super(title);for (int y = 1900; y < 2200; y++) {combo1.addItem(" "+ new Integer(y).toString()+"年");}for (int m = 0;m<12;m++){combo2.addItem(" "+stringMonthCn[m]);}buttonToday.setText("现在时刻");setLayout(new FlowLayout());add(panel1);add(panel2);add(panel3);panel1.setLayout(new GridLayout(2,3,10,2));panel1.add(combo1);combo1.addItemListener(this);panel1.add(combo2);combo2.addItemListener(this);panel1.add(buttonToday);// buttonToday.addActionListener(this);labelTime.setFont(new Font("宋体",Font.PLAIN,16));labelTime.setForeground(Color.red);panel1.add(labelTime);Timer time = new Timer(1000,new TimerListener());time.addActionListener(new TimerListener());//time.setRepeats(true);time.start();//labelTime.addAncestorListener(new TimerListener());panel2.setLayout(new GridLayout(7,7,10,10));panel2.setBackground(Color.white);for(int i=0;i<7;i++){labelWeek[i] = new JLabel();labelWeek[i].setHorizontalAlignment(0);if(i==0||i==6){labelWeek[i].setBackground(Color.blue);labelWeek[i].setForeground(Color.RED);labelWeek[i].setFont(new Font("黑体",Font.BOLD,14));}else{labelWeek[i].setForeground(Color.BLACK);labelWeek[i].setFont(new Font("新宋体",Font.PLAIN,14));}labelWeek[i].setText(stringWeekCn[i]);panel2.add(labelWeek[i]);}for(int i= 0;i<42;i++){labelDay[i] = new JLabel();labelDay[i].setHorizontalAlignment(0);labelDay[i].setText("");panel2.add(labelDay[i]);}addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});setSize(300,300);setBounds(250, 200, 400, 360);setVisible(true);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getSysDate();setNowDate();}public void actionPerformed(ActionEvent ae){if(ae.getSource()==buttonToday){setNowDate();}}public void itemStateChanged(ItemEvent aa){setChangeDate();}public int turnWeek(String week){int i;for(i=0;i<7;i++)if(week.equalsIgnoreCase(stringWeekEn[i]))break;return i;}public int turnMonth(String month){/***int turnMonth(String month)*@month 系统日期中的月,诸如Jan\Feb*@return int*返回一个整数值,用于寻找stringMonthCn[]数组中对应的中文月份*/int i;for(i=0;i<12;i++)if(month.equalsIgnoreCase(stringMonthEn[i]))break;return i;}/***setNowDate()*设置当前系统日期*/public void setNowDate(){setSysDate(getNowYear(),getNowMonth());getSysRunDate();setDateNull();combo1.setSelectedIndex(getShowYear() - 1900);combo2.setSelectedIndex(getShowMonth());setDays(getMonthDays(getNowYear(),getNowMonth()),getInitWeek(sysRunTime[0]),getNowDa y());labelTime.setText(sysNowTime[3]);labelTime.setHorizontalAlignment(0);}/**Integer getShowYear()*获取组合框中应该显示的年份*/public void setSysDate(int year,int month){gregorianCalendar.set(year,month,1);}public void setDateNull(){for(int i=0;i<42;i++){labelDay[i].setText(" ");}}public void setChangeDate(){setSysDate(getComboYear(),getComboMonth());getSysRunDate();setDateNull();setDays(getMonthDays(getComboYear()+1,getComboMonth()+1),getInitWeek(sysRunTime[0]),-1);/***返回所选年月的天数,因为数组中的数值从0开始,所以各月必须加1.*而2月,经过是否为闰年判断,选择返回28或29天.*其余月份为大月,返回31天.**/}public int getMonthDays(int year, int month) {switch (month) {case 4:case 6:case 9:case 11:return 30;//小月返回30天case 2:if (gregorianCalendar.isLeapYear(year)) {//isLeapYear(year)确定当前纪元中的指定年份是否为闰年。
《Java》课程设计》记事本
《Java课程设计》记事本课程设计报告书目录一、设计课题二、设计目的三、操作环境四、设计场所(机房号、机器号或自己机器)五、设计过程(设计内容及主要程序模块)六、本次设计中用到的课程知识点(列出主要知识点)七、设计过程中遇到的问题及解决办法八、程序清单五、设计过程(设计内容及主要模块,不少于3000字)1.设计要求1)界面设计2)功能实现(1)文件菜单:新建、打开、保存、另存为、退出等。
(2)其中新建菜单项可以新建一个记事本程序;打开菜单项可以打开一个用户指定的文本文件,并将其内容显示在记事本的文本区域;保存和另存为菜单项可分别实现文件的保存和另存为3)编辑菜单:复制、剪切和粘贴等4)帮助菜单:软件版本信5)右键弹出快捷菜单2.总体设计1)功能模块图:图一功能模块图2)功能描述1、打开记事本。
首先是标准型的记事本,拥有文件、编辑。
格式和帮助。
如图1所示:图1标准型记事本界面2、在标准型的记事本界面中,进行的新建一个本件名字叫新记事本。
如图2记事本文件帮助新建打开保存另存为退出复制剪切粘贴编辑关于记事本右键快捷格式字体颜色图2新建记事本功能3、用打开文件打开刚刚新建的新记事本。
如图三所示。
图3—打开文件4、点击退出即可退出,如图4所示:图4—退出记事本5、点击帮助可以看到有关记事本的相关信息,其中有作者名、版本、许可条款、隐私声明等必要信息。
如图5所示:图5—帮助相关信息6、右键可实现复制、粘贴、剪切、清除等常用功能,方便用户可以快捷方便的使用记事本。
如图6所示:图6—右键功能7、编辑也可实现制、粘贴、剪切、清除等常用功能,方便用户选择自己适合的方式,自由选择方便的快捷方式使用。
如图7:图7—编辑八、程序清单package test;import java.io.File;import java.io.*;import java.awt.event.*;import java.awt.Toolkit;import java.awt.*;import javax.swing.*;import javax.swing.filechooser.*;public class Notebook extends JFrame implements ActionListener,ItemListener{ //组件创建JButton b_save,b_close; //按钮JTextArea textArea; //文本框File tempFile; //文件JPanel jp; //面板JMenu file,edit,style,help; //菜单JMenuItemf_new,f_open,f_save,f_close,f_saveas,e_copy, e_paste,e_cut,e_clear,e_selectAll,e_find,e_rep lace,s_font,s_color,h_editor,h_help; //菜单条JMenuBar jmb;JScrollPane jsp; //滚动面板JPopupMenu popUpMenu = new JPopupMenu(); //右键弹出式菜单JLabel stateBar;//标签JLabel jl,jj;JFileChooser jfc = new JFileChooser(); //文件选择JMenuItemje_copy,je_paste,je_cut,je_clear,je_selectAll,je _find,je_replace; //弹出式菜单条public Notebook(){jfc.addChoosableFileFilter(new FileNameExtensionFilter("文本文件(*.txt)","txt"));jmb = new JMenuBar();textArea = new JTextArea();jsp = new JScrollPane(textArea);file = new JMenu("文件");edit = new JMenu("编辑");style = new JMenu("格式");help = new JMenu("帮助");je_copy = new JMenuItem("复制(C) ");je_paste = new JMenuItem("粘贴(P) ");je_cut = new JMenuItem("剪切(X) ");je_clear = new JMenuItem("清除(D) ");je_selectAll = new JMenuItem("全选(A) ");je_find = new JMenuItem("查找(F) ");je_replace = new JMenuItem("替换(R) ");je_copy.addActionListener(this); //给弹窗式的各组件添加监听器je_paste.addActionListener(this);je_cut.addActionListener(this);je_clear.addActionListener(this);je_selectAll.addActionListener(this);je_find.addActionListener(this);je_replace.addActionListener(this);//给界面上方的菜单条添加监听器f_new = new JMenuItem("新建(N)");f_new.setAccelerator(KeyStroke.getKeyS troke('N',InputEvent.CTRL_MASK,false)); //设置带修饰符快捷键f_new.addActionListener(this);f_open = new JMenuItem("打开(O)");f_open.setAccelerator(KeyStroke.getKey Stroke('O',InputEvent.CTRL_MASK,false));f_open.addActionListener(this);f_save = new JMenuItem("保存(S)");f_save.setAccelerator(KeyStroke.getKey Stroke('S',InputEvent.CTRL_MASK,false));f_save.addActionListener(this);f_saveas = new JMenuItem("另存为");f_saveas.setAccelerator(KeyStroke.getKe yStroke(KeyEvent.VK_S,InputEvent.CTRL_ MASK|InputEvent.SHIFT_MASK));f_saveas.addActionListener(this);f_close = new JMenuItem("退出(W)");f_close.setAccelerator(KeyStroke.getKey Stroke('W',InputEvent.CTRL_MASK,false));f_close.addActionListener(this);e_copy = new JMenuItem("复制(C)");e_copy.setAccelerator(KeyStroke.getKey Stroke('C',InputEvent.CTRL_MASK,false));e_copy.addActionListener(this);e_paste = new JMenuItem("粘贴(V)");e_paste.setAccelerator(KeyStroke.getKeyStro ke('V',InputEvent.CTRL_MASK,false));e_paste.addActionListener(this);e_cut = new JMenuItem("剪切(X)"); e_cut.setAccelerator(KeyStroke.getKeyStroke ('X',InputEvent.CTRL_MASK,false));e_cut.addActionListener(this);e_clear = new JMenuItem("清除(D)");e_clear.setAccelerator(KeyStroke.getKeyStrok e('D',InputEvent.CTRL_MASK,false));e_clear.addActionListener(this);e_selectAll = new JMenuItem("全选(A)");e_selectAll.setAccelerator(KeyStroke.getKey Stroke('A',InputEvent.CTRL_MASK,false));e_selectAll.addActionListener(this);e_find = new JMenuItem("查找(F)");e_find.setAccelerator(KeyStroke.getKeyStrok e('F',InputEvent.CTRL_MASK,false));e_copy.addActionListener(this);e_replace = new JMenuItem("替换(R)");e_replace.setAccelerator(KeyStroke.getK eyStroke('R',InputEvent.CTRL_MASK,false)) ;e_replace.addActionListener(this);s_font = new JMenuItem("字体(T)");s_font.setAccelerator(KeyStroke.getKeyStrok e('T',InputEvent.CTRL_MASK,false));s_font.addActionListener(this);s_color = new JMenuItem("颜色(C)...");s_color.setAccelerator(KeyStroke.getKeyStro ke(KeyEvent.VK_C,InputEvent.CTRL_MAS K | InputEvent.SHIFT_MASK));s_color.addActionListener(this);h_editor = new JMenuItem("关于记事本");h_editor.setAccelerator(KeyStroke.getKeyStro ke(KeyEvent.VK_E,InputEvent.CTRL_MAS K));h_editor.addActionListener(this);h_help = new JMenuItem("帮助信息(H)");h_help.setAccelerator(KeyStroke.getKeyStrok e(KeyEvent.VK_I,InputEvent.CTRL_MASK) );h_help.addActionListener(this);//添加右键弹出式菜单popUpMenu.add(je_copy);popUpMenu.add(je_paste);popUpMenu.add(je_cut);popUpMenu.add(je_clear);popUpMenu.addSeparator();popUpMenu.add(je_selectAll);popUpMenu.add(je_find);popUpMenu.add(je_replace);//编辑区鼠标事件,点击右键弹出"编辑"菜单textArea.addMouseListener(new MouseAdapter(){public void mouseReleased(MouseEvent e) {if(e.getButton() == MouseEvent.BUTTON3)popUpMenu.show(e.getComponent(), e.getX(), e.getY());} //e.getComponent()和textArea具有同等效果public void mouseClicked(MouseEvent e){if(e.getButton() == MouseEvent.BUTTON1)popUpMenu.setVisible(false);}});this.setJMenuBar(jmb);this.setTitle("记事本程序");file.add(f_new); //添加文件菜单组件file.add(f_open);file.addSeparator(); //加分隔线file.add(f_save);file.add(f_saveas);file.addSeparator();file.add(f_close);edit.add(e_copy); //添加编辑菜单组件edit.add(e_paste);edit.add(e_cut);edit.add(e_clear);edit.addSeparator();edit.add(e_selectAll);edit.add(e_find);edit.add(e_replace);style.addSeparator();style.add(s_font);style.add(s_color);jmb.add(file); //添加格式菜单组件jmb.add(edit);jmb.add(style);jmb.add(help);help.add(h_editor); //添加帮助菜单组件help.add(h_help);//textArea.setWrapStyleWord(true); //设置在单词过长的时候是否要把长单词移到下一行。
用JAVA编万年历和记事本
用JAVA编写万年历!万年历其实可分为5步来做,下面我们来详细分析下步骤:a:先输出提示语句,并接受用户输入的年、月。
b:根据用户输入的年,先判断是否是闰年。
C:根据用户输入的月来判断月的天数。
D:用循环计算用户输入的年份距1900年1月1日的总天数。
E:用循环计算用户输入的月份距输入的年份的1月1日共有多少天。
F:相加D与E的天数,得到总天数。
G:用总天数来计算输入月的第一天的星期数。
H:根据G的值,格式化输出这个月的日历!其实有些步骤是可以合并的,这得靠大家自己的习惯了,下面我们就来一步一步来完成万年历。
<这里只提供讲解,没有源码下载哦!其实大家不必去网上下载,那有意思吗?我们学习是为了什么啊!要下载那就不必来这了!呵呵,发表下自己的看法!>这里大家肯定都能看得懂的,1:这是为了美化,我们编的程序是让别人看的,所以就要输出个标题的。
2:这里就是用来接收用户输入的信息,并赋值给两个变量!这个相信大家都能看得懂!3:这里我们就要开始万年历的真正开发了,看完代码大家都知道这是要进行闰年判断了,这里大家要先明白判断闰年的条件是什么?(条件:这个年首先不是整百年就是最后两位是0的年,因为如果是的话就要除以400了,并且还要能被4整除的或者就是整百年能被400除尽的年是闰年)这里声明了一个boolean值,用来储存是否是闰年,因为咱们后面要用得到的!下面就要进行第二步了,来处理用户输入的月了,看完后大家都明白了吧!这里要用if来判断输入的月份,我们给月份分类,有这几种情况:有31天,有30天,有29天,有28天,下面我们就要想明白每个类的判断条件了?(条件:有31天的月是1、3、5、7、8、10、12,有30天的月是4、6、9、11,剩下就是2月了,它有两种情况,就是根据第一步的boolean值来判断了,如果为true就是29天,为false则是28天了。
)这里用到了一个变量tian,因为咱们后面还要用到的,这些变量可以在做到后面再回来补上的。
JAVA《万年历系统》课程设计报告附源码
2013-2014学年第二学期《面向对象程序设计》课程设计报告题目:万年历系统专业:计算机科学与技术班级:姓名:学号:指导教师:成绩:计算机与信息工程系2014年6月6日目录1 设计内容及要求 (1)1.1设计内容 (1)1.2设计任务及具体要求 (1)2 概要设计 (2)2.1程序设计思路 (2)2.2 总体程序框图 (3)3 设计过程或程序代码 (4)3.1各个模块的程序流程图及运行界面 (4)3.2对关键代码加以分析说明 (7)4 设计结果与分析 (13)4.1程序调试的结果 (13)4.2程序设计分析 (13)5 小结 (14)致谢 (15)参考文献 (16)源程序 (17)1 设计内容及要求1.1设计内容万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用。
在我设计的万年历中主要有:(1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用规范。
(2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。
(3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合的格式,方便查看与使用。
(4)编写万年历的课程设计,是为了使同学们更加了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
1.2设计任务及具体要求利用JAVA语言编写的万年历系统采用了多种JAVA语句来实现多种功能。
用户可以通过本程序的applet运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。
要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要将这一年的某一月份的阴历与阳历全部显示出来,并且附带这一月份的重大节日。
当用户随意改动年份或月份时系统自动显示与星期对应的日期。
java万年历源代码(可运行)
private JScrollPane sp = new JScrollPane(table);
private JButton bLastYear = new JButton("上一年");
p3.add(jsp, BorderLayout.CENTER);
p3.add(p2, BorderLayout.SOUTH);
p3.add(ld, BorderLayout.NORTH);
private JTextArea jta = new JTextArea(); //jta--JTextArea
private JScrollPane jsp = new JScrollPane(jta);
private JLabel l = new JLabel("年份文本框中可直接键入要查找的年份,以提高查询效率");
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//import java.sql.Date;
cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1, 0);
showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);
java课程设计-日历记事本
题目日历记事本起讫日期2009年12月28日至2010 年1月11日所在院系软件学院学生姓名xxxx 专业xxxxx学号xxxx指导教师职称讲师所在单位软件学院2010年1月11日一.总体设计1.类之间的关系如图1-1所示。
图1-1 类之间的关系2.java 源文件及其功能如表1-1所示。
二.详细设计1.主类CalendarPad (1)成员变量见表1-2表1-2 主要成员变量(属性)成员变量描述 变量类型 名称 年、月、日IntYear,month,day表1-1 java 源文件及其功能序号文件名主要功能备注 1 CalendarPad.java 创建实用万年历记事本程序的主窗口含有main 方法 2 NotePad.java 该文件负责创建记事本 3 Year.java 该文件负责创建管理年份的对象 4 Month.java该文件负责创建管理月份的类对象显示日期JTextField[]showDay日历对象CalendarPad日历记事本对象NotePad notepad月Month 负责改变月年year 负责改变年打印对象PrintJob p图形对象Graphics g保存日志的散列表Hashtable hashtable存放散列表的文件File file(2)方法见表1-3表1-3 主要方法方法名功能备注CalendarPad创建程序主窗口构造方法设置日历牌设置日历的年份和月份排列号码排列月份中的号码mousePressed 处理MouseEvent事件actionPerformed 处理ActionEvent事件接口方法main 程序开始运行(3)源代码见文件CalendarPad.javaimport java.util.Calendar;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.Hashtable;import ng.String.*;public class CalendarPad extends JFrame implements MouseListener,ActionListener{int year,month,day;Hashtable hashtable;File file;JTextField showDay[];JLabel title[];Calendar 日历;int 星期几;NotePad notepad=null;PrintJob p=null; //声明一个PrintJob对象。
java课程设计报告---实用万年历记事本
java课程设计报告---实用万年历记事本Java应用技术实践报告题目实用万年历记事本起讫日期所在院系学生姓名专业班级学号指导教师职称所在单位2010年 1 月 11 日一(总体设计NotePad 1(类之间的关系如图1-1所示。
CalendarWindowClockCalendarImagCalendarMessCalendarPade age图1-1 类之间的关系 2(java源文件及其功能如表1-1所示。
表1-1 java源文件及其功能序文件名主要功能备注号CalendarWindow.jav创建实用万年历记事本程序的主窗含有main方法 1 a 口CalendarMessage.ja该文件用来刻画和“日期”有关的数 2 va 据该文件负责显示和修改 3 CalendarPad.java CalendarMessage对象中的日期数据该文件负责提供编辑、读取、保存和 4 NotePad.java 删除日志的该文件负责绘制图像 5 CalendarImage.java该文件负责显示时钟 6 Clock.java- 1 -二(详细设计1( CalendarWindow(1)成员变量主要成员变量(属性)成员变量描述变量类型名称年、月、日 Year,month,day Int显示日期 showDay JTextField[]日历对象 calendarPad CalendarPad日志对象 notepad NotePad月 JTextField[] ShowMonth年 JTextField[] ShowYear图像对象 CalendarImage calendarImage时钟对象 Clock clock处理日期 CalendarMessae calendarMessaenextYear、nextMonth、previousYear、previousMonth、按钮对象 JButton saveDailyRecord、deleteDailyRecord、readDailyRecord (2)方法见表主要方法方法名功能备注 CalendarWindow 创建程序主窗口构造方法doMark 对日志日期做出标记 focusGained 处理FocusListener事件mousePressed 处理MouseEvent事件处理ActionEvent事件 actionPerformed 接口方法程序开始运行 main- 2 -(3)源代码见文件CalendarWindow二(CalendarMessage(1)成员变量见表表1-4 主要成员变量(属性)成员变量描述变量类型名称记录日志的年、月、日 int year、month、day (2)方法见表1-5表1-5 主要方法方法名功能备注SetDay、getDay 设置、获取日期 setMonth/getMonth 设置、获取月份setYear、getYear 设置、获取年份 getMonthCalendar() 处理日期数据 (3)源代码见文件CalendarMessage.javaimport java.util.Calendar; public class CalendarMessage{int year=-1,month=-1,day=-1;public void setYear(int year){this.year=year;}public int getYear(){return year;}public void setMonth(int month){if(month<=12&&month>=1)this.month=month;elsethis.month=1;}public int getMonth(){return month;}public void setDay(int day){this.day=day;}public int getDay(){return day;}public String [] getMonthCalendar(){String [] day=new String[42];- 3 -Calendar rili=Calendar.getInstance();rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1;int dayAmount=0;if(month==1||month==3||month==5||month==7||month==8||month==10 ||month==12)dayAmount=31;if(month==4||month==6||month==9||month==11)dayAmount=30;if(month==2)if(((year%4==0)&&(year%100!=0))||(year%400==0))dayAmount=29;elsedayAmount=28;for(int i=0;i<星期几;i++)day[i]="";for(int i=星期几,n=1;i<星期几+dayAmount;i++){day[i]=String.valueOf(n) ;n++;}for(int i=星期几+dayAmount;i<42;i++)day[i]="";return day;}}3(CalendarPad(1)成员变量见表表1-6 主要成员变量(属性)成员变量描述变量类型名称确定年份、月份、日期的整数 year、month、day IntcalendarPad 处理和日期有关的数据 CalendarPadshowDay 显示日期 JTextField星期 String[](2)方法见表表1-7 主要方法方法名功能备注CalendarPad 创建calendarPad对象构造方法- 4 -setShowDayTextField负责设置showDay数组 (JTextField[])setCalendarMes负责设置sage(CalendarM calendarMessage对象 essage) showMonthCalen负责显示“日历” dar()(3)源代码见文件CalendarPad.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class CalendarPad extends JPanel{int year,month,day;CalendarMessage calendarMessage;JTextField [] showDay;JLabel title[];String [] 星期={"SUN日","MON一","TUE二","WED三","THU四","FRI 五","SAT六"};JPanel north,center;public CalendarPad(){setLayout(new BorderLayout());north=new JPanel();north.setLayout(new GridLayout(1,7));center=new JPanel();center.setLayout(new GridLayout(6,7));add(center,BorderLayout.CENTER);add(north,BorderLayout.NORTH);title=new JLabel[7];for(int j=0;j<7;j++){title[j]=new JLabel();title[j].setFont(new Font("TimesRoman",Font.BOLD,12)); [j]); title[j].setText(星期title[j].setHorizontalAlignment(JLabel.CENTER);title[j].setBorder(BorderFactory.createRaisedBevelBorder()); north.add(title[j]);}title[0].setForeground(Color.red);title[6].setForeground(Color.blue);}public void setShowDayTextField(JTextField [] text){ showDay=text;for(int i=0;i<showDay.length;i++){showDay[i].setFont(newFont("TimesRoman",Font.BOLD,15));showDay[i].setHorizontalAlignment(JTextField.CENTER); - 5 -showDay[i].setEditable(false);center.add(showDay[i]);}}public void setCalendarMessage(CalendarMessage calendarMessage){this.calendarMessage=calendarMessage;}public void showMonthCalendar(){String [] a=calendarMessage.getMonthCalendar();for(int i=0;i<42;i++)showDay[i].setText(a[i]);validate();}}4(NotePad1)成员变量见表1-8 (表1-8 主要成员变量(属性)成员变量描述变量类型名称JTextArea 可编辑多行文本 text显示和日期有关的数据 showMessage JTextFieldmenu JpopupMenu 下月,上月itmeCopy、itmeCut、复制,剪切,粘贴,清空 JMenuItem itemPaste、itmeClear (2)方法见表9表9 主要方法方法名功能备注NotePad 创建notePad 构造方法 setShowMessage指定日期数据,显示日(int,int,int) 期信息Save(File,指定日期,保存日志 int,int,int)Save(File,指定日期,删除日志 int,int,int)read(File,int,读取参数日期日志 int,int)(3)源代码见文件NotePad.java- 6 -import java.awt.*;import javax.swing.*;import java.io.*;import java.awt.event.*;public class NotePad extends JPanel implements ActionListener{ JTextArea text;JTextField showMessage;JPopupMenu menu;JMenuItem itemCopy,itemCut,itemPaste,itemClear;public NotePad(){showMessage=new JTextField();showMessage.setHorizontalAlignment(JTextField.CENTER); showMessage.setFont(new Font("TimesRoman",Font.BOLD,16)); showMessage.setForeground(Color.blue);showMessage.setBackground(Color.pink);showMessage.setBorder(BorderFactory.createRaisedBevelBorder()); showMessage.setEditable(false);menu=new JPopupMenu();itemCopy=new JMenuItem("复制");itemCut=new JMenuItem("剪切");itemPaste=new JMenuItem("粘贴");itemClear=new JMenuItem("清空");itemCopy.addActionListener(this);itemCut.addActionListener(this);itemPaste.addActionListener(this);itemClear.addActionListener(this);menu.add(itemCopy);menu.add(itemCut);menu.add(itemPaste);menu.add(itemClear);text=new JTextArea(10,10);text.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvente){if(e.getModifiers()==InputEvent.BUTTON3_MASK)menu.show(text,e.getX(),e.getY());}});setLayout(new BorderLayout());add(showMessage,BorderLayout.NORTH);add(new JScrollPane(text),BorderLayout.CENTER);}public void setShowMessage(int year,int month,int day){ showMessage.setText(""+year+"年"+month+"月"+day+"日"); }public void save(File dir,int year,int month,int day){ String dailyContent=text.getText();String fileName=""+year+""+month+""+day+".txt";- 7 -String key=""+year+""+month+""+day;String [] dayFile=dir.list();boolean boo=false;for(int k=0;k<dayFile.length;k++){if(dayFile[k].startsWith(key)){boo=true;break;}}if(boo){String m=""+year+"年"+month+"月"+day+"已有日志,将新的内容添加到日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){try{File f=new File(dir,fileName);RandomAccessFile out=new RandomAccessFile(f,"rw");long fileEnd=out.length();byte []bb=dailyContent.getBytes();out.seek(fileEnd);out.write(bb);out.close();}catch(IOException exp){}}}else{String m=""+year+"年"+month+"月"+day+"还没有日志,保存日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){try{File f=new File(dir,fileName);RandomAccessFile out=new RandomAccessFile(f,"rw");long fileEnd=out.length();byte []bb=dailyContent.getBytes();out.write(bb);out.close();}catch(IOException exp){}}}}public void delete(File dir,int year,int month,int day){ String key=""+year+""+month+""+day;- 8 -String [] dayFile=dir.list();boolean boo=false;for(int k=0;k<dayFile.length;k++){if(dayFile[k].startsWith(key)){boo=true;break;}}if(boo){String m="删除"+year+"年"+month+"月"+day+"日的日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){String fileName=""+year+""+month+""+day+".txt";File deleteFile=new File(dir,fileName);deleteFile.delete();}}else{String m=""+year+"年"+month+"月"+day+"无日志记录";JOptionPane.showMessageDialog(this,m,"提示",JOptionPane.WARNING_MESSAGE);}}public void read(File dir,int year,int month,int day){ String fileName=""+year+""+month+""+day+".txt";String key=""+year+""+month+""+day;String [] dayFile=dir.list();boolean boo=false;for(int k=0;k<dayFile.length;k++){if(dayFile[k].startsWith(key)){boo=true;break;}}if(boo){String m=""+year+"年"+month+"月"+day+"有日志,显示日志内容吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){text.setText(null);try{File f=new File(dir,fileName);FileReader inOne=new FileReader(f);BufferedReader inTwo= new BufferedReader(inOne);String s=null;while((s=inTwo.readLine())!=null)- 9 -text.append(s+"\n");inOne.close();inTwo.close();}catch(IOException exp){}}}else{String m=""+year+"年"+month+"月"+day+"无日志记录";JOptionPane.showMessageDialog(this,m,"提示",JOptionPane.WARNING_MESSAGE);}}public void actionPerformed(ActionEvent e){if(e.getSource()==itemCopy)text.copy();else if(e.getSource()==itemCut)text.cut();else if(e.getSource()==itemPaste)text.paste();else if(e.getSource()==itemClear)text.setText(null);}}5(CalendarImage1)成员变量见表1-8 (表1-8 主要成员变量(属性)成员变量描述变量类型名称File 存放图像文件的引用 imageFileImage Image负责创建image对象 Toolkit tool (2)方法见表9表9 主要方法方法名功能备注 CalendarImage创建calendarImage对构造方法 () 象负责设置imageFile对setImageFile象,根据imageFile创 (File) 建image paintComponent负责绘制image- 10 -(Graphics)(3)源代码见文件CalendarImage.java import javax.swing.*;import java.io.*;import java.awt.*;public class CalendarImage extends JPanel{File imageFile;Image image;Toolkit tool;CalendarImage(){tool=getToolkit();}public void setImageFile(File f){imageFile=f;try{ image=tool.getImage(imageFile.toURI().toURL());}catch(Exception exp){}repaint();}public void paintComponent(Graphics g){super.paintComponent(g);int w=getBounds().width;int h=getBounds().height;g.drawImage(image,0,0,w,h,this);}}6(Clock(1)成员变量见表主要成员变量(属性)成员变量描述变量类型名称Clock 时钟 clock (2)方法见表主要方法方法名功能备注Clock() 创建clock对象构造方法负责设置imageFile对paint(Graphics象,根据imageFile创 ) 建image start() 开始线程- 11 -stop() 停止线程run() (3)源代码见文件Clock.java import java.awt.*;import java.util.*;import javax.swing.*;import java.awt.geom.*; public class Clock extends JPanel implements Runnable{Thread clock;public Clock(){super();setFont(new Font("Times new Roman",Font.BOLD,60));start();setSize(280,100);Dimensionscreen=Toolkit.getDefaultToolkit().getScreenSize();}public void start(){if(clock==null){clock=new Thread(this);clock.start();}}public void run(){while(clock!=null){repaint();try{Thread.sleep(1000);}catch (InterruptedException ex){ex.printStackTrace();}}}public void stop(){clock=null;}public void paint(Graphics g) { Graphics2D g2=(Graphics2D)g;- 12 -Calendar now=new GregorianCalendar(); String timeInfo="";int hour=now.get(Calendar.HOUR_OF_DAY); int minute=now.get(Calendar.MINUTE);int second=now.get(Calendar.SECOND);if(hour<=9)timeInfo+="0"+hour+":";elsetimeInfo+=hour+":";if(minute<=9)timeInfo+="0"+minute+":";elsetimeInfo+=minute+":";if(second<=9)timeInfo+="0"+second;elsetimeInfo+=second;g.setColor(Color.PINK);Dimension dim=getSize();g.fillRect(0,0,dim.width,dim.height);g.setColor(Color.BLACK);g.drawString(timeInfo,40,80); }}三(运行效果1(使用eclipse软件运行该系统后,即可进入实用万年历记事本程序的主窗口。
java万年历设计源码(附截图)
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.io.*;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;public class h_main1 extends JFrame implements ActionListener, MouseListener {private Calendar cld = Calendar.getInstance();//获取一个Calendar类的实例对象private String[] astr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };private DefaultTableModel dtm = new DefaultTableModel(null, astr); private JTable table = new JTable(dtm);private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton("上一年");private JButton bNextYear = new JButton("下一年");private JButton bLastMonth = new JButton("上月");private JButton bNextMonth = new JButton("下月");private JButton bAddClock = new JButton("确定");private JPanel p1 = new JPanel(); // 装入控制日期的按钮模块private JPanel p2 = new JPanel(new GridLayout(3,2));private JPanel p3 = new JPanel(new BorderLayout());private JPanel p4 = new JPanel(new GridLayout(2,1));private JPanel p5 = new JPanel(new BorderLayout());private JPanel p6 = new JPanel(new GridLayout(2,2));private JPanel p7 = new JPanel(new GridLayout(2,1));private JPanel p8 = new JPanel(new BorderLayout());private JComboBox timeBox = newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;private JTextField jtfYear = new JTextField(5);// jtfYeaar年份显示输入框private JTextField jtfMonth = new JTextField(2);// jtfMouth月份显示输入框private JTextField timeField=new JTextField();private JTextField h1=new JTextField(5);private JTextField m1=new JTextField(5);private static JTextArea jta = new JTextArea(10,5);private JScrollPane jsp = new JScrollPane(jta);private JTextArea jta1 = new JTextArea(5,4);private JScrollPane jsp1 = new JScrollPane(jta1);private JLabel l = new JLabel("你可以向年份输入框中输入年份,提高查询效率");private JLabel lt = new JLabel();private JLabel ld = new JLabel();private JLabel ts=new JLabel("请在右边下拉菜单选择你要选择的城市");private JLabel clock= new JLabel("闹钟");private JLabel notice= new JLabel("备忘录");private JLabel hour = new JLabel("小时");private JLabel minute= new JLabel("分钟");private JLabel lu = new JLabel("农历和节气");private JLabel null1=new JLabel();private int lastTime;private String localTime = null;private String s = null;private SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy 年MM月dd日hh时mm分ss秒");public h_main1() {super("My Calender");// 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗口关闭函数this.getContentPane().setLayout(new BorderLayout(5, 5));jta.setLineWrap(true);// 长度大于分配长度时候则换行table.setGridColor(Color.GRAY);// 星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);// 将table中的列设置为可选择的table.setSelectionBackground(Color.GRAY);// 当选定某一天时背景颜色为黑色table.setSelectionForeground(Color.GREEN);table.setBackground(new Color(184,207, 229));// 日期显示表格为浅蓝色table.setFont(new Font("黑体", Font.BOLD, 24));// 日期数字字体格式table.setRowHeight(30);// 表格的高度table.addMouseListener(this); // 鼠标监听器jtfYear.addActionListener(this);// 可输入年份的文本框// 为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this);bAddClock.addActionListener(this);timeBox.addItemListener(new TimeSelectedChangedListener());// 将按钮添加到Jpane上p1.add(bLastYear);p1.add(jtfYear);// 年份输入文本框p1.add(bNextYear);p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p2.add(clock);p2.add(bAddClock);p2.add(hour);p2.add(h1);p2.add(minute);p2.add(m1);p3.add(jsp, BorderLayout.SOUTH);p3.add(lu,BorderLayout.CENTER);p3.add(ld, BorderLayout.NORTH);p4.add(l);p4.add(lt);p5.add(p4, BorderLayout.SOUTH);p5.add(sp, BorderLayout.CENTER);p5.add(p1, BorderLayout.NORTH);p6.add(ts);p6.add(timeBox);p6.add(null1);p6.add(timeField);p7.add(notice);p7.add(jsp1);p8.add(p2,BorderLayout.CENTER);p8.add(p7,BorderLayout.SOUTH);this.getContentPane().add(p3, BorderLayout.EAST);this.getContentPane().add(p5, BorderLayout.CENTER);this.getContentPane().add(p6,BorderLayout.SOUTH);this.getContentPane().add(p8,BorderLayout.WEST);String[] strDate = DateFormat.getDateInstance().format(new Date()) .split("-");// 获取日期cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]) - 1,0);showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]), cld);jtfMonth.setEditable(false);// 设置月份文本框为不可编辑jtfYear.setText(strDate[0]);jtfMonth.setText(strDate[1]);this.showTextArea(strDate[2]);ld.setFont(new Font("新宋体", Font.BOLD, 24));new Timer(lt).start();new TimeThread().start();this.setBounds(200, 200, 700, 350);this.setResizable(false);this.setVisible(true);}public void showCalendar(int localYear, int localMonth, Calendar cld) {int Days = getDaysOfMonth(localYear, localMonth) +cld.get(Calendar.DAY_OF_WEEK) -2;Object [] ai = new Object[7];lastTime = 0;for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++){ai[i%7] =String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));if (i%7 == 6){dtm.addRow(ai);ai = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int Year, int Month) {if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10 ||Month==12){return 31;}if(Month==4||Month==6||Month==9||Month==11){return 30;}if(Year%4==0&&Year%100!=0||Year%400==0)//闰年{return 29;}else {return 28;}}public void actionPerformed(ActionEvent e){if(e.getSource() == jtfYear || e.getSource() == bLastYear || e.getSource() == bNextYear ||e.getSource() == bLastMonth || e.getSource() == bNextMonth||e.getSource()==bAddClock){int m, y;try//控制输入的年份正确,异常控制{if (jtfYear.getText().length() != 4){throw new NumberFormatException();}y = Integer.parseInt(jtfYear.getText());m = Integer.parseInt(jtfMonth.getText());}catch (NumberFormatException ex){JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}ld.setText("没有选择日期");for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}if(e.getSource() ==bLastYear){ jtfYear.setText(String.valueOf(--y)); }if(e.getSource() ==bNextYear){jtfYear.setText(String.valueOf(++y)); }if(e.getSource() == bLastMonth){if(m == 1){jtfYear.setText(String.valueOf(--y));m = 12;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(--m));}}if(e.getSource() == bNextMonth){if(m == 12){jtfYear.setText(String.valueOf(++y));m = 1;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(++m));}}cld.set(y, m-1, 0);showCalendar(y, m, cld);}if(e.getSource()==bAddClock){try{Clock clock=new Clock();clock.start();if(Integer.parseInt(h1.getText())<0||Integer.parseInt(h1.getText())>23|| Integer.parseInt(m1.getText())<0||Integer.parseInt(m1.getText())>59) {throw(new Exception());}}catch(Exception ex){JOptionPane.showMessageDialog(this, "时数应该为0——23,分钟数应该为0——59", "时间有误",JOptionPane.ERROR_MESSAGE);}}}public void mouseClicked(MouseEvent e){jta.setText(null);int r = table.getSelectedRow();int c = table.getSelectedColumn();if (table.getValueAt(r,c) == null){ld.setText("没有选择日期");}else{this.showTextArea(table.getValueAt(r,c));}}private void showTextArea(Object selected){ //在这里将公历化为农历ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日");}public static void main(String[] args){JFrame.setDefaultLookAndFeelDecorated(true);JDialog.setDefaultLookAndFeelDecorated(true);new h_main1();jta.setText(today());}private void updateTimeText(String timeZoneId) {if(timeZoneId != null){TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);dateFormat.setTimeZone(timeZone);Calendar calendar = Calendar.getInstance();calendar.setTimeZone(timeZone);timeField.setText(dateFormat.format(calendar.getTime()));}else{timeField.setText(null);}}private class TimeSelectedChangedListener implements ItemListener {public void itemStateChanged(ItemEvent e) {if (e.getStateChange()==ItemEvent.SELECTED) {if (e.getItem() instanceof String) {s = e.getItem().toString();}}}}private class TimeThread extends Thread{public void run(){while(true){updateTimeText(s);try{Thread.sleep(100);}catch(InterruptedException e){e.printStackTrace();}}}}class Clock extends Thread //闹钟线程{public void run(){while(true){Calendar now=Calendar.getInstance();int h=now.get(Calendar.HOUR_OF_DAY);//获取小时int mi=now.get(Calendar.MINUTE);//获取分钟int s=now.get(Calendar.SECOND);//获取秒钟int ss=h*3600+mi*60+s;if(ss>(Integer.parseInt(h1.getText())*3600+Integer.parseInt(m1.getText() )*60+0)&&ss<Integer.parseInt(h1.getText())*3600+(Integer.parseInt(m1.getText ()+5)*60+0)){jta1.setText("闹钟启动");}else{jta1.setText("没有正在提示的闹钟");}}}}class Timer extends Thread //显示系统时间{private JLabel lt;private SimpleDateFormat fy = newSimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");private boolean b=true;public Timer(JLabel lt){this.lt=lt;}public void run(){while(true){try{lt.setText(fy.format(new Date()));this.sleep(1000);}catch(InterruptedException ex){ex.printStackTrace();}}}}final private static long[] lunarInfo = new long[] { 0x04bd8,0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554,0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0,0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0,0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40,0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3,0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550,0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950,0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0,0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6,0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263,0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0,0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0,0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a,0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5,0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0,0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0,0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0,0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9,0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954,0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0,0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0,0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520,0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577,0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };public final static String[] nStr1 = new String[] { "", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一","十二" };private final static String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };private final static String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };private final static String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };private final static String[] solarTerm = new String[] { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏","小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };private final static String[] sFtv = new String[] { "0101*元旦", "0214 情人节", "0308 妇女节", "0312 植树节", "0315 消费者权益日","0401 愚人节", "0501 劳动节", "0504 青年节", "0512 护士节", "0601 儿童节", "0701 建党节", "0801 建军节", "0808 父亲节", "0909 毛泽东逝世纪念", "0910 教师节", "0928 孔子诞辰", "1001*国庆节", "1006 老人节", "1024 联合国日", "1112 孙中山诞辰", "1220 澳门回归","1225 圣诞节", "1226 毛泽东诞辰" };private final static String[] lFtv = new String[] { "0101*农历春节", "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0815 中秋节", "0909 重阳节", "1208 腊八节", "1224 小年", "0100*除夕" };/*** 传回农历y年的总天数** @param y* @return*/final private static int lYearDays(int y) {int i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {if ((lunarInfo[y - 1900] & i) != 0)sum += 1;}return (sum + leapDays(y));}/*** 传回农历y年闰月的天数** @param y* @return*/final private static int leapDays(int y) {if (leapMonth(y) != 0) {if ((lunarInfo[y - 1900] & 0x10000) != 0)return 30;elsereturn 29;} elsereturn 0;}/*** 传回农历y年闰哪个月1-12 , 没闰传回0 ** @param y* @return*/final private static int leapMonth(int y) {return (int) (lunarInfo[y - 1900] & 0xf);}/*** 传回农历y年m月的总天数** @param y* @param m* @return*/final private static int monthDays(int y, int m) {if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) return 29;elsereturn 30;}/*** 传回农历y年的生肖** @param y* @return*/final public static String AnimalsYear(int y) {return Animals[(y - 4) % 12];}/*** 传入月日的offset 传回干支,0=甲子** @param num* @return*/final private static String cyclicalm(int num) {return (Gan[num % 10] + Zhi[num % 12]);}/*** 传入offset 传回干支, 0=甲子** @param y* @return*/final public static String cyclical(int y) {int num = y - 1900 + 36;return (cyclicalm(num));}/*** 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 ** @param y* @param m* @return*/final private long[] Lunar(int y, int m) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(1900 + 1900, 1,31).getTime();Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;if (y < 2000)offset += year19[m - 1];if (y > 2000)offset += year20[m - 1];if (y == 2000)offset += year2000[m - 1];nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) {--i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) {if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}/*** 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 ** @param y* @param m* @param d* @return*/final public static long[] calElement(int y, int m, int d) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime();Date objDate = new GregorianCalendar(y, m - 1, d).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) {if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}public final static String getChinaDate(int day) { String a = "";if (day == 10)return "初十";if (day == 20)return "二十";if (day == 30)return "三十";int two = (int) ((day) / 10);if (two == 0)a = "初";if (two == 1)a = "十";if (two == 2)a = "廿";if (two == 3)a = "三";int one = (int) (day % 10);switch (one) {case 1:a += "一";break;case 2:a += "二";break;case 3:a += "三";break;case 4:a += "四";break;case 5:a += "五";break;case 6:a += "六";break;case 7:a += "七";break;case 8:a += "八";break;case 9:a += "九";break;}return a;}public static String today() {Calendar today =Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);int year = today.get(Calendar.YEAR);int month = today.get(Calendar.MONTH) + 1;int date = today.get(Calendar.DATE);long[] l = calElement(year, month, date);StringBuffer sToday = new StringBuffer();try {sToday.append(sdf.format(today.getTime()));sToday.append(" 农历");sToday.append(cyclical(year));sToday.append('(');sToday.append(AnimalsYear(year));sToday.append(")年");sToday.append(nStr1[(int) l[1]]);sToday.append("月");sToday.append(getChinaDate((int) (l[2])));return sToday.toString();} finally {sToday = null;}}private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日EEEEE");/*** 农历日历工具使用演示** @param args*/public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }public void mousePressed(MouseEvent e) { }public void mouseReleased(MouseEvent e) { }}。
日历记事本-JAVA课程设计..
沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学图7 删除后页面图4.设计体会经过几天的努力,参考了一些书和网上的资料,完成了一个日历记事本的设计。
由于只学过一学期的Java课程,知识掌握的有限,所以此程序不是特别复杂。
在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JA V A语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。
自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。
通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。
还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。
本次课程设计不仅巩固了以前所学的知识,还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。
所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。
网络是我们学习的最好的老师之一。
有问题,问网络,是一个很好的习惯。
因此学到了不少书本上没有的知识;学到了很多java编程知识。
可以说它给了我一次自我评估的机会。
通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。
总之,本次课程设计收获颇丰。
5.参考文献沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学。
java课程设计--万年历
JAVA软件项目设计 (1)项目报告 (1)1.设计分析: (3)1.1需求分析 (3)1.2功能设计 (3)2.程序结构: (4)3.各模块功能及程序说明: (4)3.1 各种包的导入: (4)3.2控件的初始化 (5)3.3绘制万年历的界面 (6)3.4 增加控件 (6)3.5增加监听 (7)3.6封装操作 (8)4.源程序 (8)5.操作方法(流程) (22)6.实验结果 (23)7.心得体会: (25)1.设计分析: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("<<"); // 上一年按钮buttonNextYear = new JButton(">>"); // 下一年的按钮buttonPreMonth = new JButton("<<"); // 上一月按钮buttonNextMonth = 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("<<"); // 上一年按钮buttonNextYear = 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 JLabel[49]; // 存储天for (int i = 0; i < labelDays.length; i++){labelDays[i] = new JLabel("", JLabel.CENTER);centerPane.add(labelDays[i]);}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);}else{resertMonth = 12;boxMonth.setSelectedItem(resertMonth);boxYear.setSelectedItem(resertYear-1);}}else{boxMonth.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);}else{boxMonth.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 String[42];tempDate = initDate();// 给前七个label赋属性String[] logs = new String[] { "日", "一", "二", "三", "四", "五", "六" };//将logs数组中的值放到label中for (int i = 0; i < 7; i++){labelDays[i].setText(logs[i]);}//初始化label的颜色for (int i = 0; i < labelDays.length; i++) {labelDays[i].setForeground(Color.BLACK);}// 设置星期日的颜色为红色for (int i = 0; i < labelDays.length; i += 7){labelDays[i].setForeground(Color.red);}// 设置星期六的颜色为蓝色for (int i = 6; i < labelDays.length; i += 7){labelDays[i].setForeground(Color.blue);}//将日期放到label中,并把系统当天的时间设为绿色for (int i = 7; i < 49; i++){int t = 0;t = day();labelDays[i].setText(tempDate[i-7]);if(i ==Calendar.getInstance().get(Calendar.DAY_OF_MONTH)){labelDays[i+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 String[42];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++) {date[p] = "";}for (int w = 1; w <= m; w++) {date[temp0++] = w + "";}return date;}//获取系统当前月第一天离星期天有几天public int day(){int temp = 0;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;temp = (sum % 7);return temp;}public static void main(String[] args){new WanNianLi();}}5.操作方法(流程)5.1 制作万年历的界面5.2 在界面上增加控件5.3 给事件增加监听5.4给事件增加命令符5.5运行调试6.实验结果6.1 获取当前时间6.2 获取闰年2月的时间6.3获取平年2月的时间6.4选择2010年2月的时间7.心得体会:通过这次的项目设计,我们学到了很多东西,下面就是这次项目设计的心得体会:在这次的项目设计中,主要是运用Java语言来编写,并可运用其他的技术。
java课程设计--日历记事本
java课程设计说明书课程名称Java程序设计课程代码题目日历记事本年级/专业/班学生姓名学号指导老师开题时间完成时间课程设计任务书课程名称Java程序设计学生姓名1、设计的目的与要求;1、)为用户提供一个带有日程提醒功能的日历记事本并具备以下功能:(1)、显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
(2)、定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。
(3)、查询信息:用户可以查询到某个月的所有的提示信息。
2、)对java技术的进一步了解和简单的运用;3、)初步的接触软件工程;设计进度及完成情况目录摘要.................................................................................................................................. - 4 -1. 引言..................................................................................................................................... - 5 -2.设计目的与任务................................................................................................................... - 5 -3.设计方案............................................................................................................................... - 6 -3.1 总体设计................................................................................................................... - 6 -3.2设计要求.................................................................................................................... - 6 -3.3系统的主要功能........................................................................................................ - 6 -3.4系统功能结构图........................................................................................................ - 6 -3.5运行功能(截图).................................................................................................... - 7 -4.结束语................................................................................................................................... - 9 -5.致谢................................................................................................................................... - 9 -6.参考文献............................................................................................................................. - 10 -7.附录A:源程序.................................................................................................................... - 11 - 8附录B:实验体会............................................................................................................. - 24 -摘要本课程设计通过代码实现将理论知识和具体实践相结合,巩固提高了对JAVA的相关方法与概念的理解,使学生的发散思维及动手能力进一步加强,加强对计算机及软件工程的进一步了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015年12月18日一、课程题目设计一个万年历系统,实现以下功能(1)可以查看当前的年份、月份和日期;(2)有时间栏,便于用户查看当前时间;(3)能够查找1至9999年的日期与星期的关系。
其它功能可自行开发。
二、题目分析与设计1.使用的开发环境为eclipseJdk环境:jdk1.82. (此为万年历界面图)使用了jTabbedPane 类对功能页面分页,布局策略基本用BorderLayout 和GridLayout 。
3.本项共有5个类,基本一个功能有一个类实现,主类CalendarMain只包含一个main函数:对创建框架和其属性设置。
AlarmDemo类则实现闹钟功能;NoteBook 类实现记事本功能;CalendarsView 类则实现基本日历功能,ChooseDay 类是一个弹窗,被CalendarsView 调用,CalendarsView 、AlarmDemo 也在该类被调用;.new CalendarsView();4.日历界面使用了jTable ,功能的实现逻辑则是1.首先定义两个全局变量---年和月,查看不同时间的日历,该变量也随之改变。
2.写了几个函数获取今年第一天是星期几,然后根据月份天数即可推算具体某月第一天是星期几。
3.知道一个月第一天是星期几,则该月日历既可以顺序列出。
闹钟的功能实现思路:1.获取界面设定的时间。
2.使用线程,每过一秒急救获取当前时间,并判断是否到达设定的时间3.到设定的时间,启动弹窗,播放闹铃4.闹铃科根据文件选择器自行选择记事本功能实现思路1.在项目文件夹先新建一个txt文件作为储存的数据库2.利用File 类和io 数据流将界面文本储存进txt文件,实现保存功能3.每当程序启动,读取txt文件内容并显示到界面上三、测试分析1.使用如下拓展包2.程序界面截图如下日历主界面闹钟界面记事本界面3.测试流程及功能介绍(1)点击上一月、下一月可查看不同月份日历,左下角显示当前时间。
点击蓝色的日期栏可以回到当前页(2)点击圈中按钮会出现弹框,可以调节年、月,查看指定年月日历(3)闹铃可以使用默认闹铃,也能自定义选择闹铃,不过闹铃格式只能为wav或au时间到了以后出现弹框,并响起闹铃(4)记事本输入文本,按保存即可。
(5)点击最小化按钮,可以选择普通缩小或者直接缩小到托盘.附录:源代码(注:在工程目录下新建文件夹source ,并添加了闹铃文件,txt,托盘图片,如图)AlarmDemo.javaimport java.applet.Applet;import java.applet.AudioClip;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.*;import javax.swing.text.DefaultFormatterFactory;import javax.swing.text.NumberFormatter;public class AlarmDemo extends JPanel implements Runnable { private static final long serialVersionUID = -7066237267822356675L;Thread alarm;public AudioClip soumd1;Calendar c = Calendar.getInstance();JButton sure = new JButton("确定");JButton open = new JButton("可选择闹铃");JLabel jLabel = new JLabel("设置时间日-时-分", JLabel.CENTER);JLabel dayLabel = new JLabel("日", JLabel.CENTER);JLabel hourLabel = new JLabel("时", JLabel.CENTER);JLabel minuteLabel = new JLabel("分", JLabel.CENTER);JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();JPanel jPanel3 = new JPanel();JPanel jPanel4 = new JPanel();JTextField music = new JTextField(System.getProperty("user.dir")+"\\source\\alarm.wav");int y = 0, m = 0, h = 0, mi = 0, d = 0;boolean fo = false;public AlarmDemo() {music.setEditable(false);// 设置标签格式dayLabel.setFont(new Font("Dialog", 1, 30));hourLabel.setFont(new Font("Dialog", 1, 30));minuteLabel.setFont(new Font("Dialog", 1, 30));jLabel.setFont(new Font("Dialog", 1, 30));//按钮设置sure.setContentAreaFilled(false);sure.setFocusPainted(false);open.setContentAreaFilled(false);open.setFocusPainted(false);JSpinner spinner1 = new JSpinner();JSpinner spinner2 = new JSpinner();JSpinner spinner3 = new JSpinner();spinner3.setModel(new SpinnerNumberModel(c.get(Calendar.DATE), 1, 31, 1));spinner1.setModel(new SpinnerNumberModel(c.get(Calendar.HOUR_OF_DAY),0, 23, 1));XXX——《Java语言》课程期末作业spinner2.setModel(new SpinnerNumberModel(c.get(Calendar.MINUTE), 0, 59,1));// 设置属性setSpinners(spinner1);setSpinners(spinner2);setSpinners(spinner3);jPanel4.add(jLabel);jPanel4.setPreferredSize(new Dimension(500, 100));jPanel1.setLayout(new GridLayout(1, 6));jPanel1.add(spinner3);jPanel1.add(dayLabel);jPanel1.add(spinner1);jPanel1.add(hourLabel);jPanel1.add(spinner2);jPanel1.add(minuteLabel);jPanel1.setPreferredSize(new Dimension(500, 100));jPanel2.setLayout(new BorderLayout());jPanel2.add(jPanel4, BorderLayout.NORTH);jPanel2.add(music, BorderLayout.CENTER);jPanel2.add(open, BorderLayout.EAST);jPanel3.setLayout(new GridLayout(1, 1));jPanel3.add(sure);setLayout(new BorderLayout());add(jPanel1, BorderLayout.NORTH);add(jPanel2, BorderLayout.CENTER);add(jPanel3, BorderLayout.SOUTH);XXX——《Java语言》课程期末作业open.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); // 设置文件选择模式,此处为文件和目录均可fileChooser.setCurrentDirectory(new File(".")); // 设置文件选择器当前目录fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {public boolean accept(File file) { // 可接受的文件类型String name = file.getName().toLowerCase();return name.endsWith(".wav")|| name.endsWith(".au")|| file.isDirectory();}public String getDescription() { // 文件描述return "音乐文件(*.wav,*.au)";}});if (fileChooser.showOpenDialog(AlarmDemo.this) == JFileChooser.APPROVE_OPTION) { // 弹出文件选择器,并判断是否点击了打开按钮String fileName = fileChooser.getSelectedFile().getAbsolutePath(); // 得到选择文件或目录的绝对路径music.setText(fileName);}}});sure.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {if (sure.getText().equals("确定")) {try {d = (int) spinner3.getValue();h = (int) spinner1.getValue();mi = (int) spinner2.getValue();if (1 <= d && d <= 31 && 0 <= h && h <= 23 && 0 <= mi&& mi <= 59) {fo = true;jLabel.setText("设置闹钟成功");spinner1.setEnabled(false);spinner2.setEnabled(false);spinner3.setEnabled(false);start();} elseJOptionPane.showMessageDialog(null, "输入时间错误");} catch (Exception e) {JOptionPane.showMessageDialog(null, "请输入正确的时间");}} else {spinner1.setEnabled(true);spinner2.setEnabled(true);spinner3.setEnabled(true);fo = false;stop();soumd1.stop();sure.setText("确定");jLabel.setText("设置时间日-时-分");}}});}public void start() {if (alarm == null) {alarm = new Thread(this);alarm.start();}}public void stop()// 停止线程{alarm = null;}public void run() {while (true) {Date now = new Date();if (fo) {sure.setText("关闭");SimpleDateFormat ri = new SimpleDateFormat("dd"); // 封装为了获取日期SimpleDateFormat shi = new SimpleDateFormat("kk"); // 封装为了获取小时SimpleDateFormat fen = new SimpleDateFormat("mm"); // 封装为了获取分int riqi = Integer.parseInt(ri.format(now)); // 获取日期int shizhong = Integer.parseInt(shi.format(now)); // 获取小时int fenzhong = Integer.parseInt(fen.format(now)); // 获取分钟if (riqi == d && shizhong == h && fenzhong == mi) // 判断条件{try {soumd1 = Applet.newAudioClip(new File(music.getText()).toURL()); // 播放音乐soumd1.loop();fo = false;JOptionPane.showMessageDialog(null, "时间到了!!!(⊙v⊙)");} catch (Exception e) {e.printStackTrace();}}}try {Thread.sleep(1000);} catch (InterruptedException ie) {}}}public void setSpinners(JSpinner spinner) {// 设置属性JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner, "0");spinner.setEditor(editor);JFormattedTextField textField = ((JSpinner.NumberEditor) spinner.getEditor()).getTextField();textField.setFont(new Font("Dialog", 1, 45));textField.setEditable(true);DefaultFormatterFactory factory = (DefaultFormatterFactory) textField.getFormatterFactory();NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter();formatter.setAllowsInvalid(false);}}CalendarsView.javaimport java.awt.AWTException;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Frame;import java.awt.GridLayout;import java.awt.SystemTray;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.Timer;import javax.swing.table.DefaultTableModel;public class CalendarsView extends JFrame {private static final long serialVersionUID = 1L;static Calendar c = Calendar.getInstance();static int year = c.get(Calendar.YEAR);static int month = c.get(Calendar.MONTH) + 1;int monthday = 0;String[] weekdaystr = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };Object[][] monthview = new String[6][7];JPanel dayPanel = new JPanel();JPanel panel1 = new JPanel();JPanel calPanel = new JPanel();JPanel alarmDemo = new AlarmDemo();JPanel noteBook = new NoteBook();JTabbedPane jTabbedPane = new JTabbedPane(JTabbedPane.TOP);JButton Prebutton = new JButton("上一月");JButton Nextbutton = new JButton("下一月");JButton PreYear = new JButton("上一年");JButton NextYear = new JButton("下一年");JButton Change = new JButton(c.get(Calendar.YEAR) + "年"+ (c.get(Calendar.MONTH) + 1) + "月");JLabel nowLabel = new JLabel(c.get(Calendar.YEAR) + "年"+ (c.get(Calendar.MONTH) + 1) + "月" + (c.get(Calendar.DATE)) + "日",JLabel.CENTER);JLabel timeLabel = new JLabel("---", JLabel.LEFT);DefaultTableModel model = new DefaultTableModel();JTable JTable;JScrollPane JScrollPane;TrayIcon trayIcon;//托盘图标SystemTray systemTray;//系统托盘public CalendarsView() {//托盘化systemTray = SystemTray.getSystemTray();//获得系统托盘的实例try {trayIcon = new TrayIcon(ImageIO.read(new File(System.getProperty("user.dir")+"\\source\\360.png")));}catch (IOException e1) {e1.printStackTrace();}this.addWindowListener(new WindowAdapter(){public void windowIconified(WindowEvent e){XXX——《Java语言》课程期末作业int n = JOptionPane.showConfirmDialog(null, "是否缩小到托盘?", "缩小", JOptionPane.YES_NO_OPTION);if (n == JOptionPane.YES_OPTION) {dispose();//窗口最小化时dispose该窗口try {systemTray.add(trayIcon);} catch (AWTException e1) {e1.printStackTrace();}//设置托盘的图标} else if (n == JOptionPane.NO_OPTION) {systemTray.remove(trayIcon);}}});trayIcon.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){if(e.getClickCount() == 2)//双击托盘窗口再现setExtendedState(Frame.NORMAL);setVisible(true);systemTray.remove(trayIcon);}});//时间栏Timer timer = new Timer(1000, new ActionListener() {public void actionPerformed(ActionEvent evt) {XXX——《Java语言》课程期末作业timeLabel.setText(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));}});timer.start();nowLabel.setFont(new java.awt.Font("Dialog", 1, 15));nowLabel.setForeground(Color.blue);dataOfDay();dayPanel.setLayout(new BorderLayout());dayPanel.add(nowLabel, BorderLayout.NORTH);dayPanel.add(JScrollPane, BorderLayout.CENTER);// 上方按钮panel1.setLayout(new GridLayout(1, 3));panel1.setBackground(Color.white);Prebutton.setContentAreaFilled(false);Prebutton.setFocusPainted(false);Change.setContentAreaFilled(false);Change.setFocusPainted(false);Nextbutton.setContentAreaFilled(false);Nextbutton.setFocusPainted(false);panel1.add(Prebutton);panel1.add(Change);panel1.add(Nextbutton);calPanel.setLayout(new BorderLayout());calPanel.add(panel1, BorderLayout.NORTH);calPanel.add(dayPanel, BorderLayout.CENTER);calPanel.add(timeLabel, BorderLayout.SOUTH);jTabbedPane.add(calPanel, "日历");jTabbedPane.add(alarmDemo,"闹钟");jTabbedPane.add(noteBook,"记事本");add(jTabbedPane, BorderLayout.NORTH);// 按钮监听器Prebutton.addActionListener(new PressButton());Nextbutton.addActionListener(new PressButton());Change.addMouseListener(new MouseListener() {public void mouseClicked(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON1)new ChooseDay(null, year, month).setVisible(true);dataOfDay();Change.setText(year + "年" + month + "月");}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}});nowLabel.addMouseListener(new MouseListener() {public void mouseClicked(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON1)year = c.get(Calendar.YEAR);month = c.get(Calendar.MONTH) + 1;dataOfDay();Change.setText(year + "年" + month + "月");}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}});}public void dataOfDay() {int n = 1;int k = getDays();for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (i == 0 && j < k % 7 || n > getMonthDay(month)) {monthview[i][j] = "";} else {monthview[i][j] = String.valueOf(n);n++;}}}model.setRowCount(0);model.setDataVector(monthview, weekdaystr);JTable = new JTable(model);JTable.setGridColor(Color.gray);JTable.setBackground(Color.white);JTable.setColumnSelectionAllowed(true);// 将table中的列设置为可选择的JTable.setSelectionBackground(Color.pink);// 当选定某一天时背景颜色为粉JTable.setSelectionForeground(Color.BLUE);JTable.setFont(new Font("黑体", Font.BOLD, 24));// 日期数字字体格式JTable.setRowHeight(26);// 表格的高度JScrollPane js = new JScrollPane(JTable);// 设置大小Dimension dimension = new Dimension(500, 185);js.setPreferredSize(dimension);JScrollPane = js;}public boolean isLeapYear(int year1) // 判断是否是闰年{return ((year1 % 4 == 0 && year1 % 100 != 0) || (year1 % 400 == 0)); }public int firstDay() // 计算该年第一天是星期几{long n = year * 365;for (int i = 1; i < year; i++) {if (isLeapYear(i)) {n++;}}return (int) n % 7;}public int getMonthDay(int m) // 获取每个月的天数{switch (m) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 4:case 6:case 9:case 11:return 30;case 2:if (isLeapYear(year))return 29;elsereturn 28;default:return 0;}}// 获取该月月第一天是星期几public int getDays() {monthday = 0;for (int i = 1; i < month; i++)monthday += getMonthDay(i);return (firstDay() + (monthday % 7)) % 7;}public class PressButton implements ActionListener { @Overridepublic void actionPerformed(ActionEvent e) {JButton button = (JButton) e.getSource();if (button == Prebutton) {month--;if (month <= 0) {year--;month += 12;}} else {month++;if (month > 12) {year++;month -= 12;}}dataOfDay();Change.setText(year + "年" + month + "月");}}}ChooseDay.javaimport java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFormattedTextField;import javax.swing.JPanel;import javax.swing.JSpinner;import javax.swing.SpinnerNumberModel;import javax.swing.text.DefaultFormatterFactory;import javax.swing.text.NumberFormatter;public class ChooseDay extends JDialog {private static final long serialVersionUID = -3230014153625851275L;private JButton sure = new JButton("完成");private JButton cancel = new JButton("取消");public ChooseDay(CalendarsView calendarsView, int year, int mouth) { super(calendarsView, "设置日期", true);JPanel panel1 = new JPanel();JPanel panel2 = new JPanel();JSpinner spinner1 = new JSpinner();JSpinner spinner2 = new JSpinner();spinner1.setModel(new SpinnerNumberModel(year, 0, 9999, 1));spinner2.setModel(new SpinnerNumberModel(mouth, 1, 12, 1));//设置属性setSpinners(spinner1);setSpinners(spinner2);panel1.add(spinner1);panel1.add(spinner2);sure.setContentAreaFilled(false);sure.setFocusPainted(false);cancel.setContentAreaFilled(false);cancel.setFocusPainted(false);panel2.setLayout(new GridLayout(1, 2));panel2.add(cancel);panel2.add(sure);add(panel1, BorderLayout.NORTH);add(panel2, BorderLayout.SOUTH);pack(); // 按组件天界大小setResizable(false); // 不可调节窗口大小setLocationRelativeTo(null); // 居中显示窗口sure.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {dispose();CalendarsView.year = (int) spinner1.getValue();CalendarsView.month = (int) spinner2.getValue();}});cancel.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent evt) {dispose(); // 关闭当前窗口}});}public void setSpinners(JSpinner spinner){//设置属性JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner, "0");spinner.setEditor(editor);JFormattedTextField textField = ((JSpinner.NumberEditor) spinner.getEditor()).getTextField();textField.setFont(new java.awt.Font("Dialog", 1, 30));textField.setEditable(true);DefaultFormatterFactory factory = (DefaultFormatterFactory) textField.getFormatterFactory();NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter();formatter.setAllowsInvalid(false);}}NoteBook .javaimport java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import javax.swing.JButton;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;public class NoteBook extends JPanel {private static final long serialVersionUID = 5692290911249557954L;JTextArea jTextArea = new JTextArea();JScrollPane JScrollPane = new JScrollPane(jTextArea);JButton jButton = new JButton("保存");JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();public NoteBook() {open();jTextArea.setFont(new Font("宋体", 1, 15));jButton.setContentAreaFilled(false);jButton.setFocusPainted(false);JScrollPane.setVisible(true);jPanel1.setLayout(new BorderLayout());jPanel1.add(JScrollPane, BorderLayout.CENTER);jPanel1.setPreferredSize(new Dimension(500, 230));jPanel2.setLayout(new BorderLayout());jPanel2.add(jButton, BorderLayout.CENTER);this.setLayout(new BorderLayout());this.setBackground(Color.white);add(jPanel1, BorderLayout.NORTH);add(jPanel2, BorderLayout.SOUTH);jButton.addMouseListener(new MouseListener() {public void mouseClicked(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON1)save();}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}});}//打开的具体方法private void open() {try {File file = new File(System.getProperty("user.dir")+ "\\source\\note.txt");BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));byte[] b = new byte[in.available()];in.read(b, 0, b.length);jTextArea.append(new String(b, 0, b.length));in.close();}catch (IOException ex) {jTextArea.setText("Error opening ");}}// 保存具体private void save() {try {File file = new File(System.getProperty("user.dir")+ "\\source\\note.txt");BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));byte[] b = (jTextArea.getText()).getBytes();out.write(b, 0, b.length);out.close();JOptionPane.showMessageDialog(null, "保存成功");} catch (IOException ex) {jTextArea.setText("Error saving ");}}}CalendarMain.javaimport javax.swing.JFrame;public class CalendarMain {public static void main(String[] args) {CalendarsView frame = new CalendarsView();frame.setTitle("万年历");frame.setResizable(false);frame.pack();XXX——《Java语言》课程期末作业frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}。