代码编辑器的java实现.docx
《代码编辑器的java实现.docx》由会员分享,可在线阅读,更多相关《代码编辑器的java实现.docx(19页珍藏版)》请在冰豆网上搜索。
代码编辑器的java实现
代码编辑器的java实现
摘要
如果我们把不同的程序开发人员比作三国演义中的各路诸侯大将的话,那么代码编辑器绝对可以称之我们手中的神兵利器。
对于每个程序猿来说,内心的深处都想有一把自己的“青龙偃月刀”和属于自己的一个代码编辑器。
我也有这个想法,我也想自己写一个代码编辑器来满足我的内心深处。
所以这次java的课程作业我选择了这个题目!
关键词:
Java;代码编辑器;关键字变色;编译和运行
前言
通过一学期的Java学习,我对Java的理论知识有了一些了解。
但是,只有理论联系实际才能更好的掌握理论,所以这次Java课程设计我选择了Java程序编辑器这个课题,希望可以锻炼自己的动手能力。
我上交给老师您的代码是我参考的网上的一个牛人写的代码,并在他的代码上进行了功能的增加,至于我增加了多少功能,我会论文的附录中给出详细的对比。
1.软件的定义
编写一个界面像Windows系统的记事本的代码编辑器,功能比记事本更强大(针对某一方面)具备以下功能:
∙打开、保存文件功能;
∙能够识别Java中的关键字并能将关键字以高亮的形式显示出来;
∙能够批量的删除代码中的注释;
∙能通过按下按钮调用DOS窗口;
∙能编译和运行Java程序;
∙能够检查括号是否匹配。
2.开发环境
IDE:
eclipse
JDK:
jdk-7u45-windows-x64
OS:
Windows7—X64
3.代码的详细说明
主界面:
包中的文件,主界面就是一个Frame,然后在上面加上一个菜单栏,一个工具栏和两个Panel,一个panel里面放着JTextPane,另一个里面放着一个几个JLable,用来显示当前鼠标是在第几行,第几列,该Panel放在Frame最下面。
菜单栏:
总共有3个JMenu,一个是文件,一个是编辑,一个是帮助。
3个菜单里面各有下拉菜单。
文件JMenu有2个JMenuItem分别为openMenuItem、ExitMenuItem,编辑JMenu有2个JMenuItem分别为cutMentItem、pasteMEnuItem,帮助JMenu有一个JMenuItem是aboutMenuItem用来显示代码编辑器的相关的信息。
工具栏:
从左到右分别为打开文件、新建文件,保存、批量去除注释、调用DOS窗口、编译执行和运行Java程序、括号的匹配。
下面详细的介绍每个工具栏的按钮
打开文件按钮:
此时选择打开窗口可以看到的程序。
代码的实现:
创建一个BufferedReader类型的br来读取从打开文件的对话框中选择的文件,读取到Panel1中的jTextPane中。
新建文件按钮:
说明:
如果JTextPane中有字符的话(即代码编辑区有字),先让用户保存,再新建一个新的JTextPane(但是我在实现的时候遇到了问题了,网上的文本编辑器大部分是用JTextArea来实现的,而不是JTextpane来实现的,在JTextPane中没有JTextArea里面的对应的方法,而且我在网上没有找到了好的解决方案,所以我的做法是把按下新建按钮后把当前JTextPane的清空。
保存按钮:
代码的实现
定义一个BufferedWriter类型的bw和FileWriter类型的fw通过bw把字符写到fw对应的文件中去。
对应代码中的fileSava()函数和fileSavaAs()函数。
批量去除注释
代码的实现:
是通过将当前的文件保存到默认的路径中去,先将代码中的注释去除,通过将去除到注释的代码保存当前文件的系统目录下,再用打开文件操作来把去除注释的代码重新读入JTextPane中去。
在文件的保存路径下,会产生一个“文件名”+“.bak”的文件(该文件为没有注释的文件),这样可以用来批量的删除注释,并保存在对应文件名的.bak文件中
DOS窗口的调用
通过组合使用Java提供的Runtime类和Process类的方法实现在java中调用DOS命令,因为我自己在编写java的代码的时候,写好了要按win+R按键时还要出入cmd命令,我感觉特别的繁琐,于是我写了这个功能,通过一个按钮就能调用出DOS窗口,方便了用户的使用。
对应于文件。
编译和运行
对于刚写的代码要进行编译和运行的,我的策略是通过先对文件进行保存,就在这个时候来获取到保存文件的路径以及文件名等信息。
然后就是通过通过组合使用Java提供的Runtime类和Process类的方法实现在java中调用DOS命令javac—文件名,编译成功后就会自动的运行,会弹出一个Frame来显示指定的屏幕输出,其实这个的实现是通过用户本地的JDK来实现的,弹出的Frame是把DOS窗口的内容读入进去在显示出来!
括号的匹配
我们在写代码的时候经常会出现多一个多括号少一个括号,有时候编译器可能会给出一条我们不认识的错误,这个时候我们会花费大量的时间来检查错误,所以我就想我的代码编辑器中要有这个功能。
在代码的实现上是通过定义一个栈将是括号的左边加入栈,如果扫描到括号的右面就把对应的括号出栈,到最后如果栈空,则总个括号匹配成功,如果栈不空则括号匹配不成功,并用红色将其标出。
课程设计总结
本次课程设计,让我获益匪浅,不仅更深入的了解Java这门学科,更使自己有了继续探索的兴趣。
对于个人而言,在程序设计的过程中,我深感“认真严谨”这个词的重要性,一点点小的马虎,便会导致整个程序不能正常运行。
在今后的学习中,我定将“认真严谨时刻作为自的谨言。
与此同时,本小组成员的互帮互助,让我体会到了团结的力量,而更让人难以忘怀的是在热烈讨论问题时,那激情横溢的场面。
总之,此次课程设计在我的学生生涯中启上了至关重要的作用。
最后,真诚的感谢汪世元和我们机器人实验室的学长和学姐们的帮助。
选题的时候,我一开始也不知道要写什么好,想了好久后决定做一个代码编辑器,因为我们平常我们在用代码编辑器的时候,经常觉得代码的编辑器没有按照自己的习惯,觉得很变扭,再给加上觉得能做出一个代码编辑器很牛,也想在自己的大学里面能做出一个拿的出手的小程序,在同学们之间能炫耀一下,在网上也看到很多网友做了很多不错的小程序,然后放到自己的博客空间上,然后会有很多人在下面评价说,楼主好牛!
为了满足我自己的小的虚荣心,我就选择了一个比较难的(我个人认为的)的代码编辑器。
在编写代码编辑器的过程中,我学到了很多东西,由于这部分老师上课讲的不多,只能靠自己的从网上一点一点的自学,一开始遇到了很多困难,很多东西都看不懂,而且也没有人跟你讲。
我有一段时间萌发了换个简单点的题目,但是后来想做一个在同学中拿的出手的小程序,于是我克服了困难。
下面我来讲下我在编写程序时遇到的问题,开始我上网看了很多文本编辑器,它们大部分是用jTextArea来实现的,而且它们都没有实现关键字的变色,后来为了实现关键字变色的这个难题,我上网找了很久,就找到了一个人用java实现了,他使用的是JTextPane并非我们在网上常见的jTextArea,后来查阅了很多资料后才得知jTextArea是什么没有实现关键字变色的(在JtextArea中没有办法实现一部分字体以特殊的颜色显示出来),后来我就采用了JTextPane。
就在我采用了JTextPane继续往下写的时候遇到了困难第一个困难是我JTextPane没有提供像JTextArea中获取行号和列号的对应函数。
为了显示行号与列号,我又上网查资料,自己写了getRow()和getColumn()函数来返回当前光标对应的行数和列数。
我的这个小程序在对文字的处理方面可能很不如很多的网上可以搜索到的文本编辑器,因为代码是我一个人写的,在加上期末考试的临近,时间越来越紧张,在加网上对JTextPane的资料少于JTextArea的,所以在这个地方我做的不是很好。
为了实现主要的功能我放弃了对一些常规的记事本的替换等操作。
我想了一下如果一个代码编辑器不能编辑那怎么能叫代码编辑器,后来我想到可以利用本机的JDK来做一个假的编译器,上面有编译和运行的按钮,但在实现是利用用户自己的本机安装JDK来编译源代码。
由于我个人的水平有限和时间有限,代码中肯定会有一些bug。
我会在后来的时间中将它修改好。
版权说明
交给老师的代码是依靠网上的一个人的代码为蓝本,也就是我的代码编辑器中关于关键字的变色的代码是从网上下的,我是在他的基础上进行了功能的增加,网上代码的下载地址为:
和网上的代码只有一个简单的变色功能,至于能编译和运行,显示行、列号,批量删除注释,调用DOS窗口,括号的匹配功能都是我自己实现的,下面给出图片对比
这个是网上下的代码的运行情况