




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行JAVA的编译与运行很少,不能更好的适应当前用户的要求。本设计所完成的文本编辑器功能是针对学习JAVA程序语言,因此我们利用JAVA程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构,还有链接JAVA虚拟机实现编译与运行。使用SUN公司的JAVA中的GUI作为开发技术,利用其提供的各种类与接口,首先建立系统应用原型。本文本编辑器的开发采用JDK60和ULTRAEDIT为开发工具,操作系统为WINDOWS98/WINDOWS2000/WINDOWSXP等。关键词面向对象程序设计,GUI,文本编辑器,编译,运行目录1前言12问题的提出及可行性研究221问题的提出及定义222可行性研究3221对现行文本编辑器的分析3222新文本编辑器的可行性研究分析33用户需求分析531用户调查532确定目标系统的功能54系统设计与开发环境641系统相关类的设计642开发语言及其开发环境10421开发语言概述10422JAVA开发环境JDK的介绍1243环境变量的设置13431环境变量的作用13432如何设置环境变量145关键技术和源代码的实现1651关键技术剖析1652源码分析176系统测试4261测试方案4262测试项目4263编辑器截图演示43致谢44参考文献451前言JAVA可以方便的开发GUI程序,在JAVA语言提供的GUI构建工具中,可以分为“组件(COMPONENT)”和“容器”(CONTAINER)两种。组件有按钮,标签,复选框,单选按钮,选择框,列表框,文本框,滚动条,画布,和菜单等;容器有程序的启动封面,窗体和对话框。本设计主要是通过AWT(抽象窗口化工具包)和SWING来实现功能的。本文本编辑器的设计,能打开,编辑和保存HTML,JAVA,CPP,TXT文件,能够在文件中进行查找和替换,而且支持JAVA源文件的编译与运行,前提是机器上已经安装了JAVA虚拟机并配置好了JAVA相关的环境变量。此文本编辑器是集代码编写,源代码编译和类运行于一体。2问题的提出及可行性研究21问题的提出及定义随着计算机技术的不断发展,文本编辑器成为大家必不可少的工具,但是不同的用户对文本编辑器有不同的功能需求,所以除了像OFFICE中的WORD还有去WPS等大众文本编辑器,还需要一些带有一定相关专业功能的文本编辑器,可以方便用户进行工作与开发。1、本设计就是针对JAVA初学者所开发的,集源代码编辑,编译,运行于一体的文本编辑器。2、根据此文本编辑器的的实际要求,本系统需要实现以下功能3、要求在运行该编辑器时,可以直接编辑默认的新建文件FILE,在左边的树中正在编辑的文件显示有FILE1;4、要求在文本编辑器的右边的文件文本域用于编辑文字和代码,右边中间的文字域时显示光标的行号,右边下面的文本域是显示编译和运行信息;5、要求在窗口顶部设有菜单栏,分别有FILE,OPTION,ADVANCE,EDIT,HELP;6、要求在菜单栏下面设有工具栏,分别有打开按钮,新建按钮,保存按钮,帮助按钮,推出按钮,编译按钮,运行按钮,复制按钮,剪切按钮,粘贴按钮;7、要求能新建,打开和保存文件;若是新建文件则将新建文件保存为NEWFILE1TXT,在编辑器左边树中正在编辑的文件显示为NEWFILE1TXT,右边的文件文本域所在的TAB标签上显示的也是NEWFILE1TXT。8、要求能够通过查找功能,在当前文件中查找字符串,在弹出的对话框中输入所要查找的字符串,点击确定开始查找,找到后显示高亮;9、要求能够连接本机的JAVA虚拟机,对源代码进行编译及编译后运行22可行性研究221对现行文本编辑器的分析市场上出现的和用户所使用的文本编辑器种类繁多,功能也是各式各样,其中有相当一部分是很优秀的。但是面向JAVA初学者的操作简单的,界面友好的,集源代码编辑,编译,运行于一体的编辑器并不多见。222新文本编辑器的可行性研究分析根据此文本编辑器的使用对象,新目标的提法不尽相同,例如1、提高工作效率和降低难度;2、提供新的编译与运行处理功能;新编辑器的目标确定后,就可以从以下三方面对能否实现新目标进行可行性分析(1)技术可行性面向对象是一种新兴的程序设计方法,或者说是一种新的程序设计规范PARADIGM,其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。许多程序开发工具,如JAVA、VISUALBASIC60、DELPHI等等,都支持面向对象的程序开发。这些技术目前已经成熟,被广泛应用与各个领域。运用GUI中的AWT和SWING以及相关的类完全可以实现所要求的功能。因此,其设计开发在技术上是可行的。(2)经济可行性经济可行性研究是对设计投入使用后带来的经济效益进行估计。本设计所消耗的物力与财力不多,关键是思想架构,设计成功后可在互联网上供用户下载。经济效益与经济投资是很少的,也达到收支平衡。(3)运行可行性系统设计并运行于当前流行的WINDOWS系列操作系统,具有WINDOWS传统的操作风格,仅要求系统带有JVMJAVA虚拟机。此文本编辑器操作简单,界面友好,用户可以立即使用。总之,系统具有较好的运行可行性。综上所述,开发一个专门的JAVA文本编辑器是可行的。3用户需求分析31用户调查经过详细的调研,并多次与初学JAVA潜在用户进行研讨后,首先加深了对JAVA文本管理器的的深刻了解,其次,充分熟悉JAVA源代码编辑,编译和运行。32确定目标系统的功能通过详细的用户调查,可以基本确定目标系统要达到的目标了。需求分析的任务是确定功能必须完成的工作,也就是对目标系统提出完整、准确、清晰、具体的要求。在经过多方了解和调查后,基本清楚了此文本编辑器的功能要求。必须完成的功能如下(1)文本新建功能;(2)文本打开功能;(3)文本保存功能;(4)字符串查询功能;(5)源文件编译功能;(6)代码运行功能。4系统设计与开发环境系统设计一般分为总体设计和详细设计。经过需求分析阶段的工作,已经清楚系统必须完成的工作,下面的工作就应该是决定“如何做”的问题。总体设计的基本目的就是“概括地说系统应该如何实现”。另一方面的主要工作是设计软件的结构,即确定系统都由哪些模块组成及模块之间的相互关系。41系统相关类的设计EDITORPACKSETLOCATRIONSETVISIBLESTARTSETFOCUSABLEADDKEYLISTRNERFRAMEADDIMPLCOMPONENTCOMP,OBJECTCONSTRAINTS,INTINDEX添加指定的子COMPONENTGETCONTENTPANE返回此窗体的CONTENTPANE对象SETLAYOUTLAYOUTMANAGERMANAGER设置LAYOUTMANAGERSETJMENUBARJMENUBARMENUBAR设置此窗体的菜单栏SETICONIMAGEIMAGEIMAGESETDEFAULTCLOSEOPERATIONINTOPERATION设置用户在此窗体上发起“CLOSE“时默认执行的操作设置此FRAME要显示在最小化图标中的图像REMOVECOMPONENTCOMP从该容器中移除指定组件图41EDITOR继承了JFRAME类JCOMPONETJTEXTCOMPONENTJMENUBARJOPTIONPANEJTOOLBARJTREEJPANELJFILECHOOSERJSPLITPANEABSTRATBUTTONJTABBEDPANEJSCROLLPANEJBUTTONJMENUITEMJMENUJTEXTAREA图42是本设计中用到的JCOMPONENT及其扩展类的总括。ACTIONLISTENERACTIONPERFORMEDACTIONEVENTE发生操作时调用ACT_STARTFLASHACTIONPERFORMEDACTIONEVENTE_STARTACT_STOPFLASHACTIONPERFORMEDACTIONEVENTE_STOPACT_TIMERACTIONPERFORMEDACTIONEVENTE_TIMEACT_COPYACTIONPERFORMEDACTIONEVENTE_JI9ACT_PASTEACTIONPERFORMEDACTIONEVENTE_JI11ACT_CUTACTIONPERFORMEDACTIONEVENTE_JI10图43本图显示复制,粘贴,剪贴,动画的显示停止,启动,暂停事件继承ACTIONLISTENER类JFILECHOOSERGETFILEVIEW返回当前的文件视图GETICONFILEF返回此文件或文件类型的图标,这取决于系统GETNAMEFILEF返回文件名GETSELECTEDFILE返回选中的文件SETCURRENTDIRECTORYFILEDIR设置当前目录SETDIALOGTITLESTRINGDIALOGTITLE设置显示在JFILECHOOSER窗口标题栏的字符串FILECHOOSERFILECHOOSERAPPROVESELECTIONCANCELSELECTION图44FILECHOOSE类继承了JFILECHOOSE类;此文件选择器能够打开和保存文件42开发语言及其开发环境421开发语言概述SUN公司在JAVA语言的白皮书中是这样定义JAVA的JAVA是一个简单的、面向对象的、分布的、健壮的、安全的、与平台无关的、可移植的、高性能的、多线程的,以及动态的解释型语言。JAVA是一种简单的语言。它用到的概念不多,而且多为程序员所熟悉。如果你是一名程序员,掌握JAVA对你来说是易如反掌的事。即使你没有学过任何编程语言,学习JAVA也要比学习C要容易的多。由于JAVA最初是为控制电子产品设计的,因此它必须简单明了。为了保证这种简单性,JAVA去掉了C中许多复杂的、冗余的、有二义性的概念,例如操作符重载、多继承、数据类型自动转换等。为了将程序员从复杂的内存管理的负担中解脱出来,同时也是为了减少错误,JAVA使用了自动内存垃圾收集机制,程序员只要在需要的时候申请即可,不需要释放,而由JAVA自己来收集、释放内存中的无用的块。JAVA是一种支持分布式操作的程序设计语言。使用JAVA提供的URL类,用户可以象访问本地文件一样访问网络上的对象,使用非常方便。在客户机/服务器的模式下,JAVA还可以将运算从服务器端分散到客户端,提高系统的效率,避免了服务器的瓶颈制约。JAVA的网络类库支持分布式的编程。SOCKET类提供可靠的流式网络的连接,支持TCP/IP协议。通过编写协议句柄,程序员还可以扩充JAVA支持的协议集合。JAVA提供非常有效的安全控制。由于JAVA应用于网络程序的开发,因而安全性变的至关重要。因为JAVA小程序需要下载到客户端解释执行,所以,如果没有安全控制,就会给一些网络黑客以可乘之机,这对用户来说是非常危险的。所幸的是,JAVA的安全机制可以有效的防止病毒程序的产生、下载程序对本地文件系统的破坏,以及网络黑客窃取密码和入侵。JAVA是一种非常健壮的语言。因为在JAVA中使用了以下手段自动内存垃圾收集机制。JAVA自动收集无用的内存单元,进而防止了由于内存泄漏导致的动态内存分配问题。完善的异常处理机制,既简化了错误处理任务和恢复,也增加了程序的可读性。JAVA具有非常好的平台无关性和可移植性。因为JAVA最初是为对电子产品编程而设计的,所以它具有完美的平台无关性。它使用一种与平台无关的代码字节码,而不是通常的特定机器上的机器码,由平台上的JAVA虚拟机中的JAVA解释器解释执行。JAVA虚拟机是免费的,在许多平台上都有。JAVA提供了良好的可移植性。使用JAVA作为编程语言,只要进行一次程序开发工作,所开发的程序不需要经过任何改动,便能在各种平台上运行。JAVA使用两种方法使JAVA的应用程序不依赖与具体的系统采用基于国际标准的数据类型。JAVA的原始数据类型在任何机器上都是一样的,例如整型总是32位,长整型总是64位等。JAVA是一种高性能的语言。“鱼与熊掌不可兼得”,通常,健壮性、安全性、平台无关性、可移植性等方面的提高总是要以牺牲性能为代价的。JAVA也不例外,JAVA的内存管理增加了运行时系统的复杂性,因为JAVA运行时系统必须内嵌一个内存管理模块;同样,JAVA程序的解释执行的效率也要低于直接执行编译后的源码的效率。但是JAVA采用了一些很好的措施来弥补这些性能上的差距生成高效的字节码。JAVA字节码的设计充分考虑了性能的因素,字节码的格式简单,解释器可以生成高效的机器码。提供了即时编译和嵌入C代码的可选措施。即时编译是指在运行时把字节码编译成机器码。422JAVA开发环境JDK的介绍在SUN公司推出JAVA语言的同时,也推出了JAVA的一系列开发工具,如JDK(JAVADEVELOPERSKIT)。JDK是可以从网上免费下载的JAVA开发工具集。随后,其它一些著名的公司也相继推出了自己的JAVA开发工具,例如MICROSOFT公司的VISUALJ,BORLAND公司的JBUILDER,IBM公司的VISUALAGEFORJAVA,SYNMENTAC的CAF等。本节中将简单的介绍一下SUN公司的JDK;至于MICROSOFT公司的VISUALJ,将是本书其它章节重点介绍的内容。JDK是SUN公司推出的JAVA开发工具集,由于SUN公司是JAVA语言的创始者和JAVA规范的制定者,所以JDK自然是最权威的JAVA开发工具。您写的JAVA程序是否符合JAVA语言规范的要求,用JDK提供的JAVA编译器一试便知。市场上其它公司的JAVA开发工具有的在某些地方并不完全遵从JAVA语言规范,例如MICROSOFT公司的VISUALJ,但是JDK却绝对和JAVA语言规范保持一致,而且每当有新的JAVA语言规范推出时,就会有相应的JDK同时推出。当前JDK已经推出了其最新版本JDK1643环境变量的设置431环境变量的作用JAVA程序能够顺利编译需要两个环境变量,一个是PATH(PATH),一个是CLASSPATH(CLASSPATH)。那么这两个环境变量代表什么呢或者说究竟在JAVA程序编译中有什么作用呢这就要涉及到WINDOWS的基本知识了。在WINDOWS环境中,每一条能用的指令都保存在硬盘的“某个角落”,比如说指令NOTEPAD(WINDOWS的记事本指令,在CWINNT目录下),那么在DOS命令提示符下直接输入NOTEPAD就可以打开记事本了。但是一旦我们把CWINNT目录下的NOTEPADEXE这个可执行文件移开(比如说我们现在把它“剪切”到D盘根目录下)我们再在DOS提示符下直接输入NOTEPAD时就无法再打开记事本了,但是我们在DOS下改变路径输入DNOTEPAD(或者先输入CDD在输入NOTEPAD也行)就可以打开记事本了。这就是说在我们直接输入NOTEPAD的时候,其实其默认路径就是CWINN。假设我们要运行一个JAVA程序(HELLOJAVA)就要先把它的CLASS文件移动到JAVA里的BIN目录下然后打开DOS,把路径改到JAVA的BIN目录下执行JAVAHELLOCLASS,一次无所谓但是每次都要这样去做未免太麻烦。还好WINDOWS提供了一个PATH环境变量,他的作用就是现在这个变量的值路径中去找,如果找到了要运行的EXE就运行,否则失败。如果我们把JAVA里的BIN目录这个路径赋给PATH那么下次我在运行JAVA这个命令的时候,即便是直接输入DOS也能够在PATH变量中找到JAVA的BIN目录下的JAVA指令了。“假设我们要运行一个JAVA程序(HELLOJAVA)就要先把它的CLASS文件移动到JAVA里的BIN目录下”,为什么要这样做呢因为我们在用到JAVAHELLOCLASS这条指令的时候,DOS不知道HELLOCLASS这个文件在哪里,他就先到当前目录中去找,如果找到就运行,否则失败。当然,如果说HELLOJAVA在D盘根目录下,你也可以用JAVADHELLOCLASS这条指令来运行,但是每次这样做也确实够麻烦。WINDOWS就提供了这样一个环境变量CLASSPATH,如果没有就应该新建一个。我们把D这个路径赋值给CLASSPATH,那么下次在运行JAVAHELLOJAVA的时候就先在当前目录中到,如果找到就运行,如果找不到就在CLASSPATH的值路径下去找,找到就运行,找不到就失败。以上阐述了PATH和CLASSPATH两个环境变量的作用,如果设置好了。JAVA的编译和运行就基本上没什么问题了。432如何设置环境变量WINDOWS下JAVA环境变量的设置祥解WINDOWS下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。JAVA_HOME指向的是JDK的安装路径,如XJDK_142,在这路径下你应该能够找到BIN、LIB等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX设置方法如下JAVA_HOMEXJDK_142PATH环境变量原来WINDOWS里面就有,你只需修改一下,使他指向JDK的BIN目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上JAVA_HOMEBIN注,如果你对DOS批处理不了解,你可能不明白引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成XJDK_142也是可以的;你可以打开一个控制台窗口,输入ECHOJAVA_HOME来看一下你的设置结果PATHJAVA_HOMEBINPATH同样,PATH是引用以前你设置的PATH环境变量,你照抄以前的值就行了。CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。CLASSPATHJAVA_HOMELIBTOOLSJAR。首先要注意的是最前面的“,这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的。为什么CLASSPATH后面指定了TOOLSJAR这个具体文件不指定行不行这个是由JAVA语言的IMPORT机制和JAR机制决定的。具体的设定方法WIN2KXP用户右键点击我的电脑属性高级环境变量,修改下面系统变量那个框里的值就行了。WIN9X用户修改AUTOEXECBAT文件,在其末尾加入SETJAVA_HOMEXJDK_142SETPATHJAVA_HOMEBINPATHSETCLASSPATHJAVA_HOMELIBTOOLSJAR5关键技术和源代码的实现51关键技术剖析JFRAME类的SETJMENUBAR的方法为窗口添加菜单栏JMENUBAR,JMENUBAR的ADD方法为菜单栏添加菜单JMENU,JMENU的ADD方法为菜单添加菜单项JMENUITEM,它们之间的关系是树形关系。需要为每个菜单项添加事件处理器,当单击菜单项时,触发事件。JTOOLBAR为工具栏,可以在工具栏中添加按钮或者标签。JBUTTON的SETTOOLTIPTEXT方法设置按钮的提示信息,当鼠标停留在按钮上若干时间后,会显示提示信息。分隔窗格JSPLITPANE类用于分隔两个组件,可以由用户交互的调整组件的大小。根据分隔条的方向,把JSPLITPANE分成有两种VERTICAL_SPLIT表示水平分隔条,HORIZONTAL_SPLIT表示垂直分隔条。SETDIVIDERLOCATION方法设置分隔条的坐标。JTREE类实现树结构,树中有多个节点,但是且只有一个根节点。通用的节点类型为DEFAULTMUTABLETREENODE,它的ADD方法为节点添加子节点。JTEXTAREA文本域显示文件内容,将它放置在JSCROLLPANE中,使其具备滚动条。SETCARECOLOR方法设置插入光标的颜色;ADDCARELISTENER方法为文本域设置光标事件处理器,当光标位置改变时触发该类事件;GETTEXT和SETTEXT方法获得和设置文本域的内容;SELECT方法高亮显示文本域中指定的文本;SETCARETPOSITIN方法获得光标在文本域中的位置;GETLINEOFOFFSET方法获得指定位置在文本域中的行号;GETLINESTARTOFFSET方法获取指定行的第一个字符在文本域中的位置;GETLINEENDOFFSET方法获取指定行的最后一个字符在文本去中的位置。JTABBEDPANE实现多页面的管理,每个页面有一个标签。ADDTAB方法添加页面;ADDCHANGELISTENER方法设置页面切换事件处理器;SETSELECTEDINDEX方法设置选择页面编号;GETSELECTENDINDEX方法获取被选择的页面的编号;SETTITLEAT方法设置指定页面标签;GETTITLEAT方法获取指定页面的标签。组件的ADDKEYLISTENER方法为组件注册键盘事件管理器,键盘事件管理器必须实现KEYLISTENER接口,或者继承KEYADAPTER,KEYPRESSED方法处理按键事件,参数类型为KEYEVENT,KEYEVENT的GETKEYCODE方法可以获得备按下的键的代码;ISCONTROLDOWN方法判断CTRL键是否被按下;ISALTDOWN方法判断ALT键是否被按下。JFILECHOOSE文件选择器能够打开和保存文件,提交选择时APPROVESELECTION方法被调用,取消选择时CANCELSELECTION方法被调用;GETCURRENTDIRECTORY方法获得文件选择器当前目录,GETSELECTEDFILE方法获得文件选择器选择的文件。JOPTIONPANE用于弹出标准的对话框,类型有很多种。SHOWCONFIRMDIALOG方法弹出确认信息对话框,要求用户确认或者取消;SHOWMESSAGEDIALOG方法弹出提示信息提示框;SHOWINPUTDIALOG方法弹出输入信息对话框,要求用户输入信息。在编译和运行JAVA程序时,需要调用本地的JAVA和JAVAC命令,通过RUNTIME的EXEC方法可以调用本地命令。52源码分析1EDITOR类/一个简单的文本编辑器,能够编辑HTML、JAVA、CPP、TXT文件,并支持JAVA的编译与运行/PUBLICCLASSEDITOREXTENDSJFRAME/菜单栏、菜单和菜单项/JMENUBARMENUBARNEWJMENUBARJMENUFILEMENUNEWJMENU“FILE“JMENUOPTIONMENUNEWJMENU“OPTION“JMENUADVANCEMENUNEWJMENU“ADVANCE“JMENUHELPMENUNEWJMENU“HELP“JMENUEDITMENUNEWJMENU“EDIT“JMENUITEMNEWMENUITEMNEWJMENUITEM“NEW“JMENUITEMOPENMENUITEMNEWJMENUITEM“OPEN“JMENUITEMSAVEMENUITEMNEWJMENUITEM“SAVE“JMENUITEMEXITMENUITEMNEWJMENUITEM“EXIT“JMENUITEMFINDMENUITEMNEWJMENUITEM“FIND“JMENUITEMFINDNEXTMENUITEMNEWJMENUITEM“FINDNEXT“JMENUITEMREPLACEMENUITEMNEWJMENUITEM“REPLACE“JMENUITEMCOMPILEMENUITEMNEWJMENUITEM“COMPILE“JMENUITEMBUILDMENUITEMNEWJMENUITEM“BUILD“JMENUITEMSTOPFLASHMENUITEMNEWJMENUITEM“STOPFLASH“JMENUITEMSTARTFLASHMENUITEMNEWJMENUITEM“STARTFLASH“JMENUITEMHELPMENUITEMNEWJMENUITEM“HELP“JMENUITEMCOPYMENUITEMNEWJMENUITEM“COPY“JMENUITEMCUTMENUITEMNEWJMENUITEM“CUT“JMENUITEMPASTEMENUITEMNEWJMENUITEM“PASTE“/文件内容的显示/用多个文本域存放多个文件内容,文本域放在JSCROLLPANE里/而JSCROLLPANE放在JTABBEDPANE中,这就是一个多页面的布局/多个文本域,每个文本域显示一个文件的内容JTEXTAREAFILETEXTAREASNEWJTEXTAREA10/编译或者运行时的控制台信息JTEXTAREACONSOLETEXTAREANEWJTEXTAREAJSCROLLPANEFILESCROLLPANESNEWJSCROLLPANE10JSCROLLPANECONSOLESCROLLPANE/多个文本域放在不同TAB里JTABBEDPANEFILETABBEDPANENEWJTABBEDPANE/工具栏以及工具栏上的按钮/JTOOLBARTOOLBARNEWJTOOLBARJBUTTONOPENBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/OPENGIF“JBUTTONNEWBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/NEWGIF“JBUTTONSAVEBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/SAVEGIF“JBUTTONHELPBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/HELPGIF“JBUTTONEXITBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/CLOSEGIF“JBUTTONCOMPILEBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/COMPILEGIF“JBUTTONBUILDBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/BUILDGIF“JBUTTONCOPYBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/COPYGIF“JBUTTONCUTBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/CUTGIF“JBUTTONPASTEBUTTONNEWJBUTTONNEWIMAGEICONLOADIMAGE“IMAGE/PASTEGIF“/该文本域显示当前光标在当前文本域中的行号JTEXTAREASHOWLINENOTEXTAREANEWJTEXTAREA/对话框窗体,程序中所有对话框都显示在该窗体中JFRAMEDIALOGFRAMENEWJFRAME/文件名以树型结构在左边显示/JTREETREEDEFAULTMUTABLETREENODEROOTDEFAULTMUTABLETREENODENODESNEWDEFAULTMUTABLETREENODE10/组件之间的分隔栏/JSPLITPANELEFTRIGHTSPLITPANEJSPLITPANELINENOCONSOLESPLITPANEJSPLITPANETREEFLASHSPLITPANEJSPLITPANETABBEDLINENOSPLITPANE/文件选择、存储相关/文件过滤器FILTERFILEFILTERNEWFILTER/文件选择器FILECHOOSERFILECHOOSERNEWFILECHOOSER/文件读写控制,0表示文件选择器读文件,1文件选择器标示写文件INTFILECHOOSER_CONTROL0FILEWRITERFILEWRITER/TABBEDPANE中TAB页的当前数量INTTB1INTFIND_CONTROL0/文本域的控制器,指向当前操作的文本域INTTEXTAREAS_CONTROL0/当前文本域中的文本STRINGCURRENTTEXTINTEXTAREA/标志文件是否为新建的,如果是新建的文件,为TRUEBOOLEANNEWFILEFLAGSNEWBOOLEAN10/存放打开文件所在的目录STRINGDIRECTORYNEWSTRING10/查找替换相关/正在查找的字符串及其长度STRINGFINDWORDINTFINGWORDLENGTH/保存正在查找的字符串在文本域中的文本的位置INTFINDINDEX/被替换的文本的长度INTREPLACELENGTH0/用于显示FLASH的控制器/JLABELFLASHLABELNEWJLABELNEWIMAGEICONLOADIMAGE“IMAGE/JUGGLER0GIF“TIMERTIMERNEWTIMER100,NEWACT_TIMERINTTIMERCONTROL0/帮助相关/FONTFONTNEWFONT“COURIER“,FONTTRUETYPE_FONT,14JTEXTAREAHELPTEXTAREANEWJTEXTAREAJFRAMEHELPFRAMENEWJFRAME“HELP“/构造函数PUBLICEDITORSUPER“文本编辑器“/为窗体添加键盘事件处理器/下面这一行非常重要,表示窗体能够接受焦点。/如果没有这一句,按键盘会无效。THISSETFOCUSABLETRUETHISADDKEYLISTENERNEWMYKEYLISTENER/为窗体添加窗口事件处理器THISADDWINDOWLISTENERNEWWINDOWLISTENER/初始化INITSETLOCATION200,200SETVISIBLETRUEPACK/初始时启动动画TIMERSTART该类是编辑器的主类。INIT方法初始化编辑器上的所有控件。首先初始化10个文本域,表示该编辑器能同时编辑10个文件,并构建10个默认的树节点DEFAULTMUTABLETREENODE对象。初始化界面左边的JTREE,设置它的根节点为“正在编辑的文件”,使用DEFAULTMUTABLETREENODE的ADD方法为根节点添加一个子节点,表示编辑器初始状态时时新建一个文件。JTREE的SETEDITABLE方法设置树不可编辑。初始化控制台的文本域CONSOLETEXTAREA,用于输出编译和运行JAVA的信息。将控制台文本域放置在一个JSCROLLPANE内,使得他具有滚动条。初始化显示当前光标所在行数的文本域SHOWLINENOTEXTAREA,当用户移动编辑器的光标时,在该文本域中显示光标行数会跟着发生变化。通过SETENABLED方法使得它不可编辑。初始化菜单,包括如下几个菜单“FILE”,“OPTION”,“ADVANCE”,“HELP”,“EDIT”。每个菜单下都设置多个菜单项。初始化工具栏,包括如下几个工具项“NEW”,“OPEN”,“SAVE”,“EXIT”,“HELP”,“COMPLIE”,“BUILD”,“COPY”,“CUT”,“PASTE”。通过JBUTTON的SETTOOLTIPTEXT方法为工具项设置提示信息,当用户鼠标停留在按钮上时,显示提示信息。将各大组件用JSPLITPANE组织起来,使得组件之间的大小可以任意的调节。最后把这些组件都放在窗口中。INITHELP方法初始化帮助信息。以表格的形式显示编辑器的快捷键信息,使用了JTABLE类实现表格,表格的列名是一个字符串数组,表格的数据是一个二维数组。HELPTEXTAREA文本域显示使用编辑器全部功能需要做的配置。EXITEDIOR方法退出编辑器。退出前通过JOPTIONPANE的SHOWXONFIRMDIALOG方法弹出“确认退出”的对话框,当用户选择JOPTIONPANEYES_OPTION时才真正退出。LOADIMAGE方法加载图片。根据图片名,使用CLASS的GETRESOURCE方法获得图片的URL,通过GETCONTENT方法打开URL,获得图片的输入流,通过组件的CREATEIMAGE方法,把输入流构造成一个IMAGE对象。2MYKEYLISTENER类键盘事件处理器/PUBLICCLASSMYKEYLISTENEREXTENDSKEYADAPTER/覆盖父类的KEYPRESSED方法,处理键被按下时的事件。PUBLICVOIDKEYPRESSEDKEYEVENTE/按F12打开文件IFEGETKEYCODEKEYEVENTVK_F12NEWACT_OPENFILEACTIONPERFORMEDNULL/按CTRL加S键保存文件ELSEIFEISCONTROLDOWN/按ALT键查找ELSEIFEISALTDOWNNEWACT_FINDACTIONPERFORMEDNULL/按F3查找下一个ELSEIFEGETKEYCODEKEYEVENTVK_F3NEWACT_FINDNEXTACTIONPERFORMEDNULL/按F4替换ELSEIFEGETKEYCODEKEYEVENTVK_F4NEWACT_REPLACEACTIONPERFORMEDNULL/按CTRL加N新建文件ELSEIFEISCONTROLDOWN/按CTRL加E退出编辑器ELSEIFEISCONTROLDOWN/按F5运行JAVA程序ELSEIFEGETKEYCODEKEYEVENTVK_F5NEWACT_BUILDACTIONPERFORMEDNULL/按F9编译JAVA源代码ELSEIFEGETKEYCODEKEYEVENTVK_F9NEWACT_COMPILEACTIONPERFORMEDNULL/按CTRL加H显示帮助ELSEIFEISCONTROLDOWN/该类用于处理键盘事件,继承KEYADPTER。覆盖了KEYADAPTER的KEYPRESSED方法,处理键盘被按下的事件,参数为KEYEVENT类型。通过KEYEVENT的GETKEYCODE方法获得被按下键盘的码,ISCONTROLDOWN方法判断CTRL键是否被按下,ISALTDOWN方法判断ALT键是否被按下。根据不同的按键组合,调用不同的方法去处理。3FILECHOOSE类/文件选择器/CLASSFILECHOOSEREXTENDSJFILECHOOSERPUBLICFILECHOOSER/文件选择器默认位置为当前文件夹SUPER“/“/提交选择/PUBLICVOIDAPPROVESELECTIONSTRINGFILENAMENULL/FILECHOOSER_CONTROL0表示现在是打开文件,需要读IFFILECHOOSER_CONTROL0/打开文件时,在左边的树中添加一个节点ROOTADDNODESTBREMOVETREETREENEWJTREEROOTTREESETBACKGROUNDNEWCOLOR70,80,91TREEFLASHSPLITPANESETRIGHTCOMPONENTTREETREEFLASHSPLITPANESETDIVIDERLOCATION120/新建一个TAB页,用于装新打开的文件FILETABBEDPANEADDTAB“FILE“TB1,FILESCROLLPANESTBFILETABBEDPANESETSELECTEDINDEXTB/将当前文本域设置到新打开的文件上TEXTAREAS_CONTROLTBTB/获取待打开的文件名FILENAMEFILECHOOSERGETSELECTEDFILEGETNAME/获取待打开的文件所在的目录,将目录保存至数组,这样在保存文件的时候,能够将文件名保存到目录中DIRECTORYTEXTAREAS_CONTROLFILECHOOSERGETCURRENTDIRECTORYTOSTRINGFILETEXTAREASTEXTAREAS_CONTROLSETTEXTNULLTRY/将文件内容显示到文本域中STRINGSTRBUFFEREDREADERBREADERNEWBUFFEREDREADERNEWFILEREADERDIRECTORYTEXTAREAS_CONTROL“/“FILENAMEWHILETRUESTRBREADERREADLINEIFSTRNULLBREAKFILETEXTAREASTEXTAREAS_CONTROLAPPENDSTRNCATCHEXCEPTIONE_OPENJOPTIONPANESHOWMESSAGEDIALOGDIALOGFRAMEGETCONTENTPANE,“读取发生错误“ELSEIFFILECHOOSER_CONTROL1/FILECHOOSER_CONTROL1表示现在是保存新文件,需要写FILENAMEFILECHOOSERGETSELECTEDFILEGETNAMEDIRECTORYTEXTAREAS_CONTROLFILECHOOSERGETCURRENTDIRECTORYTOSTRINGTRY/将文本域中的内容写到文件中FILEWRITERNEWFILEWRITERDIRECTORYTEXTAREAS_CONTROL“/“FILENAMEFILEWRITERWRITEFILETEXTAREASTEXTAREAS_CONTROLGETTEXTFILEWRITERCLOSECATCHEXCEPTIONE_SAVEJOPTIONPANESHOWMESSAGEDIALOGDIALOGFRAMEGETCONTENTPANE,“读取发生错误“/关闭对话框DIALOGFRAMEDISPOSE/更新文件目录树中的名字ROOTREMOVENODESTEXTAREAS_CONTROLNODESTEXTAREAS_CONTROLNEWDEFAULTMUTABLETREENODEFILENAMEROOTADDNODESTEXTAREAS_CONTROL/将当前显示的树删除、显示新的树REMOVETREETREENEWJTREEROOTTREESETBACKGROUNDNEWCOLOR70,80,91TREEFLASHSPLITPANESETRIGHTCOMPONENTTREETREEFLASHSPLITPANESETDIVIDERLOCATION120/将TAB页的标题改为文件名FILETABBEDPANESETTITLEATTEXTAREAS_CONTROL,FILENAME/无论是打开、还是保存,这个文件不是已经新建的,所以置为FALSENEWFILEFLAGSTEXTAREAS_CONTROLFALSE/取消选择/PUBLICVOIDCANCELSELECTIONDIALOGFRAMEDISPOSE自定义的文件选择器类,继承了JFILECHOOSER。APPROVESELECTION方法实现文件的选择。当用户通过文件选择器文件时,单击“确定”按钮时被调用。FILECHOOSER_CONTROL变量值为0表示当前的文件选择器是为了打开文件,变量值为1时表示为了保存文件。打开文件时,JFILECHOOSER的GETSELECTEDFILE方法获得被选中的文件,GETCURRENTDIRECTORY方法获得被选择文件所在的目录。从文本域数组FILETEXTAREAS取出一个新元素,用于显示文件内容;同时将JTREE的跟节点添加一个新页,把显示新闻家内揉的文本域组织在JTABBEDPANE中,并通过SETSELECTEDINDEX方法将新页设为当前页。通过BUFFEREDREADER读取文件内容,并通过JTEXTAREA的APPEND方法把内容添加到文本域中。保存文件时,使用FILEWRITER的WRITE方法将文件的文本域中的内容保存到文件。CANCELSELECTION方法处理关闭文件选择器事件。当用户取消文件选择时,通过JFRAME的DISPOSE方法将文件选择器窗口关闭。4FILTER类/文件过滤器,只支持编辑“JAVA,HTML,TXT,CPP“文件/CLASSFILTEREXTENDSFILEFILTER/覆盖FILEFILTER的ACCEPT方法PUBLICBOOLEANACCEPTFILEFILE1RETURNFILE1GETNAMEENDSWITH“JAVA“|FILE1ISDIRECTORY|FILE1GETNAMEENDSWITH“HTML“|FILE1GETNAMEENDSWITH“TXT“|FILE1GETNAMEENDSWITH“CPP“PUBLICSTRINGGETDESCRIPTIONRETURN“JAVA,HTML,TXT,CPP“该类实现了一个自定义的文件过滤器类,继承了FILEFILTER。ACCEPT方法决定是否允许通过文件过滤器。允许如下文件被选择“JAVA”,“HTML”,“TXT”,“CPP”。GETDESCRIPTION方法获得文件选择器的描述,即文件选择框的文件类型描述。5CARELIS_LINENO类/用于侦听文本组件插入符的位置更改的侦听器获取当前光标在文件中的行号/CLASSCARETLIS_LINENOIMPLEMENTSCARETLISTENERPUBLICVOIDCARETUPDATECARETEVENTETRYSHOWLINENOTEXTAREASETTEXT“CURSORATTHE“FILETEXTAREASTEXTAREAS_CONTROLGETLINEOFOFFSETFILETEXTAREASTEXTAREAS_CONTROLGETCARETPOSITION1“LINEINTHEFILEOF“FILETABBEDPANEGETTITLEATTEXTAREAS_CONTROLCATCHBADLOCATIONEXCEPTIONEBSYSTEMOUTPRINTLN“IOWRONG“该类实现了一个自定义的文本组件插入点改变事件处理器,实现了CARETLISTENER接口。实现了CARETLISTENE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八班级下册地理工作方案
- 昔仲尼师项橐教学课件
- 工业园区土地征收政策影响及2025年风险防控分析报告
- 2025年安全生产培训考核题及答案集
- 比亚迪培训课件
- 2025年线下演出市场复苏:线上线下融合发展趋势报告
- 浙江省杭州市第四中学 2025-2026学年生物高三上期末质量检测模拟试题
- 舞蹈生理学教学课件
- 公共卫生应急资金申请攻略2025年项目进度管理与控制报告
- 2025-2026学年江苏省泰兴市洋思中学生物高三上期末复习检测模拟试题
- 2025年执业医师考试全真试题及答案
- GA 1808-2022军工单位反恐怖防范要求
- 【学生生涯规划系列】高一上学期生涯规划讲座课件
- 《工程制图完整》课件
- 焊接工艺要求
- JJF(电子) 31502-2010 静电腕带/脚盘测试仪校准规范-(高清现行)
- 国学武术操太极拳表演活动流程
- DB14∕T 1131-2015 麦茬复播花生栽培技术规程
- 《生产运作与管理》教案(完整版)
- 先张法U型梁施工与管理
- 江苏省五年一贯制专转本《C语言程序设计》模拟试卷试题三(晓庄)
评论
0/150
提交评论