Java語言程序設(shè)計(自考)課件 第7、8章 輸入和輸出流、圖形界面設(shè)計_第1頁
Java語言程序設(shè)計(自考)課件 第7、8章 輸入和輸出流、圖形界面設(shè)計_第2頁
Java語言程序設(shè)計(自考)課件 第7、8章 輸入和輸出流、圖形界面設(shè)計_第3頁
Java語言程序設(shè)計(自考)課件 第7、8章 輸入和輸出流、圖形界面設(shè)計_第4頁
Java語言程序設(shè)計(自考)課件 第7、8章 輸入和輸出流、圖形界面設(shè)計_第5頁
已閱讀5頁,還剩162頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章Java語言的高級特性學(xué)習(xí)目標(biāo)掌握數(shù)據(jù)流的基本概念和主要的操作方法,能夠?qū)崿F(xiàn)基本的輸入輸出功能掌握字節(jié)數(shù)據(jù)流的基本概念,包括文件數(shù)據(jù)流、過濾器數(shù)據(jù)流、緩沖數(shù)據(jù)流等,能夠使用字節(jié)數(shù)據(jù)流的主要操作方法實現(xiàn)基本的輸入輸出功能。能夠使用串接功能完成輸入輸出功能掌握字符流的基本概念,包括字符輸入流和字符輸出流。能夠使用緩沖區(qū)輸入輸出方法實現(xiàn)基本的輸入輸出功能掌握文件操作的基本方法,熟悉對文件操作的File類和RandomAccessFile隨機存取文件類。能夠創(chuàng)建File對象,使用文件對話框打開和保存文件,能夠編寫文件輸入和輸出應(yīng)用程序本章內(nèi)容數(shù)據(jù)流的基本概念1基本字節(jié)數(shù)據(jù)流類2基本字符流3文件的處理4第一節(jié)數(shù)據(jù)流的基本概念數(shù)據(jù)流是指一組有順序的、有起點和終點的字節(jié)集合,程序從鍵盤接收數(shù)據(jù)或向文件中寫數(shù)據(jù),都可以使用數(shù)據(jù)流來完成

流被組織成不同的層次用于字節(jié)傳輸(如二進制)用于字符傳輸

(如文本或ASCII)數(shù)據(jù)流分為輸入數(shù)據(jù)流和輸出數(shù)據(jù)流輸入數(shù)據(jù)流只能讀不能寫輸出數(shù)據(jù)流只能寫不能讀從數(shù)據(jù)流中讀取數(shù)據(jù)時,必須有一個數(shù)據(jù)源與該數(shù)據(jù)流相連java.io包中提供了表示數(shù)據(jù)流的4個基本抽象類InputStream和OutputStreamReader和Writer要使用引入語句:importjava.io.*;輸入數(shù)據(jù)流輸入數(shù)據(jù)流(InputStream)是指只能讀不能寫的數(shù)據(jù)流,用于向計算機內(nèi)輸入信息而用java.io包中所有輸入數(shù)據(jù)流都是由抽象類InputStream繼承而來讀取數(shù)據(jù)、標(biāo)記位置、重置讀寫指針、獲取數(shù)據(jù)量從數(shù)據(jù)流中讀取數(shù)據(jù)時,必須有一個數(shù)據(jù)源與該數(shù)據(jù)流相連輸入數(shù)據(jù)流中的主要數(shù)據(jù)操作方法以下3個方法提供了訪問數(shù)據(jù)流中數(shù)據(jù)的方法,所讀取的數(shù)據(jù)都默認為字節(jié)類型intread()從輸入流中讀取一個字節(jié)的二進制數(shù)據(jù)intread(byte[]b)將多個字節(jié)讀到數(shù)組中,填滿整個數(shù)組intread(byte[]b,intoff,intlen)從輸入流中讀取長度為len的數(shù)據(jù),從數(shù)組b中下標(biāo)為off的位置開始放置讀入的數(shù)據(jù),讀畢返回讀取的字節(jié)數(shù)read()方法將讀取的一個字節(jié)作為低位,形成一個0~255之間的int類型的數(shù)值返回。它是一個抽象方法,需要在子類中具體實現(xiàn)輸入數(shù)據(jù)流中的主要數(shù)據(jù)操作方法voidclose()關(guān)閉數(shù)據(jù)流,同時釋放與該數(shù)據(jù)流相關(guān)的資源也可以由運行時系統(tǒng)自動關(guān)閉intavailable()返回目前可以從數(shù)據(jù)流中讀取的字節(jié)數(shù)(實際的讀操作所讀得的字節(jié)數(shù)可能大于該返回值)longskip(longl)跳過數(shù)據(jù)流中指定數(shù)量的字節(jié)不讀,返回值表示實際跳過的字節(jié)數(shù)輸入數(shù)據(jù)流中的主要數(shù)據(jù)操作方法booleanmarkSupported()用于測試數(shù)據(jù)流是否支持回推操作,當(dāng)一個數(shù)據(jù)流支持mark()和reset()方法時返回true,否則返回false。voidmark(intmarkarea)用于標(biāo)記數(shù)據(jù)流的當(dāng)前位置,并劃出一個緩沖區(qū),其大小至少為指定參數(shù)的大小。voidreset()將輸入流重新定位到對此流最后調(diào)用mark方法時的位置輸出數(shù)據(jù)流輸出數(shù)據(jù)流是指只能寫不能讀的流,用于從計算機中輸出數(shù)據(jù)java.io包中所有輸出數(shù)據(jù)流大多是從抽象類OutputStream繼承而來,并且實現(xiàn)了其中的所有方法,這些方法主要提供了關(guān)于數(shù)據(jù)輸出方面的支持輸出數(shù)據(jù)流中的主要數(shù)據(jù)操作方法voidwrite(inti)將字節(jié)i寫入到數(shù)據(jù)流中,它只輸出所讀入?yún)?shù)的最低8位。該方法是抽象方法,需要在其輸出流子類中加以實現(xiàn),然后才能使用。voidwrite(byteb[])將數(shù)組b[]中的全部b.length個字節(jié)寫入數(shù)據(jù)流。voidwrite(byteb[],intoff,intlen)將數(shù)組b[]中從下標(biāo)off開始的len個字節(jié)寫入數(shù)據(jù)流。元素b[off]是此操作寫入的第一個字節(jié),b[off+len-1]是此操作寫入的最后一個字節(jié)輸出數(shù)據(jù)流中的主要數(shù)據(jù)操作方法voidclose()當(dāng)結(jié)束對輸出數(shù)據(jù)流的操作時應(yīng)該將其關(guān)閉。voidflush()刷新此輸出流并強制寫出所有緩沖的輸出字節(jié)緩存技術(shù)為加快數(shù)據(jù)傳輸速度,提高數(shù)據(jù)輸出效率,有時輸出數(shù)據(jù)流會在提交數(shù)據(jù)之前把所要輸出的數(shù)據(jù)先暫時保存在內(nèi)存緩沖區(qū)中,然后成批進行輸出,每次傳輸過程都以某特定數(shù)據(jù)長度為單位進行傳輸這種方式下,在數(shù)據(jù)的末尾一般都會有一部分數(shù)據(jù)由于數(shù)量不夠一個批次,而存留在緩沖區(qū)里,調(diào)用方法flush()可以將這部分數(shù)據(jù)強制提交…緩沖區(qū)單位的容量末尾剩余部分第二節(jié)基本字節(jié)數(shù)據(jù)流類文件數(shù)據(jù)流包括FileImputStream和FileOutputStream,用來進行文件的I/O處理,其數(shù)據(jù)源都應(yīng)當(dāng)是文件

對本機上的文件進行操作,但是它們不支持方法mark()和reset()

在構(gòu)造文件數(shù)據(jù)流時,可以直接給出文件名

FileInputStreamfis=newFileInputStream("myFile");

輸入輸出時處理異常示例使用文件數(shù)據(jù)流進行I/O操作時,對于類FileInputStream的實例對象,如果所指定的文件不存在,則產(chǎn)生FileNotFoundException異常,必須加以捕獲或聲明對于類FileOutputStream的實例對象,如果所指定的文件不存在,則系統(tǒng)創(chuàng)建一個新文件;如果存在,那么新寫入的內(nèi)容將會覆蓋原有數(shù)據(jù)如果在讀、寫文件或生成新文件時發(fā)生錯誤,則會產(chǎn)生IOException異常,也需要由程序員捕獲并處理程序7.1示例可以使用FileInputStream來讀取FileOutputStream輸出的數(shù)據(jù)程序7.2過濾器數(shù)據(jù)流過濾器數(shù)據(jù)流在創(chuàng)建時與一個已經(jīng)存在的數(shù)據(jù)流相連,這樣在從這樣的數(shù)據(jù)流中讀取數(shù)據(jù)時,它提供的是對一個原始輸入數(shù)據(jù)流的內(nèi)容進行了特定處理的數(shù)據(jù)緩沖區(qū)數(shù)據(jù)流數(shù)據(jù)輸入流和數(shù)據(jù)輸出流

緩沖區(qū)數(shù)據(jù)流BufferedInputStream和BufferedOutputStream

都屬于過濾器數(shù)據(jù)流,都是在數(shù)據(jù)流上增加了一個緩沖區(qū)

讀寫數(shù)據(jù)時,數(shù)據(jù)以塊為單位先進入緩沖區(qū)(塊的大小可以進行設(shè)置),其后的讀寫操作則作用于緩沖區(qū)

降低了不同硬件設(shè)備之間速度的差異,提高了I/O操作的效率

提供了對mark()、reset()、skip()等方法的支持

創(chuàng)建該類實例對象的方法一使用默認緩沖區(qū)的大小

FileInputStreamfis=newFileInputStream("myFile");InputStreamis=newBufferedInputStream(fis);FileOutputStreamfos=newFileOutputStream("myFile");OutputStreamos=newBufferedOutputStream(fos);

創(chuàng)建該類實例對象的方法二自行設(shè)置緩沖區(qū)的大小FileInputStreamfis=newFileInputStream("myFile");InputStreamis=newBufferedInputStream(fis,1024);FileOutputStreamfos=newFileOutputStream("myFile");OutputStreamos=newBufferedOutputStream(fos,1024);關(guān)閉一個緩沖區(qū)輸出流之前,應(yīng)使用flush()方法,強制輸出剩余數(shù)據(jù),以確保緩沖區(qū)內(nèi)的所有數(shù)據(jù)全部寫入輸出流

數(shù)據(jù)輸入流和數(shù)據(jù)輸出流DataInputStream和DataOutputStream允許通過數(shù)據(jù)流來讀寫Java基本數(shù)據(jù)類型布爾型(Boolean)浮點型(float)等等

數(shù)據(jù)流的創(chuàng)建方式DataInputStreamdis=newDataInputStream(is);DataOutputStreamdos=newDataOutputStream(os);DataInputStream類中的一些方法bytereadByte()longreadLong()doublereadDouble()booleanreadBoolean()StringreadUTF()intreadInt()floatreadFloat()shortreadShort()charreadChar()DataOutputStream類中的一些方法voidwriteByte(intaByte)voidwriteLong(longaLong)voidwriteDouble(doubleaDouble)voidwriteBoolean(booleanaBool)voidwriteUTF(StringaString)voidwriteInt(intanInt)voidwriteFloat(floataFloat)voidwriteShort(shortaShort)voidwriteChar(charaChar)對象流Java中的數(shù)據(jù)流不僅能對基本數(shù)據(jù)類型的數(shù)據(jù)進行操作,而且也提供了把對象寫入文件數(shù)據(jù)流或從文件數(shù)據(jù)流中讀出的功能通過java.io包中ObjectInputStream和ObjectOutputStream兩個類實現(xiàn)能夠輸入輸出對象的流稱為對象流寫對象數(shù)據(jù)流將一個java.util.Date對象實例寫入文件

讀對象數(shù)據(jù)流readObject()把數(shù)據(jù)流以O(shè)bject類型返回,應(yīng)該在轉(zhuǎn)換為正確的類名之后再執(zhí)行序列化的概念能夠記錄自己的狀態(tài)以便將來得到復(fù)原的能力,叫對象的持久性(Persistence)稱一個對象是可持久的,意味著可以把這個對象存入磁盤、磁帶,或傳入另一臺機器保存在它的內(nèi)存或磁盤中。也就是說把對象存為某種永久存儲類型

序列化的概念對象通過數(shù)值來描述自己的狀態(tài),記錄對象也就是記錄下這些數(shù)值把對象轉(zhuǎn)換為字節(jié)序列的過程稱為對象的序列化把字節(jié)序列恢復(fù)為對象的過程稱為對象的反序列化序列化的主要任務(wù)是寫出對象實例變量的數(shù)值序列化序列化是一種用來處理對象流的機制,所謂對象流也就是將對象的內(nèi)容進行流化。序列化是為了解決在對對象流進行讀寫操作時所引發(fā)的問題如果變量是另一個對象的引用,則引用的對象也要序列化。這個過程是遞歸的,保存的結(jié)果可以看作是一個對象網(wǎng)JDK1.1新增加了接口java.io.Serializable,并對Java虛擬機作了改動以支持將Java對象存為數(shù)據(jù)流的功能只有實現(xiàn)Serializable接口的類才能被序列化當(dāng)一個類聲明實現(xiàn)Serializable接口時,表明該類加入了對象序列化協(xié)議序列化示例示例程序7.3程序7.4對象結(jié)構(gòu)表序列化只能保存對象的非靜態(tài)成員變量,而不能保存任何成員方法和靜態(tài)成員變量,并且保存的只是變量的值,對于變量的任何修飾符都不能保存,訪問權(quán)限(public,protected,private)對于數(shù)據(jù)域的序列化沒有影響有一些對象類不具有可持久性,因為其數(shù)據(jù)的特性決定了它會經(jīng)常變化,其狀態(tài)只是瞬時的,這樣的對象是無法保存其狀態(tài)的,如Thread對象或流對象。對于這樣的成員變量,必須用transient關(guān)鍵字標(biāo)明,否則編譯器將報錯。任何用transient關(guān)鍵字標(biāo)明的成員變量,都不會被保存對象結(jié)構(gòu)表當(dāng)數(shù)據(jù)變量是一個對象時,該對象的數(shù)據(jù)成員也可以被持久化。對象的數(shù)據(jù)結(jié)構(gòu)或結(jié)構(gòu)樹,包括其子對象樹在內(nèi),構(gòu)成了這個對象的結(jié)構(gòu)表如果一個對象結(jié)構(gòu)表中包含了一個對不可持久化對象的引用,而這個引用已用關(guān)鍵字transient加以標(biāo)記,則這個對象仍可以被持久化示例整個對象的序列化publicclassMyClassimplementsSerializable{publictransientThreadmyThread;privateStringcustomerID;privateinttotal;}數(shù)據(jù)不被序列化publicclassMyClassimplementsSerializable{publictransientThreadmyThread;privatetransientStringcustomerID;privateinttotal;}第三節(jié)基本字符流從JDK1.1開始,java.io包中加入了專門用于字符流處理的類,它們是以Reader和Writer為基礎(chǔ)派生的一系列類Reader和Writer也是抽象類,只提供了一系列用于字符流處理的接口它們的方法與類InputStream和OutputStream類似,只不過其中的參數(shù)換成字符或字符數(shù)組字符輸入流和字符輸出流字符輸入流(Readers)和字符輸出流(Writers)提供對不同平臺之間數(shù)據(jù)流數(shù)據(jù)進行轉(zhuǎn)換的功能同其他程序設(shè)計語言使用ASCII字符集不同,Java使用Unicode來表示字符串和字符ASCII字符集是以一個字節(jié)(8bit)來表示一個字符,所以可以認為一個字符就是一個字節(jié)(byte)Unicode是一種大字符集,要用兩個字節(jié)(16bit)來表示一個字符

為實現(xiàn)與其他程序語言及不同平臺的交互,Java提供一種新的數(shù)據(jù)流處理方案,稱作字符輸入流(Reader)和字符輸出流(Writer)像數(shù)據(jù)流一樣,在java.io包中有許多不同類對其進行支持,其中最重要的是InputStreamReader和OutputStreamWriter這兩個類是字節(jié)流和字符輸入流、字符輸出流的接口,用來在字節(jié)流和字符流之間作為中介使用這兩個類進行字符處理時,在構(gòu)造方法中應(yīng)指定一定的平臺規(guī)范,以便把以字節(jié)方式表示的流轉(zhuǎn)換為特定平臺上的字符表示構(gòu)造方法InputStreamReader(InputStreamin)默認規(guī)范InputStreamReader(InputStreamin,Stringenc)指定規(guī)范encOutputStreamWriter(OutputStreamout)默認規(guī)范OutputStreamWriter(OutputStreamout,Stringenc)指定規(guī)范enc字符輸入流提供的方法voidclose()voidmark(intreadAheadLimit)booleanmarkSupported()intread()intread(char[]cbuf)intread(char[]cbuf,intoff,intlen)booleanready()voidreset()longskip(longn)字符輸出流提供的方法voidclose()voidflush()voidwrite(char[]cbuf)voidwrite(char[]cbuf,intoff,intlen)voidwrite(intc)voidwrite(Stringstr)voidwrite(Stringstr,intoff,intlen)緩沖區(qū)字符輸入流和緩沖區(qū)字符輸出流如果格式轉(zhuǎn)換以較大數(shù)據(jù)塊為單位進行,那么會提高效率java.io中提供了緩沖流BufferedReader和BufferedWriter其構(gòu)造方法與BufferedInputStream和BufferedOutputStream相類似除了read()和write()方法外,它還提供了整行字符處理方法publicStringreadLine()BufferedReader的方法,從輸入流中讀取一行字符,行結(jié)束標(biāo)志為‘\n’、‘\r’或兩者一起publicvoidnewLine()BufferedWriter的方法,向輸出流中寫入一個行結(jié)束標(biāo)志把BufferedReader或BufferedWriter正確連接到InputStreamReader或OutputStreamWriter的末尾是一個很好的方法要在BufferedWriter中使用flush()方法,以強制清空緩沖區(qū)中的剩余內(nèi)容,防止遺漏程序7.5程序7.6示例輔助類程序7.7程序7.8第四節(jié)文件的處理Java提供了File類,用于處理與文件相關(guān)的操作File對象可以用來生成與文件(及其所在的路徑)或目錄結(jié)構(gòu)相關(guān)的對象使用File類可以達到與系統(tǒng)無關(guān)的目的,使用的是抽象的路徑表示法類java.io.File提供了獲得文件基本信息及操作文件的一些方法File類創(chuàng)建一個新的File對象可以使用以下3種構(gòu)造方法第1種方法FilemyFile;myFile=newFile("mymotd");第2種方法myFile=newFile("/","mymotd");第3種方法FilemyDir=newFile("/");myFile=newFile(myDir,"mymotd");與文件名相關(guān)的方法StringgetName()獲取文件名StringgetPath()獲取文件路徑StringgetAbsolutePath()獲取文件絕對路徑StringgetParent()獲取文件父目錄名稱booleanrenameTo(FilenewName)更改文件名,成功則返回true,否則返回false文件測定方法booleanexists()文件對象是否存在booleancanWrite()文件對象是否可寫booleancanRead()文件對象是否可讀booleanisFile()文件對象是否是文件booleanisDirectory()文件對象是否是目錄booleanisAbsolute()文件對象是否是絕對路徑常用文件信息和方法longlastModified()獲取文件最后修改時間longlength()獲取文件長度booleandelete()刪除文件對象指向的文件,成功則返回true,否則返回falseFile類方法使用示例程序7.9目錄工具booleanmkdir()創(chuàng)建新目錄booleanmkdirs()創(chuàng)建新目錄String[]list()列出符合模式的文件名隨機訪問文件程序在讀寫文件時,可能會隨機在文件的不同位置進行讀取Java語言提供了類RandomAccessFile來處理這種類型的輸入輸出創(chuàng)建一個隨機訪問文件的方法使用文件名myRAFile=newRandomAccessFile(Stringname,Stringmode);使用文件對象myRAFile=newRandomAccessFile(Filefile,Stringmode);參數(shù)mode決定是以只讀方式(“r”)還是以讀寫方式(“rw”)訪問文件移動文件讀寫指針的方法longgetFilePointer()返回文件指針的當(dāng)前位置voidseek(longpos)將文件指針置于指定的絕對位置。位置值以從文件開始處的字節(jié)偏移量pos來計算,pos為0代表文件的開始longlength()返回文件的長度。位置值為length(),代表文件的結(jié)尾為文件添加信息時可以利用隨機訪問文件來完成文件輸出的添加模式myRAFile=newRandomAccessFile("java.log","rw");myRAFile.seek(myRAFile.length());ThankYou!第八章圖形界面設(shè)計

學(xué)習(xí)目標(biāo)掌握AWT及Swing的特點,了解AWT和Swing中類的層次結(jié)構(gòu),能夠正確創(chuàng)建簡單的框架窗口、創(chuàng)建和使用面板,能夠通過內(nèi)容窗格添加組件能夠熟練使用標(biāo)簽和按鈕組件,并處理按鈕事件掌握FlowLayout、BorderLayout、GridLayout、CardLayout及BoxLayout等布局管理器的概念及使用方法,能夠進行界面布局設(shè)計,包括嵌套的布局設(shè)計掌握事件處理機制,理解委托事件處理模型,掌握響應(yīng)鼠標(biāo)和鍵盤事件掌握繪圖基礎(chǔ),能夠顯示不同字體不同顏色的文字,能夠繪制各種基本幾何形狀的圖形,并能給圖形著色本章內(nèi)容AWT與Swing1容器2標(biāo)簽及按鈕3布局管理器4事件處理5繪圖基礎(chǔ)6第一節(jié)AWT與Swing

AWT

Java抽象窗口工具集(AbstractWindowToolkit,簡稱AWT)SwingSwing屬于JavaTMFoundationClasses(簡稱JFC)的一部分,JFC包含了一組幫助程序員創(chuàng)建圖形用戶界面的功能。AWT功能有限,因此在后來的JDK版本中,又提供了功能更強的Swing

AWT與SwingJava的圖形用戶界面由各種組件構(gòu)成,在java.awt包和javax.swing包中定義了多種用于創(chuàng)建圖形用戶界面的組件類設(shè)計圖形用戶界面時一般完成3個步驟選取組件設(shè)計布局響應(yīng)事件Swing與AWT不同

Swing組件在實現(xiàn)時不包含任何本地代碼

Swing組件可以不受硬件平臺的限制,而具有更多的功能

Swing被稱為“輕量級(lightweight)”組件AWT稱為“重量級(heavyweight)”組件

“重量級”組件與“輕量級”組件一同使用時,如果組件區(qū)域有重疊,則“重量級”組件總是顯示在上面

組件Java的圖形用戶界面由組件構(gòu)成按鈕(button)、文本輸入框(textfield)、標(biāo)簽(label)等都是組件有一類特殊的組件稱為容器(container)框架(frame)、面板(panel)等容器是組件的容器,各種組件(包括容器)可以通過add()方法添加到容器中

第二節(jié)容器組件可以分為容器組件和非容器組件所謂容器組件是指可以包含其他組件的組件又分為頂層容器和一般用途容器非容器組件則必須要包含在容器中顯示在屏幕上的所有組件都必須包含在某個容器中,有些容器可以嵌套,在這個嵌套層次的最外層,必須是一個頂層容器頂層容器

四種頂層容器JFrame、JApplet、JDialog和JwindowJFrame是一個帶有標(biāo)題行和控制按鈕(最小化、恢復(fù)/最大化、關(guān)閉)的獨立窗口,創(chuàng)建應(yīng)用程序時需要使用Jframe創(chuàng)建小應(yīng)用程序時使用JApplet,它被包含在瀏覽器窗口中創(chuàng)建對話框時使用JdialogJWindow是一個不帶有標(biāo)題行和控制按鈕的窗口,因此通常很少使用

JFrame類常用的構(gòu)造方法JFrame()構(gòu)造一個初始時不可見、無標(biāo)題的新框架窗體JFrame(Stringtitle)創(chuàng)建一個初始時不可見、具有指定標(biāo)題的新框架窗體JFrame類中的常用方法voidsetBounds(intx,inty,intwidth,intheight)移動并調(diào)整框架大小。左上角位置的橫縱坐標(biāo)分別由x和y指定,框架的寬高分別由width和height指定voidsetSize(intwidth,intheight)設(shè)置框架的大小,寬度是width,高度是heightvoidsetBackground(Colorbg)使用顏色bg設(shè)置框架的背景色voidsetVisible(booleanaFlag)設(shè)置框架可見或不可見voidpack()調(diào)整框架的大小,以適合其子組件的首選大小和布局voidsetTitle(Stringtitle)設(shè)置框架的標(biāo)題為字符串titleContainergetContentPane()返回此框架窗體的內(nèi)容窗格對象voidsetLayout(LayoutManagermanager):設(shè)置布局管理器JFrame創(chuàng)建應(yīng)用程序

程序8-1內(nèi)容窗格頂層容器都有一個內(nèi)容窗格(Content

Pane)頂層容器中除菜單之外的組件都是放在這個內(nèi)容窗格中

將組件放入內(nèi)容窗格方法一通過頂層容器的getContentPane()方法獲得其缺省的內(nèi)容窗格。getContentPane()方法的返回類型為java.awt.Container,它仍然是一個容器。然后將組件添加到內(nèi)容窗格中

ContainercontentPane=frame.getContentPane();

contentPane.add(button,BorderLayout.CENTER);或合并為一條:

frame.getContentPane().add(button,BorderLayout.CENTER);

將組件放入內(nèi)容窗格方法二創(chuàng)建一個新的內(nèi)容窗格取代頂層容器缺省的內(nèi)容窗格創(chuàng)建一個JPanel的實例,它是java.awt.Container的子類。然后將組件添加到JPanel實例中,再通過頂層容器的setContentPane()方法將JPanel實例設(shè)置為新的內(nèi)容窗格頂層容器默認內(nèi)容窗格的布局管理器是BorderLayoutJPanel默認的布局管理器是FlowLayout需要為JPanel實例設(shè)置一個BorderLayout布局管理器程序8-2面板(JPanel)面板(JPanel)是一種用途廣泛的容器與頂層容器不同的是,面板不能獨立存在,必須被添加到其他容器內(nèi)部面板可以嵌套,由此可以設(shè)計出復(fù)雜的圖形用戶界面

JPanel類常用的構(gòu)造方法JPanel()創(chuàng)建具有FlowLayout布局的新面板JPanel(LayoutManagerlayout)創(chuàng)建具有指定布局管理器的新面板程序8.3JScrollPaneJScrollPane是帶有滾動條的面板,它是Container類的子類只能添加一個組件當(dāng)有多個組件需要添加時,一般地是先將多個組件添加到JPanel中,然后再將這個JPanel添加到JScrollPane中JScrollPane類常用的構(gòu)造方法JScrollPane()創(chuàng)建一個空的JScrollPane,需要時水平和垂直滾動條都可顯示JScrollPane(Componentview)創(chuàng)建一個顯示指定組件內(nèi)容的JScrollPane,只要組件的內(nèi)容超過視圖大小就會顯示水平和垂直滾動條JScrollPane類中常用的方法voidsetHorizontalScrollBarPolicy(intpolicy)確定水平滾動條何時顯示在滾動窗格上參數(shù)policy的可選值為下列三者之一ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED:需要時可見ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER:總是不可見ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS:總是可見JScrollPane類中常用的方法voidsetVerticalScrollBarPolicy(intpolicy)確定垂直滾動條何時顯示在滾動窗格上參數(shù)policy的可選值為下列三者之一ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED:需要時可見ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER:總是不可見ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS:總是可見滾動條組件Scrollbar()構(gòu)造一個新的垂直滾動條Scrollbar(intorientation)構(gòu)造一個具有指定方向的新滾動條orientation指示滾動條的方向Scrollbar.HORIZONTAL//水平滾動條Scrollbar.VERTICAL//垂直滾動條滾動條組件Scrollbar(intorientation,intvalue,intvisible,intminimum,intmaximum)構(gòu)造一個新的滾動條,它具有指定的方向、初始值、可視量、最小值和最大值orientation的值如前所述value是滾動條的初始值visible是滾動條的可視量,通常由滑動塊的大小表示minimum是滾動條的最小值maximum是滾動條的最大值第三節(jié)標(biāo)簽及按鈕標(biāo)簽是最簡單的Swing組件,通常用于顯示提示性的文本信息或圖標(biāo),不可被編輯構(gòu)造方法JLabel()創(chuàng)建一個既不顯示文本信息也不顯示圖標(biāo)的空標(biāo)簽JLabel(Iconimage)創(chuàng)建一個顯示圖標(biāo)的標(biāo)簽JLabel(Stringtext)創(chuàng)建一個顯示文本信息的標(biāo)簽JLabel(Iconimage,inthorizontalAlignment)創(chuàng)建一個顯示圖標(biāo)的標(biāo)簽,水平對齊方式由int型參數(shù)horizontalAlignment指定JLabel(Stringtext,inthorizontalAlignment)創(chuàng)建一個顯示文本信息的標(biāo)簽,水平對齊方式由int型參數(shù)horizontalAlignment指定JLabel(Stringtext,Iconicon,inthorizontalAlignment)創(chuàng)建一個同時顯示文本信息和圖標(biāo)的標(biāo)簽,水平對齊方式由int型參數(shù)horizontalAlignment指定構(gòu)造方法中,表示水平對齊方式的int型參數(shù)horizontalAlignment的取值JLabel.LEFT//左對齊JLabel.RIGHT//右對齊JLabel.CENTER//居中對齊按鈕按鈕(JButton)是Java圖形用戶界面的基本組件之一,經(jīng)常用到的按鈕有4種形式JbuttonJToggleButtonJCheckBoxJRadioButton它們均是AbstractButton的子類或間接子類各種按鈕上都可以設(shè)置文本、設(shè)置圖標(biāo)、注冊事件偵聽程序JButton的構(gòu)造方法JButton()創(chuàng)建一個既沒有顯示文本也沒有圖標(biāo)的按鈕JButton(Iconicon)創(chuàng)建一個沒有顯示文本但有圖標(biāo)的按鈕JButton(Stringtext)創(chuàng)建一個有顯示文本但沒有圖標(biāo)的按鈕JButton(Stringtext,Iconicon)創(chuàng)建一個既有顯示文本又有圖標(biāo)的按鈕JButton類的常用方法publicvoidsetMnemonic(intmnemonic)設(shè)置當(dāng)前按鈕的鍵盤助記符publicvoidsetText(Stringtext)設(shè)置按鈕的文本publicStringgetText()返回按鈕的文本publicvoidsetToolTipText(Stringtext)設(shè)置要顯示的提示文本publicvoidaddActionListener(ActionListenerl)為按鈕添加事件偵聽程序程序8.4切換按鈕、復(fù)選按鈕及單選按鈕切換按鈕(JToggleButton)是具有兩種狀態(tài)的按鈕,即選中狀態(tài)和未選中狀態(tài)構(gòu)造方法JToggleButton()創(chuàng)建一個既沒有顯示文本也沒有圖標(biāo)的切換按鈕JToggleButton(Iconicon)創(chuàng)建一個沒有顯示文本但有圖標(biāo)的切換按鈕JToggleButton(Iconicon,booleanselected)創(chuàng)建一個沒有顯示文本但有圖標(biāo)和指定初始狀態(tài)的切換按鈕構(gòu)造方法JToggleButton(Stringtext)創(chuàng)建一個有顯示文本但沒有圖標(biāo)的切換按鈕JToggleButton(Stringtext,booleanselected)創(chuàng)建一個有顯示文本和指定初始狀態(tài)但沒有圖標(biāo)的切換按鈕JToggleButton(Stringtext,Iconicon)創(chuàng)建一個既有顯示文本又有圖標(biāo)的切換按鈕JToggleButton(Stringtext,Iconicon,booleanselected)創(chuàng)建一個既有顯示文本又有圖標(biāo)和指定初始狀態(tài)的切換按鈕JCheckBox和JRadioButton都是JToggleButton的子類,構(gòu)造方法的格式與JToggleButton相同,它們也都具有選中和未選中兩種狀態(tài)在JToggleButton類中定義了一個isSelected()方法,通過該方法可以獲知按鈕的當(dāng)前狀態(tài):當(dāng)返回值為true時表示處于選中狀態(tài),而返回值為false時則表示處于未選中狀態(tài)程序8.5第四節(jié)布局管理器組件的布局,包括位置和大小,通常由布局管理器(LayoutManager)負責(zé)安排每個容器都有一個缺省的布局管理器通過容器的setLayout()方法改變?nèi)萜鞯牟季止芾砥鱂lowLayout布局管理器

FlowLayout定義在java.awt包中,對容器中組件進行布局的方式是將組件逐個地安放在容器中的一行上,一行放滿后就另起一個新行。在缺省情況下,將組件居中放置在容器的某一行上

FlowLayout布局管理器并不強行設(shè)定組件的大小,而是允許組件擁有它們自己所希望的尺寸

每個組件都有一個getPreferredSize()方法,布局管理器會調(diào)用這一方法取得每個組件希望的大小

FlowLayout構(gòu)造方法

FlowLayout()FlowLayout(intalign)FlowLayout(intalign,inthgap,intvgap)對齊方式的可選項align的取值FlowLayout.LEFTFlowLayout.RIGHTFlowLayout.CENTERhgap和vgap,可以設(shè)定組件的水平間距和垂直間距程序8.6

BorderLayout布局管理器BorderLayout是頂層容器中內(nèi)容窗格的缺省布局管理器由BorderLayout管理的容器被劃分成北(North)南(South)西(West)東(East)中(Center)五個區(qū)域,分別代表容器的上、下、左、右和中部,表示為常量BorderLayout.NORTHBorderLayout.SOUTHBorderLayout.WESTBorderLayout.EASTBorderLayout.CENTERBorderLayout定義在java.awt包中BorderLayout構(gòu)造方法BorderLayout()構(gòu)造一個組件之間沒有間距的新BorderLayout布局管理器BorderLayout(inthgap,intvgap)用指定的組件之間的水平和垂直間距構(gòu)造一個BorderLayout布局管理器組件必須通過add()方法加入到容器中的指定區(qū)域如果在add()方法中沒有指定將組件放到哪個區(qū)域,則默認地會被放置在Center區(qū)域在容器的每個區(qū)域,只能加入一個組件,如果試圖向某個區(qū)域中加入多個組件,那么只有最后一個組件是有效的程序8.7GridLayout布局管理器GridLayout是一種網(wǎng)格式的布局管理器,它將容器空間劃分成若干行乘若干列的網(wǎng)格,組件依次放入其中,每個組件占據(jù)一格

網(wǎng)格每列的寬(高)度都是相同的,這個寬度大致等于容器的寬度除以網(wǎng)格的列(行)數(shù)組件被放入容器的次序決定了它所占據(jù)的位置。每行網(wǎng)格從左至右依次填充,一行用完之后轉(zhuǎn)入下一行當(dāng)容器的大小改變時,GridLayout所管理的組件的相對位置不會發(fā)生變化,但組件的大小會隨之改變GridLayout構(gòu)造方法GridLayout():創(chuàng)建一個只有一行的網(wǎng)格,網(wǎng)格的列數(shù)根據(jù)實際需要而定GridLayout(introws,intcols)創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局GridLayout(introws,intcols,inthgap,intvgap)創(chuàng)建具有指定行數(shù)和列數(shù),且有指定水平間距和垂直間距的網(wǎng)格布局程序8.8CardLayout布局管理器

CardLayout也是定義在java.awt包中的布局管理器,這是一種卡片式的布局管理器,它將容器中的組件處理為一系列卡片,每一時刻只顯示出其中的一張,而容器充當(dāng)卡片的容器卡片的順序由組件對象本身在容器內(nèi)部的順序決定CardLayout定義了一組方法,這些方法允許應(yīng)用程序按順序地瀏覽這些卡片,或者顯示指定的卡片CardLayout的構(gòu)造方法CardLayout()創(chuàng)建一個默認的無間距的新的CardLayout布局管理器CardLayout(inthgap,intvgap)創(chuàng)建一個具有指定的水平和垂直間距的新的CardLayout布局管理器常用方法publicvoidfirst(Containerparent)翻轉(zhuǎn)到容器的第一張卡片publicvoidnext(Containerparent)翻轉(zhuǎn)到指定容器的下一張卡片。如果當(dāng)前的可見卡片是最后一個,則此方法翻轉(zhuǎn)到布局的第一張卡片publicvoidprevious(Containerparent)翻轉(zhuǎn)到指定容器的前一張卡片。如果當(dāng)前的可見卡片是第一個,則此方法翻轉(zhuǎn)到布局的最后一張卡片常用方法publicvoidlast(Containerparent)翻轉(zhuǎn)到容器的最后一張卡片publicvoidshow(Containerparent,Stringname)翻轉(zhuǎn)到已添加到此布局的具有指定name的卡片。如果不存在這樣的卡片,則不發(fā)生任何操作程序8.9BoxLayoutBoxLayout是定義在javax.swing包中的另一種常用布局管理器,它將容器中的組件按水平方向排成一行或按垂直方向排成一列當(dāng)組件排成一行時,每個組件可以有不同的寬度當(dāng)組件排成一列時,每個組件可以有不同的高度構(gòu)造方法BoxLayout(Containertarget,intaxis):創(chuàng)建一個將沿給定軸放置組件的布局管理器程序8.10在javax.swing包中定義了一個專門使用BoxLayout的特殊容器——Box類,Box類中提供了創(chuàng)建Box實例的靜態(tài)方法:publicstaticBoxcreateHorizontalBox():使用水平方向的BoxLayoutpublicstaticBoxcreateVerticalBox():使用垂直方向的BoxLayout程序8.11空布局在特殊場合,也可以不使用布局管理器,而是通過數(shù)值指定組件的位置和大小,這時首先需要調(diào)用容器的setLayout(null)將布局管理器設(shè)置為空,然后調(diào)用組件的setBounds()方法設(shè)置組件的位置和大小setBounds(intx,inty,intwidth,intheight)前兩個int型參數(shù)設(shè)置組件的位置后兩個int型參數(shù)設(shè)置組件的寬度和高度程序8.12第五節(jié)事件處理

事件處理模型用戶在程序界面所進行的操作稱為用戶事件(Event)

Java中定義了很多事件類,用于描述不同的用戶行為代表鼠標(biāo)事件的MouseEvent類代表鍵盤事件的KeyEvent類在組件上進行某種操作,事件處理系統(tǒng)便會生成一個事件類對象系統(tǒng)將事件分類,稱為事件類型每類事件對應(yīng)一個偵聽程序接口,它規(guī)定了接收并處理該類事件的方法的規(guī)范組件必須注冊相應(yīng)的事件處理程序,這種事件處理程序稱為事件的偵聽程序(Listener)事件的種類java.awt.event包和javax.swing.event包中定義了很多事件類例如ItemEvent、MouseEvent和KeyEvent等,并且第三方內(nèi)容也可加入其中每種事件類都有一個對應(yīng)的接口,接口中聲明了一個或多個抽象的事件處理方法,凡是需要接收并處理事件類對象的類,都需要實現(xiàn)相應(yīng)的接口

按鈕上的事件為了處理按鈕上的ActionEvent事件,需要定義一個實現(xiàn)ActionListener接口的偵聽程序類。對應(yīng)ActionEvent事件,有ActionListener接口:publicinterfaceActionListenerextendsEventListener{ publicvoidactionPerformed(ActionEvente);}該接口中只定義了一個方法,即actionPerformed()當(dāng)出現(xiàn)ActionEvent事件時,就會調(diào)用該方法每個組件都有若干個形如addXXXListener(XXXListener)的方法,通過這類方法,可以為組件注冊事件偵聽程序也可以刪除添加的事件偵聽程序這種處理事件機制稱為委托事件處理模型或委派事件處理機制事件處理步驟程序中引入java.awt.event包:

importjava.awt.event;給所需的事件源對象注冊事件偵聽程序

事件源對象.addXXXListener(XXXListener);實現(xiàn)相應(yīng)的方法若某個偵聽程序接口包含多個方法,則需要實現(xiàn)所有的方法ButtonHandler類程序8.13示例MyButton類程序8.14自定義的MyButton組件繼承自JButton,同時實現(xiàn)了ActionListener接口MyButton組件對象可注冊事件偵聽程序在MyButton的構(gòu)造方法中,通過addActionListener(this)將自身注冊為自己的偵聽程序。當(dāng)用戶單擊按鈕時,調(diào)用System.exit(0),結(jié)束程序的運行事件的種類在java.awt.event包和javax.swing.event包中還定義了很多其他事件類ActionEventItemEventMouseEventKeyEvent每種事件類都有一個對應(yīng)的接口,接口中聲明了一個或多個抽象的事件處理方法。凡是需要接收并處理事件類對象的類,都需要實現(xiàn)相應(yīng)的接口常用事件類型及接口

常用事件類型及接口常用事件類型及接口示例程序8.15拖動鼠標(biāo)引發(fā)MouseMotionEvent事件可以由實現(xiàn)了MouseMotionListener接口的類來處理MouseMotionListener接口中聲明了兩個抽象方法,分別用于處理鼠標(biāo)的拖動和移動。在實現(xiàn)MouseMotionListener接口的類里,必須同時實現(xiàn)上述兩個方法可以在同一個組件上偵聽多類事件f.addMouseListener(this);f.addMouseMotionListener(this);事件適配器

為了進行事件處理,需要創(chuàng)建實現(xiàn)Listener接口的類,而某些Listener接口中,聲明了很多抽象方法,為了實現(xiàn)這些接口,需要一一實現(xiàn)這些方法

為了編程方便,Java為一些聲明了多個方法的Listener接口提供了相對應(yīng)的適配器(Adapter)類,在適配器類中實現(xiàn)了相應(yīng)接口中的全部方法,只是方法的內(nèi)容為空

接口及適配器

示例MouseListener接口的形式示例與其對應(yīng)的適配器為MouseAdapter程序8.16第六節(jié)繪圖基礎(chǔ)顯示屏上一個長方形區(qū)域為程序的繪圖區(qū)域坐標(biāo)原點(0,0)位于整個區(qū)域的左上角一個坐標(biāo)點(x,y)對應(yīng)屏幕窗口中的一個像素x與y必須都是非負整數(shù)x在水平方向上從左向右遞增y在豎直方向上從上向下遞增可以設(shè)定繪圖區(qū)域的寬width和高height顏色可以使用java.awt包中的Color類來定義和管理顏色Color類的每個對象表示一種顏色可以有兩種方法生成顏色使用Java的Color類中預(yù)定義的顏色通過紅、綠、藍三原色的值來組合使用Java的Color類中預(yù)定義的顏色Color類中包含了26個常量,提供了13種基本的預(yù)定義的顏色顏色對象RGB值黑色Color.black0,0,0藍色Color.blue0,0,255青色Color.cyan0,255,255灰色Color.gray128,128,128深灰色Color.darkGray64,64,64淺灰色Color.lightGray192,192,192綠色Color.green0,255,0洋紅色Color.magenta255,0,255橙色Color.orange255,200,0粉紅色Color.pink255,175,175紅色Color.red255,0,0白色Color.white255,255,255黃色Color.yellow255,255,0通過紅、綠、藍三原色的值來組合每種顏色由三個值來指定,它們一起稱為RGB值,RGB分別代表紅-綠-藍各個值表示對應(yīng)原色的相對值,使用1個字節(jié)(8位)來保存,取值范圍為0到255三種原色的值合在一起決定實際的顏色值intr=255,g=255,b=0;ColormyColor=newColor(r,g,b);可以使用下面兩個定義在Jcomponent中的方法設(shè)置組件的前景色和背景色publicvoidsetForeground(Colorc):設(shè)置前景色publicvoidsetBackground(Colorc):設(shè)置背景色字體文字的方法publicvoiddrawChars(char[]data,intoffset,intlength,intx,inty)使用此圖形上下文的當(dāng)前字體和顏色顯示字符數(shù)組data中從offset位置開始、最多l(xiāng)ength個字符首字符的基線位于此圖形上下文坐標(biāo)系統(tǒng)的(x,y)處publicvoiddrawString(StringaString,intx,inty)在指定位置顯示字符串a(chǎn)StringpublicvoiddrawBytes(byte[]data,intoffset,intlength,intx,inty)使用此圖形上下文的當(dāng)前字體和顏色顯示由指定的byte數(shù)組data中從offset位置開始、最多l(xiāng)ength個字符首字符的基線位于此圖形上下文坐標(biāo)系統(tǒng)的(x,y)處字體與樣式常用的字體TimesNewromanSymbol宋體楷體等基本的樣式,可以組合使用Font.PLAIN(正常)Font.BOLD(粗體)Font.ITALIC(斜體)創(chuàng)建字體對象通過給定字體名稱、樣式和大小自己創(chuàng)建Font對象,構(gòu)造方法是:Font(Stringname,intstyle,intsize)根據(jù)指定名稱、樣式和字號,創(chuàng)建一個新FontFont類中常用的方法StringgetName()返回此Font的邏輯名稱,即字體名稱intgetSize()返回此Font的字號大小,舍入為整數(shù)intgetStyle()返回此Font的樣式booleanisBold()測試此Font對象的樣式是否為BOLDbooleanisItalic()測試此Font對象的樣式是否為ITALICbooleanisPlain()測試此Font對象的樣式是否為PLAIN列出當(dāng)前機器上可用的所有字體示例程序8.17Graphics類的基本功能java.awt包中的Graphics類是所有圖形處理的基礎(chǔ)Graphics類是所有圖形上下文的抽象父類這個類提供的功能有建立字體設(shè)定顯示顏色顯示圖像和文本繪制和填充各種幾何圖形可以在組件上繪制圖形當(dāng)先后繪圖的圖形有重疊時,如何確定重疊部分的顏色呢?這稱為繪圖模式繪圖模式主要有兩種正常模式異或模式正常模式下,后繪制的圖形覆蓋先繪制的圖形,使得先繪制的圖形被重疊的部分不再可見異或模式下,當(dāng)前繪制的顏色、先前繪制的顏色及所選定的某種顏色之間進行某種處理,使用得到的新顏色值進行繪制設(shè)置繪圖模式的方法setPaintMode()將此圖形上下文的繪圖模式設(shè)置為正常模式,這是默認模式setXORMode(Colorc)將此圖形上下文的繪圖模式設(shè)置為異或模式,參數(shù)c指定了繪制對象時與窗口進行異或操作的顏色所有繪制都必須通過一個圖形對象完成可以直接在框架(Frame)中顯示文本信息可以直接在框架中繪圖在某個組件中繪圖,一般應(yīng)該為這個組件所屬的子類重寫paint()方法,在該重寫的方法中進行繪圖要在JComponent子類的組件中繪圖,應(yīng)重寫paintComponent()方法,在該方法中進行繪圖系統(tǒng)自動為程序提供圖形對象,并以參數(shù)g傳遞給paint()方法和paintComponent()方法示例比如,JPanel非常適合于繪制自定義圖形,其圖形對象是作為paintComponent()方法的參數(shù)獲得的通常的做法是首先在一個面板中進行繪制然后再將這個面板添加到框架中要創(chuàng)建自定義圖形,需要由JPanel類派生一個新類。并重寫父類的paintComponent()方法:publicvoidpaintComponent(Graphicsg){ ...//將在這里通過參數(shù)g編寫繪制代碼}paintComponent方法包含一個Graphics類型的參數(shù)。可以從圖形對象或使用Component的getGraphics()方法得到Graphics對象。Component類中定義了paint(Graphicsg)方法當(dāng)組件被顯示出來時,將調(diào)用該方法Component中還定義了一個repaint()方法每當(dāng)需要重繪組件時,可以調(diào)用該方法,該方法將自動調(diào)用paint(Graphicsg)javax.swing.JComponent繼承java.awt.Component,并重寫了paint(Graphicsg)方法在javax.swing.JComponent的paint(Graphicsg)方法中,會調(diào)用如下3個方法:paintComponent(Graphicsg):繪制組件paintBorder(Graphicsg):繪制組件的邊框paintChildren(Graphicsg):繪制組件中的子組件如果需要在組件上繪制圖形,只需要重寫JComponent的paintComponent(Graphicsg)方法,該方法的參數(shù)是一個Graphics對象繪圖方法drawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)沿著由左上角為(x,y)、寬為width、高為height的外接矩形所限定的橢圓繪制一條弧?;∑鹗加趕tartAngle,延伸的距離由arcAngle定義繪圖方法drawLine(intx1,inty1,intx2,inty2)繪制一條從點(x1,y1)到點(x2,y2)的直線drawOval(intx,inty,intwidth,intheight)繪制一個由左上角為(x,y)、寬為width、高為height的外接矩形所限定的橢圓繪圖方法drawPolygon(int[]xPoints,int[]yPoints,intnPoints)繪制由x和y坐標(biāo)數(shù)組定義的一系列連接線。每對(x,y)坐標(biāo)定義了一個點。如果第一個點和最后一個點不同,則圖形不是閉合的drawRect(intx,inty,intwidth,intheight)繪制一個矩形,其左上角為(x,y),寬為width,高為height繪圖方法drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)用此圖形上下文的當(dāng)前顏色繪制圓角矩形的邊框。矩形的左邊和右邊分別位于x和x+width。矩形的頂邊和底邊位于y和y+height繪圖方法drawString(Stringstr,intx,inty)在點(x,y)處輸出字符串str,向右擴展draw3DRect((intx,inty,intwidth,intheight,booleanraised))繪制指定矩形的3-D突出顯示邊框。矩形的左上角為(x,y),寬為width,高為height。raised指示矩形是凸出平面顯示還是凹入平面顯示填充方法fillArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)fillOval(intx,inty,intwidth,intheight)fillPolygon(int[]xPoints,int[]yPoints,intnPoints)fillRect(intx,inty,intwidth,intheight)fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)畫多邊形畫多邊形的方法分別是drawPolygon()和fillPolygon()當(dāng)使用數(shù)組做參數(shù)時,drawPolygon()和fillPolygon()方法各帶3個參數(shù)第一個參數(shù)是表示多邊形各點x坐標(biāo)的整數(shù)數(shù)組第二個參數(shù)是表示多邊形各點y坐標(biāo)的整數(shù)數(shù)組第三個參數(shù)是一個整數(shù),表示兩個數(shù)組中有多少個點可用放在一起來看,前兩個參數(shù)表示多邊形各點的(x,y)坐標(biāo)當(dāng)使用Polygon類做參數(shù)時,可以使用Java標(biāo)準(zhǔn)類庫java.awt包中定義的Polygon類的對象來顯式地定義多邊形。drawPolygon()和fillPolygon()方法都重載了兩個方法,并且都僅帶一個Polygon對象參數(shù)Polygon類中的常用方法Polygon()構(gòu)造方法,創(chuàng)建空的多邊形Polygon(int[]xpoints,int[]ypoints,intnpoints)構(gòu)造方法,使用xpoints和ypopints中的項對應(yīng)的坐標(biāo)對(x,y)來創(chuàng)建多邊形addPoint(intx,inty)將由參數(shù)指定的點加入到多邊形中contains(intx,inty)如果指定的點含在多邊形中,則返回真contains(Pointp)如果指定的點含在多邊形中,則返回真getBounds()得到多邊形的外接矩形translate(intdeltaX,intdeltaY)將多邊形的各頂點沿x軸偏移deltaX,沿y軸偏移deltaY程序8.18Graphics2D繪圖Java2D包括一個繼承于Graphics類的Graphics2D類,增加了許多狀態(tài)屬性,擴展了Graphics的繪圖功能,可以繪制出更加豐富多彩的圖形Graphics2D擁有更強大的二維圖形處理能力,提供對幾何形狀、坐標(biāo)轉(zhuǎn)換、顏色管理以及文字布局等更復(fù)雜的控制圖形狀態(tài)屬性Graphics2D類中定義了幾種方法,用于添加或改變圖形的狀態(tài)屬性通過設(shè)定和修改狀態(tài)屬性,可以指定畫筆寬度和畫筆的連接方式、設(shè)定平移、旋轉(zhuǎn)、縮放或剪裁變換圖形還可以設(shè)定填充圖形的顏色和圖案等stroke屬性stroke屬性控制線的寬度、筆形樣式、線段連接方式或短劃線圖案。創(chuàng)建BasicStroke對象后,再調(diào)用setStroke()方法即可設(shè)置stroke屬性。創(chuàng)建BasicStroke對象的方法BasicStroke(floatw):指定線的寬度wBasicStroke(floatw,intcap,intjoin):指定線的寬度w,端點樣式cap及兩線段交匯處的連接方式j(luò)oinpaint屬性paint屬性控制填充效果。先調(diào)用GradientPaint()方法確定填充效果,再使用setPaint()方法進行設(shè)置GradientPaint()方法GradientPaint(floatx1,floaty1,Colorc1,floatx2,flaoty2,Colorc2):構(gòu)造一個簡單的非周期性的GradientPaint對象GradientPaint(floatx1,floaty1,C

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論