java程序員之旅eclipse開發(fā)技術(shù)詳解本書第4章_第1頁
java程序員之旅eclipse開發(fā)技術(shù)詳解本書第4章_第2頁
java程序員之旅eclipse開發(fā)技術(shù)詳解本書第4章_第3頁
java程序員之旅eclipse開發(fā)技術(shù)詳解本書第4章_第4頁
java程序員之旅eclipse開發(fā)技術(shù)詳解本書第4章_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第四章

SWT本章將把SWT做簡單的介紹,然后以一個簡單實例作為SWT的起步,能夠讓讀者對SWT有一個基本的認(rèn)識。然后把SWT和SWING做一個簡單的比較。在學(xué)習(xí)完本章后,讀者能夠了解SWT結(jié)構(gòu)和核心內(nèi)容。4.1 SWT簡介SWT(Standard

Widget

Toolkit)是一個開源GUI編程框架。在此之前,Sun提供了CUI開發(fā)工具包AWT,AWT使用原生窗口部件,但是出現(xiàn)了一些問題,在此之后,Sun又創(chuàng)建了新的框架SWING,SWING雖然解決了AWT的問題,卻與原生窗口不同。SWT是Eclipse組織為開發(fā)EclipseIDE環(huán)境所開發(fā)的底層圖形用戶界面API。從功能上,和AWT/SWING相同。徹底解決了AWT/SWING框架上的問題,SWT是通過JNI(JAVA本地調(diào)用)來訪問原生窗口部件。無論在外觀和性能,都大大超越了Sun公司的AWT和SWING。4.2 SWT包SWT是Eclipse圖形API的基礎(chǔ),本節(jié)將介紹SWT中最常用到的子包。1、org.eclipse.swt.widget2、org.eclipse.swt.layout

3、org.eclipse.swt.events5、org.eclipse.swt.printer6、org.eclipse.swt.custom7、org.eclipse.swt.ole.graphics4.3 第一個SWT程序本節(jié)介紹創(chuàng)建與運(yùn)行HelloWorld。4.3.1

創(chuàng)建項目創(chuàng)建SWT項目與前面講到的創(chuàng)建項目類似,不過,

Eclipse中沒有創(chuàng)建SWT項目的向?qū)?,所以我們使用?chuàng)建插件項目,然后在插件項目中寫SWT程序。具體步驟如下。單擊主菜單“文件”|“新建”|“項目”菜單項,彈出新建項目對話框,選擇“插件開發(fā)”|“插件項目”,單擊“下一步”按鈕。進(jìn)入到“新建插件項目”對話框,填寫項目名,單擊“下一步”按鈕。進(jìn)入下一個對話框,所有選項為默認(rèn),單擊“完成”按鈕。4.3.2 創(chuàng)建HelloWorld并運(yùn)行創(chuàng)建完了插件項目,接下來創(chuàng)建一個包(

.sino.swt),在包下創(chuàng)建一個類HelloWorld.java,然在這個類中填寫方法代碼,目的是顯示一個名為HelloWorld的窗口以上程序,首先創(chuàng)建一個Display對象,用于負(fù)責(zé)管理事件循環(huán)和線程之間的通信,然后創(chuàng)建一個主窗口Shell對象。用Display來支撐Shell的顯示,如果有其他組件,要創(chuàng)建在Shell中。最后釋放Display資源。4.3.3 HelloWorld中添加組件上面的介紹中,只是簡單的輸出了一個HelloWorld的界面,接下來,在HelloWorld中添加一些組件,比如按鈕、文本框等?,F(xiàn)在,給界面添加一個按鈕Button,這時需要使用到

org.eclipse.swt.widgets.Button中的內(nèi)容。需要在程序頂部添加import語句。4.4

添加事件在前面的介紹中,演示了彈出HelloWorld窗口、在

HelloWorld中添加按鈕組件,本節(jié)將介紹在窗口中添加事件(比如單擊HelloWorld按鈕,彈出一個顯示HelloWorld的對話框),再簡單介紹如何在事件中訪問變量。。4.4.1

匿名內(nèi)部類Button對象的添加監(jiān)聽方法內(nèi)直接創(chuàng)建了一個匿名內(nèi)部類new

SelectionAdapter(),它創(chuàng)建的是繼承于

SelectionAdapte的類,并且直接改寫了父類的方法。這就是匿名內(nèi)部類,匿名內(nèi)部類多數(shù)用在GUI做處理事件的監(jiān)聽。雖然匿名內(nèi)部類比較常用,而且也比較提倡使用匿名內(nèi)部類,不過,它也有缺點(diǎn)。添加一個監(jiān)聽,就要寫一個內(nèi)部類,按鈕過多,視覺上比較亂,不容易管理維護(hù)。個事件處理是由嵌套程序組成,代碼不夠集中,也不容易進(jìn)行管理和維護(hù)。4.4.2

命名內(nèi)部類為了解決匿名內(nèi)部類中出現(xiàn)的問題,可以使用命名內(nèi)部類的方式。可以為處理類進(jìn)行命名,只需要繼承

SelectionAdapter類即可。而且代碼可以集中到一起,容易管理和維護(hù)。4.4.3

外部類外部類寫法和命名內(nèi)部類基本相同,只是將兩個類分開。一個類專門用來寫監(jiān)聽方法。這樣,可以幾個類公用一個監(jiān)聽類。缺點(diǎn)就是增加了一個源文件。4.4.4

實現(xiàn)監(jiān)聽接口如果讓HelloWorld類繼承SelectionAdapter類,這樣的話,HelloWorld就成了一個監(jiān)聽器,然后將將方法直接寫在HelloWorld里面,也可以完成以上的效果,這種寫法看似比較簡潔,但是,事件的方法和其他的方法寫在了同一個類中,容易引起誤讀。以上的寫法中是繼承SelectionAdapter類,也可以改為實現(xiàn)SelectionListener接口,這樣就把第一行的extendsSelectionAdapter改為important

SelectionListener,繼承SelectionAdapter和實現(xiàn)SelectionListener接口的作用是相同的,不過實現(xiàn)接口就必須實現(xiàn)接口中的所有方法,就會多一個方法:4.4.5

事件中的變量變量是在程序的運(yùn)行中,值隨時都會發(fā)生變化,變量是數(shù)據(jù)的臨時存放處。變量分為全局變量和局部變量。所謂全局變量,就是在程序的任何地方都可以使用,例如在類的開始部位聲明一個變量,那么,這個類中的所有方法都可以使用。局部變量只能在程序的一部分地方使用,例如在一個椒ㄖ猩韉謀淞浚淥椒ň臀薹ㄊ褂謾在變量的使用中,有時需要加一些關(guān)鍵字進(jìn)行修飾(比如final、static等等),或者使用一些技巧來進(jìn)行變量的傳至。1.變量添加final修飾符Java中,final意為“終態(tài)的”,一個變量前面添加

final修飾符,就會變成常量,值一旦取定,就無法再改變。其中,字符串str被final修飾后,就不可以在給str賦值,整型變量i,被final修飾并賦初值后,i變?yōu)橐粋€常量,值為1,不可改變。在事件代碼中,需要將變量前面加final修飾,否則無法在匿名內(nèi)部類中使用。如前面講到的HelloWorld例子。2.全局變量和局部變量全局變量又稱為外部變量,是在方法或函數(shù)的外部定義的變量,本身不屬于任何方法或者函數(shù),只屬于源程序文件,作用域整個源程序文件。使用全局變量擴(kuò)大了變量的有效使用范圍,例如:首先創(chuàng)建一個全局變量str,創(chuàng)建一個方法Hello,用于輸出str內(nèi)容,然后再主方法中進(jìn)行調(diào)用,輸出“HelloWorld”局部變量又稱為成員變量,只在特定的過程或函數(shù)中可以訪問的變量,局部變量是相對于全局變量而言的。和前面不同的是,這段代碼使用的是局部變量。首先創(chuàng)建一個方法

Hello,然后在方法內(nèi)創(chuàng)建一個變量str,并賦值為“HelloWorld!”,打印輸出str,然后使用主方法調(diào)用Helo方法。3.變量前加static修飾變量前面加static,表示它是一個靜態(tài)變量,可以在

static修飾的類中調(diào)用(如main主方法),如果不用static修飾變量,則無法在主方法中直接調(diào)用。首先定義一個全局變量str,并用static修飾,然后直接在主方法中打印輸出str。4.傳值使用命名內(nèi)部類,將HelloWorld寫成傳值的方式,將變量值打印輸出。首先創(chuàng)建兩個命名內(nèi)部類a和b,在b類中創(chuàng)建方法print(),并設(shè)置參數(shù)為字符串類型str,用于輸出參數(shù)str,在a類中創(chuàng)建方法Hello,聲明變量string,并賦值為“HelloWorld!”,調(diào)用b類中的print方法,并傳值string。最后在主方法中調(diào)用Hello()方法,打印輸出“Hello

World!”。4.5

事件監(jiān)聽器在前面的列子中,使用到了SelectionListener,這就是一個監(jiān)聽器,除此之外,Eclipse還有其他的時間類型和相應(yīng)的監(jiān)聽器,比如鍵盤事件監(jiān)聽器、鼠標(biāo)事件監(jiān)聽器等。

SWT中有關(guān)于事件的處理類,這些類都打包在

org.eclipse.swt.events里。本節(jié)主要介紹常用幾種監(jiān)聽器的使用方法。4.5.1

注冊監(jiān)聽器有了事件監(jiān)聽器和事件類型,還需要將該監(jiān)聽器對象注冊給控件對象。注冊的形式一般是addXXXListener,比如前面用到的button.addSelectionListener。可以為一個空間對象注冊多個監(jiān)聽器,不同空間注冊的監(jiān)聽器類型是不一樣的。4.5.2

SelectionListener這個監(jiān)聽器是最長用到的監(jiān)聽器,它有兩個方法,widegetSelected方法和widgetDefaultSelected方法。widegetSelected方法。widgetDefaultSelected方法。在這兩個方法中,使用到的參數(shù)都是SelectionEvent。這個對象最常用的方法是獲取getSource(),這個方法的作用是獲取事件源,比如獲取到被單擊的控件對象。4.5.3

鼠標(biāo)事件監(jiān)聽器鼠標(biāo)事件是比較常用到的事件。涉及到鼠標(biāo)的單擊、雙擊等。MouseListener中有3個方法。mouseDoubleClickmouseDownmouseUp4.5.4

鍵盤事件監(jiān)聽器鍵盤事件監(jiān)聽器KeyListener有兩個事件方法。keyPressedkeyReleased4.5.5

其他監(jiān)聽器在SWT事件中,還有很多的監(jiān)聽器,比如焦點(diǎn)事件監(jiān)聽器FocusListener、注銷事件監(jiān)聽器DisposeListener等。有些組件還有自己專用的監(jiān)聽器,比如Shell窗口的ShellListener,使用ShellLisener可以監(jiān)聽窗口的關(guān)閉事件,通過其中的方法設(shè)置,可以是窗口的關(guān)閉按鈕失效。通用監(jiān)聽器Listener,可以監(jiān)聽一些組件沒有聲明提供的事件,并且可以同時監(jiān)聽多個事件。4.6 SWT中的文件操作數(shù)據(jù)的輸入和輸出在Java中是一個重要的組成部分,任何的程序都需要信息的輸入和輸出。公司里將員工信息錄入計算機(jī)中,使用打印機(jī)將需要的文檔打印到紙上,都是數(shù)據(jù)的輸入和輸出。本章介紹的就是怎樣對文件進(jìn)行數(shù)據(jù)的輸入和輸出操作。4.6.1數(shù)據(jù)流Java中的輸入和輸出都是通過數(shù)據(jù)流來實現(xiàn)的,數(shù)據(jù)流是對信息輸入輸出的一種抽象,是一組有順序,有起點(diǎn)和終點(diǎn)的字符集合,就是通過緩沖機(jī)制將數(shù)據(jù)從生產(chǎn)者(如鍵盤、磁盤文件、內(nèi)存或其他設(shè)備)傳送到接受該數(shù)據(jù)的消費(fèi)者(如屏幕、文件或者內(nèi)存等)的這一過程的抽象。數(shù)據(jù)流根據(jù)單位劃分為字節(jié)流和字符流,顧名思義,字節(jié)流就是對字節(jié)進(jìn)行輸入和輸出處理,一般的數(shù)據(jù)處理都可以使用字節(jié)流,而字符流,就是對字符進(jìn)行輸入和輸出樹立,字符流只可以處理文本文件,即存在文字的文檔文件。1.字節(jié)流字節(jié)流分為輸入流和輸出流。輸入流InputStream(文件讀取對象)是一個抽象類,它是所有表示字節(jié)輸入流的類的父類,繼承它的子類要重新定義其中所定義的抽象方法。InputStream是從信息來源地(如鍵盤,內(nèi)存,磁盤等)讀取數(shù)據(jù)的抽象表示。就好比是從外界水源通過特定的管道向水箱里供水,這個管道就是輸入裝置,相當(dāng)與上面所講到的InputStream。InputStream

子類的主要方法。ByteArrayInputStream:字節(jié)數(shù)組輸入流。

FileInputStream:文件字節(jié)輸入流。

PipedInputStream:管道輸入流。

FilterInputStream:過濾字節(jié)輸入流。

ObjectInputStream:對象輸入流。

DataInputStream:包含讀取Java標(biāo)準(zhǔn)數(shù)據(jù)類型方法的輸入流。OutPutStream

子類的主要方法ByteArrayOutPutStream

字節(jié)數(shù)組輸出流FileOutPutStream

文件字節(jié)輸出流PipedOutPutStream

管道輸出流FilterOutPutStream過濾字節(jié)輸出流ObjectOutPutStream

對象輸出流DataOutPutStream

包含讀取java標(biāo)準(zhǔn)數(shù)據(jù)類型方法的輸出流InputStream 的API主要方法。1、public

int

read()2、public

int

read(byte[]

b)3、public

int

read(byte[]

b,

int

off,

int

length)其中所用到的參數(shù)參數(shù):b-讀入數(shù)據(jù)的緩沖區(qū)。off-在其處寫入數(shù)據(jù)的數(shù)組b

的初始偏移量。len-要讀取的最大字節(jié)數(shù)。OutputStream的API主要方法。1、public

void

write(int

b)2、public

void

write(byte[]

b)3、public

void

write(byte[]

b,

int

off,

int

length)4、public

void

flush()本地文件讀寫編程的基本過程。1、生成文件流對象(對文件讀文件的操作時應(yīng)該為FileInputStream類,而文件寫應(yīng)該為FileOutputStream類)。2、調(diào)用FileInputStream或FileOutputStream類中的功能函數(shù)如read()、write(int

b)等)讀寫文件內(nèi)容。3、關(guān)閉文件close()。2.字符流Reader和Writer

也是兩個抽象類,用于進(jìn)行操作的也是他們的子類,可以對不同的輸入和輸出進(jìn)行處理。Reader子類FileReader

:文件字符輸入流。BufferedReader:緩沖輸入流。CharArrayReader:

從字符數(shù)組讀取的輸入流。FilterReader

:過濾字符輸入流。InputStreamReader:將字節(jié)輸入留轉(zhuǎn)化為字符輸入流。PipedReader

:管道字符輸入流。StringReader

:字符串輸入流。Reader

API主要方法1、public

int

read()throws

IoException2、public

int

read(char[]

cbuf,

int

off,

int

len)throw

IoException3、public

void

close()Writer常用子類FileWriter

:文件字符輸出流。BufferedWriter:緩沖輸出流。CharArrayWriter:從字符數(shù)組讀取的輸出流。FilterWriter:過濾字符輸出流。InputStreamWriterr:將字節(jié)輸入留轉(zhuǎn)化為字符輸出流。PipedWriter:管道字符輸出流。StringWriter:字符串輸出流。4.6.2訪問文件內(nèi)容對文件的訪問使用到

FileInputStream/FileOutputStream類,

BufferedInputStream/BufferedOutputStream類以及

FileReader/FileWriter類等,這一節(jié)將介紹使用這幾種不同的類進(jìn)行文件的訪問。1.FileInputStream/FileOutputStream類FileInputStream(File

file)FileInputStream(Sring

name)FileInputStream(File

file)FileInputStream(String

name)FileOutputStream三種形式的構(gòu)造方法:

FileOutputStream(String

name):FileOutputStream(File

file)

溫馨提示

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

最新文檔

評論

0/150

提交評論