计算机毕业设计论文_第1页
计算机毕业设计论文_第2页
计算机毕业设计论文_第3页
计算机毕业设计论文_第4页
计算机毕业设计论文_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南理工大学毕业设计(论文)说明书 I 摘 要 当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。 目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行 Java 的编译与运行很少,不能更好的适应当前用户的要求。本设计所完成的文本编辑器功能是针对学习 Java 程序语言,因此我们利用Java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。 本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构,还有链接 Java 虚拟机实现编译与运行。使用 SUN 公司的 Java 中的 GUI 作为开发技术,利用其提供的各种类与接口,首先建立系统应用原型 。 本文本编辑器的开发采用 JDK6.0和 UltraEdit 为开发工具,操作系统为Windows98/Windows 2000/Windows XP 等。 关键词 :面向对象程序设计 ,GUI,文本编辑器 ,编译 ,运行 河南理工大学毕业设计(论文)说明书 II Abstract Now, computer and internet are experience a sharp development, the information automatic function is more and more powerful, and our society is stepping in the information age. So, more Intelligence and more specialized soft are needed to help us improve the efficiency in job. At present the text editor type are many, the function provided are also many too, But can satisfy the user for many kinds of functions and can use Java for the translation and debug are very few, so can not adapt current users request much better. This design completes the text editor function is aims at the Java beginner who study the Java program language, Therefore we use the Java programming hypothesized machine and software form an entire set of complete compilation code to the formation users application process, translation, debug. This text editors development mainly includes the contact of surface menu of the window and the tool fence as well as the tree structure, also links to the java hypothesized machine to the translation and debug. Use Java GUI API, and the classes of SUN Corporation to found the initial prototype system, then, carries on the demand iteration to the initial prototype system, unceasingly reversing and improvement, until forms the feasible system. This text editors development uses JDK6.0 and Ultra Edit as the development kit, operate system for Windows98/ Windows 2000/ Windows/XP Keywords: OOP, java, GUI( Graphical User Interface) ,text editor, translation, debug. 河南理工大学毕业设计(论文)说明书 III 目 录 1 前 言 . 1 2 问题的提出及可行性研究 . 2 2.1 问题的提出及定义 . 2 2.2 可行性研究 . 3 2.2.1 对现行文本编辑器的分析 . 3 2.2.2 新文本编辑器的可行性研究分析 . 3 3 用户需求分析 . 5 3.1 用户调查 . 5 3.2 确定目标系统的功能 . 5 4 系统设计与开发环境 . 6 4.1 系统相关类的设计 . 6 4.2 开发语言及其开发环境 . 10 4.2.1 开发语言概述 . 10 4.2.2 Java 开发环境 JDK 的介绍 . 12 4.3 环境变量的设置 . 13 4.3.1.环境变量的作用 . 13 4.3.2 如何设置环境变量 . 14 5 关键技术和 源代码的实现 . 16 5.1 关键技术剖析 . 16 5.2 源码分析 . 17 6 系统测试 . 42 6.1 测试方案 . 42 6.2 测试项目 . 42 6.3 编辑器截图演示 . 43 河南理工大学毕业设计(论文)说明书 IV 致 谢 . 44 参考文献 . 45 河南理工大学毕业设计(论文)说明书 1 1 前 言 Java可以方便的开发 GUI程序,在 Java 语言提供的 GUI构建工具中,可以分为“组件( component)”和“容器”( container)两种。组件有:按钮,标签,复选框,单选按钮,选择框,列表框,文本框,滚动条,画布,和菜单等;容器有:程序的启动封面,窗体和对话框。本设计主要是通过 AWT(抽象窗口化工具 包)和 Swing来实现功能的。 本文本编辑器的设计,能打开,编辑和保存 html,java,cpp,txt 文件,能够在文件中进行查找和替换,而且支持 java源文件的编译与运行,前提是机器上已经安装了 java虚拟机并配置好了 java相关的环境变量。 此文本编辑器是集代码编写,源代码编译和类运行于一体。 河南理工大学毕业设计(论文)说明书 2 2 问题的提出及可行性研究 2.1 问题的提出及定义 随着计算机技术的不断发展,文本编辑器成为大家必不可少的工具,但是不同的用户对文本编辑器有不同的功能需求,所以除了像 office 中的 word还有去 WPS 等 大众文本编辑器,还需要一些带有一定相关专业功能的文本编辑器,可以方便用户进行工作与开发。 1、 本设计就是针对 java初学者所开发的,集源代码编辑,编译,运行于一体的文本编辑器。 2、 根据此文本编辑器的的实际要求,本系统需要实现以下功能: 3、 要求在运行该编辑器时,可以直接编辑默认的新建文件 File,在左边的树中正在编辑的文件显示有 File1; 4、 要求在文本编辑器的右边的文件文本域用于编辑文字和代码,右边中间的文字域时显示光标的行号,右边下面的文本域是显示编译和运行信息; 5 、 要求在窗口顶部设有菜单栏,分 别有File,Option,Advance,Edit,Help; 6、 要求在菜单栏下面设有工具栏,分别有打开按钮,新建按钮,保存按钮,帮助按钮,推出按钮,编译按钮,运行按钮,复制按钮,剪切按钮,粘贴按钮; 7、 要求能新建,打开和保存文件;若是新建文件则将新建文件保存为newFile1.txt,在编辑器左边树中正在编辑的文件显示为 newFile1.txt,右边的文件文本域所在的 Tab标签上显示的也是 newFile1.txt。 8、 要求能够通过查找功能,在当前文件中查找字符串,在弹出的对话框中输入所要查找的字符 串,点击确定开始查找,找到后显示高亮; 9、 要求能够连接本机的 java虚拟机,对源代码进行编译及编译后运行 河南理工大学毕业设计(论文)说明书 3 2.2 可行性研究 2.2.1 对现行文本编辑器的分析 市场上出现的和用户所使用的文本编辑器种类繁多,功能也是各式各样,其中有相当一部分是很优秀的。但是面向 java初学者的操作简单的,界面友好的,集源代码编辑,编译,运行于一体的编辑器并不多见。 2.2.2 新文本编辑器的可行性研究分析 根据此文本编辑器的使用对象, 新目标的提法不尽相同,例如: 1、 提高工作效率和 降低难度 ; 2、 提供新的 编译与运行 处理功 能; 新 编辑器 的目标确定后,就可以从以下三方面对能否实现新目标进行 可行性分析: ( 1)技术可行性 面向对象是一种新兴的程序设计方法 ,或者 说 是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。 许多程序开发工具,如 java、 Visual Basic 6.0、 Delphi等等,都支持面向对象的程序开发。 这些技术目前已经成熟,被广泛应用与各个领域。运用 GUI 中的 awt 和swing以及相关的类完全可以实现所要求的功能。因此,其设计开发在技术上是可行的。 ( 2)经济可行性 经济可行性研究是对设计投入使用后带来的经济效益进行估计。本设计河南理工大学毕业设计(论文)说明书 4 所消耗的物力与财力不多,关键是思想架构,设计成功后可在互联网上供用户下载。经济效益与经济投资是很少的,也达到收支平衡。 ( 3)运行可行性 系统设计并运行于当前流行的 Windows 系列操作系统,具有 Windows 传统的操作风格,仅要求系统带有 JVM(java 虚拟机 )。此文本编辑器操作简单,界面友好,用户可以立即使用。总之,系统具有较好的运行可行性。 综上所述,开发一个专门的 java文本编辑器是可行的。 河南理工大学毕业设计(论文)说明书 5 3 用户需求分析 3.1 用户调查 经过详细的调研,并多次与 初学 java 潜在用户进行研讨后,首先加深了对 java 文本管理器的的深刻了解,其次,充分熟悉 java 源代码编辑,编译和运行。 3.2 确定目标系统的功能 通过详细的用户调查,可以基本确定目标系统要达到的目标了。 需求分析的任务是确 定功能必须完成的工作,也就是对目标系统提出完整、准确、清晰、具体的要求。在经过多方了解和调查后,基本清楚了此文本编辑器的功能要求。 必须完成的功能如下: ( 1) 文本新建功能; ( 2) 文本打开功能; ( 3) 文本保存功能; ( 4) 字符串查询功能; ( 5) 源文件编译功能; ( 6) 代码运行功能。河南理工大学毕业设计(论文)说明书 6 4 系统 设计 与开发 环境 系统设计一般分为总体设计和详细设计。经过需求分析阶段的工作,已经清楚系统必须完成的工作,下面的工作就应该是决定“如何做”的问题。总体设计的基本目的就是“概括地说系统应该如何实现?”。另一方面的主要工作是设计软件的结构,即确 定系统都由哪些模块组成及模块之间的相互关系。 4.1 系统 相关类的设计 河南理工大学毕业设计(论文)说明书 7 图 4-1 Editor继承了 JFrame类 Editor Pack ( ); setLocatrion ( ); setVisible ( ); start ( ); setFocusable ( ); addKeyListrner ( ); Frame addImpl(Component comp,Object constraints, int index) 添加指定的子 Component getContentPane() 返回此窗体 的 contentPane 对象 setLayout(LayoutManager manager) 设置 LayoutManager setJMenuBar(JMenuBar menubar) 设置此窗体的菜单栏 setIconImage(Image image) setDefaultCloseOperation(int operation)设置用户在此窗体上发起 close 时默认执行的操作设置此 frame 要显示在最小化图标中的图像 remove(Component comp) 从该容器中移除指定组件 河南理工大学毕业设计(论文)说明书 8 JComponet JTextComponent JMenuBar JOptionPane JToolBar JTree JPanel JFileChooser JSplitpane AbstratButton JTabbedPane JScrollPane JButton JMenuItem JMenu JTextArea 河南理工大学毕业设计(论文)说明书 9 图 4-2 是本设计中用到的 JComponent 及其扩展类的总括。 图 4-3 本图显示复制,粘贴,剪贴,动画的显示停止,启动,暂停事件继承 ActionListener类 ActionListener actionPerformed(ActionEvent e) 发生操作时调用 Act_StartFlash actionPerformed(ActionEvent E_start) Act_StopFlash actionPerformed(ActionEvent E_stop) Act_Timer actionPerformed(ActionEvent E_time) Act_Copy actionPerformed(ActionEvent e_ji9) Act_Paste actionPerformed(ActionEvent e_ji11) Act_Cut actionPerformed(ActionEvent e_ji10) 河南理工大学毕业设计(论文)说明书 10 图 4-4 FileChoose 类继承了 JFileChoose 类;此文件选择器能够打开和保存文件 4.2 开发 语言及其开发 环境 4.2.1 开发语言概述 Sun公司在 Java 语言的白皮书中是这样定义 Java的: JFileChooser getFileView() 返回当前的文件视图 getIcon(File f) 返回此文件或文件类型的图标,这取决于系统 getName(File f) 返回文件名 getSelectedFile() 返回选中的文件 setCurrentDirectory(Filedir) 设置当前目录 setDialogTitle(String dialogTitle) 设置显示在 JFileChooser 窗口标题栏的字符串 FileChooser Filechooser(); approveSelection(); cancelSelection(); 河南理工大学毕业设计(论文)说明书 11 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最初是为对电子产河南理工大学毕业设计(论文)说明书 12 品编程而设计的,所以它具有完美的平台无关性。它使用一种与平台无关的代码字节 码,而不是通常的特定机器上的机器码,由平台上的 Java虚拟机中的 Java解释器解释执行。 Java虚拟机是免费的,在许多平台上都有。 Java提供了良好的可移植性。使用 Java 作为编程语言,只要进行一次程序开发工作,所开发的程序不需要经过任何改动,便能在各种平台上运行。Java使用两种方法使 Java的应用程序不依赖与具体的系统: 采用基于国际标准的数据类型。 Java的原始数据类型在任何机器上都是一样的,例如整型总是 32位,长整型总是 64位等。 Java是一种高性能的语言。“鱼与熊掌不可兼得”,通常,健壮性、安 全性、平台无关性、可移植性等方面的提高总是要以牺牲性能为代价的。 Java也不例外, Java的内存管理增加了运行时系统的复杂性,因为 Java 运行时系统必须内嵌一个内存管理模块;同样, Java 程序的解释执行的效率也要低于直接执行编译后的源码的效率。但是 Java采用了一些很好的措施来弥补这些性能上的差距: 生成高效的字节码。 Java字节码的设计充分考虑了性能的因素,字节码的格式简单,解释器可以生成高效的机器码。 提供了即时编译和嵌入 C 代码的可选措施。即时编译是指在运行时把字节码编译成机器码。 4.2.2 Java 开发环境 JDK 的介绍 在 Sun 公司推出 Java 语言的同时,也推出了 Java 的一系列开发工具,如 JDK( Java Developer s Kit)。 JDK 是可以从网上免费下载的 Java 开发工具集。随后,其它一些著名的公司也相继推出了自己的 Java开发工具,例如 Microsoft 公司的 Visual J+, Borland 公司的 JBuilder, IBM 公司的VisualAge for Java, Synmentac 的 Caf等。本节中将简单的介绍一下 Sun公司的 JDK;至于 Microsoft 公司的 Visual J+,将是本书其它章节重点介绍的内容。 河南理工大学毕业设计(论文)说明书 13 JDK是 Sun公司推出的 Java开发工具集,由于 Sun公司是 Java 语言的创始者和 Java 规范的制定者,所以 JDK 自然是最权威的 Java 开发工具。您写的 Java程序是否符合 Java语言规范的要求,用 JDK提供的 Java编译器一试便知。市场上其它公司的 Java 开发工具有的在某些地方并不完全遵从 Java语言规范,例如 Microsoft 公司的 Visual J+,但是 JDK却绝对和 Java语言规范保持一致,而且每当有新的 Java语言规范推出时,就会有相应的 JDK同时推出。 当前 JDK已经推出了其最新版本 JDK1.6 4.3 环境变量的设置 4.3.1.环境变量的作用 JAVA 程序能够顺利编译需要两个环境变量,一个是 PATH( path),一个是 CLASSPATH( classpath)。那么这两个环境变量代表什么呢?或者说究竟在 JAVA程序编译中有什么作用呢?这就要涉及到 WINDOWS的基本知识了。在 WINDOWS环境中,每一条能用的指令都保存在硬盘的“某个角落”,比如说指令 NOTEPAD( WINDOWS 的记事本指令,在 C:WINNT目录下),那么在 DOS命令提示 符下直接输入 NOTEPAD 就可以打开记事本了。但是一旦我们把C:WINNT目录下的 NOTEPAD.EXE 这个可执行文件移开(比如说我们现在把它“剪切”到 D 盘根目录下)我们再在 DOS 提示符下直接输入 NOTEPAD 时就无法再打开记事本了,但是我们在 DOS下改变路径输入 D:NOTEPAD(或者先输入 cd D: 在输入 NOTEPAD 也行)就可以打开记事本了。这就是说在我们直接输入 NOTEPAD 的时候,其实其默认路径就是 C:WINN。假设我们要运行一个JAVA程序( hello.java)就要先把它的 class 文 件移动到 JAVA里的 bin目录下 然后打开 DOS,把路径改到 JAVA的 BIN 目录下 执行 java hello.class,一次无所谓 但是每次都要这样去做未免太麻烦。还好 WINDOWS 提供了一个PATH环境变量,他的作用就是现在这个变量的值路径中去找,如果找到了要河南理工大学毕业设计(论文)说明书 14 运行的 EXE就运行,否则失败。如果我们把 JAVA里的 bin目录这个路径赋给path那么下次我在运行 java这个命令的时候,即便是直接输入 DOS 也能够在path变量中找到 JAVA 的 bin目录下的 java 指令了。 “假设我们要运行一个 JAVA程 序( hello.java)就要先把它的 class文件移动到 JAVA里的 bin目录下”,为什么要这样做呢?因为我们在用到 java hello.class这条指令的时候, DOS不知道 hello.class这个文件在哪里,他就先到当前目录中去找,如果找到就运行,否则失败。当然,如果说 hello.java在 D 盘根目录下,你也可以用 java D:hello.class 这条指令来运行,但是每次这样做也确实够麻烦。 WINDOWS 就提供了这样一个环境变量 classpath,如果没有就应该新建一个。我们把 D:这个路径 赋值给 classpath,那么下次在运行 java hello.java 的时候就先在当前目录中到,如果找到就运行,如果找不到就在 classpath 的值路径下去找,找到就运行,找不到就失败。 以上阐述了 path和 classpath两个环境变量的作用,如果设置好了。 java的编译和运行就基本上没什么问题了。 4.3.2 如何设置环境变量 Windows下 JAVA 环境变量的设置祥解 : Windows下 JAVA 用到的环境变量主要有 3个, JAVA_HOME、 CLASSPATH、PATH。下面逐个分析。 JAVA_HOME 指向的是 JDK 的安装路径,如 x:JDK_1.4.2,在这路径下你应该能够找到 bin、 lib等目录。值得一提的是, JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:XXXXXXxxxxxXXXXxxxxXXXXxxxxXXXXxxx 设置方法 如下 : JAVA_HOME=x:JDK_1.4.2 PATH 环境变量原来 Windows 里面就有,你只需修改一下,使他指向 JDK河南理工大学毕业设计(论文)说明书 15 的 bin 目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了 。设置方法是保留原来的 PATH的内容,并在其中加上 %JAVA_HOME%bin (注,如果你对 DOS批处理不了解,你可能不明白 %引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量 JAVA_HOME,你写成 x:JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入 echo %JAVA_HOME%来看一下你的设置结果 ) : PATH=%JAVA_HOME%bin;%PATH% 同样, %PATH%是引用以前你设置的 PATH 环境变量,你照抄以前的值就行了。 CLASSPATH环境变量我放在最 后面,是因为以后你出现的莫名其妙的怪问题 80%以上都可能是由于 CLASSPATH设置不对引起的,所以要加倍小心才行。 CLASSPATH=.;%JAVA_HOME%libtools.jar。 首先要注意的是最前面的 .;,这个是告诉 JDK,搜索 CLASS 时先查找当前目录的 CLASS 文件 为什么这样搞,这是由于 LINUX 的安全机制引起的, LINUX 用户很明白, WINDOWS 用户就很难理解 (因为 WINDOWS 默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索 PATH环境变量设定的 )。 为什么 CLASSPATH 后面指定了 tools.jar 这个具体文件?不指定行不行?这个是由 java语言的 import机制和 jar 机制决定的。 具体的设定方法 : win2kxp用户右键点击我的电脑 -属性 -高级 -环境变量,修改下面系统变量那个框里的值就行了。 win9x用户修改 autoexec.bat文件,在其末尾加入 : set JAVA_HOME=x:JDK_1.4.2 set PATH=%JAVA_HOME%bin;%PATH% set CLASSPATH=.;%JAVA_HOME%libtools.jar 河南理工大学毕业设计(论文)说明书 16 5 关键技术和 源代码的实现 5.1 关键技术剖析 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 方法获取被河南理工大学毕业设计(论文)说明书 17 选择的页面的编号; 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方法可以调用本地命令。 5.2 源码分析 (1) Editor类 /* * 一个简单的文本编辑 器,能够编辑 html、 java、 cpp、 txt 文件, * 并支持 java 的编译与运行 */ public class Editor extends JFrame /*菜单栏、菜单和菜单项 */ 河南理工大学毕业设计(论文)说明书 18 JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu(File); JMenu optionMenu = new JMenu(Option); JMenu advanceMenu = new JMenu(Advance); JMenu helpMenu = new JMenu(Help); JMenu editMenu = new JMenu(Edit); JMenuItem newMenuItem = new JMenuItem(new); JMenuItem openMenuItem = new JMenuItem(Open); JMenuItem saveMenuItem = new JMenuItem(Save); JMenuItem exitMenuItem = new JMenuItem(exit); JMenuItem findMenuItem = new JMenuItem(Find); JMenuItem findNextMenuItem = new JMenuItem(Find Next); JMenuItem replaceMenuItem = new JMenuItem(Replace); JMenuItem compileMenuItem = new JMenuItem(Compile); JMenuItem buildMenuItem = new JMenuItem(Build); JMenuItem stopFlashMenuItem = new JMenuItem(Stop Flash); JMenuItem startFlashMenuItem = new JMenuItem(Start Flash); JMenuItem helpMenuItem = new JMenuItem(Help); JMenuItem copyMenuItem = new JMenuItem(Copy); JMenuItem cutMenuItem = new JMenuItem(Cut); JMenuItem pasteMenuItem = new JMenuItem(Paste); /*文件内容的显示 */ /用多个文本域存放多个文件内容,文本域放在 JScrollPane 里 /而 JScrollPane 放在 JTabbedPane 中,这就是一个多页面的布局 /多个文本域,每个文本域显示一个文件的内容 JTextArea fileTextAreas = new JTextArea10; 河南理工大学毕业设计(论文)说明书 19 /编译或者运行时的控制台信息 JTextArea consoleTextArea = new JTextArea(); JScrollPane fileScrollPanes = new JScrollPane10; JScrollPane consoleScrollPane; /多个文本域放在不同 tab 里 JTabbedPane fileTabbedPane = new JTabbedPane(); /*工具栏以及工具栏上的按钮 */ JToolBar toolBar = new JToolBar(); JButton openButton = new JButton(new ImageIcon(loadImage(image/open.gif); JButton newButton = new JButton(new ImageIcon(loadImage(image/new.gif); JButton saveButton = new JButton(new ImageIcon(loadImage(image/save.gif); JButton helpButton = new JButton(new ImageIcon(loadImage(image/help.gif); JButton exitButton = new JButton(new ImageIcon(loadImage(image/close.gif); JButton compileButton = new JButton(new ImageIcon(loadImage(image/compile.gif); JButton buildButton = new JButton(new ImageIcon(loadImage(image/build.gif); JButton copyButton = new JButton(new ImageIcon(loadImage(image/copy.gif); JButton cutButton = new JButton(new ImageIcon(loadImage(image/cut.gif); JButton pasteButton = new JButton(new ImageIcon(loadImage(image/paste.gif); /该文本域显示当前光标在当前文本域中 的行号 JTextArea showLineNoTextArea = new JTextArea(); /对话框窗体,程序中所有对话框都显示在该窗体中 JFrame dialogFrame = new JFrame(); /*文件名以树型结构在左边显示 */ JTree tree; DefaultMutableTreeNode root; 河南理工大学毕业设计(论文)说明书 20 DefaultMutableTreeNode nodes = new DefaultMutableTreeNode10; /*组件之间的分隔栏 */ JSplitPane leftRightSplitPane; JSplitPane lineNoConsoleSplitPane; JSplitPane treeFlashSplitPane; JSplitPane tabbedLineNoSplitPane; /*文件选择、存储相关 */ /文件过滤器 Filter fileFilter = new Filter(); /文件选择器 FileChooser fileChooser = new FileChooser(); / 文件读写控制, 0 表示文件选择器读文件, 1 文件选择器标示写文件 int fileChooser_control = 0; FileWriter fileWriter; / tabbedPane 中 tab 页的当前数量 int tb = 1; int find_control = 0; /文本域的控制器,指向当前操作的文本域 int textAreas_control = 0; /当前文本域中的文本 String currentTextInTextArea; /标志文件是否为新建的,如果是新建的文件,为 true boolean newFileFlags = new boolean10; /存放打开文件所在的目录 String directory = new String10; /*查找替换相关 */ 河南理工大学毕业设计(论文)说明书 21 /正在查找的字符串及其长度 String findWord; int fingWordLength; /保存正在查找的字符串在文本域中的文本的位置 int findIndex; /被替换的文本的长度 int replaceLength = 0; /*用于显示 Flash 的控制器 */ JLabel flashLabel = new JLabel(new ImageIcon(loadImage(image/Juggler0.gif); Timer timer = new Timer(100, new Act_timer(); int timerControl = 0; /*帮助相关 */ Font font = new Font(Courier, Font.TRUETYPE_FONT, 14); JTextArea helpTextArea = new JTextArea(); JFrame helpFrame = new JFrame(Help); /构造函数 public Editor() super(文本编辑器 ); /为窗体添加键盘事件处理器 /下面这一行非常重要,表示窗体能够接受焦点。 /如果没有这一句,按键盘会无效。 this.setFocusable(true); this.addKeyListener(new MyKeyListener(); /为窗体添加窗口事件处理器 this.addWindowListener(new WindowListener(); /初始化 河南理工大学毕业设计(论文)说明书 22 init(); setLocation(200, 200); setVisible(true); pack(); /初始时启动动画 timer.start(); 该类是编辑器的主类。 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 组织起来,使得组件之间的大小可以任意的调河南理工大学毕业设计(论文)说明书 23 节。最后把这些组件都放在窗口中。 initHelp方法初始化帮助信息。以表格的形式显示编辑器的快捷键信息,使用了 JTable类实现表格,表格的列名是一个字符串数组,表格的数据是一个二维数组。 helpTextArea 文本域显示使用编辑器全部功能需要做的配置。 exitEdior 方 法 退 出 编 辑 器 。 退 出 前 通过 JOptionPane 的showXonfirmDialog 方法弹出“确认退出”的对话框,当用户选择JOptionPane.YES_OPTION 时才真正退出。 loadImage方法加载图片。根据图片名,使用 Class的 getResource 方法获得图片的 URL,通过 getContent 方法打开 URL,获得图片的输入流,通过组件的 createImage方法,把输入流构造成一个 Image对象。 (2) MyKeyListener 类 * 键盘事件处理器 */ public class MyKeyListener extends KeyAdapter / 覆盖父类的 keyPressed 方法,处理键被按下时的事件。 public void keyPressed(KeyEvent e) / 按 F12 打开文件 if (e.getKeyCode() = KeyEvent.VK_F12) (new Act_OpenFile().actionPerformed(null); / 按 Ctrl 加 S 键保存文件 else if (e.isControlDown() & e.getKeyCode() = KeyEvent.VK_S) (new Act_SaveFile().actionPerformed(null); / 按 Alt 键查找 else if (e.isAltDown() 河南理工大学毕业设计(论文)说明书 24 (new Act_Find().actionPerformed(null); / 按 F3 查找下一个 else if (e.getKeyCode() = KeyEvent.VK_F3) (new Act_FindNext().actionPerformed(null); / 按 F4 替换 else if (e.getKeyCode() = KeyEvent.VK_F4) (new Act_Replace().actionPerformed(null); / 按 Ctrl 加 N 新建文件 else if (e.isControlDown() & e.getKeyCode() = KeyEvent.VK_N) (new Act_NewFile().actionPerformed(null); / 按 Ctrl 加 E 退出编辑器 else if (e.isControlDown() & e.getKeyCode() = KeyEvent.VK_E) (new Act_ExitEditor().actionPerformed(null); / 按 F5 运行 Java 程序 else if (e.getKeyCode() = KeyEvent.VK_F5) (new Act_Build().ac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论