java程序设计教学大纲(共9篇)
1.java程序设计教学大纲 篇一
《Java程序设计课程设计》教学大纲
Java Programming Course Design
课程代码: I1101Y09
课程总周数:
2-4
学
分:
课程性质:
必修
课程类别:
集中实践环节
先修课程:
《 Java程序设计 》
面向专业:
信息管理与信息系统
开课单位 :
经济与管理学院
执
笔:
审
校:
一、课程设计的地位与任务
《Java程序设计课程设计》是信息管理与信息系统专业必做的集中实践性环节之一,是学习完《Java程序设计》课程后进行的一次全面的综合练习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。
二、课程设计的内容和基本要求
1、内容:设计题目需要在老师课堂上演示的程序基础上增加1-9个功能。
2、要求:
(1)学生两到三人组成一组,每组必须独立完成设计任务,严禁抄袭或找人代做等行为,一经发现成绩以不及格计。
(2)课程设计期间要严格遵守学习纪律,遵守作息时间,不得迟到、早退和旷课,课程设计期间缺勤1/3以上者,成绩以不及格记。
(3)课程设计报告每组学生上交一份课程设计报告打印稿(A4双面打印)。每班以班级为单位交一张刻录光盘,并且将光盘内容每班学委打个压缩包发老师邮箱。
该光盘包括每组的文件夹,其中包括每组的设计报告内容以及每组独立开发的软件。每组的文件夹命名规则为“组长名字_组员1名字_组员2名字”)。注意:光盘要有封皮,注明班级、小组总数,一起上交。
三、教学安排与教学方法
依照教学计划,课程安排在2或4周内完成,共32学时。1.复习过去所学主要内容(8学时)
2.系统分析,主要核心功能及代码设计(8学时)3.剩余功能代码实现、编程调试(12学时)4.完成课程设计报告(4学时)
四、考核方法及成绩评定
1、考核类别:考查
2、考核形式:平时成绩(20%)、课程设计报告及软件验收(80%)。
3、成绩评定:百分制,100分满分,低于60分为不及格。
五、推荐教材与主要参考书 推荐教材
1、梁勇 :《Java语言程序设计 基础篇(原书第8版)》,机械工业出版社,2012;
2、梁勇 :《Java语言程序设计 进阶篇(原书第8版)》,机械工业出版社,2012。
主要参考书
1、[美]塞若,[美]贝茨:《Head First Java(中文版)》,中国电力出版社,2007;
2、[美]埃克尔:《Java编程思想(第4版)》,机械工业出版社,2007;
3、[美]史蒂芬.约翰.梅特斯克:《Java设计模式(第2版)》, 电子工业出版社,2012。
2.java程序设计教学大纲 篇二
为加快我国教育改革进程,促进学生专业知识、外语水平及能力素质的全面发展,教育部大力提倡进行双语课程建设。为了响应教育部推行双语教学的要求,我校出台了双语课程建设政策,要求在专业课程中选择可以推行双语教学模式的课程。在计算机专业课程中,大家一致认为语言类课程比较适合开展双语教学,因此,我们决定以程序设计课程作为示范课程,来探索新的教学模式。
2 开展双语教学的可行性
在初步选择之后,我系教师对在Java程序设计中开展双语教学进行了研讨。主要讨论了影响双语教学的三个主要因素:学生接受能力、双语教学师资、课程特点。
2.1 学生接受能力
Java程序设计的授课对象为本科软件方向学生。从课程安排看来,外语课与专业课同步开设,注重听力和口语的练习,具有一定的程序设计语言基础。但学生基础水平差异成了我们最担心的问题。因此课下我随机抽取了部分学生进行座谈,了解学生对待新事物的心理状态,大多数学生持赞成态度。一部分英语基础较差的同学希望通过双语教学可以提高他们的英语应用能力。另外,也考虑了在教学中采用中英文对照的课件,以供不同基础的学生选择使用。
2.2 双语教学师资
排除了学生的因素,接下来讨论了对授课教师的要求。我系教师曾经担任计算机专业英语和Java程序设计课程的教学任务,具有良好的实践基础。因此,在本课程中开展双语教学具有适合的师资力量。
2.3 课程特点
并不是所有的专业课程都易于采用双语教学。学生未曾学过计算机专业英语,对专业术语掌握较少,此时若选择专业词汇多、抽象概念多、理论性强的课程,学生将无法承受。而程序设计类课程的专业词汇少,实践性强,抽象度低,程序就是书写代码进行规则应用,通过实践较易理解课程内容。大家一致认为,Java程序设计适合开展双语教学。
3 Java双语教学的实施
3.1 教材选择
3.1.1 原版英文教材
实施双语教学,教材的选择至关重要。本课程采用美国Harvey M.Deitel编著的Small Java How to Program,6/E原版教材进行授课,内容符合教学大纲要求的深度和广度。该教材与我院目前采用的中文教材对于知识点的设置和讲解十分类似,且简明清晰、论述层次分明,具有较强的逻辑性和较新的知识体系。
3.1.2 扩充性原版及翻译版参考资料
选择Java程序设计方面比较权威的其他原版书籍作为教学参考资料,且尽可能使用具有中英文对照的书籍。
(1)Bruce Eckel.Thinking In Java.北京:机械工业出版社,2007.
(2)(美)Bruce Eckel.陈昊鹏译.《Java编程思想》.北京:机械工业出版社,2007.
(3)(新加坡)潘祥春.Java Programming.北京:清华大学出版社,2010.
(4)Rogers Cadenhead,Laura Lemay.袁国忠,张劼译.《21天学通Java6》(第5版).北京:人民邮电出版社,2009.
(5)Rogers Cadenhead,Laura Lemay.Sams Teach Yourself Java 6 in 21 Days(5th Edition).America,Sams,2007.(电子版)
3.1.3 教材建设
双语教学是个新事物,现有的教材较少;单纯引入外来教材,又不符合目前的教学要求和学生的状况。针对这些问题,在教学中除了对不同水平的英文原版教材进行选择性使用之外,还利用本次双语教学的实践经验,编写了适合双语教学使用的实验指导书。
3.2 教学方法
根据教学内容和学生实际情况,在双语教学中进行多种教学方法的综合应用。
3.2.1 综合运用多种传统教学方法
讲授法、演示法、练习法、发问法、启发式教学法、讨论法、案例教学法等传统教学方法综合运用,讲解教学中的主要理论、重点和难点。在教学过程中,对一些重要知识点进行讲授和针对性练习;较易理解的知识点,则可以通过设置问题的方法启发学生思考并鼓励学生以自学形式完成;对于疑难问题,则可以通过激发学生讨论、进行案例应用演示的方法来突破难点。
3.2.2 双语教学的阶梯式教学法
对于大部分学生而言,英语基础较为薄弱,对使用英语进行教学产生畏惧和排斥心理。在教学过程中,针对学生的具体情况和双语教学的要求,灵活掌握中文和英文的使用比例,引导学生循序渐进的适应新的教学模式。
1)使用英文版课件,用中文讲授专业内容。
在双语教学的初级阶段,学生刚接触双语课程,不习惯教师用英文授课的方式。此时,在教学中使用英文来组织教学活动,而专业部分的讲授用中文为主英文为辅的方式进行。
2)中英文授课比例基本上各占50%。
随着学生排斥心理的消失,课堂上开始加大采用英文进行教学的比例,讲授过程中中文和英文交替使用,中文主要解释重要的概念和技能,使学生能够逐步适应英文进入课堂教学。
3)英文为主,中文解释为辅。
仅对部分难理解的内容辅以中文解释,让学生逐步习惯用英文来学习和思考。在练习和作业设置中,添加必须用英语回答的问题。
3.3 教学手段
3.3.1 利用多媒体进行课堂教学
本课程双语教学以利用现代多媒体教学课件授课为主,多种教学手段并用。在教学过程中,以英文原版书籍为教材和主要参考书籍,同时参考国内外多本优秀Java程序设计教科书,自行制作了一套中英文对照的《Java程序设计》多媒体教学课件,便于教师利用丰富的教学资料为学生授课,提高教学效率和课堂信息容量。
3.3.2 利用网络辅助教学
教师将课程资料通过网络传给学生,极大地方便了教师与学生之间的交流。在网络平台上,可以展示教师的教案、布置给学生的作业,便于学生能够及时地预习、复习和练习。同时,学生可以在网上向教师咨询和请教疑难问题,也可以与教师进行某些问题的讨论。
3.3.3 充分利用现代媒体辅助实验教学
为加强课程知识的实际应用,利用二分之一的课时进行实验教学。在实验课教学中,除利用多媒体进行实验演示外,还充分利用实验室的网络设备,加强对学生实验过程的指导作用。
3.4 教学考核和教学效果
本课程采用双语教学的重点是在学习专业知识的过程中不断提高学生的英语综合应用能力。因此,采用灵活多样的考核方法和形式。
考核方法可以采用期末考试、平时成绩进行综合考核;考核形式可以为课堂表现、作业及考试试卷;考试形式可以为开卷、闭卷。在教学实践中,采用“作业+课堂表现”相结合的考核方法;在课程结束时,采用试卷进行考核;在整个学期,根据课程内容分阶段进行开卷考试,了解学生学习状况,获取教学信息,以便指导教学更好地开展。
经过师生一学期的努力,双语教学取得了阶段性的胜利。学生综合实践的能力、期末考试的成绩均高于以往未进行双语教学的班级。调查问卷的结果也显示,双语教学对学生学习该课程起了促进作用。
4 结束语
Java程序设计双语教学取得了成绩,但也仍然存在很多亟待解决的问题,如:丰富网络教学资源,建立信息反馈平台,培养学生创新能力,及推动学生深入学习等。在本课程未来的建设规划中,我将着手完善双语教学体系,并推动双语教学在其他课程中的应用。
摘要:该文结合计算机专业双语教学的现状,分析了开展双语教学的可行性。从课程选择、可行性分析、教材选择、教学方法、教学手段和教学效果等方面,阐述了在Java程序设计中实施双语教学的实践过程。
关键词:Java程序设计,双语教学
参考文献
[1]胡庆江,杨瑞静.对搞好双语教学的探讨[J].北京教育:高教,2006(2).
[2]张同乐,程鹂.关于双语教学的再思考[J].安徽大学学报:哲学社会科学版,2006(1).
3.java程序设计教学大纲 篇三
关键词:程序设计 能力目标 项目教学 教学方案
计算机软件技术专业主要培养具有创新精神和良好的职业道德的软件专业高级专门人才。本专业毕业生主要面向企、事业单位的管理部门和计算机软件开发部门,从事项目负责人、软件程序员、软件测试员、数据库设计师、系统管理员等工作。目前在程序设计应用领域,面向对象的JAVA语言编程和相关的JAVA技术应用相当广泛,JAVA语言成为主流的程序设计开发语言之一,计算机软件技术专业开设的《JAVA程序设计》课程就是要让学生掌握这种主流的程序设计工具,并且能够根据工作平台的实际要求,设计应用软件,解决实际应用中的一些问题。
为了达到更好的教学效果,我们需要构建理论与实践一体化的教学模式,确立重应用能力培养的课程体系,将技能训練贯穿于整个教学环节中,以企业用人标准为培养目标来进行人才的培养工作。
《JAVA程序设计》课程的能力培养目标列举如下:
1、掌握JDK的安装配置,能够熟练地在计算机上安装配置JAVA的运行环境。
2、写符合JAVA语言语法规范的程序代码。
3、养成查阅JAVA官方文档的习惯,能够在帮助文档中获取系统定义类的属性、方法等信息,熟练掌握JDK帮助文档的正确查阅和使用方法。
4、建立面向对象的程序设计思想,学会类的基本设计;能够用面向对象的观点分析、构建实际应用中的对象。
5、学会使用继承的方法设计新的类。
6、理解多态的含义,掌握多态的表现手段,能够根据应用的需要使用多态技术。
7、给应用程序设计构建美观、实用的图形用户界面。
8、在程序设计中能够分析可能发生的异常,并在程序中处理异常。
9、能够用JAVA中提供的流方式对文件进行操作。
10、学会进行数据库的连接,能够通过程序操作数据库,如查询、增、删、改等,从而实现对数据库中各种数据的处理。
11、理解网络通讯协议的概念及作用,熟悉JAVA中利用TCP/IP协议进行网络通讯的机制,能够用JAVA语言编写网络应用程序。
12、利用线程机制设计多用户应用程序。
13、学会利用工具将应用程序生成可执行文件,并在应用环境中发布。
14、对中、小型应用系统的开发流程有一个清楚的认识和经历。
围绕本课程确定的培养目标,在教学中以项目教学方法为主。“项目教学法”是通过实施完整的项目来进行的教学活动,其目的就是要在课堂教学中把理论与实践教学有机地结合起来,充分发掘学生的创造潜能,训练学生小组协作和团队精神,让学生在应用中学习,在实践需要时学习,从而提高学生解决实际问题的综合能力。“项目教学法”是近几年在职业教育领域比较提倡的方法,但在应用中还是应该注意一些问题,比如:项目的选择应具有目的性,所选项目应包含教学计划内要教的各学科的内容;项目应具有完整性,项目从设计、实施到完成必须要能够有一个完整的成品出来,作为项目的成果;在教学中教师要充分的准备工作;要调动学生参与项目的积极性,项目教学的实施要精心地组织安排;对项目结果进行检查,做合理公平的评价等。
在对项目教学法本质及注意问题进行充分认识和分析的情况下,综合考虑各方面因素,结合学生的实际,设计了《JAVA程序设计》课程教学组织的初步实施方案:
把《JAVA程序设计》课程中涉及到的知识划分为五个项目模块:
一、经典C++程序转换模块
这部分的安排主要是借复习C++的语法知识,来快速熟悉JAVA语言的基本语法、流程控制语句等内容,并在从C++语言向JAVA语言的转换过程中,把JAVA的不同之处突出表现,将其作为重点训练。传统的教学过程中,总是将JAVA语言的语法讲解一遍,虽然是不同的语言,但存在太多相同的东西,重复的讲解容易让学生一开始就厌倦课程,这样的调整一方面避免了重复;另一方面还可以节省教学课时,为后期学生实际动手操作训练提供更充足的时间。这一部分可以把传统教材上关于JAVA语言入门、运算符表达式和流程控制、数组和方法、面向对象的程序设计等章节的知识涵盖在其中。
二、界面设计模块
考虑到项目的功能都是在一个美观、实用的前台界面之上实现的,所以第二个模块安排进行应用程序界面设计训练。JAVA中提供进行界面设计主要是AWT、SWING两个包,对于这部分工作涉及到的支撑知识,主要是各种图形界面控件类的使用。第三、第四、第五模块中涉及到的三个应用软件,都具有图形用户界面,将三个小软件的界面作为此阶段的教学案例。安排教师讲解演示一个项目界面,学生课下同步仿制一个项目界面,熟练独立设计一个项目界面的思路完成教学。这一部分涵盖了传统教材上JAVA图形用户界面、JAVA类库和常用类简介等章节知识。
三、俄罗斯方块游戏项目模块
本项目是一个小游戏,容易激发学生的学习兴趣,同时又是一般学生都玩过、都比较熟悉的,同时完成之后,学生也比较容易找到成就感。教师分析项目功能需求,逐步引导学生思考,并分析演示实现方法。第三模块阶段以教师为主,教师演示,学生模仿操作。这部分任务的完成要靠第一、二模块准备的JAVA基础,主要用到数组字符串、事件处理、异常处理等章节知识。
四、网络文件传输项目模块
进入第四模块,项目的完成主要靠学生,教师在其中主要起引导作用。首先引导学生按照软件工程的方法对软件的开发进行需要分析,确定完成的功能,明确实现过程,画出处理流程图;利用前期掌握的知识,根据确定的软件功能完成界面的调整修改;设计单机中文件及文件夹的建立、复制、删除功能;加入网络连接操作,实现网络中文件的传输。本模块主要训练对文件的操作和网络连接的建立。
五、QQ聊天软件项目模块
此模块是对学生进行JAVA项目开发强化训练的部分,使用到前期涉及到的所有知识。由学生独立根据自己的经验进行项目分析,严格按照软件工程的要求进行;根据个人爱好设计有个性的聊天界面;独立架构聊天软件的网络通讯框架;添加多用户同时在线聊天功能;将聊天用户的用户名、密码及相关信息采用数据库管理,登录时进行身份验证。此环节重点训练多线程和数据库连接、操作等章节知识。
以上的五个模块设计层层递进,并在递进中有重叠,有承上启下的目的,巩固上一环节,服务下一模块。任何的一个新的方案都需要在实践中进行检验,通过实践我们可以不断地进行改进和调整,把教学中使用的项目设计更好更全面,从而达到最优的教学效果。
参考文献:
[1] 姜大源. 职业教育学研究新论.教育科学出版社.2007.1
[2] 冯向东.学科、专业建设与人才培养.高等教育研究.2002.3
[3] 孙伟. 《Java程序设计》课程的教学改革与实践. 计算机时代. 2005.11
4.java程序设计教学大纲 篇四
摘 要:java语言是公司常用开发语言,根据近几年的教学实践经验,结合学生职业需求,总结本课程教学实施需要从课程体系着手,从多个方面进行改进与完善。要合理地安排实践环节,采用典型的项目,来激发学生的学习兴趣,为职业化打下坚实的基础。
关键词:java程序设计;课程体系;项目驱动
Java程序设计是软件开发的一门实践性和操作性很强的专业课程。对于以实现学生职业化的培养目标,培养能够与公司接轨的专业人才有着重要的作用。
目前很多学校对待java程序设计的课程普遍存在着以下问题:课程体系陈旧,没有形成以java为主线的面向对象软件开发的课程体系;或者java课程体系混乱,没有明确后续课程的实用性和相关性;实践环节不足,导致学生不能学以致用;多数老师没有实践经验,导致教学停留在基础程序的开发,不能用项目来驱动教学。
为了解决上述问题,作者经过几年的探索,规划学生在软件开发方向的课程体系,用项目驱动教学,结合大赛的知识导向,激发学生学习的热情,使学生能够更好地领悟java程序开发采用的基本技术和线路,为职业化打下坚实的基础。
一、明确课程体系,采用项目驱动的教学方法完成教学
在java的教学过程中,我们应该为学生从入门、进阶、高级三个阶段来划分方向。
1.用1个学期的时间学习java的基本语法。具体内容上明确为:Java语言的基本语法、Java语言API中常用的类、Java中的线程机制。再学习java application程序的开发。包括图形用户界面设计、数据库的连接,并以进销存管理系统的实现为实训项目,让学生能开发出完整的C/S结构的信息管理系统。
2.以java语言程序设计为基础,学习HTML语言,掌握JSP来开发B/S结构的网站制作的过程,连接mysql数据库,以有缘交友网站的实现为实训项目,让学生对java语言在网站开发上的优势有明显的认识。
3.以java语言程序设计为基础,运用jdk+eclipse+Android SDT+ADT为开发平台,以社区零售系统为实训项目,让学生对Android系统的开发有好的学习和应用。
通过以上这样3个层次来推进java课程体系的知识的学习,确定每个知识单元的核心知识点,结合大量案例、运用典型的项目来完成教学过程。
二、结合大赛的需求导向
组织学生参加各种java方面的大赛,来巩固我们的学习成果,增强学生学习的信心。比如,由全国高等学校计算机教育研究会和教育部高等学校计算机类专业教学指导委员会主办的甲骨文杯大赛、由工业和信息化部人才交流中心组织的蓝桥杯软件设计大赛java语言组、由教育部和商务部组织的中国大学生服务外包创新创业大赛等,通过比赛来验证学生的实力,增强学生的自信心,也是对老师工作的肯定。
三、校企结合,关注最新的技术
完成java语言技术的学习必须是一个动态更新的过程,为了弱化甚至解决企业需求和高校教学内容的差异,我们必须时时关心企业的需求,通过与企业中使用java进行应用程序开发的程序员沟通;通过登录招聘网站了解企业对java语言的需求;通过引进公司技术人员开展相关的讲座等来获取java程序设计技术方面的最新动态,根据所总结的企业需求来调整教学的内容,对开发工具和运行环境等做局部的调整。
总之,java语言程序设计从课程体系上对课程内容进行了调整,作为一个完整的课程体系有很多需要完善和发展的地方。特别是随着新理论和新技术的不断涌现,给java的教学带来了新的挑战。如何组织java语言内容、如何将这些内容更好地传授给学生、如何让学生在学习过程中有信心、如何解决学校教育的技术滞后性问题,是每一个老师都需要认真研究的问题。
作者简介:刘灵敏,1983年出生,女,湖北咸宁人,教师,硕士,研究方向:计算机软件开发、嵌入式系统开发。
5.java程序设计教学大纲 篇五
?在Java程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持。本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观。读完本文以后,用户应该能够编写简单的多线程程序。
??为什么会排队等待?
??下面的这个简单的 Java 程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性地移动。此外,因为所需的资源 ― 打印机、磁盘、数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含明显的等待时间。因此,程序在访问数据库之前必须等待打印机完成打印文件的任务,等等。如果您正在等待程序的完成,则这是对计算资源和您的时间的一种拙劣使用。改进此程序的一种方法是使它成为多线程的。
??四项不相关的任务
class myclass {
static public void main(String args[]) {
print_a_file();
manipulate_another_file();
access_database();
draw_picture_on_screen();
}
}
??在本例中,每项任务在开始之前必须等待前一项任务完成,即使所涉及的任务毫不相关也是这样。但是,在现实生活中,我们经常使用多线程模型。我们在处理某些任务的同时也可以让孩子、配偶和父母完成别的任务。例如,我在写信的同时可能打发我的儿子去邮局买邮票。用软件术语来说,这称为多个控制(或执行)线程。
??可以用两种不同的方法来获得多个控制线程:
??☆ 多个进程
??在大多数操作系统中都可以创建多个进程。当一个程序启动时,它可以为即将开始的每项任务创建一个进程,并允许它们同时运行。当一个程序因等待网络访问或用户输入而被阻塞时,另一个程序还可以运行,这样就增加了资源利用率。但是,按照这种方式创建每个进程要付出一定的代价:设置一个进程要占用相当一部分处理器时间和内存资源。而且,大多数操作系统不允许进程访问其他进程的内存空间。因此,进程间的通信很不方便,并且也不会将它自己提供给容易的编程模型。
??☆ 线程
??线程也称为轻型进程 (LWP)。因为线程只能在单个进程的作用域内活动,所以创建线程比创建进程要廉价得多。这样,因为线程允许协作和数据交换,并且在计算资源方面非常廉价,所以线程比进程更可取。线程需要操作系统的支持,因此不是所有的机器都提供线程。Java 编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,这样就对线程提供了强健的支持。
??使用 Java 编程语言实现线程
??Java 编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的。尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握。要记住的一件重要的事情是 main() 函数也是一个线程,并可用来做有用的工作。程序员只有在需要多个线程时才需要创建新的线程。
??Thread 类
??Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员必须覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用 Thread 的 start() 函数,该函数再调用 run()。下面的代码说明了它的用法:
??创建两个新线程
importjava.util.*;
class TimePrinter extends Thread {
int pauseTime;
String name;
public TimePrinter(int x, String n) {
pauseTime = x;
name = n;
}
public void run() {
while(true) {
try {
System.out.println(name + “:” + new
Date(System.currentTimeMillis()));
Thread.sleep(pauseTime);
} catch(Exception e) {
System.out.println(e);
}
}
}
static public void main(String args[]) {
TimePrinter tp1 = new TimePrinter(1000, “Fast Guy”);
tp1.start();
TimePrinter tp2 = new TimePrinter(3000, “Slow Guy”);
tp2.start();
}
}
??在本例中,我们可以看到一个简单的程序,它按两个不同的时间间隔(1 秒和 3 秒)在屏幕上显示当前时间。这是通过创建两个新线程来完成的,包括 main() 共三个线程。但是,因为有时要作为线程运行的类可能已经是某个类层次的一部分,所以就不能再按这种机制创建线程。虽然在同一个类中可以实现任意数量的接口,但 Java 编程语言只允许一个类有一个父类。同时,某些程序员避免从 Thread 类导出,因为它强加了类层次。对于这种情况,就要 runnable 接口。
??Runnable 接口
??此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有不同。我们可以用 runnable 接口改写前一个示例。(不同的部分用黑体表示。)
??创建两个新线程而不强加类层次
import java.util.*;
class TimePrinterimplements Runnable{
int pauseTime;
String name;
public TimePrinter(int x, String n) {
pauseTime = x;
name = n;
}
public void run() {
while(true) {
try {
System.out.println(name + “:” + new
Date(System.currentTimeMillis()));
Thread.sleep(pauseTime);
} catch(Exception e) {
System.out.println(e);
}
}
}
static public void main(String args[]) {
Thread t1=new Thread(new TimePrinter(1000, “Fast Guy”));
t1.start();
Thread t2=new Thread(new TimePrinter(3000, “Slow Guy”));
t2.start();
}
}
??请注意,当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。许多程序员更喜欢 runnable 接口,因为从 Thread 类继承会强加类层次。
??synchronized 关键字
??到目前为止,我们看到的示例都只是以非常简单的方式来利用线程。只有最小的数据流,而且不会出现两个线程访问同一个对象的情况。但是,在大多数有用的程序中,线程之间通常有信息流。试考虑一个金融应用程序,它有一个 Account 对象,如下例中所示:
??一个银行中的多项活动
public class Account {
String holderName;
float amount;
public Account(String name, float amt) {
holderName = name;
amount = amt;
}
public void deposit(float amt) {
amount += amt;
}
public void withdraw(float amt) {
amount -= amt;
}
public float checkBalance() {
return amount;
}
}
??在此代码样例中潜伏着一个错误。如果此类用于单线程应用程序,不会有任何问题。但是,在多线程应用程序的情况中,不同的线程就有可能同时访问同一个 Account 对象,比如说一个联合帐户的所有者在不同的 ATM 上同时进行访问,
在这种情况下,存入和支出就可能以这样的方式发生:一个事务被另一个事务覆盖。这种情况将是灾难性的。但是,Java 编程语言提供了一种简单的机制来防止发生这种覆盖。每个对象在运行时都有一个关联的锁。这个锁可通过为方法添加关键字 synchronized 来获得。这样,修订过的 Account 对象(如下所示)将不会遭受像数据损坏这样的错误:
??对一个银行中的多项活动进行同步处理
public class Account {
String holderName;
float amount;
public Account(String name, float amt) {
holderName = name;
amount = amt;
}
publicsynchronizedvoid deposit(float amt) {
amount += amt;
}
publicsynchronizedvoid withdraw(float amt) {
amount -= amt;
}
public float checkBalance() {
return amount;
}
}
??deposit() 和 withdraw() 函数都需要这个锁来进行操作,所以当一个函数运行时,另一个函数就被阻塞。请注意, checkBalance() 未作更改,它严格是一个读函数。因为 checkBalance() 未作同步处理,所以任何其他方法都不会阻塞它,它也不会阻塞任何其他方法,不管那些方法是否进行了同步处理。
??Java 编程语言中的高级多线程支持
??线程组
??线程是被个别创建的,但可以将它们归类到线程组中,以便于调试和监视。只能在创建线程的同时将它与一个线程组相关联。在使用大量线程的程序中,使用线程组组织线程可能很有帮助。可以将它们看作是计算机上的目录和文件结构。
??线程间发信
??当线程在继续执行前需要等待一个条件时,仅有 synchronized 关键字是不够的。虽然 synchronized 关键字阻止并发更新一个对象,但它没有实现线程间发信。Object 类为此提供了三个函数:wait()、notify() 和 notifyAll()。以全球气候预测程序为例。这些程序通过将地球分为许多单元,在每个循环中,每个单元的计算都是隔离进行的,直到这些值趋于稳定,然后相邻单元之间就会交换一些数据。所以,从本质上讲,在每个循环中各个线程都必须等待所有线程完成各自的任务以后才能进入下一个循环。这个模型称为 屏蔽同步,下例说明了这个模型:
??屏蔽同步
public class BSync {
int totalThreads;
int currentThreads;
public BSync(int x) {
totalThreads = x;
currentThreads = 0;
}
public synchronized void waitForAll() {
currentThreads++;
if(currentThreads < totalThreads) {
try {
wait();
} catch (Exception e) {}
}
else {
currentThreads = 0;
notifyAll();
}
}
}
??当对一个线程调用 wait() 时,该线程就被有效阻塞,只到另一个线程对同一个对象调用 notify() 或 notifyAll() 为止。因此,在前一个示例中,不同的线程在完成它们的工作以后将调用 waitForAll() 函数,最后一个线程将触发 notifyAll() 函数,该函数将释放所有的线程。第三个函数 notify() 只通知一个正在等待的线程,当对每次只能由一个线程使用的资源进行访问限制时,这个函数很有用。但是,不可能预知哪个线程会获得这个通知,因为这取决于 Java 虚拟机 (JVM) 调度算法。
??将 CPU 让给另一个线程
??当线程放弃某个稀有的资源(如数据库连接或网络端口)时,它可能调用 yield() 函数临时降低自己的优先级,以便某个其他线程能够运行。
??守护线程
??有两类线程:用户线程和守护线程。用户线程是那些完成有用工作的线程。 守护线程是那些仅提供辅助功能的线程。Thread 类提供了 setDaemon() 函数。Java 程序将运行到所有用户线程终止,然后它将破坏所有的守护线程。在 Java 虚拟机 (JVM) 中,即使在 main 结束以后,如果另一个用户线程仍在运行,则程序仍然可以继续运行。
??避免不提倡使用的方法
??不提倡使用的方法是为支持向后兼容性而保留的那些方法,它们在以后的版本中可能出现,也可能不出现。Java 多线程支持在版本 1.1 和版本 1.2 中做了重大修订,stop()、suspend() 和 resume() 函数已不提倡使用。这些函数在 JVM 中可能引入微妙的错误。虽然函数名可能听起来很诱人,但请抵制诱惑不要使用它们。
??调试线程化的程序
??在线程化的程序中,可能发生的某些常见而讨厌的情况是死锁、活锁、内存损坏和资源耗尽。
??死锁
??死锁可能是多线程程序最常见的问题。当一个线程需要一个资源而另一个线程持有该资源的锁时,就会发生死锁。这种情况通常很难检测。但是,解决方案却相当好:在所有的线程中按相同的次序获取所有资源锁。例如,如果有四个资源 ―A、B、C 和 D ― 并且一个线程可能要获取四个资源中任何一个资源的锁,则请确保在获取对 B 的锁之前首先获取对 A 的锁,依此类推。如果“线程 1”希望获取对 B 和 C 的锁,而“线程 2”获取了 A、C 和 D 的锁,则这一技术可能导致阻塞,但它永远不会在这四个锁上造成死锁。
??活锁
??当一个线程忙于接受新任务以致它永远没有机会完成任何任务时,就会发生活锁。这个线程最终将超出缓冲区并导致程序崩溃。试想一个秘书需要录入一封信,但她一直在忙于接电话,所以这封信永远不会被录入。
??内存损坏
??如果明智地使用 synchronized 关键字,则完全可以避免内存错误这种气死人的问题。
??资源耗尽
??某些系统资源是有限的,如文件描述符。多线程程序可能耗尽资源,因为每个线程都可能希望有一个这样的资源。如果线程数相当大,或者某个资源的侯选线程数远远超过了可用的资源数,则最好使用 资源池。一个最好的示例是数据库连接池。只要线程需要使用一个数据库连接,它就从池中取出一个,使用以后再将它返回池中。资源池也称为 资源库。
??调试大量的线程
??有时一个程序因为有大量的线程在运行而极难调试。在这种情况下,下面的这个类可能会派上用场:
public class Probe extends Thread {
public Probe() {}
public void run() {
while(true) {
Thread[] x = new Thread[100];
Thread.enumerate(x);
for(int i=0; i<100; i++) {
Thread t = x[i];
if(t == null)
break;
else
System.out.println(t.getName() + “ ” + t.getPriority()
+ “ ” + t.isAlive() + “ ” + t.isDaemon());
}
}
}
}
??限制线程优先级和调度
??Java 线程模型涉及可以动态更改的线程优先级。本质上,线程的优先级是从 1 到 10 之间的一个数字,数字越大表明任务越紧急。JVM 标准首先调用优先级较高的线程,然后才调用优先级较低的线程。但是,该标准对具有相同优先级的线程的处理是随机的。如何处理这些线程取决于基层的操作系统策略。在某些情况下,优先级相同的线程分时运行;在另一些情况下,线程将一直运行到结束。请记住,Java 支持 10 个优先级,基层操作系统支持的优先级可能要少得多,这样会造成一些混乱。因此,只能将优先级作为一种很粗略的工具使用。最后的控制可以通过明智地使用 yield() 函数来完成。通常情况下,请不要依靠线程优先级来控制线程的状态。
??小结
??本文说明了在 Java 程序中如何使用线程。像是否应该使用线程这样的更重要的问题在很大程序上取决于手头的应用程序。决定是否在应用程序中使用多线程的一种方法是,估计可以并行运行的代码量。并记住以下几点:
??☆ 使用多线程不会增加 CPU 的能力。但是如果使用 JVM 的本地线程实现,则不同的线程可以在不同的处理器上同时运行(在多 CPU 的机器中),从而使多 CPU 机器得到充分利用。
??☆ 如果应用程序是计算密集型的,并受 CPU 功能的制约,则只有多 CPU 机器能够从更多的线程中受益。
??☆ 当应用程序必须等待缓慢的资源(如网络连接或数据库连接)时,或者当应用程序是非交互式的时,多线程通常是有利的。
??☆ 基于 Internet 的软件有必要是多线程的;否则,用户将感觉应用程序反映迟钝。例如,当开发要支持大量客户机的服务器时,多线程可以使编程较为容易。在这种情况下,每个线程可以为不同的客户或客户组服务,从而缩短了响应时间。
??某些程序员可能在 C 和其他语言中使用过线程,在那些语言中对线程没有语言支持。这些程序员可能通常都被搞得对线程失去了信心。
6.《Java程序设计》课程总结. 篇六
1、学期授课计划是否符合教学大纲要求 符合。
2、教学内容及进度是否与学期授课计划有出入,是何原因 无出入,完成规定的学习内容。
3、作业计划、阶段测试计划、期末考试完成情况如何
顺利完成预定的作业计划及阶段测试计划。顺利完成期末考试。
4、总评成绩结果分析
因学生素质较高,在课堂表现、课程作品和答辩中整体表现良好,因此总评成绩整体较高,85分以上人数占24%,无不及格学生。
5、对本课程教学及存在问题有何改进意见和设想
在今后的教学过程中应该加强“项目导向,任务驱动”的教学手段的运用,同时应采取各种方法加强与学生的互动。在本课程中,我采用了多媒体网络教室、MindMapper、飞秋等软件辅助教学,以学生为主体,以项目为主线,学生的参与性非常高,效果很好,在今后的课程中我会继续加以实践和总结。
7.java程序设计教学大纲 篇七
会议中, 针对现今占了高等教育半壁江山的高等职业教育也提出大力发展的口号:坚持以就业为目标, 整合教育资源, 改进教学方式, 着力培养学生就业创业能力。
这次会议的精神给我们很大触动, 更高的要求给我们提供了更为明确的方向。作为高职教育体系中最为重要的课程教学环节成为了教学改革的“先锋部队”, 作为信息类课程——Java语言程序设计课程的授课教师, 我对深化教学体制改革、创新教育教学工作有了更深刻的思考和更实际的行动。
具体表现在以下方面:
1、进一步提升学生在课堂中的主
“体”地位, 突出教师的主“导”地位, 从真正意义上实现“教、学、做”一体化。在课程教学中形而上学地谈论高等职业教育中的“理论精、实践多”, 永远显得虚无缥缈, 与实际相差较远。真正意义上实现“教、学、做”一体化不应该仅仅成为一句口号, 而应该体现在具体的课程教学的分分钟里。为了能够更好地体现对学生能力的培养, 在课堂上我坚持以教材为牵引, 以案例为主体, 以实践为重心, 以培养学生能力为目标, 在一个实际案例中穿插入各个知识点, 不仅让学生可以真正掌握知识, 各个小项目教学法也让学生对于课程的理解更加深刻, 将知识最大限度地转换为能力。
抛却教师对课件的依赖性, 对教师自身提出更高的要求, 使用“记事本”做电子黑板, 一堂课下来, 从空白的文档, 逐步完善内容到完整的知识体系形成, 再辅以Java面向对象语言中常用的API文档的展示、传统教学模式——黑板的应用等等多种教学媒体交相呼应, 不仅有利于学生作记录, 同时学生的思路也一直在跟着教师的思路走, 这样的教学效果较之以往产生了明显的积极作用, 从而让我发现, 在信息技术类课程的教学中, PPT的使用较之“电子黑板”, 有一定的不足之处。
“记事本”中的内容精简、实用, 重点突出, 在讲课过程中不断穿插案例, 而案例的内容由浅入深, 由小到大, 由课堂到生活, 逐层递进, 体现实用型价值。授课的思想以抛出案例题目——分析案例内容——师生共同设计——改进程序缺失——学生自行设计的思想贯穿始终, 培养学生的编程思想和分析问题、解决问题的能力。一段时间下来, 学生真的可以抛却课本, 只凭课堂记忆和课后复习, 随堂做出具体的实训题目, 这对于学生以后走进企业有很大好处。
2、课程教学中突出重点, 分散难
点, 树立学生的编程思想, 塑造学生的专业素质。在重点和难点的把握上, 我们不再直接告知学生什么是重点和难点, 加重学生的畏难情绪。而是另辟蹊径, 将各个分散的实训一、实训二, …一一设计, 最终再整合成大的实训项目, 并辅以必要的程序相关的注释, 深入浅出地将思想渗透给学生。为了能够将难点分散, 采取先设置实例需求, 师生共同分析, 将大实例项目拆分成若干个子程序块, 即各个“点”, 之后各个击破, 这时学生看到的就是各个具体的学过的“点”, 最终再合成整体实例。这样学生不但了解了知识的具体应用领域, 也通过分析掌握了知识“点”与“点”间的联带关系, 能寻踪溯源, 真正锻炼学生的实际能力。
3、考试形式的改变, 摒弃应试教
育, 突显能力培养。一张卷纸定分数, 是一直以来的应试传统做法。正因为这种应试的心理, 在高等院校中, 很多学生的学习方法是在考试前突击能及格即可, 不仅对知识的掌握无益, 学生也浪费了太多的时间, 学习质量更是无法提升, 更重要的是并没有达到培养学生能力的目的。深入思考后, 我们创新Java课程的考核形式, 平时加大对学生随堂小实训项目的考核, 在期末考试时不给学生任何题目, 不给任何范围, 以开卷的形式考核。这种方式让学生无法不在平时学习, 提高教学质量的同时, 也提升了学生的学习积极性, 营造了更好的学习氛围。而从学生的期末考试成绩的总体分析来看, 确有积极作用。
8.java程序设计教学大纲 篇八
关键词:Java语言程序设计;面向对象;教学改革
中图分类号:TP3 文献标识码:A
1 引言(Introduction)
《Java语言程序设计》是高职院校计算机类相关专业的一门应用性较强的专业核心课程之一,它主要是介绍Java相关知识,包含了Java语言基础、控制结构、数组、面向对象的程序设计、字符串处理、异常处理、输入输出处理、多线程、图形用户界面设计、数据库连接等内容。Java程序设计语言是一种面向对象跨平台应用的程序设计语言,具有较强的通用性、简单性、面向对象特性、健壮性、可移植特性,在当前全球云计算的专业环境下,Java具备了非常显著的优势和发展前景[1]。根Tiobe开发语言排行榜统计,Java是近十年来世界范围内流行最广泛的开发语言之一[2]。
当前许多高职院校都开设了《Java语言程序设计》这门课程,如果还是使用传统教学方法教授该门课程,已经无法满足时代要求,如何让学生在整个教学过程中更好地掌握好Java编程能力,不断提高学生的自我创新能力,是当前我们教师面前一项急需解决的关键问题。因此应做好《JAVA语言程序设计》教学改革让学生更好掌握并综合运用该门语言。
2 传统教学存在的问题(The problems of traditional
teaching)
2.1 教学组织形式过于单一
前许多高职院校对于《Java语言程序设计》课程的学习安排都是先理论教学然后经过一定时间后进行上机实验操作,理论教学在多媒体教室完成,而上机实验操作在机房完成。从这种上课的形式来说,具有一定的优点。上理论课的时候可以让教师及学生分别注重理论知识的内容,上机操作的同时不但可以提高同学动手能力,还可以对理论知识进行强化。可是在实际的教学过程中,理论课与上机实验课的安排时间间隔过长,导致做实验的时候,许多同学基本已经遗忘了理论知识,造成上机实验效果较差。
2.2 师资队伍结构不合理,教师缺乏软件开发实战经验
目前许多高职院校的师资队伍存在着一定的不合理,许多教师都是来自刚刚毕业的研究生,他们具有较高的本专业科研能力,通过一定时间的学习,对本学科教学也具有了一定的素质能力,但是他们却对软件开发实战经验缺乏,而《JAVA语言程序设计》这门课程要求较强动手能力,要求具备一定的项目实战能力。如果缺乏这一点,那么教师在指导学生的上机实验教学方面,就会很难完成应用型人才实践教学要求[3]。
2.3 部分学生目标不明确,积极性不高
在整个《Java语言程序设计》学习过程中,发现部分学生对于该门课程的学习积极性不高,态度不明确。主要是由以下几个原因造成,一是《Java语言程序设计》课程相对其他课程来说,学习比较枯燥。Java语言学习没有捷径,只能一步一个脚印,掌握一定理论知识才能把实验做好,学习过程非常辛苦,部分学生忍受不了这种辛苦,不能端正态度,学习积极性急速下降。二是学生对Java语言学习认识欠缺。部分学生从本质上对Java语言学习认识不够,他们把该门课程当成为一门普通课程来看待,上课的时候认真程度不够,下课后又缺乏上机练习,经常抱着一种得过且过的态度,只要期末考试能通过就行。造成部分同学在上机时写不出简单的Java代码,即使能写出一些简单代码,但是花费时间过长。三是就业压力太大,现在许多高校都又计算机类专业,就业形势越来越严峻,是造成学生积极性不高的客观因素之一。
3 课程教学改革(The teaching reform of the course)
3.1 采用全机房教学形式,不断提高学生动手能力
将传统的教学形式多媒体教室+机房,改为全部在机房上课,传统的教学形式导致教师在上面讲,而学生只是在机械
性的听,不能让学生很好的掌握学习内容,教学效果较差。根据《Java语言程序设计》课程特点,讲“以教为主”的教学理念转变为“以学习者为主”的教学理念,去打破传统的理论、实验课的硬性划分。这种教学形式提供了实验、理论课一体的教学环境,保证了每个学生都有一台电脑,为学生的学习提供了较好环境,因为基本上教师每次模块任务教学内容都包含了理论与实验两部分。对于每次的教学重点难点,教师都辅以一些例子来讲授,教师在讲授理论部分后,可以马上让学生在机房进行相对应知识点的上机操作练习,通过这样的教学方式,可以不断巩固学生的理论知识,同时不但提高学生的动手能力。
3.2 培养学生积极性为出发点。
在具体教学过程中,教师可以抓住学生的兴趣点予以引导,比如许多学生喜欢游戏,那么我们教师可以从一些简单的游戏编程着手,进行详细讲解,结合知识点进行程序设计,不断调动学生学习积极性。
3.3 项目教学法
学生在整个的学习过程中是一个不断创造的过程[4],项目教学法是当前一种新型的教学方法,它要求学生和教师共同参与,学生在教师的全程指导下去处理一个完整的项目过程,所有学生在这个过程中能够积极主动掌握教学计划内的知识,教师安排学习行为,让学生能不断解决项目中遇到的各种问题,不断激发学生学习积极性。教师可以督促学生按时完成学习任务,相互携手合作并保持良好协作关系,项目教学法真正做到了以学生为中心的一种教学方法。
3.4 师资队伍建设
教师在整个教学过程中承担着重要角色,是学生学习的引导者、激励者,教师应该在上课之外,不断加强自身学习,掌握Java领域的最新技术,并且可以利用假期到企业锻炼实践,学习IT企业软件开发的各种技术,不断提高自身的实战经验,才能培养出具有创新能力、综合技能的高素质人才。
4 结论(Conclusion)
《Java语言程序设计》课程教学改革是一项非常深远,意义重大的工作,它要求我们整个教育工作者去不断的探索,去对教学模式不断改进来适应新时代的需求。本文对《Java语言程序设计》课程教学改革提出了一些建设性问题,通过实践教学探索,学生在学习积极性、掌握Java编程能力都有较大程度提高。
参考文献(References)
[1] Java语言百度百科.http://baike.baidu.corn/.
[2] Tiobe百度百科.http://baike.Baidu.com/view/4373007.Htm.
[3] 陈涛.《Java程序设计》教学思想与方法的探讨[J].电脑知识
与技术,2011(4): 2446-2447.
[4] 钟锡珍.Java程序设计课程教学方法的探讨[J].科技资讯,2011
(28):220.
作者简介:
李茂民(1983-),男,硕士,助教.研究领域:高职教育,计算
9.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发布,标志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系统记事本工具基本功能,并且能够创 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面
(1)用户名和密码输入文本框,供已注册的用户输入用户名和密码。(2)登陆控件,在用户名和密码正确的前提下,进入软件主界面。
(3)注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。第一部分 菜单栏
(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。(2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。
(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。
(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。(5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。第二部分 笔记本排列区
显示用户创建的所有笔记本。第三部分 笔记显示排列区
此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。
第四部分 笔记编辑区
此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。
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“));//设置快捷键 ”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);
} 设为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、笔记本登陆、用户注册
3、菜单栏 a.总菜单
b.新建菜单
c.删除菜单
d.显示菜单
e.“菜单”菜单
f.帮助 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.程序结构 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){
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 deleteFile(path+”/“+list[i].getName()); return(folder.delete());} } (2)User.java package common;/** * 处理用户属性 * 为用户创建自己的专有途径 * 如果有了则不创建 */ 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); 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+”rn“); 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(); } } 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);// } } 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; /**************笔记本类型部分声明结束*****************/ public LeftPanle(JPanel panel,MainFrame mainFrame){ this.mainFrame=mainFrame;this.panel=panel;//处理第一片***11111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮 //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 member[i]=new JLabel(”“); member[i].addMouseListener(this);} allBookjsp=new JScrollPane(allBookPanel);//滚动 firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局 firstPanel.add(allBook,”North“);firstPanel.add(allBookjsp); //处理第二片***222222 //仅有一个按钮 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中的笔记本,在新建或删除笔记本是需要刷新 并附带刷新右边两个Panel public void update_Left_view(){ book=new File(mainFrame.getUser_path()); book_name=book.list(); if(book.exists()) { for(int i=0;i { member[i].setText(”“); member[i].setIcon(null); member[i].removeMouseListener(this); } for(int i=0;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 { if(e.getComponent().equals(member[i])) { jl=(JLabel)e.getSource(); jl.setForeground(Color.red); } else { member[i].setForeground(Color.black); // // // // } } //保存当前笔记本的路径 如...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){ //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 //存放路径 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); } 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;} (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_menu.add(newNote_item[i]);for(int i=0;i deliteNote_menu.add(delete_item[i]);for(int i=0;i show_menu.add(show_item[i]);for(int i=0;i help_menu.add(help_item[i]);for(int i=0;i { menu_menu.add(menu_item[i]); if(i==0||i==2)//添加分隔线 将导入和导出框起来 menu_menu.addSeparator();} //添加事件监听 for(int i=0;i newNote_item[i].addActionListener(this); for(int i=0;i delete_item[i].addActionListener(this); for(int i=0;i show_item[i].addActionListener(this); for(int i=0;i help_item[i].addActionListener(this); for(int i=0;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; } 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(); //将笔记本路径设为新建笔记本的路径 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 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 { 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; //鼠标右击部分 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 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); 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 items[j].setText(”“); items[j].setArmed(false); items[j].removeMouseListener(this);//避免某个笔记被删除之后还可以被点的情况 } for(int i=0;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); 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 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 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 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();//将当前笔记的途径 存到辅助路径中 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; 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); 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(); }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); 【java程序设计教学大纲】推荐阅读: 《Java程序设计基础》教学总结06-25 java程序员招聘12-06 JAVA程序员笔试例题08-13 JAVA程序员笔试题目08-14 java程序员求职简历09-03 JAVA程序员面试经验11-05 java程序员职业规划06-22 《JAVA程序员面试32问》12-08 转行Java程序员应该具备哪些知识08-28 教学大纲c程序设计08-23