Java程序設(shè)計(jì)教程與實(shí)驗(yàn)(數(shù)組、字符串、向異常處理、圖形用戶界面)課件_第1頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)(數(shù)組、字符串、向異常處理、圖形用戶界面)課件_第2頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)(數(shù)組、字符串、向異常處理、圖形用戶界面)課件_第3頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)(數(shù)組、字符串、向異常處理、圖形用戶界面)課件_第4頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)(數(shù)組、字符串、向異常處理、圖形用戶界面)課件_第5頁(yè)
已閱讀5頁(yè),還剩154頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第5章數(shù)組、字符串、向量第1頁(yè),共159頁(yè)。主要內(nèi)容5.1 數(shù)組一維數(shù)組二維數(shù)組5.2 字符串字符串常量String類StringBuffer類StringTokenizer類5.3 向量2*第2頁(yè),共159頁(yè)。5.1 數(shù)組數(shù)組是有序數(shù)據(jù)的集合,是由數(shù)目固定、相同類型的元素組成的,用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來(lái)唯一地確定數(shù)組中的元素。Java將數(shù)組作為對(duì)象來(lái)處理,數(shù)組是一種引用類型,從java.lang.Object繼承而來(lái),故Object類中的所有方法均可用。 3*第3頁(yè),共159頁(yè)。5.1.1 一維數(shù)組具有一個(gè)下標(biāo)的數(shù)組稱為一維數(shù)組。1. 一維數(shù)組的聲明其聲明格式如下:這里只有數(shù)組變量的定義,

2、沒(méi)有為數(shù)組元素分配空間,只為數(shù)組的引用分配了空間,array1和array2目前為空的引用。 方式一:數(shù)據(jù)類型 數(shù)組名;方式二:數(shù)據(jù)類型 數(shù)組名;例如:int array1;double array2;4*第4頁(yè),共159頁(yè)。2. 一維數(shù)組的初始化 一維數(shù)組定義之后,必須經(jīng)過(guò)初始化才可以引用,數(shù)組經(jīng)過(guò)初始化后,其長(zhǎng)度(即可存放的元素個(gè)數(shù))就不可再改變。數(shù)組的初始化分為靜態(tài)初始化和動(dòng)態(tài)初始化兩種:(1) 靜態(tài)初始化:在定義數(shù)組的同時(shí)對(duì)數(shù)組元素進(jìn)行初始化 int intArray=1,2,3,4; / 定義了一個(gè)含有4個(gè)元素的int型數(shù)組注意: 在給數(shù)組賦初值時(shí),不能同時(shí)指定數(shù)組的大小,Java會(huì)

3、根據(jù)初值的多少自動(dòng)計(jì)算數(shù)組的大小。 靜態(tài)初始化必須使用上述一條語(yǔ)句完成 當(dāng)創(chuàng)建數(shù)組后,如果沒(méi)有初始化,系統(tǒng)會(huì)根據(jù)數(shù)組的不同數(shù)據(jù)類型,指定不同的缺省值。 5*第5頁(yè),共159頁(yè)。(2) 動(dòng)態(tài)初始化:用運(yùn)算符new為數(shù)組分配空間 對(duì)于簡(jiǎn)單類型的數(shù)組,其格式如下:數(shù)據(jù)類型 數(shù)組名=new 數(shù)據(jù)類型arraySize;數(shù)據(jù)類型 數(shù)組名=new 數(shù)據(jù)類型arraySize;其中arraySize表示數(shù)組長(zhǎng)度,通常為整型常量,用以指明數(shù)組元素的個(gè)數(shù)。或先聲明數(shù)組,再對(duì)數(shù)組進(jìn)行初始化:數(shù)據(jù)類型 數(shù)組名;數(shù)組名=new 數(shù)據(jù)類型arraySize;6*第6頁(yè),共159頁(yè)。 對(duì)于復(fù)合(引用)類型(類、接口、數(shù)組

4、)的數(shù)組,需要經(jīng)過(guò)以下兩步進(jìn)行內(nèi)存空間的分配。首先:為數(shù)組分配空間,每一個(gè)數(shù)組元素都是一個(gè)引用,格式為:數(shù)組名=new 數(shù)據(jù)類型arraySize;然后為每一個(gè)數(shù)組元素分配所引用的對(duì)象空間,格式為:數(shù)組名i=new 數(shù)組元素對(duì)象的構(gòu)造函數(shù); 例如:String stringArray; /定義一個(gè)String類型的數(shù)組stringArray = new String3; 上述語(yǔ)句給數(shù)組stringArray分配3個(gè)引用空間,初始化每個(gè)引用值為nullstringArray0=new String(how);stringArray1=new String(are);stringArray2=ne

5、w String(“you”);(如圖示)7*第7頁(yè),共159頁(yè)。8*第8頁(yè),共159頁(yè)。3. 一維數(shù)組元素的的引用 當(dāng)數(shù)組初始化后就可通過(guò)數(shù)組名與下標(biāo)來(lái)引用數(shù)組中的每一個(gè)元素。一維數(shù)組元素的引用格式如下:數(shù)組名int類型的表達(dá)式注意:(1) 與C/C+不同的是,Java對(duì)數(shù)組元素的下標(biāo)要進(jìn)行越界檢查,以保證訪問(wèn)的安全性。若數(shù)組下標(biāo)越界,Java會(huì)拋出java.lang.ArrayIndexOutOfBoundsException異常。(2) length是屬于數(shù)組對(duì)象的數(shù)據(jù)域而不是方法。因此,使用length()會(huì)出錯(cuò),length只有在數(shù)組創(chuàng)建后才能訪問(wèn)。創(chuàng)建前,數(shù)組的引用是null。(3

6、) 與C、C+中不同,Java對(duì)數(shù)組元素要進(jìn)行越界檢查以保證安全性。 9*第9頁(yè),共159頁(yè)。4. 數(shù)組的復(fù)制一個(gè)簡(jiǎn)單的賦值語(yǔ)句并不能完成數(shù)組復(fù)制工作,在Java中,可以使用賦值語(yǔ)句復(fù)制基本類型的變量卻不能復(fù)制對(duì)象,如數(shù)組。將一個(gè)對(duì)象賦值給另一個(gè)對(duì)象,只會(huì)使兩個(gè)對(duì)象指向相同的內(nèi)存地址。 賦值數(shù)組有以下三種方法:(1) 用循環(huán)語(yǔ)句復(fù)制數(shù)組的每一個(gè)元素,如for(int i=0;isourceArray.length;i+) targetArrayi=sourceArrayi;(2) 使用Object的clone方法,如:int targetArray = (int)sourceArray.clo

7、ne();(3) 使用System類中的靜態(tài)方法arraycopy,arraycopy的語(yǔ)法如下:arraycopy(sourceArray,srcpos,targetArray,tarpos,length); 10*第10頁(yè),共159頁(yè)。5. 程序舉例【例5.2】用數(shù)組求解Fibonacci數(shù)列的前20項(xiàng),即使用數(shù)組下標(biāo)表達(dá)式求解數(shù)學(xué)上的迭代問(wèn)題?!纠?.3】用冒泡法和選擇法兩種方法對(duì)N個(gè)數(shù)排序(升序)。11*第11頁(yè),共159頁(yè)。圖5.2 對(duì)5個(gè)數(shù)據(jù)進(jìn)行冒泡法排序12*第12頁(yè),共159頁(yè)。5.1.2 二維數(shù)組如果數(shù)組的元素類型也是數(shù)組,這種結(jié)構(gòu)就是多維數(shù)組。多維數(shù)組的維數(shù)沒(méi)有限制,可以為

8、二維、三維等。最常用的二維數(shù)組是一個(gè)特殊的一維數(shù)組,它的每個(gè)元素都是一個(gè)一維數(shù)組,又叫做數(shù)組的數(shù)組。表示矩陣或表格需要使用二維數(shù)組。1. 二維數(shù)組的聲明數(shù)據(jù)類型 數(shù)組名;或數(shù)據(jù)類型 數(shù)組名;例如:int arr;或 int arr;13*第13頁(yè),共159頁(yè)。2. 二維數(shù)組的初始化 二維數(shù)組的初始化也分為靜態(tài)初始化和動(dòng)態(tài)初始化兩種。(1) 靜態(tài)初始化:在定義數(shù)組的同時(shí)為數(shù)組分配空間,例如:int intArray=1,2,2,3,3,4;(2) 動(dòng)態(tài)初始化:對(duì)高維數(shù)組來(lái)說(shuō),動(dòng)態(tài)分配內(nèi)存空間有下面兩種方法: 直接為每一維分配空間,格式如下: (舉例說(shuō)明)數(shù)據(jù)類型 數(shù)組名=new數(shù)據(jù)類型數(shù)組長(zhǎng)度;

9、或數(shù)據(jù)類型 數(shù)組名=new 數(shù)據(jù)類型數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度;14*第14頁(yè),共159頁(yè)。例如:int intArray1=new int4;int intArray2=new int43; /*定義了一個(gè)二維數(shù)組intArray2,分配了12個(gè)存儲(chǔ)單元,類似一個(gè)4行3列的矩陣。*/需要注意的是不指定行數(shù)而指定列數(shù)是錯(cuò)誤的。例如,下面的初始化是錯(cuò)誤的。int arr=new int4; / 錯(cuò)誤15*第15頁(yè),共159頁(yè)。 從最高維開始(而且必須從最高維開始),分別為每一維分配空間。在這種情況下,第2維的每一個(gè)數(shù)組的長(zhǎng)度可以不同,是一個(gè)不規(guī)則的二維數(shù)組。不規(guī)則的數(shù)組可以節(jié)省存儲(chǔ)空間。 例如:Strin

10、g s =new String2 ;s0=new String2;s1=new String3;s00=new String(Good);s01=new String( Luck);s10=new String( to);s11=new String( you);s12=new String(!); 16*第16頁(yè),共159頁(yè)。3. 二維數(shù)組的引用對(duì)二維數(shù)組中的每個(gè)元素,引用方式為:數(shù)組名index1index2其中index1和index2是數(shù)組下標(biāo),為整型常數(shù)和整型表達(dá)式,都是從0開始的。二維數(shù)組也有l(wèi)ength屬性,可以求每一維數(shù)組的長(zhǎng)度。對(duì)于:int x = new int34;17*

11、第17頁(yè),共159頁(yè)。【例5.5】測(cè)定數(shù)組的長(zhǎng)度及數(shù)組賦值。public class twoDimensionArray public static void main(String arg) int matrix = 1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5 ; System.out.println(the length of matrix is +matrix.length); for (int i=0;i5;i+) System.out.println(the length of matrix+i+ is +matrixi.length);

12、18*第18頁(yè),共159頁(yè)?!纠?.6】求二維數(shù)組中的最大數(shù)?!纠?.7】矩陣的加法和乘法運(yùn)算。19*第19頁(yè),共159頁(yè)。5.2 字符串字符串是多個(gè)字符的序列,是編程中常用的數(shù)據(jù)類型。 在純面向?qū)ο蟮腏ava語(yǔ)言中,將字符串?dāng)?shù)據(jù)類型封裝為字符串類,無(wú)論是字符串常量還是字符串變量,都是用類的對(duì)象來(lái)實(shí)現(xiàn)的,在對(duì)象中封裝了一系列方法來(lái)進(jìn)行字符串處理。 20*第20頁(yè),共159頁(yè)。5.2.1 字符串常量一個(gè)字符串常量使用雙引號(hào)括住的一串字符,字符常量是用單引號(hào)括住的一個(gè)字符。一個(gè)字符串常量是一個(gè)String對(duì)象,故可以使用String類中的各種方法。注意:若Java程序中多處出現(xiàn)字符串常量如ABC,

13、則Java編譯程序只創(chuàng)建一個(gè)String對(duì)象,所有的字符串常量ABC將使用同一個(gè)String對(duì)象。如:String s1=ABC;String s2=ABC;String s3=new String(ABC); 上述三條語(yǔ)句創(chuàng)建了三個(gè)對(duì)象,其中s1和s2是同一個(gè)對(duì)象,而s1和s3是2個(gè)不同的對(duì)象,盡管它們所表示的字符序列相等。21*第21頁(yè),共159頁(yè)。5.2.2 String類1. String類的構(gòu)造方法String類中提供了多種構(gòu)造方法來(lái)創(chuàng)建String類的對(duì)象。 (1) public String();功能:創(chuàng)建一個(gè)字符串對(duì)象,其字符串值為空。(2) public String(Str

14、ing value);功能:用字符串對(duì)象value創(chuàng)建一個(gè)新的字符串對(duì)象。(3) public String(char value);用字符數(shù)組value來(lái)創(chuàng)建字符串對(duì)象。(4) public String(char value,int offset,int count)從字符數(shù)組value中下標(biāo)為offset的字符開始,創(chuàng)建有count個(gè)字符的字符串對(duì)象。22*第22頁(yè),共159頁(yè)。(5) public String(byte ascII)用byte型字符串?dāng)?shù)組ascII,按缺省的字符編碼方案創(chuàng)建字符串對(duì)象。(6) public String(byte ascII,int offset in

15、t count)從字節(jié)型數(shù)組ascII中下標(biāo)為offset的字符開始,按缺省的字符編碼方案創(chuàng)建count個(gè)字符的串對(duì)象。(7) public String(StringBuffer buffer)用緩沖字符串buffer創(chuàng)建一個(gè)字符串對(duì)象?!纠?.8】String類的構(gòu)造方法的使用。23*第23頁(yè),共159頁(yè)。2. String類的常用成員方法 創(chuàng)建一個(gè)String類的對(duì)象后,使用相應(yīng)類的成員方法對(duì)創(chuàng)建的對(duì)象進(jìn)行處理。String類的常用成員方法見表5.3。說(shuō)明:(1) 關(guān)于字符串比較的說(shuō)明不能用“=” ,而用equals()方法。(2) 程序設(shè)計(jì)中頻繁使用字符串。(3) 類型轉(zhuǎn)換String

16、類的靜態(tài)方法valueOf()實(shí)現(xiàn)簡(jiǎn)單數(shù)據(jù)轉(zhuǎn)化為字符串 。類Integer、Double、Float和Long中也提供了方法valueOf()把一個(gè)字符串轉(zhuǎn)化為對(duì)應(yīng)的數(shù)字對(duì)象類型 示例:參看例5.1024*第24頁(yè),共159頁(yè)。5.2.3 StringBuffer類StringBuffer類也是java.lang.Object的子類。與String類不同,StringBuffer類是一個(gè)在操作中可以更改其內(nèi)容的字符串類。即一旦創(chuàng)建StringBuffer類的對(duì)象,在操作中可以更改和變動(dòng)字符串的內(nèi)容。也就是說(shuō)對(duì)于StringBuffer類的對(duì)象不僅能進(jìn)行查找和比較等操作,也可以做添加、插入、修改

17、之類的操作。25*第25頁(yè),共159頁(yè)。1. StringBuffer類的構(gòu)造函數(shù)StringBuffer類提供了多種構(gòu)造方法來(lái)創(chuàng)建類StringBuffer的對(duì)象。(1) public StringBuffer()功能:創(chuàng)建一個(gè)空字符串緩沖區(qū),默認(rèn)初始長(zhǎng)度為16個(gè)字符。(2) public StringBuffer(int length)功能:用length指定的初始長(zhǎng)度創(chuàng)建一個(gè)空字符串緩沖區(qū)(3) public StringBuffer(String str)功能:用指定的字符串str創(chuàng)建一個(gè)字符串緩沖區(qū),其長(zhǎng)度為str的長(zhǎng)度再加16個(gè)字符。26*第26頁(yè),共159頁(yè)。2. StringB

18、uffer類中追加和插入新內(nèi)容 StringBuffer類提供了10個(gè)重載方法append,可以在字符串緩沖區(qū)末尾追加boolean、char、字符數(shù)組、double、float、int、long、string、Object等類型的新內(nèi)容,append方法的返回類型均為StringBuffer。StringBuffer類還提供了9個(gè)重載方法insert,可以在字符串緩沖區(qū)中指定位置處插入char 、字符數(shù)組、double、float、int、long、boolean、string、Object等類型的新內(nèi)容。insert方法的返回類型均為StringBuffer。【例5.11】將給定不同數(shù)據(jù)類

19、型的內(nèi)容添加到當(dāng)前字符串后面。27*第27頁(yè),共159頁(yè)。3. StringBuffer類的常用成員方法 java.lang.StringBuffer常用成員方法參見表5.4?!纠?.12】測(cè)試字符串緩沖區(qū)的長(zhǎng)度和容量。 28*第28頁(yè),共159頁(yè)。5.2.4 StringTokenizer類 在Java類庫(kù)的java.util包中包含一個(gè)用于進(jìn)行字符串詞法分析的類StringTokenizer,目的是將對(duì)字符串進(jìn)行分解的方法進(jìn)行封裝,以簡(jiǎn)化應(yīng)用程序設(shè)計(jì)過(guò)程中的工作量。1StringTokenizer類的構(gòu)造方法(1) public StringTokenizer(String str)(2)

20、 public StringTokenizer(String str,String delim)(3) public StringTokenizer(String str,String delim,boolean returnTokens)29*第29頁(yè),共159頁(yè)。2StringTokenizer類的常用成員方法(1) public int countTokens()功能:返回字符串中的當(dāng)前單詞的數(shù)量,為整數(shù)。(2) public boolean hasMoreTokens()功能:若還有子串,則返回true,否則返回false。(3) public String nextToken()功能

21、:返回下一個(gè)子串。(4) public String nextToken(String delim)功能:重置delim中的分隔符后,返回串中下一個(gè)子串。30*第30頁(yè),共159頁(yè)。3. 程序設(shè)計(jì)舉例【例5.13】測(cè)試StringTokenizer類。31*第31頁(yè),共159頁(yè)。5.3 向量Java中的數(shù)組只能保存固定數(shù)目的元素,且必須把所有需要的內(nèi)存單元一次性的申請(qǐng)出來(lái),即數(shù)組一旦創(chuàng)建它的長(zhǎng)度就固定不變,所以創(chuàng)建數(shù)組前需要知道它的長(zhǎng)度。如果實(shí)現(xiàn)不知道數(shù)組的長(zhǎng)度,就需要估計(jì),若估計(jì)的長(zhǎng)度比實(shí)際長(zhǎng)度大,則浪費(fèi)有用的存儲(chǔ)空間,若比實(shí)際長(zhǎng)度小,則不能存儲(chǔ)相應(yīng)的信息。為了解決這個(gè)問(wèn)題Java中引入了向

22、量類Vector。Vector也是一組對(duì)象的集合,但相對(duì)于數(shù)組,Vector類可以根據(jù)需要?jiǎng)討B(tài)伸縮,可以追加對(duì)象元素?cái)?shù)量,可以方便的修改和維護(hù)序列中的對(duì)象。需要注意的是Vector類中對(duì)象不能是簡(jiǎn)單數(shù)據(jù)類型。32*第32頁(yè),共159頁(yè)。向量比較適合在如下情況下使用:(1) 需要處理的對(duì)象數(shù)目不定,序列中的元素都是對(duì)象或可以表示為對(duì)象。(2) 需要將不同類的對(duì)象組合成一個(gè)數(shù)據(jù)序列。(3) 需要做頻繁的對(duì)象序列中元素的插入和刪除。(4) 經(jīng)常需要定位序列中的對(duì)象和其他查找操作。(5) 在不同的類之間傳遞大量的數(shù)據(jù)。33*第33頁(yè),共159頁(yè)。1. Vector類的構(gòu)造方法(1) Vector()功

23、能:構(gòu)造一個(gè)空的向量(2) Vector(int capacity)功能:以指定的存儲(chǔ)容量構(gòu)造一個(gè)空的向量(3) Vector(int capacity, int capacityIncrement)功能:以指定的存儲(chǔ)容量和容量增量構(gòu)造一個(gè)空的Vector。如:Vector MyVector=new Vector(100,50);34*第34頁(yè),共159頁(yè)。2. Vector類的常用成員方法常用成員方法參見表5.5 【例5.14】測(cè)試Vector類。先創(chuàng)建Vector對(duì)象,再刪除掉其中的所有字符串對(duì)象“to”。35*第35頁(yè),共159頁(yè)。第6章 異常處理第36頁(yè),共159頁(yè)。主要內(nèi)容Case:

24、TryCatchDemo.java6.1 異常處理概述什么是異常為何采用異常處理6.2 異常的分類與層次6.3 異常的處理機(jī)制對(duì)異常處理的進(jìn)一步討論作業(yè)37*第37頁(yè),共159頁(yè)。6.1 異常處理概述6.1.1 什么是異常異常就是在程序的運(yùn)行過(guò)程中所發(fā)生的意外事件,它中斷指令的正常執(zhí)行。Java中提供了一種獨(dú)特的處理異常的機(jī)制,通過(guò)異常來(lái)處理程序設(shè)計(jì)中出現(xiàn)的錯(cuò)誤。38*第38頁(yè),共159頁(yè)。6.1.2 為何使用意外處理:把出錯(cuò)處理和正常代碼分開。比如有程序是處理文件,大家看流程,這個(gè)流程中充滿了錯(cuò)誤可能。readFile 打開文件;打不開咋辦? 判斷大小;大小判斷失敗怎么辦?(磁帶) 分配內(nèi)存

25、;內(nèi)存不夠 讀入內(nèi)存;文件讀不出來(lái) 關(guān)掉文件; 文件關(guān)不掉。解決方法:寫大量的if語(yǔ)句。39*第39頁(yè),共159頁(yè)。傳統(tǒng)的錯(cuò)誤檢測(cè)和糾正errorCodeType readFile initialize errorCode = 0; 打開文件;if (打開文件成功) 判斷文件長(zhǎng) if (文件長(zhǎng)取到) 分配內(nèi)存 if (分內(nèi)存成功) 讀入內(nèi)存 if (讀文件失敗) errorCode = -1; /讀文件判斷 else errorCode = -2; /分配內(nèi)存失敗 else errorCode = -3; /取不到文件長(zhǎng) 關(guān)閉文件; if (文件沒(méi)關(guān)& errorCode = 0) error

26、Code = -4; else errorCode = errorCode and -4; else errorCode = -5; return errorCode;40*第40頁(yè),共159頁(yè)。從上面的流程可看出真正有用的代碼不多,就五條而已,其它全部是判斷錯(cuò)誤用的,主要邏輯都被錯(cuò)誤處理代碼混得看不清了,程序可讀性差,出錯(cuò)返回信息量太少。在Java中,處理這種情況的方法是利用異常處理,把出錯(cuò)處理和正常代碼分開,Java異常處理通過(guò)5個(gè)關(guān)鍵字try,catch,finally,throw和throws進(jìn)行管理。 41*第41頁(yè),共159頁(yè)。Java的解決方式readFile /結(jié)構(gòu)清楚,無(wú)需自

27、己判斷,代碼量小。 try 打開文件; 判斷大小; 分配內(nèi)存; 讀入內(nèi)存; 關(guān)掉文件; catch (文件打開失敗) 處理代碼; catch (大小取不到失敗) 處理代碼; catch (內(nèi)存分配失敗) 處理代碼; catch (讀取失敗) 處理代碼; catch (文件關(guān)閉失敗) 處理代碼; 42*第42頁(yè),共159頁(yè)。6.2 異常類的分類與層次6.2.1 異常類的層次結(jié)構(gòu)在jdk中,每個(gè)包中都定義了異常類,而所有的異常類都直接或間接地繼承于java.lang.Throwable類。當(dāng)Java程序遇到不可預(yù)料的錯(cuò)誤時(shí),會(huì)實(shí)例化一個(gè)從Throwable類繼承的對(duì)象。 java中的異常類可分為兩

28、大類: Error: 錯(cuò)誤Error類指的是系統(tǒng)錯(cuò)誤或運(yùn)行環(huán)境出現(xiàn)的錯(cuò)誤,這些錯(cuò)誤一般是很嚴(yán)重的錯(cuò)誤,即使捕捉到也無(wú)法處理,由Java虛擬機(jī)生成并拋出,包括系統(tǒng)崩潰、動(dòng)態(tài)鏈接失敗、虛擬機(jī)錯(cuò)誤等,在Java程序中不做處理。 Exception: 異常Exception類則是指一些可以被捕獲且可能恢復(fù)的異常情況,是一般程序中可預(yù)知的問(wèn)題。對(duì)于異常可分為兩類:(1) 運(yùn)行時(shí)異常:程序中可以不做處理,直接由運(yùn)行時(shí)系統(tǒng)來(lái)處理。(2) 非運(yùn)行時(shí)異常:在程序中必須對(duì)其進(jìn)行處理,否則編譯器會(huì)指出錯(cuò)誤。 43*第43頁(yè),共159頁(yè)。異常類的結(jié)構(gòu)層次 44*第44頁(yè),共159頁(yè)。6.2.2 Exception類1

29、. Exception類的構(gòu)造方法Exception類有兩種構(gòu)造方法:Exception():沒(méi)有指定的消息串,直接構(gòu)造一個(gè)Exception。Exception(String exp):根據(jù)參數(shù)提供的消息串,創(chuàng)建一個(gè)Exception。例如,創(chuàng)建一個(gè)異常對(duì)象:Exception myExp=new Exception(“異常!”);45*第45頁(yè),共159頁(yè)。2. 常用方法Exception類的方法均繼承自Throwable類,可以為程序提供一些有關(guān)異常的信息,常用方法如下:String getMessage() :返回該異常所存儲(chǔ)的描述性字符串。String toString():返回異常

30、對(duì)象的詳細(xì)信息,包含該類名和指出所發(fā)生問(wèn)題的描述性消息的字符串。void printStackTrace():將異常發(fā)生的路徑,即引起異常的方法調(diào)用嵌套序列打印到標(biāo)準(zhǔn)錯(cuò)誤流。例如:System.out.println(myExp.getMessage();此語(yǔ)句可以將異常對(duì)象myExp的異常信息描述打印輸出,在屏幕上顯示“異常!”。 46*第46頁(yè),共159頁(yè)。6.2.3 自定義異常類在程序中,可以創(chuàng)建自定義的異常類。用戶自定義的異常類都要直接或間接地繼承Exception類??砂凑障旅娴姆椒ㄗ远x一個(gè)異常類:(1) 創(chuàng)建一個(gè)繼承Exception類或者其它已存在的異常類的子類。(2) 在該類

31、中創(chuàng)建一個(gè)默認(rèn)的無(wú)參數(shù)構(gòu)造方法,該構(gòu)造方法以適當(dāng)?shù)腻e(cuò)誤消息作為輸入,調(diào)用它的超類的構(gòu)造方法。(3) 再增加一個(gè)帶字符串參數(shù)的構(gòu)造方法,該構(gòu)造方法以適當(dāng)?shù)腻e(cuò)誤消息作為輸入(還包括輸入的字符串)來(lái)調(diào)用其超類相應(yīng)的構(gòu)造方法。 47*第47頁(yè),共159頁(yè)。例如,定義一個(gè)繼承于Exception類的用戶自定義異常類,語(yǔ)句如下:class MyException extends Exception MyException() super(“數(shù)據(jù)錯(cuò)誤!”); MyException(String exp) super(exp); 48*第48頁(yè),共159頁(yè)。6.3 異常的處理機(jī)制每當(dāng)Java程序運(yùn)行過(guò)程中發(fā)

32、生一個(gè)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對(duì)象,即產(chǎn)生一個(gè)異常。一旦一個(gè)異常對(duì)象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機(jī)制來(lái)處理它,確保不會(huì)產(chǎn)生死機(jī)、死循環(huán)或其他對(duì)操作系統(tǒng)的損害,從而保證了整個(gè)程序運(yùn)行的安全性。這就是Java的異常處理機(jī)制。 49*第49頁(yè),共159頁(yè)。Java中處理異常有兩種方式:捕獲異常、聲明拋棄異常。捕獲異常,就地解決,并使程序繼續(xù)執(zhí)行。聲明拋出異常也就是將異常向外轉(zhuǎn)移,即將異常拋出方法之外,由調(diào)用該方法的環(huán)境去處理。50*第50頁(yè),共159頁(yè)。6.3.1 捕獲異常當(dāng)Java運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),它將會(huì)沿著方法的調(diào)用棧逐層

33、回溯,尋找處理這一異常的代碼。找到能夠處理這種類型的異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常對(duì)象交給這個(gè)方法進(jìn)行處理,這一過(guò)程稱為捕獲(catch)異常。這是積極的異常處理機(jī)制。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。 51*第51頁(yè),共159頁(yè)。捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn)的。處理異常的程序結(jié)構(gòu)如下:try /接受監(jiān)視的程序塊,在此區(qū)域內(nèi)發(fā)生的異常,由catch中指定的程序處理catch(要處理的異常種類和標(biāo)識(shí)符) /處理異常catch(要處理的異常種類和標(biāo)識(shí)符) /處理異常finally /最終處理52*第52頁(yè)

34、,共159頁(yè)。try-catch-finally語(yǔ)句1. try捕獲異常的第一步是用try選定捕獲異常的范圍,所有可能拋出異常的語(yǔ)句都放入try模塊中。try模塊中的語(yǔ)句是程序正常流程要執(zhí)行的語(yǔ)句,但是在執(zhí)行過(guò)程中有可能出現(xiàn)異常。2. catch(必有)每個(gè)try代碼塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于處理try代碼塊中所生成的異常事件。catch語(yǔ)句只需要一個(gè)形式參數(shù)指明它所能夠捕獲的異常類型,這個(gè)類必須是Throwable的子類,運(yùn)行時(shí)系統(tǒng)通過(guò)參數(shù)值把被拋棄的異常對(duì)象傳遞給catch塊。53*第53頁(yè),共159頁(yè)。try-catch-finally語(yǔ)句在catch塊中是對(duì)異常對(duì)象進(jìn)行處

35、理的代碼,與訪問(wèn)其它對(duì)象一樣,可以訪問(wèn)一個(gè)異常對(duì)象的變量或調(diào)用它的方法。getMessage( )是類Throwable所提供的方法,用來(lái)得到有關(guān)異常事件的信息,類Throwable還提供了方法printStackTrace( )用來(lái)跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容。例如:54*第54頁(yè),共159頁(yè)。try-catch-finally語(yǔ)句try.catch( FileNotFoundException e )System.out.println( message: +e.getMessage() );e.printStackTrace( System.out );catch( IOExcept

36、ion e )System.out.println(e.getMessage() );55*第55頁(yè),共159頁(yè)。try-catch-finally語(yǔ)句catch 語(yǔ)句的順序:捕獲異常的順序和catch語(yǔ)句的順序有關(guān),當(dāng)捕獲到一個(gè)異常時(shí),剩下的catch語(yǔ)句就不再進(jìn)行匹配。因此,在安排catch語(yǔ)句的順序時(shí),首先應(yīng)該捕獲最特殊的異常,然后再逐漸一般化。也就是一般先安排子類,再安排父類。56*第56頁(yè),共159頁(yè)。try-catch-finally語(yǔ)句3.finally(可選)捕獲異常的最后一步是通過(guò)finally語(yǔ)句為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻?/p>

37、狀態(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語(yǔ)句都會(huì)被執(zhí)行。Case:例6.1 TryCatchSequence.java57*第57頁(yè),共159頁(yè)。6.3.2 聲明拋出異常1. 拋出異常在Java程序的執(zhí)行過(guò)程中,如果出現(xiàn)了異常事件,就會(huì)生成一個(gè)異常對(duì)象。生成的異常對(duì)象將傳遞給Java運(yùn)行時(shí)系統(tǒng),這一異常的產(chǎn)生和提交過(guò)程稱為拋棄(throw)異常。 2. 聲明拋棄異常如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄(throws)異常。這是一種消極的異常處理機(jī)制。58*第58頁(yè),共159頁(yè)。1. 拋出異常拋出異常就是產(chǎn)生異常對(duì)象的過(guò)程,首

38、先要生成異常對(duì)象,異常或者由虛擬機(jī)生成,或者由某些類的實(shí)例生成,也可以在程序中生成。在方法中,拋出異常對(duì)象是通過(guò)throw語(yǔ)句實(shí)現(xiàn)的。例如:IOException e=new IOException();throw e ;可以拋出的異常必須是Throwable或其子類的實(shí)例。下面的語(yǔ)句在編譯時(shí)將會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤:throw new String(want to throw);59*第59頁(yè),共159頁(yè)。在同一個(gè)方法中拋出異常和處理異常。Case:例6.2 SeqStack.java60*第60頁(yè),共159頁(yè)。2. 聲明拋出異常如果在一個(gè)方法中生成了一個(gè)異常,但是這一方法并不確切地知道該如何對(duì)這一

39、異常事件進(jìn)行處理,這時(shí),一個(gè)方法就應(yīng)該聲明拋棄異常,使得異常對(duì)象可以從調(diào)用棧向后傳播,直到有合適的方法捕獲它為止。也就是說(shuō)拋出異常的方法和處理異常的方法不是同一個(gè)方法時(shí),則需聲明拋出異常。用方法聲明中的throws子句指明。例如:public int read () throws IOException.61*第61頁(yè),共159頁(yè)。throws子句中同時(shí)可以指明多個(gè)異常,之間由逗號(hào)隔開。例如: public static void main(String args) throws IOException, IndexOutOfBoundsException Case: 例6.3 SeqStac

40、k2.java62*第62頁(yè),共159頁(yè)。對(duì)異常處理的進(jìn)一步討論:(1)對(duì)Error類或其子類的對(duì)象,程序中不必進(jìn)行處理。(2)對(duì)RuntimeException類或其子類,程序中可以不必進(jìn)行處理。(3)除此之外的異常,程序員都應(yīng)該在程序中進(jìn)行處理。 要么用try-catch-finally進(jìn)行捕獲處理 要么明確表示不處理從而聲明拋出異常 要么先捕獲處理然后再次拋出。(4)Java的異常處理機(jī)制(try-catch-finally語(yǔ)句、throws 子句、throw 語(yǔ)句)帶來(lái)Java程序代碼結(jié)構(gòu)上的改變。(5)不能濫用異常機(jī)制。簡(jiǎn)單的出錯(cuò)判斷建議用if語(yǔ)句。(6)不要過(guò)分細(xì)分異常。63*第6

41、3頁(yè),共159頁(yè)。作業(yè)編寫復(fù)數(shù)類程序,1選做)增加定義復(fù)數(shù)類的復(fù)數(shù)除方法,用throws聲明拋出DividedByZeroException(自定義異常); 在合適的位置處理這些異常。2選做)主類中使用args命令行參數(shù)傳入兩個(gè)復(fù)數(shù)操作數(shù),并編程自定義異常LessParamException與NoOperandException;64*第64頁(yè),共159頁(yè)。第7講 圖形用戶界面第65頁(yè),共159頁(yè)。主要內(nèi)容7.1 Java GUI概述Swing組件Swing容器(重點(diǎn):JFrame類)7.2 圖形與繪圖7.3 事件處理與Swing常用組件Java事件處理機(jī)制常用組件7.4 布局管理器66*第6

42、6頁(yè),共159頁(yè)。7.1 Java GUI概述7.1.1 AWT與Swingjava.awt包中包含了一個(gè)完整的類集以支持GUI程序的設(shè)計(jì),其中的類及相互關(guān)系可以用下圖來(lái)描述:事件類字體類GraphicsComponent顏色類布局管理類java.lang.ObjectCheckboxContainerButtonWindowPanelAppletDialogFrameList圖象類菜單類Scrollpane67*第67頁(yè),共159頁(yè)。Swing組件在javax.swing包中,定義了兩種類型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級(jí)組件(JCom

43、ponent)。Swing組件都是AWT的Container類的直接子類和間接子類。Swing組件以J開頭,除了有與AWT類似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格(JTable)、樹(JTree)。68*第68頁(yè),共159頁(yè)。AWT與Swing頂層窗口類之間的關(guān)系69*第69頁(yè),共159頁(yè)。7.1.2 Swing組件70*第70頁(yè),共159頁(yè)。7.1.3 容器(Container)容器(Container)也是一個(gè)類,實(shí)際上是Component的子類,因此容器本身也是一個(gè)組件,具有組

44、件的所有性質(zhì),但是它的主要功能是容納其它組件和容器。1)容器可以簡(jiǎn)化圖形化界面的設(shè)計(jì),以整體結(jié)構(gòu)來(lái)布置界面。2)所有的容器都可以通過(guò)add()方法向容器中添加組件。(參看API)71*第71頁(yè),共159頁(yè)。JFrame JDialog JApplet JWindowJLayeredPaneJRootPaneJContentPaneJGlassPaneJMenuBarSwing容器層次結(jié)構(gòu)72*第72頁(yè),共159頁(yè)。容器分類頂層容器窗體JFrame; JWindow; JApplet;對(duì)話框JDialog(JOptionPane)中間層容器面板JPanel; 滾動(dòng)窗格JScrollPane, J

45、ScrollBar; 拆分窗格JSplitPane; 索查標(biāo)簽窗格JTabbedPane特殊容器內(nèi)部窗體JInternalFrame; 分層窗格JLayeredPane; 根窗格JRootPane73*第73頁(yè),共159頁(yè)。1. JFrame窗口是最基本的用戶界面元素。框架窗口是一種窗體,其中帶有邊框、標(biāo)題欄及用于關(guān)閉和最大/最小化窗口的圖標(biāo)等。在GUI的應(yīng)用程序中,一般至少應(yīng)使用一個(gè)框架窗口。通常將框架窗口簡(jiǎn)稱為窗口。JFrame構(gòu)造方法主要有:JFrame(),建立一個(gè)無(wú)標(biāo)題的JFrame。JFrame(String title),建立一個(gè)標(biāo)題為title的JFrame。 74*第74頁(yè),

46、共159頁(yè)。窗口的基本操作 (1) 創(chuàng)建窗口直接生成一個(gè)JFrame類的實(shí)例即可建立一個(gè)窗口,或通過(guò)繼承JFrame類來(lái)定義子類,再建立窗口。例如,創(chuàng)建一個(gè)無(wú)標(biāo)題的窗口,語(yǔ)句如下:JFrame frame=new JFrame();(2) 設(shè)置標(biāo)題通過(guò)super(String title)調(diào)用基類的構(gòu)造方法,或通過(guò)setTitle(String title)方法來(lái)設(shè)置標(biāo)題。例如:JFrame frame=new JFrame(“窗口示例”);或者:JFrame myFrame=new JFrame();myFrame.setTitle(“窗口示例”);75*第75頁(yè),共159頁(yè)。(3) 設(shè)置初

47、始位置通過(guò)setLocation(int x,int y)方法設(shè)置初始位置。其中x,y是窗口左上角在屏幕上的坐標(biāo)值。(4) 設(shè)置大小通過(guò)setSize(int width,int height)方法設(shè)置初始大小。 (5) 設(shè)置圖標(biāo)通過(guò)setIconImage(Icon icon)方法設(shè)置窗口圖標(biāo)。 76*第76頁(yè),共159頁(yè)。(6) 定義關(guān)閉行為通過(guò)setDefaultCloseOperation(int operation)方法設(shè)置關(guān)閉行為。其中operation的取值可以是以下幾種:DO_NOTHING_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),不做任何處理;HIDE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí)

48、,隱藏這個(gè)窗口;DISPOSE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏并處理這個(gè)窗口;EXIT_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),退出程序。默認(rèn)是HIDE_ON_CLOSE。 77*第77頁(yè),共159頁(yè)。(7) 添加組件創(chuàng)建好JFrame之后,就可以向它的內(nèi)容面板中添加組件。對(duì)JFrame添加組件有兩種方式:用getContentPane( )方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組件:frame.getContentPane().add(childComponent)建立一個(gè)JPanel或 JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該

49、容器置為JFrame的內(nèi)容面板:JPanel conPane=new JPanel();/把其它組件添加到JPanel中;frame.setContentPane(conPane); /把conPane對(duì)象設(shè)置成為frame的內(nèi)容面板 78*第78頁(yè),共159頁(yè)?!纠?.1】 建立一個(gè)標(biāo)題為“Swing窗口”,大小為(300,200),圖標(biāo)為javalogo.gif,位置居中的窗口。屏幕效果如圖7.4所示。79*第79頁(yè),共159頁(yè)。2. 無(wú)邊框的窗口JWindowJWindow可以構(gòu)造無(wú)邊框的窗口。主要構(gòu)造方法有:JWindow():創(chuàng)建一個(gè)無(wú)邊界的窗口;JWindow(Frame owne

50、r):創(chuàng)建一個(gè)依賴Frame對(duì)象的窗口。3對(duì)話框JDialog 對(duì)話框與框架窗口類似,是有邊框、有標(biāo)題、可獨(dú)立存在的頂級(jí)容器。對(duì)話框分為無(wú)模態(tài)對(duì)話框和模態(tài)對(duì)話框。JDialog的構(gòu)造方法有:JDialog(Frame owner);JDialog(Frame owner,Boolean modal);JDialog(Frame owner,String title);JDialog(Frame owner,String title,Boolean modal);80*第80頁(yè),共159頁(yè)。4面板JPanelSwing的JPanel,它替代了AWT的畫布(Canvas)和面板(Panel),兼有

51、二者的功能。JPanel是一個(gè)非頂級(jí)的通用容器,總是處于其它一些容器中。JPanel不能象JFrame那樣能夠在桌面上浮動(dòng)。利用JPanel可以使版面的排列方式更生動(dòng),對(duì)于復(fù)雜GUI,通常由多個(gè)面板組成,而每個(gè)面板以特定的布局來(lái)排列組件。JPanel的構(gòu)造方法有:JPanel();JPanel(boolean isDoubleBuffered);JPanel(LayoutManager layout);JPanel(LayoutManager layout,boolean isDoubleBuffered);81*第81頁(yè),共159頁(yè)。5. 分割面板JSplitPaneJSplitPane一次

52、可將兩個(gè)組件同時(shí)顯示在兩個(gè)顯示區(qū)中,若想要同時(shí)在多個(gè)顯示區(qū)顯示組件,便必須同時(shí)使用多個(gè)JSplitPane。JSplitPane提供兩個(gè)常數(shù):HORIZONTAL_SPLIT、VERTICAL_SPLIT,用來(lái)設(shè)置水平分割或是垂直分割。6. JTabbedPane如果一個(gè)窗口的功能有幾項(xiàng),可以給每項(xiàng)設(shè)置一個(gè)標(biāo)簽,每個(gè)標(biāo)簽下面包含為完成此功能專用的若干組件。用戶要使用哪項(xiàng)功能,只要單擊相應(yīng)的標(biāo)簽,就可以進(jìn)入相應(yīng)的頁(yè)面。這種選項(xiàng)卡功能的實(shí)現(xiàn)就需要使用JTabbedPane這個(gè)中間層容器。82*第82頁(yè),共159頁(yè)。7. 滾動(dòng)面板JScrollPane當(dāng)容器內(nèi)要容納的內(nèi)容大于容器時(shí),希望容器能夠有一

53、個(gè)滾動(dòng)條,通過(guò)拖動(dòng)滑塊,就可以看到更多的內(nèi)容。JScrollPane就是能夠?qū)崿F(xiàn)這種功能的容器。8. JInternalFrame使用JInternalFrame容器類可以實(shí)現(xiàn)在一個(gè)主窗口中打開很多個(gè)文檔,每個(gè)文檔各自占用一個(gè)新的窗口。JInternalFrame的使用跟JFrame幾乎一樣,可以最大化、最小化、關(guān)閉窗口、加入菜單;唯一不同的是JInternalFrame是輕量級(jí)組件,它只能是中間容器,必須依附于頂層容器上。83*第83頁(yè),共159頁(yè)。7.1.4 基于Swing的Java GUI設(shè)計(jì)思路基本的java程序的GUI設(shè)計(jì)工具。主要包括下述幾個(gè)概念:組件Component (API)

54、 容器-Container布局管理器LayoutManager事件處理 在Java中,開發(fā)一個(gè)GUI程序,通常需要以下幾步:(1) 構(gòu)建一個(gè)頂層容器;通常是JFrame或JApplet (2)構(gòu)建若干個(gè)組件,組件可以是其它容器; (3)設(shè)定容器的布局管理器;用容器的add方法將這些組件加入到這個(gè)容器中;(4) 設(shè)置組件事件;并將組件事件與代碼關(guān)聯(lián)。84*第84頁(yè),共159頁(yè)。7.2 圖形與繪圖7.2.1 繪圖表面為了在Java程序里進(jìn)行繪圖和繪畫,需要有一個(gè)可以操作的表面。在抽象窗口工具包(AWT)中,這個(gè)繪圖表面通常是一個(gè)Canvas組件。在Swing程序中可以直接在頂層窗口(通常是JApp

55、let和JFrame)上繪圖,或者在JPanel的子類上繪圖。7.2.2 圖形環(huán)境和圖形對(duì)象GUI組件(諸如applet或窗口)的左上角坐標(biāo)默認(rèn)為(0,0),坐標(biāo)對(duì)由一個(gè)x坐標(biāo)(水平坐標(biāo))和一個(gè)y坐標(biāo)(垂直坐標(biāo))組成。x坐標(biāo)是從左上角向右移動(dòng)的水平距離,y坐標(biāo)是從左上角向下移動(dòng)的垂直距離。(如圖示)85*第85頁(yè),共159頁(yè)。86*第86頁(yè),共159頁(yè)。在屏幕上繪圖要使用Java圖形環(huán)境,每個(gè)Java組件(包括Swing組件),都有一個(gè)與之關(guān)聯(lián)的圖形環(huán)境,也稱圖形上下文,用java.awt.Graphics類的一個(gè)對(duì)象來(lái)表示。Graphics對(duì)象用于管理圖形環(huán)境,并在屏幕上繪制代表文本或其它圖

56、形對(duì)象(如線條、橢圓、矩形或其它多邊形)的像素。Graphics 類是所有圖形上下文的抽象基類,這個(gè)上下文允許應(yīng)用程序?qū)D形繪制到由不同設(shè)備實(shí)現(xiàn)的組件上,以及繪制到空閑屏幕的映像中。 87*第87頁(yè),共159頁(yè)。一個(gè) Graphics 對(duì)象封裝有 Java 所支持的基本繪圖操作所需的狀態(tài)信息。此狀態(tài)信息包括下列屬性: 要被繪制到其上的組件對(duì)象; 繪制和剪貼坐標(biāo)的平移原點(diǎn)。; 當(dāng)前的剪貼區(qū); 當(dāng)前顏色; 當(dāng)前的字體; 當(dāng)前的邏輯像素操作函數(shù) (XOR 或 Paint) ; 88*第88頁(yè),共159頁(yè)。圖形圖像處理類Graphics類常用方法1)畫線g.drawLine(xcenter, ycen

57、ter, xs, ys);2)畫圓 g.drawArc(xcenter - 50, ycenter - 50, 100, 100, 0, 360);89*第89頁(yè),共159頁(yè)。3)繪制字符串 g.drawString(lastdate, 5, 125)4)設(shè)置字體g.setFont(clockFaceFont);Font clockFaceFont = new Font(Serif, Font.PLAIN, 14);5)設(shè)置顏色 g.setColor(handColor);Color handColor = Color.blue;90*第90頁(yè),共159頁(yè)。7.2.3 顏色Color類java

58、.awt.Color類定義了顏色常量和方法。每種顏色都是從RGB值創(chuàng)建出來(lái)的。public Color(int r,int g,int b);預(yù)定義了13個(gè)顏色常量。見表7.4Color類的常用方法見表7.591*第91頁(yè),共159頁(yè)。7.2.4 字體java.awt.Font類:字體是從字形創(chuàng)建的,一個(gè)字形是一個(gè)位映射圖像,它定義字體中的字符和符號(hào)的外觀。Font clockFaceFont = new Font(Serif, Font.PLAIN, 14);Font類的構(gòu)造函數(shù)有3個(gè)參數(shù):字體名稱、字體風(fēng)格和字體大小。1)字體名稱可以是運(yùn)行程序的當(dāng)前系統(tǒng)所支持的任何字體,在Java1.1和

59、以后的版本中,所支持的字體名字有Monospaced、SansSerif、Serif、Dialog和DialogInput。 92*第92頁(yè),共159頁(yè)。java.awt.Font類:2)字體風(fēng)格public final static int PLAIN一個(gè)代表普通字體風(fēng)格的常量public final static int BOLD一個(gè)代表粗體字體風(fēng)格的常量public final static int ITALIC一個(gè)代表斜體字體風(fēng)格的常量也可以是BOLD與ITALIC的結(jié)合93*第93頁(yè),共159頁(yè)。7.2.5 使用Graphics類繪圖當(dāng)在AWT組件和Swing頂層窗口(JApplet

60、和JFrame,是java.awt.Component的子類)上繪圖時(shí),需要重寫組件的paint()方法;當(dāng)在Swing的JComponent的子類組件上繪圖時(shí),則需重寫paintComponent()方法。在這兩種情況(Swing和AWT)下,都是以一個(gè)Graphics對(duì)象作為參數(shù)。在某個(gè)組件需要進(jìn)行繪圖操作時(shí),系統(tǒng)會(huì)將Graphics對(duì)象傳遞給paint方法或paintComponent方法。paint方法和paintComponent方法的頭部分別為:public void paint(Graphics g )public void paintComponent(Graphics g )

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論