
日历记事本使用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 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);//一秒钟后开始执行,每过一秒执行一次
用户可以使用两个课程自动将时间增加一秒
单击事件列表时,左侧的日历将成为一个表格,其中显示所有备忘的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;}
以前,我不知道如何将每个便笺另存为文件. 搜索后,我了解到只需提供父抽象路径名和子路径名字符串即可创建文件实例(基础不够强大),<
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中获取当前日期,并将其用作文件名来创建文件,以便在获取下表中每个音符的时间时,只需获取文件名
一开始,每次您单击表格列表时,显示的最后一张表格都不存在,并且会被叠加
第一次单击后添加判断条件万年历程序流程图,将所有注释添加到表中,然后取消= 2,然后每次单击注释列表,删除所有先前的表,然后将所有注释添加回表中.
if(cancel==2){ listCount=0; while(model.getRowCount()>0){//把表格进行刷新,下次显示的时候重头开始显示 //System.out.println(model.getRowCount()); model.removeRow(model.getRowCount()-1); } }这样,每次您单击笔记列表时,表格都不会再次增加.
完整的代码在我的GitHub上
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-278028-1.html
人家都要到你家来抢你妈了
水军来了