Java系列之王者歸來(lái)_第1頁(yè)
Java系列之王者歸來(lái)_第2頁(yè)
Java系列之王者歸來(lái)_第3頁(yè)
Java系列之王者歸來(lái)_第4頁(yè)
已閱讀5頁(yè),還剩44頁(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、Java 系列叢書(shū)之王者歸來(lái)索坤著Microsoft公司譯Google、Sun、Intel等數(shù)十家公司經(jīng)典教材專(zhuān)家關(guān)于王者歸來(lái)的贊譽(yù):Amazon 網(wǎng)站將本書(shū)列為將改變?nèi)祟?lèi)命運(yùn)的世界100 大好書(shū)之一Harvard,Stanford 等世界著名高校一致推薦本書(shū)為計(jì)算機(jī)、 軟件及網(wǎng)絡(luò)方向?qū)I(yè)必讀教材“本書(shū)深入淺出, 是編譯大師的經(jīng)典杰作, 所有這些讓我等有豁然開(kāi)朗,醍醐灌頂之感?!甭槭±砉W(xué)院校長(zhǎng)“我非常愉快的看完本書(shū),并在考試中獲得了97 分的好成績(jī)” J2EE 顧問(wèn)“本書(shū)讓我對(duì) java 更加愛(ài)不釋手啦 ( )/” Wiki 創(chuàng)始人“讀完此書(shū),令我從對(duì)java 的一竅不通到成為真正的java

2、 大師” 09 年圖靈獎(jiǎng)獲得者“此書(shū)深入淺出,經(jīng)典之極,讓你有前所未有的體會(huì)” Sun 公司主席“本書(shū)精巧凝練,充滿智慧,讓學(xué)習(xí)真正充滿樂(lè)趣和挑戰(zhàn)” Microsoft CEO“本書(shū)是我見(jiàn)過(guò)的最好的java 學(xué)習(xí)材料” XXX ,南京大學(xué)軟院著名學(xué)生Java 基礎(chǔ)知識(shí)第一章Java 世界:源文件,類(lèi),方法:類(lèi)( class)存于源文件之中,方法(method) 存于類(lèi)中,語(yǔ)句(statement)存于方法中1.語(yǔ)句是以分號(hào)結(jié)束;2.以兩行斜線開(kāi)始的是注釋?zhuān)?.空格符無(wú)關(guān)緊要;4.用名稱和類(lèi)型來(lái)聲明變量;int weight5.類(lèi)型和方法都必須定義在花括號(hào)中Public void go()/寫(xiě)在

3、這里啊Boolean 運(yùn)算符: <>= =System.out.println 和 System.out.print第二章類(lèi)和對(duì)象:覆蓋:子類(lèi)重新定義繼承下來(lái)的方法,以改變或延伸此方法的行為實(shí)例變量( instance variable):對(duì)象本身已知的事物,代表對(duì)象的狀態(tài);方法:對(duì)象可執(zhí)行的動(dòng)作;圓點(diǎn)運(yùn)算符( .):能讓你存取對(duì)象的狀態(tài)和行為Main ()的兩種用途:1。測(cè)試真正的類(lèi);2。啟動(dòng) java 應(yīng)用程序需要全局變量或方法時(shí):public,static,finalJava 程序:是由一組類(lèi)組成,其中有一個(gè)類(lèi)會(huì)帶有啟動(dòng)用的main()方法第三章認(rèn)識(shí)變量:變量: primit

4、ive,referencePrimitive 主數(shù)據(jù)類(lèi)型:Booleantruefalse默認(rèn)為 falseChar16bits065535默認(rèn)為 nullByte8bits-128127默認(rèn)為 0Short16bits-3276832767默認(rèn)為 0Int32bits-21474836482147483647 默認(rèn)為 0Long64bits-很大 +很大默認(rèn)為 0Float32bits范圍可變默認(rèn)為 0.0Double64bits范圍可變默認(rèn)為 0.0避開(kāi)關(guān)鍵字名字必須以字母,下劃線,$開(kāi)頭,不能用數(shù)字開(kāi)頭;避開(kāi)java 關(guān)鍵字引用:只有引用到對(duì)象的變量;它并不是對(duì)象的容器,而是類(lèi)似指向?qū)ο?/p>

5、的指針,或是地址數(shù)組也是對(duì)象Java 注重類(lèi)型,一旦數(shù)組被聲明出來(lái),你就只能裝入所聲明的類(lèi)型的元素第四章對(duì)象的行為方法會(huì)運(yùn)用形參,調(diào)用的一方會(huì)傳入實(shí)參;Java 是通過(guò) 值傳遞 的,也就是通過(guò)拷貝傳遞;對(duì)象所知者是實(shí)例變量,所為者是方法;傳入與傳出方法的值類(lèi)型可以隱含的放大和明確的縮?。环椒ū仨毬暶鞣祷仡?lèi)型,或void如果方法聲明了非void 的返回類(lèi)型,那就一定要返回與聲明類(lèi)型相同的值;封裝( Encapsulation):數(shù)據(jù)隱藏,private, public實(shí)例變量和局部變量:實(shí)例變量是聲明在類(lèi)中而不是方法中;局部變量是聲明在方法中;局部變量在使用前必須要初始化,沒(méi)有默認(rèn)值;使用 =

6、=來(lái)比對(duì) primitive主數(shù)據(jù)類(lèi)型;使用= =來(lái)判別兩個(gè)引用是否指向同一個(gè)對(duì)象;使用equels()來(lái)判別兩個(gè)對(duì)象是否在意義上相等;第五章編寫(xiě)程序偽碼,測(cè)試碼,真實(shí)碼偽碼來(lái)幫助測(cè)試碼的設(shè)計(jì)Integer.parseInt(“3”)將 string 轉(zhuǎn)換為 intFor( int cell : locationCells ) for 循環(huán)例如非加強(qiáng)版for : for( int i=0;i<100;i+ ) 加強(qiáng)版 for: for( String name : nameArray) (意思是對(duì)nameArray 的每個(gè)元素執(zhí)行一次 )Numofhits+后增操作Break;中止指令產(chǎn)

7、生隨機(jī)數(shù)int randomNum=(int) (Math.random( )*5)取得玩家輸入String guess= helper.getUserInput( “enter a number”);第六章認(rèn)識(shí) java 的 APIArrayList:方法: add() ,remove() ,contains() ,isEmpty() ,indexOf() ,size() , get()ArrayList:只需創(chuàng)建出此類(lèi)型的對(duì)象,不要制定大小;不要定位;ArrayList 是參數(shù)化的parameterizedArrayList<Button>:會(huì)聲明帶有Button 類(lèi)型元素的A

8、rrayList超強(qiáng)布爾表達(dá)式:與&&或|不等于! =非!短運(yùn)算符 &&,|布爾運(yùn)算長(zhǎng)運(yùn)算符 &,|位運(yùn)算Java 的 APIJava.util.ArrayList包類(lèi)除了 java.lang 外,使用導(dǎo)彈其他包的類(lèi)都需要制定全名指定包名:1 Importimportjava.util.Arraylsit2 Typejava.util.ArrayList<Dog>list=newjava.util.ArrayLsit<Dog>() ;第七章繼承和多態(tài)覆蓋:由子類(lèi)重新定義繼承下來(lái)的方法以改變或延伸此方法的行為子類(lèi)是 extends

9、父類(lèi)出來(lái)的,子類(lèi)繼承父類(lèi)所有的public 的方法和實(shí)例變量,不繼承private繼承下來(lái)的方法會(huì)被覆蓋掉但實(shí)例變量不能被覆蓋掉用 is-a 測(cè)試?yán)^承合理性,且是單向的如果某個(gè)方法在子類(lèi)中被覆蓋過(guò),調(diào)用這個(gè)方法是會(huì)調(diào)用到覆蓋過(guò)的版本繼承的意義:1.避免了重復(fù)的程序代碼2.定義出共同的協(xié)議程序會(huì)變得更加簡(jiǎn)潔,更有效率,更加簡(jiǎn)單也更易擴(kuò)展運(yùn)用多態(tài)時(shí),引用類(lèi)型可以是實(shí)際對(duì)象類(lèi)型的父類(lèi)參數(shù)和返回類(lèi)型也可以是多態(tài)Overload 和 Override :覆蓋 (Overriding) 是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載 (Overloading) 是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。如果子類(lèi)中定義某方法與父

10、類(lèi)有相同的名稱和參數(shù),我們說(shuō)該方法被覆蓋(Overriding) 。子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被“屏蔽 ”了。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱為方法的重載(Overloading) 。 Overloaded 的方法可以改變返回值的類(lèi)型。Overload : 1. 參數(shù)必須一樣,且返回類(lèi)型必須兼容2.不能降低返回權(quán)限Override :1.返回類(lèi)型可以不同2. 不能只改變返回類(lèi)型3.可以更改存取權(quán)限第八章接口和抽象類(lèi)抽象的方法沒(méi)有實(shí)體如果你聲明出一個(gè)抽象的方法, 必須將類(lèi)也標(biāo)記為抽象的, 不能在非抽象

11、的類(lèi)中擁有抽象的方法抽象的類(lèi)可以帶有抽象和非抽象的方法抽象的方法必須在具體的類(lèi)中運(yùn)行在 java 中的所有類(lèi)都是從object 類(lèi)中繼承出來(lái)的,沒(méi)有直接繼承過(guò)其他類(lèi)的類(lèi)是隱含繼承Object :1.equals(Object o)是否相等2.getClass()從哪里初始化3.hashCode()列出 hash 碼4.toString()列出類(lèi)的名稱和一個(gè)數(shù)字當(dāng)你把對(duì)象裝進(jìn)Arraylsit<Object> 時(shí),不管他原來(lái)是什么,你只能把它當(dāng)作object從 ArrayList<Object> 取出引用時(shí),類(lèi)型都是 Object轉(zhuǎn)換成原來(lái)的類(lèi)型Object o = al

12、.get(index);Dog d = (Dog) o;d.roam();致命方塊java 不允許多重繼承接口:純抽象類(lèi)interface定義: public interface Pet實(shí)現(xiàn): public class Dog extends Canine implements Pet實(shí)現(xiàn)多個(gè)接口:public class Dog extends Animal implements Pet,Saveable,paintable調(diào)用父類(lèi)的方法Super.runReport();第九章構(gòu)造器和垃圾收集器(GC )1. heap&stack2.實(shí)例變量是被聲明在類(lèi)中而不是方法中局部變量和方法

13、的參數(shù)是被聲明在方法中局部變量堆棧塊中對(duì)象引用變量,primitive 數(shù)據(jù)類(lèi)型棧上對(duì)象堆構(gòu)造函數(shù):1. 沒(méi)有返回類(lèi)型;2. 與類(lèi)名相同Public Duck( )默認(rèn)的構(gòu)造函數(shù)是沒(méi)有參數(shù)的最好能有無(wú)參數(shù)的構(gòu)造函數(shù)讓人可以選擇默認(rèn)值重載的構(gòu)造函數(shù)必須有不同的參數(shù)Super();調(diào)用父類(lèi)的構(gòu)造函數(shù)且對(duì) super()的調(diào)用必須是構(gòu)造函數(shù)的第一個(gè)語(yǔ)句調(diào)用有參數(shù)的父類(lèi)構(gòu)造函數(shù)super(參數(shù) 1,參數(shù) 2。)從同一個(gè)類(lèi)中調(diào)用另一個(gè)構(gòu)造函數(shù)this()作用:從某個(gè)構(gòu)造函數(shù)調(diào)用同一個(gè)類(lèi)的另外一個(gè)構(gòu)造函數(shù),且this ()必須是第一行Super()和this ()不能同時(shí)調(diào)用局部變量只會(huì)存活在聲明該變量的

14、方法中實(shí)例變量的壽命與對(duì)象相同引用變量的壽命和引用一致3 種方法釋放對(duì)象的引用:1. 引用永久性的離開(kāi)它的范圍void go()Life z = new Life() ;2. 引用被賦值到其他對(duì)象上Life z =new Life( );Z = new Lfie( );3. 直接將引用設(shè)為 null Life z = new Lfie( );Z = null;第十章數(shù)字和靜態(tài)非靜態(tài)方法和靜態(tài)方法Static 可以標(biāo)記出不需要類(lèi)實(shí)例的方法以引用變量的名稱調(diào)用非靜態(tài)方法以類(lèi)的名稱調(diào)用靜態(tài)的方法靜態(tài)的方法不能調(diào)用非靜態(tài)的變量,不能使用實(shí)例變量;靜態(tài)的方法不能調(diào)用非靜態(tài)的方法;如果 class 只有靜

15、態(tài)的方法,你可以將構(gòu)造函數(shù)標(biāo)記為private 以避免被初始化靜態(tài)變量:被同類(lèi)的所有實(shí)例共享的變量同一類(lèi)的所有的實(shí)例共享一份靜態(tài)變量實(shí)例變量:每個(gè)實(shí)例一個(gè);靜態(tài)變量:每個(gè)類(lèi)一個(gè);靜態(tài)變量會(huì)在該類(lèi)的任何靜態(tài)方法執(zhí)行之前就初始化靜態(tài)變量會(huì)在該類(lèi)的任何對(duì)象創(chuàng)建之前就完成初始化靜態(tài)變量也是通過(guò)類(lèi)的名稱來(lái)存取的比如: class PlayerStatic int PlayerCount = 0;Public class PlayerTestDriver Player one=new Player ( “Tiger Woods”);System.out.println( Player.playerCoun

16、t);/ 不是one靜態(tài)的 final 變量是常數(shù)常數(shù)變量的名稱應(yīng)該要都是大寫(xiě)字母Java 中的常量是把變量同時(shí)標(biāo)記為static 和final的靜態(tài) final 的初始化1. 聲明的時(shí)候:Public class FooPublic static final int FOO_x =25 ;2. 在靜態(tài)初始化程序中:Public class Bar Public static final double BAR_SIGN;Static BAR_SIGN = (double) Math.random ( ) ;/加載時(shí)執(zhí)行關(guān)于final:1.final2.final3.final的變量代表你不能改

17、變它的值;的 method 代表你不能覆蓋掉該method;的 class 代表你不能繼承該class,即創(chuàng)建子類(lèi);Math 的方法 :Random( ) ,abs( ), round( ), min( ), max( )Autobaxing:1. 方法的參數(shù)比如 :void takeNumber(Integer i)2.返回值比如 : int giveNumber( ) Return x;3.boolean 表達(dá)式比如 :if(bool) System.out.println( “true”);4.數(shù)據(jù)運(yùn)算比如 :Integer j = new Integer(5);Integer k =

18、j+3;5.賦值比如 :Double d = x;包裝的靜態(tài)方法1. 將 String 轉(zhuǎn)化成 primitive 主數(shù)據(jù)2. 將 primitive 主數(shù)據(jù)轉(zhuǎn)化成 String Double d = 42.5 ;String doubleString = “”+ d;或者Double d = 42.5;String doubleString = Double. toString (d);格式化結(jié)構(gòu)1.格式指令2.要格式化的值format( “%,d”, 1000000);%代表把參數(shù)放在這里格式化語(yǔ)句 :%,.d: 這代表以十進(jìn)制整數(shù)帶有逗號(hào)的方式表示%.d:這代表以小數(shù)點(diǎn)后兩位的方式來(lái)格式

19、化此浮點(diǎn)數(shù)%,.d: 這代表整數(shù)部分以逗號(hào)的形式表示,小數(shù)部分一兩位來(lái)格式化格式化中5 個(gè)部分唯一要填的項(xiàng)目是類(lèi)型decimal%dfloating point%fhexadecimal%xcharacter%c輸出日期 :1. 完整的日期和時(shí)間 : String.fomat( “%tc , new Date( ) ” );2. 只有時(shí)間String.format( “%tr ”, new Date( );3. 周,月 ,日Date today = new Date( );String.format( “%tA,%tB,%td ”,today ,today ,today );< : 表示

20、格式化程序重復(fù)利用之前的參數(shù)Date today = new Date( );String.format( “%tA,%<tB,%<td ”,today ,today ,today );用 java.util.Calendar 來(lái)操作日期Calendar 對(duì)象 :字段會(huì)保存狀態(tài);日期和時(shí)間可以運(yùn)算;日期和時(shí)間可以用millisecond 來(lái)表示Calendar API:Add, 加減時(shí)間值get,取出制定字段的值getInstance,返回 CalendargetTimeInMillis() ,以毫秒返回時(shí)間roll,加減時(shí)間值 ,不進(jìn)位set , 設(shè)置制定字段的值setTimeI

21、nMillis , 以毫秒制定時(shí)間用 Calendar cal = Calendar.getInstance( ) 取得實(shí)例第十一章異常處理調(diào)用一個(gè)不是你寫(xiě)的方法(有風(fēng)險(xiǎn)) ,可能會(huì)在運(yùn)行期間出現(xiàn)狀況 Java 的異常處理機(jī)制,異常是一種 Exception 類(lèi)型的對(duì)象格式:try / 危險(xiǎn)動(dòng)作catch(Exception ex) / 嘗試恢復(fù)其中 catch 的參數(shù)是Exception 類(lèi)型的 ex 引用變量如: public class MusicTest1public void play( )try Sequencersequencer = MidiSystem.getSequence

22、r( );System.out.println( “Successfully got a sequencer”);catch (MidiUnavailableExceptionex) System.out.println( “Bummer ”);誰(shuí)拋出異常:1. 有風(fēng)險(xiǎn),會(huì)拋出異常的程序代碼public void takeRisk( )throws BadException if (abandonAllHope) throw new BadException( );2. 調(diào)用該方法的程序代碼public void crossFingers( ) try anObject.takeRisk( )

23、; catch ( BadException ex) System.out.println( “Aaargh! ”); Ex.printStackTrace( );方法可以抓住其他方法所拋出的異常,異??偸莵G回給調(diào)用方會(huì)拋出異常的方法必須要聲明它有可能會(huì)這么做不是由編譯器檢查的 RuntimeException 的子類(lèi),被稱為檢查異常編譯器會(huì)核對(duì)每件事,除了 RuntimeException 之外編譯器會(huì)保證:1.如果你有拋出異常,一定要使用throw 來(lái)聲明這件事;2.如果你調(diào)用拋出異常的方法,你必須得確認(rèn)你知道異常的可能性,將調(diào)用包在try/catch 塊中Exceptio :IOExce

24、ption,InterruptedException,RuntimeException(ClassCastException(類(lèi)型轉(zhuǎn)換異常), NullPointerException(無(wú)指針異常)等等 )大部分的 RuntimeException是因?yàn)槌绦蜻壿媶?wèn)題,try/catch是用來(lái)處理真正的異常,而不是你的邏輯錯(cuò)誤try/catch 塊的流程:如果 try 話, try 后面的語(yǔ)句不會(huì)執(zhí)行,成功的話,跳過(guò) catch 塊運(yùn)行下面的部分;如果 try 失敗的直接跳到其余的程序運(yùn)行到 catch 塊執(zhí)行, 然后繼續(xù)下去finally 塊是用來(lái)存放不管有沒(méi)有異常都要執(zhí)行的程序如: tryt

25、runOvenOn( ) ;x.bake( );catch (BakingException ex)Ex.printStackTrace ( ); finally turnOvenOff( );如果 try 塊失敗了,拋出異常,程序會(huì)轉(zhuǎn)向catch 塊,當(dāng) catch 塊完成的時(shí)候,會(huì)執(zhí)行finally 塊,當(dāng) finally 塊完成時(shí),會(huì)繼續(xù)執(zhí)行其他部分;如果 try 成功,程序會(huì)跳過(guò)catch 塊并移動(dòng)到finally 塊,當(dāng) finally行其他部分;如果 try 或 catch 塊有 return 指令, finally還會(huì)執(zhí)行,流程是先跳到塊完成時(shí),就會(huì)執(zhí)finally 然后再回到

26、return 指令;處理多重異常:如: public class Laundry public void doLaundry( )throws PantsException, LingeriException或者是: public class Foo public void go( )Laundrylaundry = new Laundry ( );trylaundry.doLaundry( ); catch (PantsExceptionpex )/ 恢復(fù)程序代碼 catch (LingerieException lex )/ 恢復(fù)程序代碼異常也是多態(tài)1. 以異常的父類(lèi)來(lái)聲明會(huì)拋出的異常pu

27、blic void doLaundry( )throws ClothingException 聲 明 成ClothingException可 讓 你 拋 出 任 何ClothingExceptionPantsException 和 LingerieException 等)的子類(lèi)(比如2.以所拋出的異常父型來(lái)catch 異常try laundry.doLaundry( ) ;catch(ClothingException cex ) /解決方法/ 可以catch 任何clothingException的子類(lèi)try laundry.doLaundry( ) ;catch(ShirtExceptio

28、n sex ) / 可以catch 任何ShirtException的子類(lèi)/解決方法如果不同的Exception 方法不同,要個(gè)別的寫(xiě)出catch塊,即要為每個(gè)需要單獨(dú)出理的異常編寫(xiě)不同的catch 塊;有多個(gè) catch 塊時(shí)要從小到大排列:如: catch(TeeshirtException tex )catch( ShirtException sex )catch(ClothingException cex)不能將大的放在小的上面,同級(jí)的可以互換不想處理異常時(shí)可以duck,將異常拋給調(diào)用者對(duì)于異常 Exception , 1.處理:將有風(fēng)險(xiǎn)的行為包在try/catch中2. 聲明(duc

29、k掉):把 method 聲明成跟風(fēng)險(xiǎn)的調(diào)用一樣會(huì)拋出相同的異常第十二章看圖說(shuō)故事創(chuàng)建 GUI1. 創(chuàng)建 frameJFrameframe = new JFrame( );2. 創(chuàng)建 wightJButton button = new JButton( );3. 把 widget 加到 frame 上frame.getContentPane( ).add(button);4. 顯示出來(lái)frame.setSize(300,300) ;frame.setVisible( true );javax.swing 包:Jbutton, JRadioButton, JCheckBox, JLabel ,J

30、List, JScrollPane, JSlider, JTextArea 給按鈕添加功能:1.被按下時(shí)要執(zhí)行的方法2.檢測(cè)按鈕被按下的方法,即感應(yīng)裝置取得用戶的事件:1.按鈕要知道它的作用2.按鈕要在按鍵事件發(fā)生時(shí)調(diào)用執(zhí)行功能的方法監(jiān)聽(tīng)事件的接口:監(jiān)聽(tīng)接口是監(jiān)聽(tīng)你和事件源間的橋梁java.awt.event監(jiān)聽(tīng)和事件源的溝通:1.監(jiān) 聽(tīng) : 類(lèi) 要 實(shí) 現(xiàn) 按 鈕 的ActionEvent就 要 實(shí) 現(xiàn)ActionListener接 口addActionListener ( this )并傳入ActionListener 的引用2.事件源:按鈕的addActionListener ()被調(diào)用

31、參數(shù)會(huì)被按鈕存到清單中調(diào) 用清單上的每個(gè)監(jiān)聽(tīng)的actionPerformed( ) 啟動(dòng)事件取得按鈕的ActionEvent :1.實(shí)現(xiàn) ActionListener 這個(gè)接口2.向按鈕注冊(cè)3.定義事件處理的方法(實(shí)現(xiàn)接口上的方法)例如:import java.awt.event.*;import javax.swing.*;public class picture implements ActionListenerJButton button;/這是實(shí)現(xiàn)接口public static void main(String args)picture gui=new picture();gui.go

32、();public void go()JFrame frame = new JFrame();button = new JButton("click me");button.addActionListener(this);/向按鈕注冊(cè)frame.getContentPane().add(button);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,300);frame.setVisible(true);public void actionPerformed(ActionEvent

33、 event)/按鈕會(huì)以 ActionListenerbutton.setText("I've been clicked");對(duì)象作為參數(shù)來(lái)調(diào)用此方法在 GUI 上面加?xùn)|西的方法:1.在 frame 上放置 widget (按鈕,窗體, radio button 等)frame.getContentPane( ).add(Mybutton);2.在 widget 上繪制 2D 圖形:使用 graphics 對(duì)象來(lái)繪制圖形graphics.fillOval(70,70,100,100);3.在 widget 上繪制 JPEG 圖graphics.drawImage(m

34、yPic,10,10,this);自己創(chuàng)建的繪圖組件創(chuàng)建 JPanel 的子類(lèi)并覆蓋掉 paintComponent ()方法import javax.swing.*;import java.awt.*;class MyDrawPanel extends JPanel /創(chuàng)建 JPanel的子類(lèi)public void paintComponent(Graphics g)g.setColor(Color.orange);/ 具體操作g.fillRect(20, 50, 100, 100);在 paintComponent ()中可以:顯示 JPEGpublic void paintCompone

35、nt(Graphics g)Image image = new ImageIcon("catzilla.jpg").getImage();/圖文件名g.drawImage(image,3,4,this);/圖案左上角離邊 3個(gè)像素,離頂部 4個(gè)像素在黑色背景畫(huà)上隨機(jī)色彩的圓圈public void paintComponent(Graphics g) g.fillRect(0,0,this.getWidth(), this.getHeight() );int red=(int)(Math.random() * 255);int green=(int)(Math.random

36、() * 255);int blue=(int)(Math.random() * 255);Color randomColor = new Color (red ,green ,blue );g.setColor(randomColor);g.fillOval(70,70,100,100);paintComponent() 的參數(shù)被聲明為Graphics 類(lèi)型( java.awt.Graphics )public void paintComponent(Graphics g)由 g 參數(shù)引用的對(duì)象實(shí)際上是個(gè)Graphics2D 的實(shí)例(1)可以對(duì)Graphics 引用調(diào)用的方法:drawIma

37、ge(),drawLine(),drawPolygon(),drawRect(),drawOval(),fillRect(),fillRoundRect( ), setColor( )(2) 可以對(duì) Graphics2D 引用調(diào)用的方法:Fill3DRect( ), draw3DRect( ), rotate( ), scale( ), shear( ), transform( ), setRenderingHints( )漸層顏色做法public void paintComponent (Graphics g) Graphics g2d=(Graphics2D) g;GradientPain

38、t gradient = new GradientPaint (70,70,Color.blue,150,150,Color.orange);g2d.setPaint(gradient);/將虛擬筆刷換成間層g2d.fillOval(70,70,100,100);public void paintComponent(Graphics g) Graphics2D g2d=(Graphics2D) g;int red = (int)(Math.random()*255);int green = (int)(Math.random()*255);int blue = (int)(Math.rando

39、m()*255);Color startColor=new Color(red,green,blue);int red = (int)(Math.random()*255);int green = (int)(Math.random()*255);int blue = (int)(Math.random()*255);Color endColor=new Color(red,green,blue);GradientPaint gradient = new GradientPaint(70,70,startColor,150,150,endColor);g2d.setPaint(gradient

40、);g2d.fillOval(70,70,100,100);GUI 的布局:超過(guò)一個(gè)以上的widget 的 framecentre, west, east, north, southframe.getContentPane( ).add(BorderLayout.CENTER,button);嘗試有兩個(gè)按鈕:內(nèi)部類(lèi):內(nèi)部類(lèi)可以使用外部類(lèi)的所有方法與變量class MyOuterClassclass MyInnerClass void go()內(nèi)部類(lèi)可以使用外部類(lèi)的變量class MyOuterClassprivate int x;class MyInnerClassvoid go( )x=42

41、; /關(guān)閉內(nèi)部類(lèi) / 關(guān)閉外部類(lèi)內(nèi)部類(lèi)的實(shí)例一定會(huì)綁在外部類(lèi)的實(shí)例上創(chuàng)建內(nèi)部類(lèi)的實(shí)例class MyOuterprivate int x;/外部的私用實(shí)例變量xMyInnerinner = new MyInner ( );/創(chuàng)建內(nèi)部的實(shí)例public void doStuff( )inner.go( );/ 調(diào)用內(nèi)部的方法Class MyInner void.go( ) x = 42;/ 關(guān)閉內(nèi)部類(lèi)/關(guān)閉外部類(lèi)內(nèi)部類(lèi)可以搞定不同的繼承層次動(dòng)畫(huà)效果:1. 在特定坐標(biāo)點(diǎn)繪制對(duì)象g.fillOval(20,30,100,100);/ 離左上方20, 30 個(gè)像素2.在不同的坐標(biāo)點(diǎn)重新繪制對(duì)象g.fi

42、llOval(25,55,100,100);/ 離左上方25,55 個(gè)像素3.在左標(biāo)尚未到達(dá)終點(diǎn)時(shí)重復(fù)上列步驟第十三章運(yùn)用 SwingSwing 的組件:Text, button, scrollable list, radio button等等,繼承 javax.swing.JComponent布局管理器(Layout Managers )三大布局管理器:1. BorderLayout :背景被分割成五個(gè)區(qū)域,每個(gè)區(qū)域能放一個(gè)組件2. FlowLayout :從左到右排列,必要時(shí)換行(面板默認(rèn)式)3. BoxLayout:從上到下每行一個(gè)(框架默認(rèn)式)Borderlayout 布局的五個(gè)區(qū)域:

43、東區(qū),西區(qū),南區(qū),北區(qū)和中央?yún)^(qū)BorderLayout 布局南北區(qū)域上使用組件的理想高度,而不是寬度;BorderLayout 布局東西區(qū)域上使用組件的理想寬度,而不是高度;中間的區(qū)域只能撿剩下的public void go()JFrame frame=new JFrame();JButton button = new JButton("There is no spoon.");frame.getContentPane().add(DorderLayout.NORTH,button); /把按鈕加到北方 frame.setSize(200,200);frame.setVis

44、ible(true);public void go()JFrame frame=new JFrame();JButton button = new JButton("Click me");Font bigFont =new Font("serif",Font.BOLD,28);/設(shè)置更大的字體button.setFont(bigFont);frame.getContentPane().add(DorderLayout.NORTH,button);frame.setSize(200,200);frame.setVisible(true);FlowLayou

45、t 布局組件的流向:依次從左到右,從上到下,若超過(guò)寬度就會(huì)換行 FlowLayout 布局會(huì)讓組件在長(zhǎng)寬上都使用理想的尺寸大小JPanel的布局管理器默認(rèn)是 FlowLayout 布局,但是把面板加到框架時(shí),面板大小與位置還是受 BorderLayout 的限制,面板的內(nèi)部還是 FlowLayout 管理的BoxLayout 布局:垂直排列BoxLayout 布局會(huì)讓組件在長(zhǎng)寬上都使用理想的尺寸大小public void go()JFrame frame=new JFrame();JPanel panel=new JPanel();panel.setBackground(Color.darkG

46、ray);panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS);/把布局管理器換掉JButton button = new JButton("Shock me");JButton buttontwo = new Jbutton("bliss");panel.add(button);panel.add(buttontwo);frame.getContentPane().add(BorderLayout.EAST,panel);frame.setSize(200,200);frame.setVisible(true);pack()方法會(huì)使 window 的大小符合內(nèi)含組件的大小可以調(diào)用 setLayout ()來(lái)改變面板的布局管理器操作 Swing 組件JTextField:構(gòu)造函數(shù):JTextField field = new JTextField(20);JTextField field = new JTextField( “Your name”);如何使用:1. 取得文本內(nèi)容System.out.println(field.getText() );2. 設(shè)定內(nèi)容field.setText( “whatever”);f

溫馨提示

  • 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)論