java课程设计题目1
第一篇:java课程设计题目1
Java课程设计题目
一、Java语言课程设计目的和要求 1.目的:
1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握; 2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;
3)培养学生在项目开发中团队合作精神、创新意识及能力。 2.要求:
1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2、系统设计要实用,编程简练,可用,功能全面
3、说明书、流程图要清楚
4、记录设计情况(备查,也为编写设计说明书作好准备);
5、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。
6、设计上交内容:设计报告一组一份(按格式书写);心得体会每人一份;源程序文件。
二、Java课程设计选题如下:
1、四则运算测试
功能要求:该程序实现十道100以内四则运算数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。
界面要求:图形界面实现,基于ArrayList、Vector等高级类。
2、文件加密、解密软件
功能要求:通过软件界面选择打开一个文本文件,使用移位密码对文件内容进行加密并保存,或者针对移位密码加密的文本文件进行解密操作并保存。
界面要示:图形界面实现。
3、学生成绩管理
功能要求:
1) 输入若干同学的学号,姓名,四科成绩(应用数学、大学英语、Java程序设计、计算机应用基础),存储入数据库中。 2) 计算出平均成绩。以平均成绩降序输出成绩表。 3) 输出全组各科平均分,最高分和最低分。 4) 输入姓名查询成绩 界面要示:无。
4、对对碰游戏 功能要求:该程序显示GUI用户界面,界面中随机安排10对图片,背面向上,当翻开的2张图片相同时就消失,不相同时重新翻回背面,最终显示用时和分数(=400-翻的次数)。
界面要示:图形界面实现。
5、画随机圆
功能要求:实现简单的动画。具体要求:自动出现由小到大变换的圆,位置与颜色随机,变到150直径时擦除,重新再出现圆;变换速度由HTML文件传入的参数控制(控制sleep时间)。
界面要求:用Java Applet实现。
6、绘图板
功能要求:实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小也可在界面中设定)。
界面要求:图形界面实现。可参考图
1、图2和图3。
图1 初始界面
图2 使用菜单绘图
图3 使用按钮绘图
7、标准化考试
功能要求:程序从文件系统(或数据库)中读入考试题目(主要为选择题)及答案,显示在GUI界面中,答题者按照题目内容进行答题,点击按钮提交后可以看到自己的答题结果。
界面要示:图形界面实现。
8、Socket文件传输
功能要求:基于Socket编程,实现服务器端向客户端发送文件的操作。 界面要示:无。
9、网络相册
功能要求:用户在网页上通过前进、退后按键或自动播放方式浏览相册,每张相片可以放大观看。
界面要示:Applet实现。
三、设计时间
一周,具体安排如下: 第一阶段:
1.班级分组,选定课题,查阅相关资料 1周
2.划分模块、小组成员分工,编制源程序 1-2周
第二阶段:上机调试,修改、完善系统 一周 第三阶段:撰写、上交课程设计说明书(1份/人),上交课程设计作品源程序(每课题组一份),作品答辩。 1天
四、设计方式和安排
1.分组选题:最多5人为一组,每组一个课题(可根据课题工作量大小,合理分配人数),每组设组长一名,负责该组设计工作的协调、分工等。 2.设计过程:
1) 分析设计准备阶段(按组讨论、对系统功能进行分析,确定算法,并进行明确分工);
2) 编程调试阶段(绘制流程图,编制源程序;上机调试,修改程序) 3) 总结报告和书写说明书阶段(撰写上交相关资料)
3、考核过程
17周周五下午答辩。
五、考核内容和方式
1、在设计期间,学生要按时上机,设计结束根据记录的设计材料整理成设计说明书。设计说明书中应写下设计中的主要收获,要求对问题有一定的分析,文字简短明确流畅。
2、通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,设计成绩由指导教师根据考勤、设计说明书质量、答辩表现以及学习态度按五级分制综合评定。
成绩分优、良、中、及格和不及格五等。
六、课程设计报告格式及要求
一、封面;
二、目录;
三、设计任务书;
四、本组课题及本人任务;
五、程序功能简介;
六、主体内容(简要说明总体情况,详细介绍本人任务部分):
1.设计分析;
2.程序结构(画流程图)
3.各模块的功能及程序说明; 4. 源程序;
5.操作方法(流程);(可省) 6.试验结果(包括输入数据和输出结果) 7.设计体会。(可省)
第二篇:Java课程设计题目
一、课程设计的目的
为了进一步巩固java程序设计课程所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了一周的Java程序设计课程设计。
通过此次课程设计,巩固所学java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
二、课程设计的基本要求
1、明确题目要求,进行需求分析;
2、进行功能设计,编写设计说明;
3、进行程序设计与调试;
4、对设计过程进行系统的总结;
5、界面美观大方;
6、完成设计报告
7、课程设计建议在Editplus +JDK、JCreator +JDK、myeclipse平台上开发、调试。
8、 Java源程序应加上详尽的注释语句,对所设计的类、属性、方法说明其用途,对方法的调用说明其用意和使用参数的原因。特别是有深刻理解、有独特见解的地方,用注释语句加以说明。
三、课程设计的主要内容
利用学到的编程知识和编程技巧,通过具体项目的分析、设计和开发,掌握开发Java大型软件项目过程中所需要的软件技术并熟悉软件。
可以以小组为单位,每组1至2名学生,在教师的指导下,每组完成一个题目。题目可由下面提供的选题中选择或学生自选经教师审核后方可。该组每个同学承担题目的不同部分,每位同学的课程设计报告必需独立完成。 题目类型大致分配如下:
1、 网络通讯类,编制网络聊天(Chat)程序,以下简称“网络”类。
2、 图形界面Application类,编制类似计算器、MP3播放器、围棋打谱,斗地主、潜艇大战、挖地雷、迷宫等功能单一的程序,以下简称“图形 ”类。
3、 通讯类,使用Socket通讯完成信息通讯,比如QQ
4、 数据处理类,编制考试系统、出题系统、查询系统、学生学籍、课程成绩、图书编目、仓库货物等数据录入查询程序,以下简称“数据”类。
5、 其它类型,自选题目,须经老师同意。
四、主要技术关键的分析、解决、方案比较
以下是可以参考的课程设计可能包含的相关知识:
1、Java核心编程J2SE:
面向对象技术
Java程序运行机制
开发环境的安装和配置 Java语言基础和重点API Java程序异常的处理 I/O、控制台程序开发 Swing程序开发 Socket通讯
2、数据库技术:
关系型数据库原理 SQL数据查询语言 MS SQL Server使用方法
数据库中对象的建立与使用
Java数据库编程(JDBC)
五、课程设计考核方式与标准
采用上机情况、程序质量、实习报告相结合的考核形式:
1、上机情况
包括出勤情况、调试程序时表现。
2、程序质量与创新能力
最终完成的程序设计的工作量、质量、难易程度。
3、课程设计报告
报告的格式与内容。
六、参考题目及要求:
1、多媒体播放器程序的设计与实现
目的:利用java开发一个支持mp
3、wma、wmv、avi、mpg等不同音频、视频格式的多媒体播放器。通过课程设计掌握多媒体编程的基本原理。 任务: 编程实现一个可支持多种音视频格式的多媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等;
2、带格式的文本编辑器
功能参考word软件
3、学生信息(包括成绩)管理系统
要求:
使用图形用户界面
用数据库建立1或2个学生信息表。(不限使用哪种数据库) 能连接数据库并实现查询、增、删、改等功能。
4、期刊资料信息管理系统
要求:
使用图形用户界面
用数据库建立1或2个图书信息表。(不限使用哪种数据库) 能连接数据库并实现查询、增、删、改等功能。 借阅记录等信息
5、聊天小程序QQ 要求:使用图形用户界面。 能实现一个聊天室中多人聊天。 可以两人私聊。 提示:使用socket通信
6、ATM柜员机模拟程序
要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
1)查询余额:初始余额为10000元
2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3)ATM存款:不能出现负存款。
4)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
7、超市收银系统
要求:使用图形用户界面。
由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。
另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次购物满200元,可为其发放一张会员卡,以后在该商场购物可向9折优惠。
8、网络监听程序
要求:使用图形用户界面。
有服务器和客户端,服务器监听客户端的登陆。即:如果A客户端登陆服务器,则服务器界面上的A字母对应的红灯变成绿色。
绿灯表示连接,红灯表示断线。 提示:socket的监听方法
9、全球通计费程序
要求:使用图形用户界面。
使用真实的全球通资费标准,模拟统计一个特定号码的一个月的实时话费。 能根据输入实现各种用户的话费的计算并显示月实时帐单。
提示:使用接口和多个子类实现分别表示金卡、银卡等各种套餐的话费计算。
10. 学生机房上网计费系统
要求: socket通讯
11.电子英汉词典
要求:
能够编辑词典库中的信息
能够实现英译汉,汉译英。(要考虑一词多义)
12.加密与解密
要求:采用图形用户界面
1)给定任意一个文本文件,进行加密,生成另一个文件。 2)对加密后的文件还原。 3)图像水印的添加以及还原
13.小游戏
要求:。
程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜。(使用图形界面)
14.敏感词汇分析
要求:
任意选择一个文本文件,分析该文件,如果存在敏感词汇(这些词汇保存在sentive.txt文件中,每个词占一行),报告每个词出现的次数。
15、猜数字游戏
要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。
要求提交Application和Applet两个版本的程序。
16、小学算术运算测试程序
要求:制作一个可供小学数学运算程序:10以内加减法,能根据输入题数出题,判断做题是否正确,最后计算分数。
要求提交Application和Applet两个版本的程序。
17、模拟画图
要求:模拟Windows中的画图程序,实现图形图像的编辑、修改、保存等功能。 模拟时钟
要求:通过多线程技术,重绘界面,界面包括表盘和指针。并用数字表显示时间。 实现要点:多线程技术,图形的绘制。
18、打字训练测试软件
要求:设计一个英文打字测试软件。从文件中调入英文录入材料,最后可以给出错误率,
平均录入速度。
19、用java开发一个小型数据库管理系统,比如Access 在界面中输入SQL语句,可以完成数据可的相关功能 20、学生宿舍管理系统
数据库
21、电话号码查询系统,ip地址、手机归属地查询
要求:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。
22、同学录管理系统 ()
要求信息的录入、查询、删除、修改等一列功能。
22、购物车子系统
要求:使用图形用户界面。当输入给定的顾客编号和密码(初始卡号和密码为123456)时,系统能进入购物车子系统,顾客可以按照以下规则进行: 查询自己购物车中商品信息; 修改 删除物品 数据库库存管理
23、火车票管理系统
要求: socket通讯,多线程
服务器端数据库存放火车票信息
客户端(窗口)卖票,退票
24、利用Socket通讯模拟学生食堂卖饭系统
账户的管理,充值管理,售饭管理
启动两个客户端(窗口),模拟售饭过程
25、为一个超市设计一个货物管理程序。
要求:
进货库:货号,货名,型号
,进货量,进货价,经办人,
销售库:货号,销售量,售价,利润。
存库:
货号,库存量。
二
包含功能:
1)在程序中初始化库存库,销售库,及进货库.
2)可提供菜单,供随时添加,修改,删除,查找库中信息.(具体货物及编号等自编),在设计时应尽量考虑全面,比如查找就可以按照货名或者货号,经办人等来查找。
3)可自动计算利润等字段。可以统计总利润。
4)可随时根据进货库调整库存库。
5)可随时根据销售库调整库存库。
6.)可根据要求核对库中内容,如数量是否一致等。
7.)可根据销售情况统计出销售排行榜。
8.)自行设计的其他功能。
-
整体要求:建议使用NetBeans集成开发环境完成作业,界面友好,代码的可维护性好,有必要的注释和相应的文档。
第三篇:传感器课程设计题目1
一、设计任务书:
单独提供一个文档
注意避免多人选一个题目,如果多人选一个题目时,主电路图部分不可相同,说明书主体内容不可相同,一定要有明确的分工。
二、初拟题目(可自拟题目,每个题目请大家再完善要求):
1. 应变式容器内液体重量传感器的设计
内容要求:
设计液体重量传感器的结构(CAD绘制)及测量电路(PROTEL绘制)等
有必要的相关计算说明、精度分析等
(传感器与检测技术 徐科军)
2. 应变式加速度传感器的设计
内容要求:
设计加速度传感器的结构(CAD绘制)及测量电路(PROTEL绘制)等
各种精度指标、测量电路(PROTEL绘制)等
3. 应变式容器内液体重量传感器的设计
内容要求:
设计液体重量传感器的结构(CAD绘制)及测量电路(PROTEL绘制)等
有必要的相关计算说明、精度分析等
(传感器与检测技术 徐科军)
4. 应变式称重传感器的设计
内容要求:
量程0-1kg,设计称重传感器的结构(CAD绘制)
称重传感器的各种精度指标测、试测量电路(PROTEL绘制)等
应用所设计的称重传感器设计一个电子称
5. 螺管式差动变压器的设计
内容要求:
给出螺管式差动变压器的结构图
完善理论分析与电路设计,要求给出详细的计算过程
尽量消除差动变压器的各种误差
6. 电容式液位计的设计
内容要求:
要求量程0.5-15m
侧重于理论分析与电路设计,要求给出详细的计算过程
分析所设计的传感器各种性能指标
7. 电容式差压变送器的设计
内容要求:
电容式差压变送器的结构原理图
使用二级管环形检波电路输出电流信号,给出电路图
分析所设计的传感器各种性能指标
8. 接近开关的设计
内容要求:
设计电容、电感或霍尔式(三者任选其一)接近开关
绘制工作原理图及电路设计图,完成相关的理论计算
(传感器及应用,王煜东)
9. 电涡流位移传感器的设计
内容要求:
设计电涡流传感器探头,绘制探头结构图(CAD绘制)
设计电涡流传感器的谐振电路、调频式测量电路(PROTEL绘制)等
有必要的相关计算说明、精度分析等
10. 压电式加速度传感器的设计
内容要求:
利用压电片设计一个加速度传感器,绘制结构图(CAD绘制)
设计压电式传感器的测量电路(PROTEL绘制)等
有必要的相关计算说明、精度分析等
11. 压电式压力传感器的设计
内容要求:
利用压电片设计一个测压传感器,绘制结构图(CAD绘制)
设计压电式传感器的测量电路(PROTEL绘制)等
有必要的相关计算说明、精度分析等
12. 热电偶温度传感器的设计
内容要求:
设计测量温度范围为-100~500℃ 的热电偶传感器
选用合适的热电偶材料,设计测温电路,冷端补偿电路,解决误差等问题
有热电偶的结构图(CAD绘制)、电路图(PROTEL绘制)、选型与必要的相关计算说明、精度分析等
(参考资料:教材与传感器的理论与设计基础及其应用)
13. 光纤温度传感器的设计
内容要求:
设计半导体吸收式光纤测温式传感器
光学系统设计:发光二极管、光电二极管、光纤等设计或选型
相关电路设计
14. 光纤位移检测系统的设计
内容要求:
设计反射式传光型光纤位移检测系统
光学元件选型及光路设计
光电测试系统选型或设计
光路图电路图及相关的分析计算说明,特性参数等
15. 光栅位移传感器的设计
内容要求:
光栅位移传感的测量原理及光路图,
给出变相电路的原理图
采用细分技术提高分辨力
16. 光纤式压力、温度复合传感器的设计
内容要求:
给出传感器的设计结构图
侧重于理论分析与电路设计,要求给出详细的计算过程
分析所设计的传感器各种性能指标
17. 汽车踏板力传感器的设计
内容要求:
汽车踏板力传感器的探头结构
要求给出信号检测电路
分析所设计的传感器测力原理
18. 磁电式汽车轮速传感器的设计
内容要求:
轮速传感器的结构图
要求给出信号处理电路
分析所设计的传感器测试原理
19. 电容式燃油性质传感器的设计
内容要求:
设计传感器电极的结构,包括电感与感应电动势的测量原理 传感器控制电路和信号分析
20. 光学式燃油性质传感器的设计
内容要求:
给出传感器的构成方案与结构原理图
传感器控制电路框图
对其基本性能、耐久性等进行分析
(传感器设计与应用实例 刘少强)
21. 洗衣机的位移传感器的设计
内容要求:
传感器的设计和测量原理,包括电感与感应电动势的测量原理 传感器控制电路和信号分析
22. 恒定光源混浊度传感器的设计
内容要求:
给出传感器的结构原理图
建立混浊度对应关系
选择混浊度标准物
传感器控制电路与调试
23. 同时测量位移和角度的电容式传感器的设计
内容要求:
设计同时测量位移和角度的电容式传感器的结构(CAD绘制) 对其进行特性分析并给出脉宽调制
给出消除误差的方法等
(传感器设计与应用实例 刘少强)
24. 电容式膨胀尺寸传感器的设计
内容要求:
设计电容式膨胀尺寸传感器的结构(CAD绘制)
给出电压转换电路、提高转换精度的方法及调试步骤等
第四篇:JAVA毕业设计论文题目大全
计算机
JAVA
毕
业
论
文
题
目
目 录
JAVA类论文题目 ...........................2
第1-51个题目 ..............................2
JSP类论文题目................................3
第1-50个题目 ..............................3
第50-100个题目 .........................4
第101-150个题目 ..............................5
JAVA类论文题目
第1-51个题目
1.学籍管理系统
2.Java远程通信及应用的研究
3.JAVA游戏
4.俄罗斯方块游戏
5.JAVA多线程教学演示系统
6.IPv4网络协议问题分析
7.校园网规划与设计
8.校园网络规划设计
9.办公局域网设计
10.智能小区规划
11.搜索引擎的研究与实现
12.基于Java的电子邮件接收系统
13.人事管理系统
14.题库管理系统
15.银行帐目管理系统
16.FTP客户端的设计与实现
17.办公自动化系统
18.JAVA游戏引擎开发与实践
19.宾馆客房管理系统
20.房地产信息管理系统
21.光盘管理系统
22.猜数字游戏
23.泡泡堂网络游戏
24.开发FTP系统的设计
25.局域网监听软件
26.基于纠错码的冗余技术
27.掌上网络商店
28.机主留言系统
29.基于Http协议的断点续传
30.WML信息查询设计
31.题库及试卷管理
JSP类论文题目
第1-50个题目
1.网上书店
2.网上考试
3.手机销售系统
4.基于JSP技术的网络陶瓷城
5.智能道路交通信息管理系统
6.B2C的电子商务系统(J2EE)
7.网络远程作业处理系统
8.设备管理系统
9.网上购物系统设计
10.网上拍卖平台系统
11.手机游戏(J2EE)
12.网上商店系统
13.电子报销系统(J2EE)
14.公文管理系统
15.B2C电子商务平台
16.企业资产管理系统
17.会议管理系统
18.教务管理系统
19.电子商务网站
20.网络办公系统
21.毕业论文管理系统
22.网上购物系统
23.工资管理系统
24.网站流量统计系统
25.项目管理系统
26.手机销售管理系统
27.房屋交易管理系统
28.进销存管理系统
29.房管局房屋交易管理系统
30.新闻发布系统
31.汽车销售网站
32.物业管理系统
33.邮件过滤系统
34.音乐网站
35.网上人才招聘系统
36.网上订餐系统
37.考勤管理系统
38.酒店管理系系统
39.小区物业管理系统
40.超市进销存管理系统
41.网上售票系统
42.在线考试系统
43.在线借阅图书系统
44.婚纱影楼管理系统
45.网上视频点播系统
46.银行账目管理系统
47.销售管理系统
48.基于CTOC的网上拍卖管理系统
49.物资管理系统
50.生产资料管理系统
第50-100个题目
51.火车站订票系统
52.网上书店售书系统
53.出租车管理
54.网络购物/网上商城
55.游戏机销售系统
56.动漫网站
57.移动硬盘销售系统
58.基于WEB的考务管理系统的设计与实现
59.网上自测试系统
60.图书管理系统的设计
61.在线考试系统
62.在线网络购物
63.J2EE框架的师生互助平台的设计与实现
64.快运快递网站
65.基于JSP教学实验管理系统
66.小区物业管理系统
67.校园门户网
68.图书管理系统
69.销售管理系统
70.药品进销存管理系统
71.小区物业管理
72.公司员工个人信息网络管理系统
73.公文收发管理系统
74.高校毕业设计管理系统
75.钢材管理系统
76.在线论坛的设计与实现
77.个人通信簿管理系统的设计与开发
78.在线论坛
79.网上书店
80.物流管理系统
81.办公自动化系统
82.基于JSP的邮件收发系统
83.大学生求职通用个人网站
84.房屋出租出售网站
85.基于BS模式的服装进销存管理系统
86.基于Web的可维护的数据库浏览器
87.基于电子商务的网上购物
88.教师办公管理系统
89.教师档案管理系统
90.旅游信息系统
91.师生交流平台作业管理子系统设计与实现
92.网上购书系统
93.销售管理系统
94.基于JSP的小型课程信息管理系统
95.校园二手市场交易平台
96.新闻发布系统
97.学生课程与成绩管理系统
98.学生网上选课系统
99.基于JSP的学生信息管理系统
100.基于JSP的学生学籍管理系统
第101-150个题目
101.药店管理系统
102.SERVLET技术实现数据库查询
103.办公自动化之公文运转系统
104.机房自由上机收费管理软件的设计与实现 105.基于E-school虚拟学校平台
106.基于JSP的物流管理平台开发
107.基于Web的会务管理系统的设计与实现
108.基于WEB的纳税查询管理系统的设计与实现 109.客户管理系统
110.人力资源管理系统
111.物流信息网
112.B/S结构下的OA流程可视化的研究与实现
113.JAVA泡泡堂网络游戏
114.CD销售管理系统
115.JSP房产中介系统
116.企业人事管理系统
117.房屋租赁管理信息系统
118.企业电子投票系统
119.Iptables图形管理工具
120.音像店租赁管理系统
121.JAVA文件压缩与解压缩实践
122.Java3D的网络三维技术的设计与实现
第五篇:JAVA课程设计
JAVA程序设计课程设计报告
目 录
一、 项目背景及意义: ............................................... 2
二、 系统描述 ............................................................... 2
三、 分析与设计 ........................................................... 3 1. 分析 ....................................................................... 3 2. 功能模块划分 ....................................................... 3 3. 功能模块流程图 ................................................... 5 4. 各模块的关键代码 ............................................... 5
四、 系统测试 ............................................................... 5
五、 课程设计进度 ..................................................... 13
六、 心得体会 ............................................................. 13
七、 参考文献 ............................................................. 14
八、 附录 ..................................................................... 14
一、 项目背景及意义:
记事本千百年来都在人类的工作生活中起到重要的作用,计算机革命电子产品未出现之前,人们的记事都是基于纸质加笔两者的简单记事,也即单纯的文本记录。直到计算机的出现和更新换代,高科技电子产品大行其道,人们日益将在纸质上的记事转移到将事件记录在个人电子设备如PC上,现在基于电子移动设备如手机和平板等的记事本app开发更是迅猛,功能更加丰富多彩,能记录的不单纯是文本了,人们能将声音和图片甚至视频结合起来,将一件事“有声有色”地记录下来,保存在个人电子设备产品中。近年来产生的采用云存储技术的“云笔记”,更是能让人们随时随地将集文本、语音、图像和视频于一体的事件记录保存在所谓的“云端”,能同步到个人其他设备中,解决了个人资料和信息跨平台跨地点的管理问题。
现在我们以有限的资源以及智慧力量,用Java语言编写一个可以在装有jar模拟器的个人电子移动设备上使用的简单记事本软件,没视频记录功能和基于网络功能但却能集文本、声音和图像于一起记录的功能的记事本,我们将轻便和简洁走向极致!所以此记事本软件操作起来简单易上手,能给带来同学简单便捷的记事体验。另外,这不单纯是个人人都可以打开的记事本,使用时需要账号密码登陆,因此能较好地保障个人隐私。
二、 系统描述
Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,
2 标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
在本程序设计中,因为需要开发的是记事本程序,规模较小,内容较少,所以选择了适合初学者使用的eclipse开发工具。
三、 分析与设计
1. 分析
现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的笔记本程序。 2. 功能模块划分
程序构建的记事本程序具有Windows系统记事本工具基本功能,并且能够创
3 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面
(1) 用户名和密码输入文本框,供已注册的用户输入用户名和密码。 (2) 登陆控件,在用户名和密码正确的前提下,进入软件主界面。
(3) 注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。 第一部分 菜单栏
(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。 (2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。
(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。
(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。 (5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。 第二部分 笔记本排列区
显示用户创建的所有笔记本。 第三部分 笔记显示排列区
此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。
第四部分 笔记编辑区
此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。
4 3. 功能模块流程图
4. 各模块的关键代码
1构造函数创建窗口界面 主菜单,子菜单
public MainFrame(String name) {
this.name=name;
this.setUser_path("Users/"+name);
this.setBook_Path(this.getUser_path()+"/默认笔记本");
this.setNote_Path(this.getBook_Path()+"/默认笔记"); //
一、菜单界面
menu=new Menu(this);
/**
二、 创建三个JPanel *1.l笔记正文 TextPanel
*2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */
/*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this);
} /*文件名目录部分******/
DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/
NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view();
//
三、处理拆分窗格
splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M);
//
四、设置标题等
this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); 2 添加右键菜单并为其添加监听器
public RightPanel(JPanel panel,MainFrame mainFrame)
{ this.mainFrame=mainFrame; this.panel=panel;
//创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行
textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮
//设置鼠标右击弹框效果
//cut
cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));
cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"
cutItem.addActionListener(this);
//copy
copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));
copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置
6 快捷键 "ctrl O"
copyItem.addActionListener(this);
//paste
pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));
pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"
pasteItem.addActionListener(this);
saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));
saveItem.addActionListener(this);
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="Cut"){//剪切
textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制
textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴
textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存
this.book_Save(); }else if(e.getSource()==image_Button){//插入图片
String temp=Tools.open_Choose(); if(!temp.equals("not")){
textPane.insertIcon(new ImageIcon(temp)); }
}else if(e.getSource()==font_Button){//修改字体颜色
Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间
Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );
textPane.replaceSelection(hehe);
}
3 设为Document类型
public static void setDocument(File file) {
try {
} JTextPane tempPane=new JTextPane(); FileOutputStream outputStream=new FileOutputStream(file); ObjectOutputStream oos=new ObjectOutputStream(outputStream); oos.writeObject(tempPane.getDocument());
oos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block
e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); } 系统测试
1、笔记本登陆
2 、用户注册
3、菜单栏 a.总菜单
b.新建菜单
8
c.删除菜单
d.显示菜单
e.“菜单”菜单
f.帮助
10 4.导入笔记、导出笔记、及插入图片选择
5.字体颜色选择
6.插入时间
7、插入图片
四、 课程设计进度
我们进行了若干阶段的部署,令课题研究可以在每个阶段有条不紊地进行。具体如下:
(一)理论学习和开题论证
1.浏览相关网站,查阅与课题研究的相关理论、研究方法; 2.运用文献研究法,深入学习java理论,对要有关课题研究的知识进行理论上的研究和探讨。 3,制订研究计划和方案 。
(二)第一阶段
1.以调查法为主开展研究。(1)对有关java的课题设计进行调查,查阅网络上java应用的设计案例,并分析和总结,寻找思路。(2)对更新频率快的java应用进行追踪,采取观察,评价、讨论的方式分析和总结。
2.制订第二阶段实验方案,为下阶段实验做准备。
(三)第二阶段
1.按计划在继续第一阶段实验的基础上,进一步加强java应用的实施和研究。采用实验法对上一阶段的总结的结论进行验证和拓展。
2.让同学体验一下我们初步完成的作品,根据他们用完之后的感受,进一步修正作品存在的问题,完善作品。
(四),总结阶段
1.收集和整理研究资料,参照相关书籍分析和研究实验情况 2.制订总结阶段计划 3.总结和提炼研究成果 4.全面总结实验工作 5.解题论证
6.成果展示(课题报告) (五) 总结阶段(2013.12) 整理材料,撰写课题报告。
五、 心得体会
此次课程设计由我们小组一起共同合作完成,花费了差不多两个月的时间。在这期间我们共同协作,互帮互助取得了很好的效率,也为我们构建友好的同学关系,学习气氛良好做出了一定的贡献。在这期间我领略到了团队协作的重要性, 13 也看到了团队合作的高效率性。还有通过这次试验我们领悟到了团队的力量是巨大的,也学习到的一些学习方法,比如追查API,如何在短时间内学习一个自己不懂的东西那就是利用好所有的搜索引擎,多去图书馆找资料。总之此次课程设计我们不仅长了学科知识,在生活上我也长了见识。
六、 参考文献
a.黄晓东 等编著 Java课程设计案例精编(第二版)[M].北京:中国水利水电出版社,2007 b.李兴华 等编著 Java开发实战经典Java开发实战经典 北京:清华大学出版社,2009 C.李尊朝 苏军 Java程序设计(第二版) 图形用户界面设计、Swing组件 中国铁道出版社,2007
七、 附录
1.程序结构
14 2.程序
(1)Tools.java package common;
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream;
import javax.swing.*;
public class Tools {
/**打开选择框 返回详细地址*/ public static String open_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showOpenDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not"; } /**保存选择框 返回详细地址*/ public static String save_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showSaveDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not";
}
/**显示对话框,需要传递 标题和显示内容*/ public static void showMessage(String text,String title)
15 {
JOptionPane.showMessageDialog(null,text,title,
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); } /**新建笔记时将笔记设为Document类型,方便存储图片,在本地不能打开*/ public static void setDocument(File file) {
try {
JTextPane tempPane=new JTextPane();
FileOutputStream outputStream=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(outputStream);
oos.writeObject(tempPane.getDocument());
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**删除文件 传一个文件地址 返回一个boolean 为了方便删除文件夹才将此方法提取出来*/ public static boolean deleteFile(String path) {
File file=new File(path);
return (file.delete()); }
/**删除文件 传一个文件地址
返回一个boolean 先删除里面的文件再删除文件夹*/ public static boolean deleteFolder(String path) {
File folder=new File(path);
File[] list=folder.listFiles();
for(int i=0;i<list.length;i++)
deleteFile(path+"/"+list[i].getName());
return (folder.delete()); } }
(2)User.java package common; /**
16 * 处理用户属性
* 为用户创建自己的专有途径
* 如果有了则不创建
*/ import java.io.*;
import javax.swing.JTextPane; import javax.swing.text.Document;
import view.MainFrame;
public class User {
public User(String name)
{
//如果第一次登录的话,为用户新建一个专属区
File file=new File("Users/"+name);
if(!file.exists())
{
try {
file.mkdir();
} catch (Exception e1) {
e1.printStackTrace();
}
//第一次登录创建默认笔记本
File book=new File("Users/"+name+"/默认笔记本");
try {
book.mkdir();
} catch (Exception e1) {
e1.printStackTrace();
}
//第一次登录创建默认笔记
File note=new File("Users/"+name+"/默认笔记本"+"/默认笔记.ser");
try {
note.createNewFile();
Tools.setDocument(note);
} catch (Exception e1) {
e1.printStackTrace();
}
}
//构造完毕
正式进入笔记本
new MainFrame(name);
}
}
(3)login_zhuce.java package login;
import java.awt.*; import java.awt.event.*; import java.io.*;
import javax.swing.*;
import common.User; import view.MainFrame;
public class login_zhuce extends JFrame implements ActionListener {
JPanel jp0; JPanel jp1,jp2,jp3,jp4,jp5; JTextField jtf; JPasswordField jpf; JLabel jl1,jl2,jl3; JButton jb1,jb2,jb3; ImageIcon bg;
public static void main(String[] args) {
// TODO Auto-generated method stub
login_zhuce lz = new login_zhuce(); }
public login_zhuce(){
try {//默认 NImbus风格
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); }
jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp1.setOpaque(false); jp2.setOpaque(false); jp3.setOpaque(false); jp4.setOpaque(false);
//no.1 jl1 = new JLabel("用户名"); jtf = new JTextField(10); jp1.add(jl1); jp1.add(jtf);
//no.2 jl2 = new JLabel("密
码"); jpf = new JPasswordField(10); jp2.add(jl2); jp2.add(jpf); //3 jb1 = new JButton("登陆"); jb1.addActionListener(this); jb1.setActionCommand("denglu"); jb2 = new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); jb3 = new JButton("注册"); jb3.addActionListener(this); jb3.setActionCommand("zhuce");
jp3.add(jb1);
jp3.add(jb2);
jp3.add(jb3);
this.setLayout(new GridLayout(4,1));
this.add(jp4);
this.add(jp1);
this.add(jp2);
this.add(jp3);
bg = new ImageIcon("image//huashi.jpg");
jl3 = new JLabel(bg);
jl3.setBounds(0, 0, 300, 200);
this.getLayeredPane().add(jl3,new Integer(Integer.MIN_VALUE));
jp5 = (JPanel)this.getContentPane();
jp5.setOpaque(false); //设置透明
this.setTitle("笔记本登陆");
this.setSize(300,200);
// 获取屏幕分辨率,以此设置程序出现在屏幕中央
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension testSize = getSize();
this.setLocation((screenSize.widthtestSize.width) / 2, (screenSize.height - testSize.height) / 2); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
24
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("queding")){
String st1 = "ff";
String st2 = ".txt";
String st3 = this.jtf1.getText();
String st4 = st1 + st3 +st2 ;
System.out.println(st4);
File f = new File(st4);
if(!f.exists()){
String password1=new String(jtf2.getPassword());
String password2=new String(jtf3.getPassword());
System.out.println(password1);
System.out.println(password2);
if (!(password1.equals(password2))){
JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
this.jtf2.setText(null);
this.jtf3.setText(null);
}
else {
try {
f.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(st4,true);
bw = new BufferedWriter(fw);
bw.write(st3+"");
bw.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally{
try {
fw.close();
} catch (IOException e1) {
25
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
fw = new FileWriter(st4,true);
bw = new BufferedWriter(fw);
bw.write(this.jtf2.getPassword());
bw.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally{
try {
fw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
JOptionPane.showMessageDialog(null, "创建账户成功", "恭喜你",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
this.dispose();
login_zhuce lz = new login_zhuce();
}
}
else {
JOptionPane.showMessageDialog(null,"该用户名已被占用,请重新输入用户名","错误提示",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
System.out.println("该用户名已被占用,请重新输入用户名");
this.jtf1.setText(null);
} //
if (this.jpf1.getText()!=this.jpf2.getText()){ //
JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", //
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); //
this.jpf1.setText(null); //
this.jpf2.setText(null); //
}
}
26
else if(e.getActionCommand().equals("quxiao")){
this.dispose();
System.exit(0);
} } }
(5)LefgPanle.java package view; /** * 将卡片布局修改 修改成仅有两片
* 第一片 所有笔记 按钮
* 第二片 所有笔记 目录
*/ import java.awt.*; import java.awt.event.*; import java.io.*;
import javax.swing.*;
public class LeftPanle extends JPanel implements ActionListener,MouseListener{
/**************笔记本类型部分声明*****************/ CardLayout cardLayout;//卡片布局的方式
JPanel firstPanel,secondPanel;//分别存储两片
//第一片声明
JPanel allBookPanel,firstTempPanel;//所有笔记
JButton allBook;//所以笔记,排序,回收站的按钮
JScrollPane allBookjsp; //第二片声明
JPanel secondTempPanel,timePaenl_o; JButton allBook_o;//所以笔记,排序,回收站的按钮
JScrollPane timePaenljsp_o;
//处理文件部分内容
File book; String [] book_name; JLabel[] member;
JPanel panel; MainFrame mainFrame; public final int TOTAL=20;
/**************笔记本类型部分声明结束*****************/
27
public LeftPanle(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //处理第一片11111111111111111111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮
//ImageIcon imageIcon=new ImageIcon("image/note.png"); allBook=new JButton("所有笔记",new ImageIcon("image/expand.png")); allBook.addActionListener(this);//点击按时间排序时显示第二片
allBookPanel=new JPanel(new GridLayout(TOTAL,1,1,4)); member=new JLabel[TOTAL]; for(int i=0;i<TOTAL;i++) {
member[i]=new JLabel("");
member[i].addMouseListener(this); }
allBookjsp=new JScrollPane(allBookPanel);//滚动
firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局
firstPanel.add(allBook,"North"); firstPanel.add(allBookjsp);
//处理第二片222222222222222222222 //仅有一个按钮
allBook_o=new JButton("所有笔记",new ImageIcon("image/collapse.png")); allBook_o.addActionListener(this);//点击所有笔记时 显示第一片
secondPanel=new JPanel(new BorderLayout());//将第二片设为 边界布局
secondPanel.add(allBook_o,"North");
//进行卡片布局
cardLayout=new CardLayout(); panel.setLayout(cardLayout); panel.add(firstPanel,"1"); panel.add(secondPanel,"2");
} //更新leftPanel中的笔记本,在新建或删除笔记本是需要刷新
并附带刷新右边两个
28 Panel public void update_Left_view() {
book=new File(mainFrame.getUser_path());
book_name=book.list();
if(book.exists())
{
for(int i=0;i<TOTAL;i++)
{
member[i].setText("");
member[i].setIcon(null);
member[i].removeMouseListener(this);
}
for(int i=0;i<book_name.length;i++)
{
//为每个好友设置头像和名字,每一个好友用 JLabel组件 存放
ImageIcon imageIcon=new ImageIcon("image/note.png");
member[i].setText(book_name[i]);
member[i].setIcon(imageIcon);
member[i].addMouseListener(this);//为每一种笔记的排序方式注册监听
allBookPanel.add(member[i],i);//将笔记添加到所有笔记面板
}
mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name[0]);
mainFrame.midPanel.update_Mid_View();
} }
@Override public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//将选中部分字体设为红色
JLabel jl = null;
for(int i=0;i<book_name.length;i++)
{
if(e.getComponent().equals(member[i]))
{
jl=(JLabel)e.getSource();
jl.setForeground(Color.red);
}
else
{
member[i].setForeground(Color.black);
29
// //
// //
}
} //保存当前笔记本的路径 如 ... mainFrame.setBook_Path(book.getAbsolutePath()+""+jl.getText()); //点击打开一个笔记本
刷新中间的目录
mainFrame.midPanel.update_Mid_View();
} @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub
} @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub
} @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.red); //jl.setFont(new Font("",1,30)); //在笔记本界面操作 允许删除笔记本 不允许删除笔记
mainFrame.menu.delete_item[0].setEnabled(false);//不允许删除笔记
mainFrame.menu.delete_item[1].setEnabled(true);//允许删除笔记本 } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.black); //jl.setFont(new Font("",1,12)); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==allBook) {
//cardLayout.show(this.getContentPane(), "2");
cardLayout.next(panel); }else if(e.getSource()==allBook_o){
30
//cardLayout.show(this.getContentPane(), "1");
cardLayout.next(panel);
} }
}
(6)MainFrame.java package view; /** * 笔记本 java版
*
1、将主界面分为四块 北边的菜单 以及左中右的笔记本目录,笔记目录和笔记内容
*
2、左边目录为卡片布局,实现点了"所有笔记"弹出所有笔记的效果
*
3、中间显示笔记目录 采用网格布局 每个网格用了JMenuItem *
4、右边是一个JTextArea可能会改成JTextPane *
5、实现了新建删除笔记(本),但界面刷新有点问题 (会重叠)
*
6、采用MVC的思想实现时事刷新界面的效果
*
7、鼠标右击删除新建 测试成功(鼠标右击是笔记本的新建与删除没有)
*
8、注册登录系统 已测试成功 在包login里面
*
9、图片的问题已成功解决
*
10、可以更改字体颜色(大小没有写),以及插入时间等
*
11、显示处添加实现多种版本的切换(如可切换成windows)
*/
import java.awt.*; import java.awt.event.*; import javax.swing.*;
import common.User;
public class MainFrame extends JFrame implements ActionListener{
Menu menu;//连接菜单栏
JPanel NoteTypePanel,DirectoryPanel,TextPanel;//三个大Panel JSplitPane splitM_R,splitL_M;
LeftPanle leftPanel;//左边第一个Panel MidPanel midPanel;//连接中间Panel RightPanel rightPanel;//连接右边Panel
//存放路径
31 public String name=null; public String user_path=null; public String book_Path=null; public String note_Path=null;
public MainFrame(String name) {
this.name=name;
this.setUser_path("Users/"+name);
this.setBook_Path(this.getUser_path()+"/默认笔记本");
this.setNote_Path(this.getBook_Path()+"/默认笔记");
//
一、菜单界面
menu=new Menu(this);
/**
二、 创建三个JPanel
*1.l笔记正文 TextPanel
*2.笔记名目录及查找方式
DirectoryPanel
*3.笔记类型目录及排序方式选择
NoteTypePane
*/
/*笔记正文部分*******/
TextPanel=new JPanel();
rightPanel=new RightPanel(TextPanel,this);
/*文件名目录部分******/
DirectoryPanel=new JPanel();
midPanel =new MidPanel(DirectoryPanel,this);
/*笔记类型目录部分*****/
NoteTypePanel =new JPanel();
leftPanel=new LeftPanle(NoteTypePanel,this);
leftPanel.update_Left_view();
//
三、处理拆分窗格
splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel);
splitM_R.setOneTouchExpandable(true);
splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R);
splitL_M.setOneTouchExpandable(true);
this.add(splitL_M);
//
四、设置标题等
this.setTitle(name+" 的笔记本");
this.setLocation(200,100);
this.setSize(1000,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
32
} this.setVisible(true); } //为了方便后面的垂直和水平显示 public void showStyle(int show) { this.remove(splitL_M);//先把以前的去掉重新添加
splitM_R =new JSplitPane(show,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true);
splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); this.setVisible(true); }
@Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub }
public String getUser_path() { return user_path; } public void setUser_path(String user_path) { this.user_path = user_path; } public String getBook_Path() { return book_Path; } public void setBook_Path(String book_Path) { this.book_Path = book_Path; } public String getNote_Path() { return note_Path; } public void setNote_Path(String note_Path) { this.note_Path = note_Path; }
33
(7) package view;
import java.awt.*; import java.awt.event.*; import java.io.*;
import javax.swing.*; import javax.swing.text.Document; import javax.swing.text.StyledDocument;
import common.Tools; import common.User; import login.login_zhuce;
public class Menu extends JFrame implements ActionListener{
//菜单部分声明
JMenuBar menuBar=null;//菜单主干
JMenu newNote_menu,deliteNote_menu,show_menu,menu_menu,help_menu;//菜单组件
树干
//处理新建笔记菜单 newNote_menu JMenuItem[] newNote_item={
new JMenuItem("新建笔记"),
new JMenuItem("新建笔记本")
}; //处理删除deliteNote_menu JMenuItem[] delete_item={
new JMenuItem("删除笔记"),
new JMenuItem("删除笔记本")
};
//处理显示
JMenuItem[] show_item={
new JMenuItem("Metal风格"),
new JMenuItem("Windows风格"),
new JMenuItem("Motif风格"),
new JMenuItem("Nimbus风格"),
new JMenuItem("水平显示"),
new JMenuItem("垂直显示")
};
//处理menu_menu JMenuItem[] menu_item={
new JMenuItem("丨账户"),
new JMenuItem("丨导入"),
34
new JMenuItem("丨导出"),
new JMenuItem("丨注销"),
new JMenuItem("丨退出")
};
//处理help_menu JMenuItem[] help_item={
new JMenuItem("关于作者"),
new JMenuItem("关于笔记本") };
MainFrame mainFrame;
public Menu(MainFrame mainFrame) { this.mainFrame=mainFrame; //
一、先处理菜单
menuBar=new JMenuBar(); //各菜单menu[0]menu[1]menu[2]menu[3]menu[4] newNote_menu=new JMenu("新建"); deliteNote_menu=new JMenu("删除"); deliteNote_menu.setToolTipText("选中笔记(本)时才可删除"); show_menu=new JMenu("显示"); help_menu=new JMenu("帮助"); menu_menu=new JMenu("菜单");
//将菜单项添加到各菜单
for(int i=0;i<newNote_item.length;i++)//新建笔记
菜单
newNote_menu.add(newNote_item[i]); for(int i=0;i<delete_item.length;i++)//删除笔记 菜单
deliteNote_menu.add(delete_item[i]); for(int i=0;i<show_item.length;i++)//显示菜单
show_menu.add(show_item[i]); for(int i=0;i<help_item.length;i++)//帮助菜单
help_menu.add(help_item[i]); for(int i=0;i<menu_item.length;i++)//菜单 菜单
{
menu_menu.add(menu_item[i]);
if(i==0||i==2)//添加分隔线 将导入和导出框起来
menu_menu.addSeparator(); }
35
//添加事件监听
for(int i=0;i<newNote_item.length;i++)//为新建笔记注册监听
newNote_item[i].addActionListener(this);
for(int i=0;i<delete_item.length;i++)//为删除笔记注册监听
delete_item[i].addActionListener(this);
for(int i=0;i<show_item.length;i++)//为帮助注册监听
show_item[i].addActionListener(this);
for(int i=0;i<help_item.length;i++)//为帮助注册监听
help_item[i].addActionListener(this);
for(int i=0;i<menu_item.length;i++)//为菜单注册监听
menu_item[i].addActionListener(this);
//将菜单 添加到主干中
menuBar.add(newNote_menu);
menuBar.add(deliteNote_menu);
menuBar.add(show_menu);
menuBar.add(menu_menu);
menuBar.add(help_menu);
mainFrame.add(menuBar,"North");
} //构造完毕
//实现风格转换
private void changeFlavor(int flavor)throws Exception
{
switch(flavor)
{
case 1:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 3:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
case 4:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
break;
36
}
SwingUtilities.updateComponentTreeUI(this.getContentPane());
SwingUtilities.updateComponentTreeUI(mainFrame);
} //实现监听后的动作
@Override public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String str=e.getActionCommand();
if(str.equals("新建笔记")){
String note_name=null;
note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",
JOptionPane.INFORMATION_MESSAGE |JOptionPane.OK_OPTION);
//如果用户点取消 或没有输入文件名
则不用新建
if(note_name!=null){
File file=new File(mainFrame.book_Path+"/"+note_name+".ser");
if(!file.exists())
{
try {
file.createNewFile();
//将新建的笔记格式设为Document对象
Tools.setDocument(file);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//刷新中间和左边的Panel
mainFrame.midPanel.update_Mid_View();
}
}
}else if(str.equals("新建笔记本")){
String book_name=null;
book_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
if(book_name!=null){
File file=new File(mainFrame.getUser_path()+"/"+book_name);
//System.out.println("User_path:"+mainFrame.getUser_path());
if(!file.exists())
{
try {
file.mkdir();
//将笔记本路径设为新建笔记本的路径
37 mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name);
mainFrame.leftPanel.update_Left_view();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//改变的笔记本总数
刷新左边Panel
mainFrame.leftPanel.update_Left_view();
}
}
}else if(str.equals("删除笔记")){
Tools.deleteFile(mainFrame.getNote_Path());
//删除笔记之后需要刷新右边的两个Panel
mainFrame.midPanel.update_Mid_View();
}else if(str.equals("删除笔记本")){
Tools.deleteFolder(mainFrame.book_Path);
//笔记本目录发生改变
mainFrame.leftPanel.update_Left_view();
}else if(str.equals("关于作者")){
Tools.showMessage("邓伟杰、苏俊钦、陈通、陈盛锋、林健祺、尹国瑜、温天宇、赵潮顺", "帮助");
}else if(str.equals("关于笔记本")){
Tools.showMessage("还存在许多BUG,望老师指正", "呵呵");
}else if(str.equals("丨账户")){
Tools.showMessage("姓名:"+mainFrame.name, "用户信息");
}else if(str.equals("丨导入")){//即打开一个笔记
String temp=Tools.open_Choose();
if(!temp.equals("not"))
{
FileInputStream inputStream=null;
ObjectInputStream ois=null;
try {
inputStream=new FileInputStream(Tools.open_Choose());
ois=new ObjectInputStream(inputStream);
mainFrame.rightPanel.textPane.setDocument((Document) ois.readObject());
mainFrame.rightPanel.book_Save();
} catch (Exception e1) {
// TODO Auto-generated catch block
38
e1.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} } }else if(str.equals("丨导出")){//即另存为一个笔记
String temp=Tools.open_Choose(); if(!temp.equals("not")) {
FileOutputStream outputStream=null;
ObjectOutputStream oos=null;
try {
outputStream=new FileOutputStream(Tools.save_Choose());
oos=new ObjectOutputStream(outputStream);
oos.writeObject(mainFrame.rightPanel.textPane.getDocument());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
try {
oos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} } }else if(str.equals("丨注销")){ mainFrame.dispose(); new login_zhuce();//注销之后重新登录 }else if(str.equals("丨退出")){ System.exit(0); }else if(str.equals("垂直显示")){ mainFrame.showStyle(0);//重新调用一下拆分窗格 }else if(str.equals("水平显示")){ mainFrame.showStyle(1); }else {
39
try{
if(str.equals("Metal风格")){
this.changeFlavor(1);
}else if(str.equals("Windows风格")){
this.changeFlavor(2);
}else if(str.equals("Motif风格")){
this.changeFlavor(3);
}else if(str.equals("Nimbus风格")){
this.changeFlavor(4);
}
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}
(8)Midpanel.java package view;
import java.awt.*;
import javax.swing.*; import javax.swing.text.Document;
import common.Tools;
import java.awt.event.*; import java.io.*;
public class MidPanel extends JPanel
implements ActionListener,MouseListener{
JPanel panel; MainFrame mainFrame; /// JScrollPane jscroll2;
JMenuItem[] items; File lists[];
JPanel jp1;
40
//鼠标右击部分
JPopupMenu right_Click;
JMenuItem delete_book,properties_book,new_book;
public final int TOTAL=20; public String filename; public String temp_path=null;//右击时记录选中笔记的途径
public MidPanel(JPanel panel, MainFrame main) {
this.panel=panel;
this.mainFrame=main;
jp1=new JPanel();
jp1.setLayout(new GridLayout(TOTAL,1,1,4));
//初始化20个MenuItem
items =new JMenuItem[TOTAL];
for(int j=0;j<TOTAL;j++){
items[j]=new JMenuItem("");
items[j].addMouseListener(this);
}
//处理鼠标右击问题
right_Click=new JPopupMenu();
new_book=new JMenuItem("New");//新建笔记
delete_book=new JMenuItem("Delete"); //删除笔记
properties_book=new JMenuItem("Properties");
delete_book.addActionListener(this);
properties_book.addActionListener(this);
new_book.addActionListener(this);
//right_Click.
right_Click.add(new_book);
right_Click.addSeparator();
right_Click.add(delete_book);
right_Click.add(properties_book);
JLabel label=new JLabel("All Note & Note All ");
label.setEnabled(false);
label.setBackground(Color.gray);
41
jscroll2 = new JScrollPane(jp1);//为Panel添加滚动条
panel.setLayout(new BorderLayout());
panel.add(label,"North");
panel.add(jscroll2);
} //在新建或删除是需要刷新,并附带刷新
RightPanel中的内容
public void update_Mid_View()
{
File file = new File(mainFrame.getBook_Path());
if(file.isDirectory())
{
lists = file.listFiles();
for(int j=0;j<TOTAL;j++){
items[j].setText("");
items[j].setArmed(false);
items[j].removeMouseListener(this);//避免某个笔记被删除之后还可以被点的情况
}
for(int i=0;i<lists.length;i++){
items[i].setText(lists[i].getName());//创建20个JLanel
items[i].addActionListener(this);
items[i].addMouseListener(this);
jp1.add(items[i],i );
//在该项上右击弹出一个选择框
items[i].setComponentPopupMenu(right_Click);
}
//更新右边的Panel 里面应该没有内容
mainFrame.rightPanel.update_Right_view();
}
}
public void showfile(int y) {
String filename1 = lists[y].getAbsolutePath();
FileInputStream inputStream=null;
ObjectInputStream ois = null;
try {
inputStream=new FileInputStream(filename1);
ois=new ObjectInputStream(inputStream);
42
mainFrame.rightPanel.textPane.setDocument((Document)ois.readObject());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("New")){
String note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);
//如果用户点了取消 则不用新建笔记
if(!note_name.equals("null")){
File file=new File(mainFrame.book_Path+"/"+note_name+".ser");
if(!file.exists())
{
try {
file.createNewFile();
//为新建的笔记写入一个空白的对象 避免打开时报指针的错误
Tools.setDocument(file);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//刷新中间和左边的Panel
mainFrame.midPanel.update_Mid_View();
}
}else if(e.getActionCommand().equals("Delete")){
File file=new File(this.getTemp_path());
file.delete();
//删除笔记之后需要刷新右边的两个Panel
43
mainFrame.midPanel.update_Mid_View(); }else if(e.getActionCommand().equals("Properties")){
Tools.showMessage(this.getTemp_path(),"笔记"); }else
{
mainFrame.rightPanel.textPane.setEditable(true);
mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+e.getActionCommand());
for (int x=0;x<lists.length;x++){
if (e.getActionCommand().endsWith(lists[x].getName()))
this.showfile(x);
} } }
@Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub //设置选中部分的情况
JMenuItem jmtemp=null; for(int i=0;i<lists.length;i++) {
if(arg0.getComponent().equals(items[i]))
{
jmtemp=(JMenuItem)arg0.getSource();
jmtemp.setArmed(true);
}else{
items[i].setArmed(false);
} }
//记录被要在右边显示出内容的笔记途径
可以在菜单中删除该笔记
mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+jmtemp.getText());
mainFrame.menu.delete_item[0].setEnabled(true);//允许删除笔记
mainFrame.menu.delete_item[1].setEnabled(false);//不允许删除笔记本 } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub
JMenuItem jm=(JMenuItem)arg0.getSource(); //将当前笔记的途径
存到辅助路径中
44
this.setTemp_path(mainFrame.getBook_Path()+"/"+jm.getText()); } @Override public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
JMenuItem jm=(JMenuItem)arg0.getSource();
//jm.setBackground(new Color(238,238,238)); } @Override public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub }
public String getTemp_path() {
return temp_path; } public void setTemp_path(String temp_path) {
this.temp_path = temp_path; } }
(9) RightPanel.java package view; /** * 改用JTextPane实现图片即单个文字更改字体或颜色的功能
*/ import java.awt.*; import java.awt.event.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date;
import javax.swing.*; import javax.swing.text.Document;
import common.Tools;
45 public class RightPanel extends JPanel implements ActionListener{
JPanel panel;
MainFrame mainFrame;
//文本域
JTextPane textPane; JScrollPane jsp_Pane; //鼠标右击部分
JPopupMenu right_Click; JMenuItem cutItem,copyItem,pasteItem,saveItem; //插入图片与更改字体
JToolBar toolBar; JButton image_Button,font_Button,timeButton;
public RightPanel(JPanel panel,MainFrame mainFrame) {
this.mainFrame=mainFrame;
this.panel=panel;
//创建一个 文本域存放文字
JTextArea
textPane =new JTextPane();
//设置自动换行
textPane.setFont(new Font("", 1, 12));
jsp_Pane=new JScrollPane(textPane);//滚轮
//设置鼠标右击弹框效果
//cut
cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));
cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"
cutItem.addActionListener(this);
//copy
copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));
copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl O"
copyItem.addActionListener(this);
//paste
pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));
pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"
pasteItem.addActionListener(this);
saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));
saveItem.addActionListener(this);
//将各菜单项添加到 右击菜单组中
right_Click=new JPopupMenu();
//right_Click.
right_Click.add(cutItem);
46
right_Click.add(copyItem);
right_Click.add(pasteItem);
right_Click.addSeparator();
right_Click.add(saveItem);
//为右击注册监听
textPane.setComponentPopupMenu(right_Click);
//可以懂工具条部分
toolBar=new JToolBar("工具");
image_Button=new JButton("插入图片");
image_Button.addActionListener(this);
font_Button=new JButton("更改字体颜色");
font_Button.addActionListener(this);
timeButton = new JButton("插入时间");
timeButton.setToolTipText("点击可以插入当前时间");
timeButton.addActionListener(this);
toolBar.add(image_Button);
toolBar.add(font_Button);
toolBar.add(timeButton);
//将工具条和textPane添加到panel
panel.setLayout(new BorderLayout());
panel.add(toolBar,"North"); panel.add(jsp_Pane); } //更新文本框
在新建或删除
笔记或笔记本
的时候需要刷新 public void update_Right_view() { textPane.setText(""); textPane.setEditable(false); } //保存当前笔记
public void book_Save() { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try {
outputStream=new FileOutputStream(mainFrame.getNote_Path());
oos=new ObjectOutputStream(outputStream);
oos.writeObject(textPane.getDocument()); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
47
}finally{
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
@Override public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="Cut"){//剪切
textPane.cut();
}else if(e.getActionCommand()=="Copy"){//复制
textPane.copy();
}else if(e.getActionCommand()=="Paste"){//粘贴
textPane.paste();
}else if(e.getActionCommand()=="Save"){//保存
this.book_Save();
}else if(e.getSource()==image_Button){//插入图片
String temp=Tools.open_Choose();
if(!temp.equals("not")){
textPane.insertIcon(new ImageIcon(temp));
}
}else if(e.getSource()==font_Button){//修改字体颜色
Color c=JColorChooser.showDialog(this, "Color", Color.black);
textPane.setForeground(c);
}else if(e.getSource()==timeButton){//插入时间
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );
textPane.replaceSelection(hehe);
} } }
48