計算機畢業(yè)設計論文---本文本編輯器的開發(fā)_第1頁
已閱讀1頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  摘 要</b></p><p>  當今,計算機以及網絡技術的飛速發(fā)展,社會正快速向信息化社會前進,我們需要更智能,更專業(yè)的軟件幫助我們完成工作,從而提高了工作效率。</p><p>  目前文本編輯器種類很多,所提供的功能也很多,但是能滿足用戶實現(xiàn)多種功能和進行Java的編譯與運行很少,不能更好的適應當前用戶的要求。本設計所完成的文本

2、編輯器功能是針對學習Java程序語言,因此我們利用Java程序設計虛擬機和軟件對用戶及使用者的應用過程形成一整套完整的編寫代碼,編譯,運行。</p><p>  本文本編輯器的開發(fā)主要包括界面窗口的菜單欄和工具欄以及樹結構,還有鏈接Java虛擬機實現(xiàn)編譯與運行。使用SUN公司的Java中的GUI作為開發(fā)技術,利用其提供的各種類與接口,首先建立系統(tǒng)應用原型。</p><p>  本文本編輯器

3、的開發(fā)采用JDK6.0和 UltraEdit為開發(fā)工具,操作系統(tǒng)為Windows98/Windows 2000/Windows XP等。</p><p>  關鍵詞:面向對象程序設計,GUI,文本編輯器,編譯,運行</p><p><b>  Abstract</b></p><p>  Now, computer and internet a

4、re 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 i

5、mprove the efficiency in job.</p><p>  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 transla

6、tion and debug are very few, so can not adapt current user's request much better. This design completes the text editor function is aims at the Java beginner who study the Java program language,</p><p> 

7、 Therefore we use the Java programming hypothesized machine and software form an entire set of complete compilation code to the formation user's application process, translation, debug. </p><p>  This te

8、xt editor's 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 G

9、UI 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 sys

10、tem.</p><p>  This text editor's development uses JDK6.0 and Ultra Edit as the development kit, operate system for Windows98/ Windows 2000/ Windows/XP </p><p>  Keywords: OOP, java, GUI(Grap

11、hical User Interface),text editor, translation, debug.</p><p><b>  目 錄</b></p><p><b>  1 前 言1</b></p><p>  2 問題的提出及可行性研究2</p><p>  2.1 問題的提

12、出及定義2</p><p>  2.2 可行性研究3</p><p>  2.2.1 對現(xiàn)行文本編輯器的分析3</p><p>  2.2.2 新文本編輯器的可行性研究分析3</p><p>  3 用戶需求分析5</p><p>  3.1 用戶調查5</p><p>  3.2

13、 確定目標系統(tǒng)的功能5</p><p>  4 系統(tǒng)設計與開發(fā)環(huán)境6</p><p>  4.1系統(tǒng)相關類的設計6</p><p>  4.2 開發(fā)語言及其開發(fā)環(huán)境10</p><p>  4.2.1開發(fā)語言概述10</p><p>  4.2.2 Java開發(fā)環(huán)境——JDK的介紹12</p>

14、<p>  4.3 環(huán)境變量的設置13</p><p>  4.3.1.環(huán)境變量的作用13</p><p>  4.3.2 如何設置環(huán)境變量14</p><p>  5 關鍵技術和源代碼的實現(xiàn)16</p><p>  5.1 關鍵技術剖析16</p><p>  5.2 源碼分析17<

15、/p><p>  6 系統(tǒng)測試42</p><p>  6.1 測試方案42</p><p>  6.2 測試項目42</p><p>  6.3 編輯器截圖演示43</p><p><b>  致 謝44</b></p><p><b>  參考文獻

16、45</b></p><p><b>  1 前 言</b></p><p>  Java可以方便的開發(fā)GUI程序,在Java語言提供的GUI構建工具中,可以分為“組件(component)”和“容器”(container)兩種。組件有:按鈕,標簽,復選框,單選按鈕,選擇框,列表框,文本框,滾動條,畫布,和菜單等;容器有:程序的啟動封面,窗體和對話框。本

17、設計主要是通過AWT(抽象窗口化工具包)和Swing來實現(xiàn)功能的。</p><p>  本文本編輯器的設計,能打開,編輯和保存html,java,cpp,txt文件,能夠在文件中進行查找和替換,而且支持java源文件的編譯與運行,前提是機器上已經安裝了java虛擬機并配置好了java相關的環(huán)境變量。</p><p>  此文本編輯器是集代碼編寫,源代碼編譯和類運行于一體。</p>

18、;<p>  2 問題的提出及可行性研究</p><p>  2.1 問題的提出及定義</p><p>  隨著計算機技術的不斷發(fā)展,文本編輯器成為大家必不可少的工具,但是不同的用戶對文本編輯器有不同的功能需求,所以除了像office中的word還有去WPS等大眾文本編輯器,還需要一些帶有一定相關專業(yè)功能的文本編輯器,可以方便用戶進行工作與開發(fā)。</p>&l

19、t;p>  1、本設計就是針對java初學者所開發(fā)的,集源代碼編輯,編譯,運行于一體的文本編輯器。</p><p>  2、根據(jù)此文本編輯器的的實際要求,本系統(tǒng)需要實現(xiàn)以下功能:</p><p>  3、要求在運行該編輯器時,可以直接編輯默認的新建文件File,在左邊的樹中正在編輯的文件顯示有File1;</p><p>  4、要求在文本編輯器的右邊的文件文

20、本域用于編輯文字和代碼,右邊中間的文字域時顯示光標的行號,右邊下面的文本域是顯示編譯和運行信息;</p><p>  5、要求在窗口頂部設有菜單欄,分別有File,Option,Advance,Edit,Help;</p><p>  6、要求在菜單欄下面設有工具欄,分別有打開按鈕,新建按鈕,保存按鈕,幫助按鈕,推出按鈕,編譯按鈕,運行按鈕,復制按鈕,剪切按鈕,粘貼按鈕;</p>

21、;<p>  7、要求能新建,打開和保存文件;若是新建文件則將新建文件保存為newFile1.txt,在編輯器左邊樹中正在編輯的文件顯示為newFile1.txt,右邊的文件文本域所在的Tab標簽上顯示的也是newFile1.txt。</p><p>  8、要求能夠通過查找功能,在當前文件中查找字符串,在彈出的對話框中輸入所要查找的字符串,點擊確定開始查找,找到后顯示高亮;</p>

22、<p>  9、要求能夠連接本機的java虛擬機,對源代碼進行編譯及編譯后運行</p><p><b>  2.2 可行性研究</b></p><p>  2.2.1 對現(xiàn)行文本編輯器的分析</p><p>  市場上出現(xiàn)的和用戶所使用的文本編輯器種類繁多,功能也是各式各樣,其中有相當一部分是很優(yōu)秀的。但是面向java初學者的操作簡單

23、的,界面友好的,集源代碼編輯,編譯,運行于一體的編輯器并不多見。</p><p>  2.2.2 新文本編輯器的可行性研究分析</p><p>  根據(jù)此文本編輯器的使用對象,新目標的提法不盡相同,例如:</p><p>  1、提高工作效率和降低難度;</p><p>  2、提供新的編譯與運行處理功能;</p><p&

24、gt;  新編輯器的目標確定后,就可以從以下三方面對能否實現(xiàn)新目標進行可行性分析:</p><p><b> ?。?)技術可行性</b></p><p>  面向對象是一種新興的程序設計方法,或者說是一種新的程序設計規(guī)范(paradigm),其基本思想是使用對象、類、繼承、封裝、消息等基本概念來進行程序設計。從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構造軟件系統(tǒng),并且

25、在系統(tǒng)構造中盡可能運用人類的自然思維方式。開發(fā)一個軟件是為了解決某些問題,這些問題所涉及的業(yè)務范圍稱作該軟件的問題域。其應用領域不僅僅是軟件,還有計算機體系結構和人工智能等。許多程序開發(fā)工具,如 java、Visual Basic 6.0、Delphi等等,都支持面向對象的程序開發(fā)。</p><p>  這些技術目前已經成熟,被廣泛應用與各個領域。運用GUI中的awt和swing以及相關的類完全可以實現(xiàn)所要求的功

26、能。因此,其設計開發(fā)在技術上是可行的。</p><p><b> ?。?)經濟可行性</b></p><p>  經濟可行性研究是對設計投入使用后帶來的經濟效益進行估計。本設計所消耗的物力與財力不多,關鍵是思想架構,設計成功后可在互聯(lián)網上供用戶下載。經濟效益與經濟投資是很少的,也達到收支平衡。</p><p><b> ?。?)運行可

27、行性</b></p><p>  系統(tǒng)設計并運行于當前流行的Windows系列操作系統(tǒng),具有Windows傳統(tǒng)的操作風格,僅要求系統(tǒng)帶有JVM(java虛擬機)。此文本編輯器操作簡單,界面友好,用戶可以立即使用。總之,系統(tǒng)具有較好的運行可行性。</p><p>  綜上所述,開發(fā)一個專門的java文本編輯器是可行的。</p><p><b> 

28、 3 用戶需求分析</b></p><p><b>  3.1 用戶調查</b></p><p>  經過詳細的調研,并多次與初學java潛在用戶進行研討后,首先加深了對java文本管理器的的深刻了解,其次,充分熟悉java源代碼編輯,編譯和運行。</p><p>  3.2 確定目標系統(tǒng)的功能</p><p&

29、gt;  通過詳細的用戶調查,可以基本確定目標系統(tǒng)要達到的目標了。</p><p>  需求分析的任務是確定功能必須完成的工作,也就是對目標系統(tǒng)提出完整、準確、清晰、具體的要求。在經過多方了解和調查后,基本清楚了此文本編輯器的功能要求。</p><p>  必須完成的功能如下:</p><p><b>  文本新建功能;</b></p&g

30、t;<p><b>  文本打開功能; </b></p><p><b>  文本保存功能;</b></p><p><b>  字符串查詢功能;</b></p><p><b>  源文件編譯功能;</b></p><p> ?。?) 代碼

31、運行功能。</p><p>  4 系統(tǒng)設計與開發(fā)環(huán)境</p><p>  系統(tǒng)設計一般分為總體設計和詳細設計。經過需求分析階段的工作,已經清楚系統(tǒng)必須完成的工作,下面的工作就應該是決定“如何做”的問題。總體設計的基本目的就是“概括地說系統(tǒng)應該如何實現(xiàn)?”。另一方面的主要工作是設計軟件的結構,即確定系統(tǒng)都由哪些模塊組成及模塊之間的相互關系。</p><p>  4

32、.1系統(tǒng)相關類的設計</p><p>  圖4-1 Editor繼承了JFrame類</p><p>  圖4-2 是本設計中用到的JComponent及其擴展類的總括。</p><p>  圖4-3 本圖顯示復制,粘貼,剪貼,動畫的顯示停止,啟動,暫停事件繼承ActionListener類</p><p>  圖4-4 FileCh

33、oose類繼承了JFileChoose類;此文件選擇器能夠打開和保存文件</p><p>  4.2 開發(fā)語言及其開發(fā)環(huán)境</p><p>  4.2.1開發(fā)語言概述</p><p>  Sun公司在Java語言的白皮書中是這樣定義Java的:</p><p>  Java是一個簡單的、面向對象的、分布的、健壯的、安全的、與平臺無關的、可移植

34、的、高性能的、多線程的,以及動態(tài)的解釋型語言。</p><p>  Java是一種簡單的語言。它用到的概念不多,而且多為程序員所熟悉。如果你是一名程序員,掌握Java對你來說是易如反掌的事。即使你沒有學過任何編程語言,學習Java也要比學習C++要容易的多。</p><p>  由于Java最初是為控制電子產品設計的,因此它必須簡單明了。為了保證這種簡單性,Java去掉了C++中許多復雜的

35、、冗余的、有二義性的概念,例如操作符重載、多繼承、數(shù)據(jù)類型自動轉換等。為了將程序員從復雜的內存管理的負擔中解脫出來,同時也是為了減少錯誤,Java使用了自動內存垃圾收集機制,程序員只要在需要的時候申請即可,不需要釋放,而由Java自己來收集、釋放內存中的無用的塊。</p><p>  Java是一種支持分布式操作的程序設計語言。使用Java提供的URL類,用戶可以象訪問本地文件一樣訪問網絡上的對象,使用非常方便。

36、在客戶機/服務器的模式下,Java還可以將運算從服務器端分散到客戶端,提高系統(tǒng)的效率,避免了服務器的瓶頸制約。Java的網絡類庫支持分布式的編程。Socket類提供可靠的流式網絡的連接,支持TCP/IP協(xié)議。通過編寫協(xié)議句柄,程序員還可以擴充Java支持的協(xié)議集合。</p><p>  Java提供非常有效的安全控制。由于Java應用于網絡程序的開發(fā),因而安全性變的至關重要。因為Java小程序需要下載到客戶端解釋

37、執(zhí)行,所以,如果沒有安全控制,就會給一些網絡黑客以可乘之機,這對用戶來說是非常危險的。所幸的是,Java的安全機制可以有效的防止病毒程序的產生、下載程序對本地文件系統(tǒng)的破壞,以及網絡黑客竊取密碼和入侵。</p><p>  Java是一種非常健壯的語言。因為在Java中使用了以下手段:</p><p>  自動內存垃圾收集機制。Java自動收集無用的內存單元,進而防止了由于內存泄漏導致的動

38、態(tài)內存分配問題。</p><p>  完善的異常處理機制,既簡化了錯誤處理任務和恢復,也增加了程序的可讀性。</p><p>  Java具有非常好的平臺無關性和可移植性。因為Java最初是為對電子產品編程而設計的,所以它具有完美的平臺無關性。它使用一種與平臺無關的代碼──字節(jié)碼,而不是通常的特定機器上的機器碼,由平臺上的Java虛擬機中的Java解釋器解釋執(zhí)行。Java虛擬機是免費的,在

39、許多平臺上都有。</p><p>  Java提供了良好的可移植性。使用Java作為編程語言,只要進行一次程序開發(fā)工作,所開發(fā)的程序不需要經過任何改動,便能在各種平臺上運行。Java使用兩種方法使Java的應用程序不依賴與具體的系統(tǒng):</p><p>  采用基于國際標準的數(shù)據(jù)類型。Java的原始數(shù)據(jù)類型在任何機器上都是一樣的,例如整型總是32位,長整型總是64位等。</p>

40、<p>  Java是一種高性能的語言?!棒~與熊掌不可兼得”,通常,健壯性、安全性、平臺無關性、可移植性等方面的提高總是要以犧牲性能為代價的。Java也不例外,Java的內存管理增加了運行時系統(tǒng)的復雜性,因為Java運行時系統(tǒng)必須內嵌一個內存管理模塊;同樣,Java程序的解釋執(zhí)行的效率也要低于直接執(zhí)行編譯后的源碼的效率。但是Java采用了一些很好的措施來彌補這些性能上的差距:</p><p>  生成

41、高效的字節(jié)碼。Java字節(jié)碼的設計充分考慮了性能的因素,字節(jié)碼的格式簡單,解釋器可以生成高效的機器碼。</p><p>  提供了即時編譯和嵌入C代碼的可選措施。即時編譯是指在運行時把字節(jié)碼編譯成機器碼。</p><p>  4.2.2 Java開發(fā)環(huán)境——JDK的介紹</p><p>  在Sun公司推出Java語言的同時,也推出了Java的一系列開發(fā)工具,如JD

42、K(Java Developer’s Kit)。JDK是可以從網上免費下載的Java開發(fā)工具集。隨后,其它一些著名的公司也相繼推出了自己的Java開發(fā)工具,例如Microsoft公司的Visual J++,Borland公司的JBuilder,IBM公司的VisualAge for Java,Synmentac的Café等。本節(jié)中將簡單的介紹一下Sun公司的JDK;至于Microsoft公司的Visual J++,將是本書其它

43、章節(jié)重點介紹的內容。</p><p>  JDK是Sun公司推出的Java開發(fā)工具集,由于Sun公司是Java語言的創(chuàng)始者和Java規(guī)范的制定者,所以JDK自然是最權威的Java開發(fā)工具。您寫的Java程序是否符合Java語言規(guī)范的要求,用JDK提供的Java編譯器一試便知。市場上其它公司的Java開發(fā)工具有的在某些地方并不完全遵從Java語言規(guī)范,例如Microsoft公司的Visual J++,但是JDK卻絕

44、對和Java語言規(guī)范保持一致,而且每當有新的Java語言規(guī)范推出時,就會有相應的JDK同時推出。當前JDK已經推出了其最新版本──JDK1.6</p><p>  4.3 環(huán)境變量的設置</p><p>  4.3.1.環(huán)境變量的作用</p><p>  JAVA程序能夠順利編譯需要兩個環(huán)境變量,一個是PATH(path),一個是CLASSPATH(classpat

45、h)。那么這兩個環(huán)境變量代表什么呢?或者說究竟在JAVA程序編譯中有什么作用呢?這就要涉及到WINDOWS的基本知識了。在WINDOWS環(huán)境中,每一條能用的指令都保存在硬盤的“某個角落”,比如說指令NOTEPAD(WINDOWS的記事本指令,在C:\WINNT目錄下),那么在DOS命令提示符下直接輸入NOTEPAD就可以打開記事本了。但是一旦我們把C:\WINNT目錄下的NOTEPAD.EXE這個可執(zhí)行文件移開(比如說我們現(xiàn)在把它“剪切

46、”到D盤根目錄下)我們再在DOS提示符下直接輸入NOTEPAD時就無法再打開記事本了,但是我們在DOS下改變路徑輸入D:\NOTEPAD(或者先輸入cd D: 在輸入NOTEPAD也行)就可以打開記事本了。這就是說在我們直接輸入NOTEPAD的時候,其實其默認路徑就是C:\WINN。假設我們要運行一個JAVA程序(hello.java)就要先把它的class文件移動到JAVA里的bin目錄下 然后打開DOS,把路徑改到JAVA的BIN

47、目錄下 </p><p>  “假設我們要運行一個JAVA程序(hello.java)就要先把它的class文件移動到JAVA里的bin目錄下”,為什么要這樣做呢?因為我們在用到java hello.class這條指令的時候,DOS不知道hello.class這個文件在哪里,他就先到當前目錄中去找,如果找到就運行,否則失敗。當然,如果說hello.java在D盤根目錄下,你也可以用java D:\hello.cl

48、ass這條指令來運行,但是每次這樣做也確實夠麻煩。WINDOWS就提供了這樣一個環(huán)境變量——classpath,如果沒有就應該新建一個。我們把D:\這個路徑賦值給classpath,那么下次在運行java hello.java的時候就先在當前目錄中到,如果找到就運行,如果找不到就在classpath的值路徑下去找,找到就運行,找不到就失敗。</p><p>  以上闡述了path和classpath兩個環(huán)境變量的

49、作用,如果設置好了。java的編譯和運行就基本上沒什么問題了。</p><p>  4.3.2 如何設置環(huán)境變量</p><p>  Windows下JAVA環(huán)境變量的設置祥解:</p><p>  Windows下JAVA用到的環(huán)境變量主要有3個,JAVA_HOME、CLASSPATH、PATH。下面逐個分析。</p><p>  JAVA

50、_HOME指向的是JDK的安裝路徑,如x:\JDK_1.4.2,在這路徑下你應該能夠找到bin、lib等目錄。值得一提的是,JDK的安裝路徑可以選擇任意磁盤目錄,不過建議你放的目錄層次淺一點,如果你放的目錄很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……</p><p><b>  設置方法如下:</b></p><p

51、>  JAVA_HOME=x:\JDK_1.4.2</p><p>  PATH環(huán)境變量原來Windows里面就有,你只需修改一下,使他指向JDK的bin目錄,這樣你在控制臺下面編譯、執(zhí)行程序時就不需要再鍵入一大串路徑了。設置方法是保留原來的PATH的內容,并在其中加上%JAVA_HOME%\bin (注,如果你對DOS批處理不了解,你可能不明白%%引起來的內容是什么意思;其實這里是引用上一步設定好的環(huán)境變

52、量JAVA_HOME,你寫成x:\JDK_1.4.2也是可以的;你可以打開一個控制臺窗口,輸入echo %JAVA_HOME%來看一下你的設置結果) :</p><p>  PATH=%JAVA_HOME%\bin;%PATH%</p><p>  同樣,%PATH%是引用以前你設置的PATH環(huán)境變量,你照抄以前的值就行了。</p><p>  CLASSPATH環(huán)

53、境變量我放在最后面,是因為以后你出現(xiàn)的莫名其妙的怪問題80%以上都可能是由于CLASSPATH設置不對引起的,所以要加倍小心才行。</p><p>  CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar。</p><p>  首先要注意的是最前面的".\;",這個是告訴JDK,搜索CLASS時先查找當前目錄的CLASS文件——為什么這樣搞,這是

54、由于LINUX的安全機制引起的,LINUX用戶很明白,WINDOWS用戶就很難理解(因為WINDOWS默認的搜索順序是先搜索當前目錄的,再搜索系統(tǒng)目錄的,再搜索PATH環(huán)境變量設定的)。</p><p>  為什么CLASSPATH后面指定了tools.jar這個具體文件?不指定行不行?這個是由java語言的import機制和jar機制決定的。</p><p>  具體的設定方法: win

55、2k\xp用戶右鍵點擊我的電腦->屬性->高級->環(huán)境變量,修改下面系統(tǒng)變量那個框里的值就行了。</p><p>  win9x用戶修改autoexec.bat文件,在其末尾加入: </p><p>  set JAVA_HOME=x:\JDK_1.4.2</p><p>  set PATH=%JAVA_HOME%\bin;%PATH%</

56、p><p>  set CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar</p><p>  5 關鍵技術和源代碼的實現(xiàn)</p><p>  5.1 關鍵技術剖析</p><p>  JFrame類的setJMenuBar的方法為窗口添加菜單欄JMenuBar,JMenuBar的add方法為菜單欄添加菜單JMenu,

57、JMenu的add方法為菜單添加菜單項JMenuItem,它們之間的關系是樹形關系。需要為每個菜單項添加事件處理器,當單擊菜單項時,觸發(fā)事件。</p><p>  JToolBar為工具欄,可以在工具欄中添加按鈕或者標簽。JButton的setToolTipText方法設置按鈕的提示信息,當鼠標停留在按鈕上若干時間后,會顯示提示信息。</p><p>  分隔窗格JSplitPane類用于

58、分隔兩個組件,可以由用戶交互的調整組件的大小。根據(jù)分隔條的方向,把JSplitPane分成有兩種:VERTICAL_SPLIT表示水平分隔條,HORIZONTAL_SPLIT表示垂直分隔條。setDividerlocation方法設置分隔條的坐標。</p><p>  JTree類實現(xiàn)樹結構,樹中有多個節(jié)點,但是且只有一個根節(jié)點。通用的節(jié)點類型為DefaultMutableTreeNode,它的add方法為節(jié)點添

59、加子節(jié)點。</p><p>  JTextArea文本域顯示文件內容,將它放置在JScrollPane中,使其具備滾動條。setCareColor方法設置插入光標的顏色;addCareListener方法為文本域設置光標事件處理器,當光標位置改變時觸發(fā)該類事件;getText和setText方法獲得和設置文本域的內容;select方法高亮顯示文本域中指定的文本;setCaretPositin方法獲得光標在文本域中

60、的位置;getLineOfOffset方法獲得指定位置在文本域中的行號;getLineStartOffset方法獲取指定行的第一個字符在文本域中的位置;getLineEndOffset方法獲取指定行的最后一個字符在文本去中的位置。</p><p>  JTabbedPane實現(xiàn)多頁面的管理,每個頁面有一個標簽。addTab方法添加頁面;addChangeListener方法設置頁面切換事件處理器;setSelec

61、tedIndex方法設置選擇頁面編號;getSelectendIndex方法獲取被選擇的頁面的編號;setTitleAt方法設置指定頁面標簽;getTitleAt方法獲取指定頁面的標簽。</p><p>  組件的addKeyListener方法為組件注冊鍵盤事件管理器,鍵盤事件管理器必須實現(xiàn)KeyListener接口,或者繼承KeyAdapter,keyPressed方法處理按鍵事件,參數(shù)類型為keyEvent

62、,KeyEvent的getKeyCode方法可以獲得備按下的鍵的代碼;isControlDown方法判斷Ctrl鍵是否被按下;isAltDown方法判斷Alt鍵是否被按下。</p><p>  JFileChoose文件選擇器能夠打開和保存文件,提交選擇時approveSelection方法被調用,取消選擇時cancelSelection方法被調用;getCurrentDirectory方法獲得文件選擇器當前目錄

63、,getSelectedFile方法獲得文件選擇器選擇的文件。</p><p>  JOptionPane用于彈出標準的對話框,類型有很多種。showConfirmDialog方法彈出確認信息對話框,要求用戶確認或者取消;showMessageDialog方法彈出提示信息提示框;showInputDialog方法彈出輸入信息對話框,要求用戶輸入信息。</p><p>  在編譯和運行Jav

64、a程序時,需要調用本地的java和javac命令,通過Runtime的exec方法可以調用本地命令。</p><p><b>  5.2 源碼分析</b></p><p>  (1) Editor類</p><p><b>  /**</b></p><p>  * 一個簡單的文本編輯器,能夠編輯

65、html、java、cpp、txt文件,</p><p>  * 并支持java的編譯與運行</p><p><b>  */</b></p><p>  public class Editor extends JFrame {</p><p>  /********菜單欄、菜單和菜單項*********/</p&

66、gt;<p>  JMenuBar menuBar = new JMenuBar();</p><p>  JMenu fileMenu = new JMenu("File");</p><p>  JMenu optionMenu = new JMenu("Option");</p><p>  JMenu a

67、dvanceMenu = new JMenu("Advance");</p><p>  JMenu helpMenu = new JMenu("Help");</p><p>  JMenu editMenu = new JMenu("Edit");</p><p>  JMenuItem newMenu

68、Item = new JMenuItem("new");</p><p>  JMenuItem openMenuItem = new JMenuItem("Open");</p><p>  JMenuItem saveMenuItem = new JMenuItem("Save");</p><p> 

69、 JMenuItem exitMenuItem = new JMenuItem("exit");</p><p>  JMenuItem findMenuItem = new JMenuItem("Find");</p><p>  JMenuItem findNextMenuItem = new JMenuItem("Find Next&

70、quot;);</p><p>  JMenuItem replaceMenuItem = new JMenuItem("Replace");</p><p>  JMenuItem compileMenuItem = new JMenuItem("Compile");</p><p>  JMenuItem buildMen

71、uItem = new JMenuItem("Build");</p><p>  JMenuItem stopFlashMenuItem = new JMenuItem("Stop Flash");</p><p>  JMenuItem startFlashMenuItem = new JMenuItem("Start Flash&qu

72、ot;);</p><p>  JMenuItem helpMenuItem = new JMenuItem("Help");</p><p>  JMenuItem copyMenuItem = new JMenuItem("Copy");</p><p>  JMenuItem cutMenuItem = new JMen

73、uItem("Cut");</p><p>  JMenuItem pasteMenuItem = new JMenuItem("Paste");</p><p>  /********文件內容的顯示****/</p><p>  //用多個文本域存放多個文件內容,文本域放在JScrollPane里</p>&l

74、t;p>  //而JScrollPane放在JTabbedPane中,這就是一個多頁面的布局</p><p>  //多個文本域,每個文本域顯示一個文件的內容</p><p>  JTextArea[] fileTextAreas = new JTextArea[10];</p><p>  //編譯或者運行時的控制臺信息</p><p&g

75、t;  JTextArea consoleTextArea = new JTextArea();</p><p>  JScrollPane[] fileScrollPanes = new JScrollPane[10];</p><p>  JScrollPane consoleScrollPane;</p><p>  //多個文本域放在不同tab里</p

76、><p>  JTabbedPane fileTabbedPane = new JTabbedPane();</p><p>  /**********工具欄以及工具欄上的按鈕**********/</p><p>  JToolBar toolBar = new JToolBar();</p><p>  JButton openButton

77、= new JButton(new ImageIcon(loadImage("image/open.gif")));</p><p>  JButton newButton = new JButton(new ImageIcon(loadImage("image/new.gif")));</p><p>  JButton saveButton =

78、new JButton(new ImageIcon(loadImage("image/save.gif")));</p><p>  JButton helpButton = new JButton(new ImageIcon(loadImage("image/help.gif")));</p><p>  JButton exitButton =

79、new JButton(new ImageIcon(loadImage("image/close.gif")));</p><p>  JButton compileButton = new JButton(new ImageIcon(loadImage("image/compile.gif")));</p><p>  JButton buildB

80、utton = new JButton(new ImageIcon(loadImage("image/build.gif")));</p><p>  JButton copyButton = new JButton(new ImageIcon(loadImage("image/copy.gif")));</p><p>  JButton cutB

81、utton = new JButton(new ImageIcon(loadImage("image/cut.gif")));</p><p>  JButton pasteButton = new JButton(new ImageIcon(loadImage("image/paste.gif")));</p><p>  //該文本域顯示當前光標

82、在當前文本域中的行號</p><p>  JTextArea showLineNoTextArea = new JTextArea();</p><p>  //對話框窗體,程序中所有對話框都顯示在該窗體中</p><p>  JFrame dialogFrame = new JFrame();</p><p>  /*****文件名以樹型結

83、構在左邊顯示*******/</p><p>  JTree tree;</p><p>  DefaultMutableTreeNode root;</p><p>  DefaultMutableTreeNode[] nodes = new DefaultMutableTreeNode[10];</p><p>  /*******組件之

84、間的分隔欄******/</p><p>  JSplitPane leftRightSplitPane;</p><p>  JSplitPane lineNoConsoleSplitPane;</p><p>  JSplitPane treeFlashSplitPane;</p><p>  JSplitPane tabbedLineN

85、oSplitPane;</p><p>  /**********文件選擇、存儲相關********/</p><p><b>  //文件過濾器</b></p><p>  Filter fileFilter = new Filter();</p><p><b>  //文件選擇器</b><

86、;/p><p>  FileChooser fileChooser = new FileChooser();</p><p>  // 文件讀寫控制,0表示文件選擇器讀文件,1文件選擇器標示寫文件</p><p>  int fileChooser_control = 0;</p><p>  FileWriter fileWriter;<

87、/p><p>  // tabbedPane中tab頁的當前數(shù)量</p><p>  int tb = 1;</p><p>  int find_control = 0;</p><p>  //文本域的控制器,指向當前操作的文本域</p><p>  int textAreas_control = 0;</p&g

88、t;<p>  //當前文本域中的文本</p><p>  String currentTextInTextArea;</p><p>  //標志文件是否為新建的,如果是新建的文件,為true</p><p>  boolean[] newFileFlags = new boolean[10];</p><p>  //存放打

89、開文件所在的目錄</p><p>  String[] directory = new String[10];</p><p>  /********查找替換相關****/</p><p>  //正在查找的字符串及其長度</p><p>  String findWord;</p><p>  int fingWor

90、dLength;</p><p>  //保存正在查找的字符串在文本域中的文本的位置</p><p>  int findIndex;</p><p>  //被替換的文本的長度</p><p>  int replaceLength = 0;</p><p>  /********用于顯示Flash的控制器****/

91、</p><p>  JLabel flashLabel = new JLabel(new ImageIcon(loadImage("image/Juggler0.gif")));</p><p>  Timer timer = new Timer(100, new Act_timer());</p><p>  int timerControl

92、 = 0;</p><p>  /********幫助相關****/</p><p>  Font font = new Font("Courier", Font.TRUETYPE_FONT, 14);</p><p>  JTextArea helpTextArea = new JTextArea();</p><p>

93、  JFrame helpFrame = new JFrame("Help");</p><p><b>  //構造函數(shù)</b></p><p>  public Editor() {</p><p>  super("文本編輯器");</p><p>  //為窗體添加鍵盤事件

94、處理器</p><p>  //下面這一行非常重要,表示窗體能夠接受焦點。</p><p>  //如果沒有這一句,按鍵盤會無效。</p><p>  this.setFocusable(true);</p><p>  this.addKeyListener(new MyKeyListener());</p><p>

95、;  //為窗體添加窗口事件處理器</p><p>  this.addWindowListener(new WindowListener());</p><p><b>  //初始化</b></p><p><b>  init();</b></p><p>  setLocation(200,

96、 200);</p><p>  setVisible(true);</p><p><b>  pack();</b></p><p><b>  //初始時啟動動畫</b></p><p>  timer.start();</p><p><b>  }<

97、/b></p><p>  該類是編輯器的主類。</p><p>  init方法初始化編輯器上的所有控件。首先初始化10個文本域,表示該編輯器能同時編輯10個文件,并構建10個默認的樹節(jié)點DefaultMutableTreeNode對象。初始化界面左邊的JTree,設置它的根節(jié)點為“正在編輯的文件”,使用DefaultMutableTreeNode的add方法為根節(jié)點添加一個子節(jié)點

98、,表示編輯器初始狀態(tài)時時新建一個文件。JTree的setEditable方法設置樹不可編輯。</p><p>  初始化控制臺的文本域consoleTextArea,用于輸出編譯和運行Java的信息。將控制臺文本域放置在一個JScrollPane內,使得他具有滾動條。</p><p>  初始化顯示當前光標所在行數(shù)的文本域showLineNoTextArea,當用戶移動編輯器的光標時,在該

99、文本域中顯示光標行數(shù)會跟著發(fā)生變化。通過setEnabled方法使得它不可編輯。</p><p>  初始化菜單,包括如下幾個菜單:“File”,“Option”,“Advance”,“Help”,“Edit”。每個菜單下都設置多個菜單項。</p><p>  初始化工具欄,包括如下幾個工具項:“New”,“Open”,“Save”,“Exit”,“Help”,“Complie”,“Bui

100、ld”,“Copy”,“Cut”,“Paste”。通過JButton的setToolTipText方法為工具項設置提示信息,當用戶鼠標停留在按鈕上時,顯示提示信息。</p><p>  將各大組件用JSplitPane組織起來,使得組件之間的大小可以任意的調節(jié)。最后把這些組件都放在窗口中。</p><p>  initHelp方法初始化幫助信息。以表格的形式顯示編輯器的快捷鍵信息,使用了J

101、Table類實現(xiàn)表格,表格的列名是一個字符串數(shù)組,表格的數(shù)據(jù)是一個二維數(shù)組。helpTextArea文本域顯示使用編輯器全部功能需要做的配置。</p><p>  exitEdior方法退出編輯器。退出前通過JOptionPane的showXonfirmDialog方法彈出“確認退出”的對話框,當用戶選擇JOptionPane.YES_OPTION時才真正退出。</p><p>  loa

102、dImage方法加載圖片。根據(jù)圖片名,使用Class的getResource方法獲得圖片的URL,通過getContent方法打開URL,獲得圖片的輸入流,通過組件的createImage方法,把輸入流構造成一個Image對象。</p><p>  (2) MyKeyListener類</p><p><b>  * 鍵盤事件處理器</b></p>&

103、lt;p><b>  */</b></p><p>  public class MyKeyListener extends KeyAdapter {</p><p>  // 覆蓋父類的keyPressed方法,處理鍵被按下時的事件。</p><p>  public void keyPressed(KeyEvent e) {</

104、p><p>  // 按F12打開文件</p><p>  if (e.getKeyCode() == KeyEvent.VK_F12){</p><p>  (new Act_OpenFile()).actionPerformed(null);</p><p><b>  }</b></p><p>

105、;  // 按Ctrl加S鍵保存文件</p><p>  else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S){</p><p>  (new Act_SaveFile()).actionPerformed(null);</p><p><b>  }</b>

106、;</p><p>  // 按Alt鍵查找</p><p>  else if (e.isAltDown()){</p><p>  (new Act_Find()).actionPerformed(null);</p><p><b>  }</b></p><p>  // 按F3查找下一個

107、</p><p>  else if (e.getKeyCode() == KeyEvent.VK_F3){</p><p>  (new Act_FindNext()).actionPerformed(null);</p><p><b>  }</b></p><p><b>  // 按F4替換</

108、b></p><p>  else if (e.getKeyCode() == KeyEvent.VK_F4){</p><p>  (new Act_Replace()).actionPerformed(null);</p><p><b>  }</b></p><p>  // 按Ctrl加N新建文件<

109、/p><p>  else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_N){</p><p>  (new Act_NewFile()).actionPerformed(null);</p><p><b>  }</b></p><p> 

110、 // 按Ctrl加E退出編輯器</p><p>  else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_E){</p><p>  (new Act_ExitEditor()).actionPerformed(null);</p><p><b>  }</b>

111、;</p><p>  // 按F5運行Java程序</p><p>  else if (e.getKeyCode() == KeyEvent.VK_F5){</p><p>  (new Act_Build()).actionPerformed(null);</p><p><b>  }</b></p>

112、<p>  // 按F9編譯Java源代碼</p><p>  else if (e.getKeyCode() == KeyEvent.VK_F9){</p><p>  (new Act_Compile()).actionPerformed(null);</p><p><b>  }</b></p><p&

113、gt;  // 按Ctrl加H顯示幫助</p><p>  else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_H){</p><p>  (new Act_Help()).actionPerformed(null);</p><p><b>  }</b>&l

114、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b></p><p>  該類用于處理鍵盤事件,繼承KeyAdpter。</p><p>  覆蓋了KeyAdapter的keyPress

115、ed方法,處理鍵盤被按下的事件,參數(shù)為KeyEvent類型。通過KeyEvent的getKeyCode方法獲得被按下鍵盤的碼,isControlDown方法判斷Ctrl鍵是否被按下,isAltDown方法判斷Alt鍵是否被按下。根據(jù)不同的按鍵組合,調用不同的方法去處理。</p><p>  (3) FileChoose類</p><p><b>  /**</b>&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論