java-日历记事本总结

日历记事本使用swing+基础知识来完成,因为要考试加上实训(最主要还是太菜了),前前后后用了将近一个星期完成,因为时间原因没有对界面进行美化,只是实现了功能,以后有机会再进行美化,界面如下:

    

界面左边是日历显示,可通过按钮和下拉框选择年,月,当前日期按钮返回到当前日期,记事列表显示所有记事,右边是记事区,下方是保存和删除按钮。

日历记事本就是靠着各种事件监听再注册完成的,没有太大的难度,就只写些我在完成的过程中遇到的问题:

1.java.lang.NumberFormatException: For input string: ""

这个异常是我第一次见,上网搜查后得知是我在将String类转换为integer 时,Integer.parseInt()为空值,导致出现了错误,Integer.parseInt()值不能为空或者为null

2.SimpleDateFormat和Timer,TimerTask

界面右上角有个当前时间的显示,要求秒数会自动变化,起初我是想用Date类去实现这个功能,但发现秒数没发变化,是固定的(也可能是我用的方法不对),总之最后我使用了Simple DateFormat和定时器来实现这个功能,Simple DateFormat是一个格式化Date以及解析字符串的工具,按照指定的格式对Date进行格式化,有多种用法,以下是我本次的使用

	long timemillis = System.currentTimeMillis(); //返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
                //转换日期显示格式   
               SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日      HH:mm:ss  E"); //格式:年 月 日 时:分:秒 星期
               timeLabel.setText("            当前时间:    "+df.format(new Date(timemillis)));返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
                //转换日期显示格式   
               SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日      HH:mm:ss  E"); //格式:年 月 日 时:分:秒 星期
               timeLabel.setText("            当前时间:    "+df.format(new Date(timemillis)));

获得到了时间,接下来就是使用定时间让时间能够每秒+1秒,这里用到了Timer,TimerTask,具体的任务由TimerTask来完成,Timer负责管理,有两种常用的,一种是使任务在指定时间被执行一次,另一种是从某一指定时间开始周期性地执行任务,我们这次用的是第二种

Timer time=new Timer();
		TimerTask task=new TimerTask() {//设置定时器,在界面中显示时间
			
			@Override
			public void run() {
				// TODO 自动生成的方法存根
				long timemillis = System.currentTimeMillis();//返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。   
                //转换日期显示格式   
               SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日      HH:mm:ss  E");  	
               timeLabel.setText("            当前时间:    "+df.format(new Date(timemillis)));
			}
		};
		time.schedule(task, 1000,1000);//一秒钟后开始执行,每过一秒执行一次

使用者两个类就可以实现时间自动加一秒

3.卡片布局器(CardLayout)

当点击事件列表时,左边的日历表会变成表格显示所有记事的ID,日期和记事内容,刚开始时没有想到卡片布局器,用了各种办法都没能实现表格和日历表之间的转换,在一次翻书的时候了解到了卡片布局器,发现是真的好用,于是将左边日历表改为卡片布局器,

card=new CardLayout();//创建卡片布局器对象
		cardpanel=new JPanel(card);//将cardpanel布局设置为卡片布局器
		cardpanel.add(leftCenter,"left");//将日历表添加到cardpanel中,名字为left
		cardpanel.add(js,"js");//将表格添加到cardpanel中,名字为js
		leftpanel.add(cardpanel, BorderLayout.CENTER);//将卡片布局器添加到容器中


if(!flag){//通过flag判断什么时候显示日历表,什么时候显示表格					
					card.show(cardpanel, "left");
					flag=true;}
else if(flag){
					card.show(cardpanel, "js");
					flag=false;}

4.创建文件

之前一直不知道怎样把每个记事都单独存为一个文件,上网查以后才知道只需要给定父抽象路径名和子路径名字符串就可创建一个file实例(基础不够牢固),

File(File parent, String child);(File parent, String child);

这下就很容易了

String str=dateLabel.getText();//将要保存的年月日作为文件名
				File file=new File("D://newfile//note",str);//创建出以str为文件名的文本
				//FileOutputStream fo=new FileOutputStream(file);				
				FileWriter fw=new FileWriter(file,true);//把文本域中的文本保存到文件中
				String ss=noteja.getText();
				fw.write(ss);
				//fo.close();
				fw.close();

获得dateLabel中的当前日期,并将其作为文件名来创建文件,这样在后面表格获得各个记事的时间时只需要获得文件名即可

5.表格的刷新

刚开始的时候,每次点击表格列表时,上一次显示的表格并没有,会一直叠加下去

后面增加了一个判断条件,第一次点击时,把所有记事添加到表格中,并把cancel=2,再往后每次点击记事列表时,先把前一次的表格全部删除,再将所有记事重新添加到表格中。

if(cancel==2){
						listCount=0;
						 while(model.getRowCount()>0){//把表格进行刷新,下次显示的时候重头开始显示
							 //System.out.println(model.getRowCount());
						      model.removeRow(model.getRowCount()-1);
						 }
					}

这样子每次点击记事列表的时候,表格不会重新增加。

 

完整的代码在我的GitHub

计算机科学与技术本科专业 Java课程设计任务书 题目: 日历记事本 学生姓名: 学号: 班级: 题目类型:软件工程(R) 指导教师: 一. 题目简介 该设计要求设计一个带有日程提醒功能的日历。 通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时强调好的程序设计风格,提高解决实际问题的能力。 二. 主要任务 1、查阅文献资料,一般在5篇以上; 2、应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; 3、分析系统中的各个实体及它们之间的关系包括属性和方法; 4、根据问题描述,设计系统的类层次; 5、完成类层次中各个类的描述(包括属性和方法); 6、完成类中各个成员函数的定义; 7、完成系统的应用模块; 8、完成系统的软件开发和测试工作; 9、撰写设计说明书; 10、做好答辩工作。 三. 主要内容、功能及技术指标 (一) 基本要求: 编写一个Applet小应用程序能够显示时间,当用户最小化Applet时,程序会 被挂起,当还原Applet时,程序又会恢复执行,同时Applet中应显示挂起和恢复的时间。 (二)系统要求: 1、要求利用面向对象的方法以及Java的编程思想来完成系统的设计; 2、要求在设计的过程中,建立清晰的类层次; 3、在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法; 4、在系统的设计中,要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。 5、该系统的要求: (1)显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。 (2)定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框; (3)查询信息:用户可以查询到某个月的所有提示信息。 四. 提交的成果 1. 设计说明书一份,内容包括: 1) 中文摘要100字;关键词3-5个; 2) 序言; 3) 基本要求实现(包括程序流程图;部分代码;) 4) 系统要求实现 系统分析与设计(包括设计系统的类层次,各个实体及它们之间的关系) 详细设计(包括各个类的详细设计,如数据成员及成员函数的设计); 系统测试(包含测试方案、测试用例、测试结果及软件可靠性分析); 软件使用说明书(核心界面说明); 5)设计总结、参考文献、致谢等。 五. 主要参考文献 [1]曲朝阳,杨杰明等.Java程序设计. 北京: 清华大学出版社,2008.10 [2]耿祥以,张跃平.Java大学生实用教程. 北京: 电子工业出版社,2012.6 [3]明日科技.Java经典编程.北京:清华大学出版社,2012.10 [4]李尊朝,苏军.Java语言程序设计.北京:中国铁道出版社,2004.2 [5]王博. 面向对象的建模、设计技术与方法. 北京希望电脑公司,1990. 六. 各阶段时间安排(共2周): 周次 日期 内容 地点 第1周 星期一 教师讲解设计要求,准备参考资料 教室 星期二 分析系统,方案设计 实验室 星期三~五 编程 实验室 第2周 星期一~三 编程、调试程序 实验室 星期四 写设计书 实验室 星期五 答辩 实验室
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lpepsi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值