版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
JAVA語言學(xué)習(xí)問題目錄1.靜態(tài)變量2.主方法、構(gòu)造方法、成員方法及this應(yīng)用3.類的繼承4.包裝類5.數(shù)據(jù)處理類6.接口、繼承與多態(tài)1.靜態(tài)成員變量靜態(tài)變量的值可以在類中和不同的類中共享使用。但是它還是一個變量,還有可能在使用中被重新賦值,靜態(tài)變量的值在使用過程中可以被改變。事例packagecom.wsy;publicclassTransferProperty{ inti=47; publicvoidcall(){ System.out.println("調(diào)用call()方法"); for(i=0;i<3;i++){ System.out.print(i+""); if(i==2){ System.out.println("\n"); } } } publicTransferProperty(){
} publicstaticvoidmain(String[]args){ TransferPropertyt1=newTransferProperty(); TransferPropertyt2=newTransferProperty(); t2.i=60; System.out.println("第一個實例對象調(diào)用變量i的結(jié)果:"+t1.i++); t1.call(); System.out.println("第二個實例對象調(diào)用變量i的結(jié)果:"+t2.i); t2.call(); }47476047內(nèi)存中t1,t2兩個對象的布局對象t1對象t1對象t2對象t2運算過程第一個實例對象調(diào)用變量i的結(jié)果:47調(diào)用call()方法012第二個實例對象調(diào)用變量i的結(jié)果:60調(diào)用call()方法012執(zhí)行結(jié)果:可見,兩個對象的產(chǎn)生是相互獨立的,改變了t2的值不會影響到t1的i值。使用static關(guān)鍵字后,執(zhí)行結(jié)果如下:第一個實例對象調(diào)用變量i的結(jié)果:60調(diào)用call()方法012第二個實例對象調(diào)用變量i的結(jié)果:3調(diào)用call()方法012內(nèi)存中t1,t2兩個對象的布局47對象t1對象t260對象t1--60對象t2t2.i重新賦值3對象t1對象t2--3調(diào)用call方法后結(jié)論由此可見,靜態(tài)變量在內(nèi)存中是共享的,2.主方法、構(gòu)造方法、成員方法及this應(yīng)用publicclassUseCase3{//定義一個矩形類 privatefloatheight;//定義類的成員變量,表示類的屬性 privatefloatwidth;//定義類的成員變量,表示類的屬性 publicUseCase3(floatheight,floatwidth){//定義一個構(gòu)造方法〔帶參數(shù)〕 //在構(gòu)造方法中將成員變量進行初始化,用this區(qū)別參數(shù)與成員變量 this.height=height;//this的用法 this.width=width; } publicfloatsquare(){//定義一個成員方法 returnheight*width; } publicstaticvoidmain(Stringargs[]){//定義一個主方法 UseCase3u=newUseCase3(3.5f,4.5f);//定義一個對象 System.out.println(u.square()); }}1.主方法為main2.構(gòu)造方法名與類名相同3.類中的其他方法為成員方法程序調(diào)用過程u.square()構(gòu)造方法
UseCase3(floatheight,floatwidth).square()參數(shù)賦值UseCase3(3.5f,4.5f).square()參數(shù)傳遞
returnheight*width3.類的繼承publicclassUseCase2extendsUseCase1{ //繼承父類UseCase1 publicstaticvoidmain(String[]args){ UseCase1u=newUseCase1();//利用父類構(gòu)造對象,在父類中也可用 u.setName("123"); System.out.println(u.getName()); }}publicclassUseCase1{ privateStringname;
publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; System.out.println(); } publicstaticvoidmain(String[]args){ }4.包裝類Java是一種面向?qū)ο笳Z言,Java中的類把方法與數(shù)據(jù)連接在一起,并構(gòu)成了看碟包含式的處理單元。但在Java中不能定義根本類型〔primitivetype〕對象,為了能將根本類型視為對象來處理,并能連接相關(guān)的方法,Java為每個根本類型都提供了包裝類,這樣便可以把這些根本類型轉(zhuǎn)換為對象來處理了,值得說明的是:Java是可以直接處理根本類型的,但是在有些情況下我們需要將酚作為對象來處理,這時就需要將其轉(zhuǎn)換為包裝類了。4.1Integer類的常用方法返回值方法功能描述bytebyteValue()以byte類型返回該Integer值intintValue()以int類型返回該Integer對象shortshortValue()以short類型返回該Integer對象booleanEquals(ObjectIntergerObj)比較此對象與指定的對象是否相等StringtoString()返回一個表示該Integer值的String對象IntegervalueOf(Stringstr)返回保存指定的String值的Integer對象intparseInt(Stringstr)返回包含在由str指定的字符串中的數(shù)字的等價整數(shù)值intcompareTo(IntegeranotherInteger)在數(shù)字上比較兩個Integer對象。如果這兩個值相等,則返回0;如果調(diào)用對象的值小于anotherInteger的數(shù)值,則返回負值;如果大于則返回正值。在類Summation中,實現(xiàn)將String類型數(shù)據(jù)中的元素轉(zhuǎn)換成int型,并將各元素相加。publicclassSummation//創(chuàng)立類Summation{ publicstaticvoidmain(Stringargs[]){ //主方法 Stringstr[]={"89","12","10","18","35"}; //定義String數(shù)組,數(shù)組中的每個元素都是int型 intsum=0; //定義int型變量sum for(inti=0;i<str.length;i++){ //循環(huán)遍歷數(shù)組 intmyint=Integer.parseInt(str[i]); //將數(shù)組中的每個元素都轉(zhuǎn)化為int型 sum=sum+myint; //將數(shù)組中的各元素相加 } System.out.println("數(shù)組中的各元素之和是:"+sum); //將計算后結(jié)果輸出 }}4.2Long類1、構(gòu)造函數(shù)1.1Long(longnumber),該型函數(shù)以long型變量作為參數(shù)來創(chuàng)立Long對象例:Longlon=newLong(213L);1.2Long(Stringstr),該型函數(shù)以String型變量作為參數(shù)來創(chuàng)立Long對象例:Longlon=newLong(“213”);注:如果不是以數(shù)值類型的字符串作為參數(shù),那么拋出NumberFormatException異常。2.Long類的常用方法返回值方法功能描述bytebyteValue()以byte類型返回該Long值intintValue()以int類型返回該Long值longlongValue()以long型返回該Long值shortshortValue()以short類型返回該Long值booleanEquals(ObjectObj)比較兩個Long對象StringtoString()返回一個表示該Long值的String對象LongparseLong(Stringstr)將String類型的參數(shù)值解析為Long類型的值LongvalueOf(Stringstr)返回表示指定long值的Long實例intcompareTo(LonganotherLong)在數(shù)字上比較兩個Long對象。如果這兩個值相等,則返回0;如果調(diào)用對象的值小于anotherLong的數(shù)值,則返回負值;如果大于則返回正值。5.數(shù)字處理類在實際問題中,對數(shù)字的處理是非常普遍的,比方數(shù)學(xué)問題、隨機問題、商業(yè)貨幣問題、科學(xué)計數(shù)問題等。為了應(yīng)對以上問題,Java提供了處理相關(guān)問題的類,包括DecimalFormat類〔用于格式化數(shù)字〕、Math類〔為各種數(shù)學(xué)計算提供了工具方法〕、Random類〔為Java處理隨機數(shù)問題提供了各種方法〕、BigInteger與BigDecimal類〔為所有的大數(shù)字的處理提供了相應(yīng)的數(shù)學(xué)運算操作方法〕。6.接口、繼承與多態(tài)6.1繼承繼承并不只是擴展父類的功能,還可以重寫父類的成員方法。重寫〔還可以稱為覆蓋〕就是在子類中將父類的成員方法的名稱保存,重寫成員方法的實現(xiàn)內(nèi)容,更改成員方法的存儲權(quán)限,或是修改成員方法的返回值類型。在繼承中還有一種特殊的重寫方式,子類與父類的成員方法返回值、方法名稱、參數(shù)類型及個數(shù)完全相同,唯一不同的是方法實現(xiàn)內(nèi)容,這種特殊重寫方式被稱為重構(gòu)。publicclassTest{ publicTest(){//構(gòu)造方法 } protectedvoiddoSomething(){//成員方法 } protectedTestdoIt(){//方法返回值類型為Test類型 returnnewTest(); }}classTest2extendsTest{//繼承父類 publicTest2(){//構(gòu)造方法 super();//調(diào)用父類構(gòu)造方法 super.doSomething();//調(diào)用父類成員方法 } publicvoiddoSomethingnew(){//新增方法 } publicvoiddoSomething(){//重寫父類方法 } protectedTest2doIt(){//重寫父類方法,返回值為Test2類型 returnnewTest2();}}注:1.當重寫父類方法時,修改方法的修飾權(quán)限只能從小到大的范圍改變。2.當重寫父類方法的返回值類型時,要遵循一個原那么,就是重寫的返回值類型必須是父類中同一方法返回值類型的子類。3.在繼承的機制中,當創(chuàng)立一個子類對象時,將包含一個父類對象,這個對象與父類創(chuàng)立的對象是一樣的,二者的區(qū)別在于后者來自于外部,而前者來自于子類對象的內(nèi)部。當實例化子類對象時,父類對象也相應(yīng)被實例化,換句話說,在實例化子類對象時,Java編譯器會在子類的構(gòu)造方法中自動調(diào)用父類的無參構(gòu)造方法。以例說明:/**驗證實例化子類對象時自動調(diào)用父類構(gòu)造方法*/classParent{ Parent(){ System.out.println("調(diào)用父類的parent()構(gòu)造方法"); }}classSubParentextendsParent{ SubParent(){ System.out.println("調(diào)用子類的SubParent()構(gòu)造方法"); }}publicclassSubroutineextendsSubParent{ Subroutine(){ System.out.println("調(diào)用子類的Subroutine()構(gòu)造方法"); } publicstaticvoidmain(String[]args){ Subroutines=newSubroutine(); }調(diào)用父類的parent()構(gòu)造方法調(diào)用子類的SubParent()構(gòu)造方法調(diào)用子類的Subroutine()構(gòu)造方法運行結(jié)果說明:1.從結(jié)果可以看出:在子類Subroutine的主方法中只調(diào)用子類的構(gòu)造方法實例化子類對象,并且在子類構(gòu)造方法中沒有調(diào)用父類構(gòu)造方法的任何語句,但是在實例化子類對象時它相應(yīng)調(diào)用了父類的構(gòu)造方法。同時在結(jié)果中看到調(diào)用構(gòu)造方法的順序,首先是頂級父類,然后是上一級父類,最后是子類。也就是說實例化子類對象時,首先實例化父類的對象,然后再實例化子類對象,所以子類在構(gòu)造方法訪問父類的構(gòu)造方法之前,父類已經(jīng)完成實例化操作。2.在實例化子類對象時,父類無參構(gòu)造方法將被自動調(diào)用,但有參構(gòu)造方法并不能被調(diào)用,只能依賴于super關(guān)鍵字顯式地調(diào)用父類的構(gòu)造方法。3.如果使用finalize()方法對對象進行清理,需要確保子類的finalize()方法的最后一個是調(diào)用父類的finalize()方法,以保證當垃圾回收對象占用內(nèi)在內(nèi)存時,對象的所有局部都能被正常終止。TestTest()構(gòu)造方法ProtectedvoiddoSomething()ProtectedTestdoIt()父類子類Test2Test2()構(gòu)造方法ProtectedvoiddoSomethingnew()PublicvoiddoSomething()ProtectedTestdoIt()繼承Test與Test2類之間的繼承關(guān)系6.2Object類在Java中,所有的類都直接或間接繼承了類,Object類是比較特殊的類,它是所有類的父類,是Java類層中最高層類,實質(zhì)上Java中任何一個類都是它的子類。因此,在定義類時省略了extendsObject關(guān)鍵字。在Object類中主要包括clone(),finalize(),euqals(),toString()等方法。其中常用的兩個方法為后面兩個,由于所有的類都是Object類的子類,所以任何類都可以重寫Object類中的方法。注:Object類中的getClass(),notify(),notifyAll(),wait()等方法不能被重寫,因為這些方法定義為final類型。Object類中的幾個重要方法
getClass()方法它是Object類定義的方法,返回對象執(zhí)行時的Class實例,然后使用此實例調(diào)用getName()方法可以取得類的名稱。語法:getClass().getName();toString()方法將一個對象返回為字符串形式,返回一個String實例。在實際的應(yīng)用中通常重寫此方法,為對象提供一個特定的輸出模式。當這個類轉(zhuǎn)換為字符串或與字符串連接時,將自動調(diào)用重寫的此方法。以例說明:publicclassObjectInstance{ publicStringtoString(){ return"在"+getClass().getName()+"類中重寫toString()方法"; } publicstaticvoidmain(String[]args){ //TODO自動生成方法存根 System.out.println(newObjectInstance()); }實例化對象}等價于:ObjectInstanceP=newObjectInstance()C:\lianxi>javaObjectInstance在ObjectInstance類中重寫toString()方法運行結(jié)果在實例中重寫父類Object類的toString()方法中使用Object類中的getClass()方法獲取當前運行的類名,定義一段輸出字符串,當用戶打印ObjectInstance類對象時,將自動調(diào)用toString〔〕方法。6.3對象類型的轉(zhuǎn)換向上轉(zhuǎn)型將子類對象看作是父類對象被稱為“向上轉(zhuǎn)型”。由于是從一個較具體的類到較抽象的類之間的轉(zhuǎn)換,所以是平安的。向下轉(zhuǎn)型當在程序中使用向下轉(zhuǎn)型技術(shù)時,必須使用顯式類型轉(zhuǎn)換,向編譯器指明將父類對象轉(zhuǎn)換為哪一種類型的子類對象。6.4instanceof判斷對象類型當在程序中執(zhí)行向下轉(zhuǎn)型操作時,如果父類對象不是子類對象的實例,就會發(fā)生ClassCast-Exception異常,所以在執(zhí)行向下轉(zhuǎn)型時需要判斷父類是否為子類對象的實例。這個判斷通常使用instanceof操作符來完成??梢允褂盟袛嗍欠褚粋€類實現(xiàn)了某個接口,也可以用它判斷一個實例對象是否屬于一個類。instanceof的語法格式:myobjectinstanceofExampleClass〔返回布爾值〕其中:myobject為某類的對象引用。ExampleClass為某個類classQuadrangle{ publicstaticvoiddraw(Quadrangleq){ //SomeSentence }}classSquareextendsQuadrangle{ }classAnything{ }publicclassParallelogramextendsQuadrangle{publicstaticvoidmain(Stringargs[]){ Quadrangleq=newQuadrangle();//實例化父類對象if(qinstanceofParallelogram){//判斷父類對象是否Parallelogram子類的一個實例 Parallelogramp=(Parallelogram)q;//向下轉(zhuǎn)型操作 System.out.println("1="+(qinstanceofParallelogram)); } System.out.println("2="+(qinstanceofParallelogram));if(qinstanceofSquare){//判斷父類對象是否Parallelogram子類的一個實例 Squares=(Square)q;//向下轉(zhuǎn)型操作 System.out.println("3="+(qinstanceofParallelogram)); } System.out.println("4="+(qinstanceofSquare));//由于q對象不為Anything類的對象,所以這條語句很明顯是錯誤的 //System.out.println(qinstanceofAnything); } }C:\lianxi>javaParallelogram2=false4=false6.5方法的重載就是在同一個類中允許存在一個以上的同名方法,只要這些方法的參數(shù)個數(shù)或類型不同即可。雖然在方法重載中可以使兩個方法的返回值不同,但只有返回值不同并缺乏以區(qū)分兩個方法的重載,還是需要通過參數(shù)的個數(shù)以級參數(shù)的類型來設(shè)置兩個方法的重載。另一個重載方法是不定長參數(shù)方法:Publicstaticintadd(int…a){//定義不定長參數(shù)方法 ints=0; for(inti=0;i<a.length;i++) s+=a[i];//做參數(shù)累計操作 returns;}//將結(jié)果返回publicclassOverLoadTest{ publicstaticintadd(inta,intb){ returna+b; }//定義一個方法 publicstaticdoubleadd(doublea,doubleb){ returna+b; }//定義與第一個方法相同名稱、參數(shù)類型不同的方法 publicstaticintadd(inta){ returna; }//定義與第一個方法參數(shù)個數(shù)不同的方法 publicstaticintadd(inta,doubleb){ return1; }//定義與第一個方法相同名稱、參數(shù)類型不同的方法 publicstaticintadd(doublea,intb){ return1; }//這個方法與前一個方法參數(shù)次序不同 publicstaticvoidmain(Stringargs[]){ System.out.println("調(diào)用add(int,int)方法:"+add(1,2)); System.out.println("調(diào)用add(double,double)方法:"+add(2.1,3.3)); System.out.println("調(diào)用add(int)方法:"+add(1)); }}C:\lianxi>javaOverLoadTest調(diào)用add(int,int)方法:3調(diào)用add(double,double)方法:5.4調(diào)用add(int)方法:16.6多態(tài)利用多態(tài)可以使程序具有良好的擴展性,程序可以對所有類對象進行通用的處理。以不同類對象為參數(shù)調(diào)用同一方法可以處理不同的問題,使用多態(tài)節(jié)省了開發(fā)和維護時間,因為程序員無須在所有的子類中定義執(zhí)行相同功能的方法,防止了大量重復(fù)代碼的開發(fā),同時只要實例化一個繼承父類的子類對象即可調(diào)用相應(yīng)的方法,這里只要維護父類中的這個方法即可。6.7抽象類與接口在解決實際問題時,一般將父類定義為抽象類,需要使用這個父類進行繼承與多態(tài)處理。回想繼承和多態(tài)原理,繼承樹中越是在上方的類越抽象。語法:PublicabstractclassTest{ abstractvoidtestAbstract();//定義抽象方法 }其中,abstract是指定義抽象類關(guān)鍵字。使用abstract關(guān)鍵字定義的類稱為抽象類,而使用這個關(guān)鍵字定義的方法稱為抽象方法,抽象方法沒有方法體,這個方法本身沒有任何意義,除非它被重寫,而承載這個抽象方法的抽象類就必須被繼承,實際上抽象類除了被繼承之外沒有任何意義。反過來講,如果聲明一個抽象的方法,就必須將承載這個抽象方法的類定義為抽象類,不可能在非抽象類中獲取抽象方法。換句話說,只要類中有一個抽象方法,此類就被標記為抽象類。抽象類被繼承后需要實現(xiàn)其中所有的抽象方法,也就是保證相同的方法名稱、參數(shù)列表和相同返回值類型創(chuàng)立出非抽象方法,當然也可以是抽象方法。以下圖說明了繼承抽象類的關(guān)系。Abtract圖形類abstractvoiddraw()voiddoString()三角形類voiddraw()voiddoAnything()四邊形類voiddraw()voiddoAnything()正方形類voiddraw()voiddoAnything()voiddraw()voiddoAnythingExtendsExtends抽象類繼承關(guān)系由上圖看出,繼承抽象類的所有子類需要將抽象類中的抽象方法進行覆蓋。這樣在多態(tài)機制中,可以將父類修改為抽象類,將draw()方法設(shè)置為抽象方法,然后每個子類都重寫這個方法來處理。但這又會出現(xiàn)我們探討多態(tài)時討論的問題,程序中會有太多冗余的代碼,同時這樣的父類局限性很大,也許某個不需要draw()方法的子類也不得不重寫draw()方法。如果將draw()方法放置在另外一個類中,這樣讓那些需要draw()方法的類繼承該類,而不需要draw()方法的類繼承圖形類,但所有的子類都需要圖形類,因為這些類是從圖形類中被導(dǎo)出的,同時某些類還需要draw()方法,但是在Java中規(guī)定,類不能同時繼承多個父類,面臨這種問題,接口的概念出現(xiàn)了。6.7接口接口是抽象類的延伸,可以將它看作是純粹的抽象類,接口中的所有方法都沒有方法體。接口使用interface關(guān)鍵字進行定義,語法publicinterfacedrawTest{voiddraw();//接口內(nèi)的方法,省略abstract關(guān)鍵字 }注:1.public:接口可以像類一樣被權(quán)限修飾符修飾,但public關(guān)鍵字僅限于接口在與其同名的文件中被定義2.interface:定義接口關(guān)鍵字。3.drawTest:接口名稱。一個類實現(xiàn)一個接口可以使用implements關(guān)鍵字,代碼如下:PublicclassParallelogramextendsQuadrangleimplementsdrawTest{…//}注意:在接口中定義的方法必須被定義為public或者abstract形式,其他修飾不被Java編譯器所認可,如果不將該方法聲明為public形式,它也是public。7Swing程序設(shè)計7.1Swing包Java.awt.ComponentSwing組件的類層次繼承關(guān)系常用Swing組件概述組件名稱定義JButton代表Swing按鈕,按鈕可以帶圖片或文字JCheckBox代表Swing中復(fù)選框組件JComBox代表下拉列表框,在下拉顯示區(qū)有多選JFrame代表Swing的框架類JDialog代表Swing版本的對話框JLabel代表Swing中的標簽組件JRadioButton代表Swing的單選按鈕JList代表能夠在用戶界面中顯示一系列條目JTextField代表文本框JPasswordField代表密碼框JTextArea代表Swing中的文本區(qū)域JOptionPane代表Swing中的一些對話框7.2常用窗體 1〕JFrame窗體 它是一個容器,是Swing程序中各個組件的載體,可以將JFrame看作是承載這些Swing組件的容器,在開發(fā)應(yīng)用程序時,可以通過繼承類創(chuàng)立一個窗體,在這個窗口中添加組件,同時為組件設(shè)置事件。由于該窗體繼承了JFrame類,所以它擁有一些最大化、最小化、關(guān)閉的按鈕。 語法格式: JFramejf=newJFrame(title); Containercontainer=jf.getContertPane(); jf:JFrame類的對象。 container:Container類的對象,可以使用JFrame對象調(diào)用getContentPane()方法獲取。importjava.awt.*;//導(dǎo)入AWT包importjavax.swing.*;//導(dǎo)入Swing包publicclassExample1extendsJFrame{//定義一個類繼承JFrame類 publicvoidCreateJFrame(Stringtitle){//定義一個CreateJFrame()方法 JFramejf=newJFrame(title);//實例化一個JFrame對象 Containercontainer=jf.getContentPane();//獲取一個容器 JLabeljl=newJLabel(“是Swing程序中各”);//創(chuàng)立一個JLabel標簽 //使標簽上的文字居中jl.setHorizontalAlignment(SwingConstants.CENTER); container.add(jl);//將標簽添加到容器中 container.setBackground(Color.red);//設(shè)置窗口的背景顏色 jf.setVisible(true);//使窗體可視 jf.setSize(100,80);//設(shè)置窗體大小 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } publicstaticvoidmain(Stringargs[]){//在主方法中調(diào)用createJFrame newExample1().CreateJFrame("我的JFrame窗體"); }} JFrame類的常用構(gòu)造方法包括兩種形式: publicJFrame()和publicJFrame(Stringtitle).分別為無參和有參的構(gòu)造方法,無參創(chuàng)立一個不可見、沒有標題的新窗體;有參在實例化該JFrame對象時創(chuàng)立一個不可見但具有標題的窗體。 Java為窗體關(guān)閉提供了幾種方式:DO_NOTHING_ON_CLOSE//什么都不做關(guān)閉窗體DISPOSE_ON_CLOSE//任何注冊監(jiān)聽程序?qū)ο蠛笞詣与[藏并釋放窗體HIDE_ON_CLOSE//表示隱藏窗口的默認窗口關(guān)閉EXIT_ON_CLOSE//表示退出應(yīng)用程序默認窗口關(guān)閉2)JDialog窗體 Swing組件中的對話框,繼承了AWT組件中類。其功能是從一個窗體中彈出另一人窗體,實質(zhì)是另一種類型的窗體,與JFrame窗體類似。常用的構(gòu)造方法如下:publicJDialog():創(chuàng)立一個沒有標題和父窗體的對話框publicJDialog(Framef):創(chuàng)立一個指定父窗體的對話框,但該窗體沒有標題。publicJDialog(Framef,booleanmodel):創(chuàng)立一個指定類型的對話框,并指定父窗體,但該窗體沒有指定標題。publicJDialog(Framef,Stringtitle):創(chuàng)立一個指定標題和父窗體的對話框。publicJDialog(Framef,Stringtitle,booleanmodel):創(chuàng)立一個指定標題、窗體和模式的對話框。packagecom.wsy;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMyJDialogextendsJDialog{ publicMyJDialog(){ super(newMyFrame(),"第一個JDialog窗體",true); Containercontainer=getContentPane(); container.add(newJLabel("這是一個對話框")); setSize(100,100); } publicstaticvoidmain(Stringargs[]){ newMyJDialog(); }}classMyFrameextendsJFrame{ publicMyFrame(){
Containercontainer=getContentPane(); container.setLayout(null); JLabeljl=newJLabel("這是一個JFrame窗體"); jl.setHorizontalAlignment(SwingConstants.CENTER); container.add(jl); JButtonbl=newJButton("彈出對話框"); bl.setBounds(10,10,100,21); bl.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newMyJDialog().setVisible(true);
} }); container.add(bl); container.setBackground(Color.white); setSize(200,200); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setVisible(true); }}//packagecom.wsy;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classMyJDialogextendsJDialog{ publicMyJDialog(){ Containercontainer=getContentPane(); JLabeljf=newJLabel("thisisme"); jf.setHorizontalAlignment(SwingConstants.LEFT); container.add(jf); setSize(100,100); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setVisible(true); }
}publicclassMyFrameextendsJFrame{ publicMyFrame(){
Containercontainer=getContentPane(); container.setLayout(null); JLabeljl=newJLabel("這是一個JFrame窗體"); jl.setHorizontalAlignment(SwingConstants.CENTER); container.add(jl); JButtonbl=newJButton("彈出對話框"); bl.setBounds(10,10,100,21); bl.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newMyJDialog().setVisible(true);
} }); container.add(bl); container.setBackground(Color.red); setSize(200,200); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setVisible(true); } publicstaticvoidmain(Stringargs[]){ newMyFrame(); }}3〕標簽的使用 標簽由JLabel類定義,它的父類為JComponent類。標簽可以顯示一行只讀文本、一個圖像或帶圖像的文本,它并不能產(chǎn)生任何類型的事件,只是簡單地顯示文本和圖片,但是可以使用標簽的特性指定標簽上文本的對齊方式。其構(gòu)造方法:publicJLabel():創(chuàng)立一個不帶圖標和文本的JLabel對象publicJLabel(Iconicon)創(chuàng)立一個帶圖標的JLabel對象publicJLabel(Iconicon,intaligment)創(chuàng)立一個帶圖標的JLabel對象,并設(shè)置圖標水平對齊方式。publicJLabel(Stringtext,intaligment)創(chuàng)立一個帶文本的JLabel對象,并設(shè)置文字水平對齊方式publicJLabel(Stringtext,Iconicon,intaligment)創(chuàng)立一個帶文本、帶圖標的JLabel對象,并設(shè)置標簽內(nèi)容的水平對齊方式4〕圖標的使用 Swing中的圖標可以放置在按鈕、標簽等組件上,用于描述組件的用途。圖標可以用Java支持的圖片文件類型進行創(chuàng)立,也可以使用類提供的功能方法來創(chuàng)立。創(chuàng)立圖標 在Swing中通過Icon接口來創(chuàng)立圖標,可以在創(chuàng)立時給定圖標的大小、顏色等特性。如果使用Icon接口,必須實現(xiàn)Icon接口中的3個方法。publicintgetIconHeight()獲取圖表長publicintgetIconWidth()獲取圖表寬publicvoidpaintIcon(Componentarg0,Graphicsarg1,intarg2,intarg3)用于實現(xiàn)在指定坐標位置畫圖//packagecom.wsy;importjava.awt.*;importjavax.swing.*;publicclassDrawIconimplementsIcon{ privateintwidth; privateintheight; publicstaticvoidCFrame(Stringtitle){ JFramejf=newJFrame(title); DrawIconicon=newDrawIcon(55,35); JLabelj=newJLabel("測試",icon,SwingConstants.CENTER); Containerc=jf.getContentPane(); c.add(j); jf.setSize(300,300); jf.setVisible(true); jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } publicintgetIconHeight(){ returnthis.height; } publicintgetIconWidth(){ returnthis.width;} publicDrawIcon(intwidth,intheight){ this.width=width; this.height=height; } publicvoidpaintIcon(Componentarg0,Graphicsarg1,intx,inty){ arg1.fillOval(x,y,width,height); } publicstaticvoidmain(String[]args){ DrawIcon.CFrame("創(chuàng)立一個標題窗口"); }} 在上例中,由于DrawIcon類繼承了Icon接口,所以在該類中必須實現(xiàn)Icon接口中定義的所有方法,其中在實現(xiàn)paintIcon〔〕方法中使用Graphics類中的方法繪制一個圓形的圖標,其余實現(xiàn)接口的方法為返回圖標長與寬。在DrawIcon類的構(gòu)造方法中設(shè)置了圖標的長與寬,這樣如果需要在窗體中使用圖標,就可以使用如下代碼創(chuàng)立圖標。 DrawIconicon=newDrawIcon(intx,inty)使用圖片圖標 Swing中的圖標除了繪制之外,還可以使用某個特定的圖片創(chuàng)立。Swing利用類根據(jù)現(xiàn)有圖片創(chuàng)立圖標,ImageIcon類實現(xiàn)了Icon接口,同時Java支持多種圖片格式。ImageIcon類有多個構(gòu)造方法。publicImageIcon();該構(gòu)造方法創(chuàng)立一個通用的ImageIcon對象,當真正需要設(shè)置圖片時再使用ImageIcon對象調(diào)用setImage(Imageimage)方法來操作publicImageIcon(Imageimage):可以直接從圖片源創(chuàng)立圖標publicImageIcon(Imageimage,Stringdescription):除了可以從圖片源創(chuàng)立圖標之外,還可以為這個圖標添加簡短的描述,但這個描述不會在圖標上顯示,可以使用getDescription()方法獲取這個描述。publicImageIcon(URLurl);該構(gòu)造方法利用網(wǎng)絡(luò)上的圖像文件創(chuàng)立圖標//packagecom.wsy;importjava.awt.*;//導(dǎo)入AWT包import.URL;importjavax.swing.*;//導(dǎo)入Swing包publicclassExample1extendsJFrame{//定義一個類繼承JFrame類 publicvoidCreateJFrame(Stringtitle){//定義一個CreateJFrame()方法 JFramejf=newJFrame(title);//實例化一個JFrame對象 Containercontainer=jf.getContentPane();//獲取一個容器 Labeljl=newJLabel("這是一個JFrame窗體",JLabel.CENTER); URLurl=Example1.class.getResource("imageButtoo.jpg"); Iconicon=newImageIcon(url);//實例化Icon對象 jl.setIcon(icon);//為標簽設(shè)置圖片 jl.setHorizontalAlignment(SwingConstants.CENTER);//設(shè)置文字在中間 jl.setOpaque(true);//設(shè)置標簽為不透明狀態(tài)〔容器背景色不起作用〕 container.add(jl);//將標簽添加到容器中 container.setBackground(Color.green);//設(shè)置標簽的背景顏色 jf.setVisible(true);//使用窗體可見 jf.setSize(200,150);//設(shè)置窗體大小 jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); }//設(shè)置窗體關(guān)閉模式 publicstaticvoidmain(Stringargs[]){//在主方法中調(diào)用CreateJFrame()方法 newExample1().CreateJFrame("創(chuàng)立一個JFrame窗體"); }}創(chuàng)立一個JLabel標簽并使文字居中獲取圖片的URLjl.setOpaque(true);起作用注釋掉//jl.setOpaque(true);注:圖片與程序要在同一個文件夾中7.3常用布局管理器1〕絕對布局 在Swing中,除了使用布局管事器,還可以使用絕對布局,它是指硬性指定組件在容器中的位置和大小,可以使用絕對坐標的方式來指定組件的位置。 使用絕對布局的步驟如下:使用Container.setLayout(null)方法取消布局管理器。使用Component.setBounds()方法設(shè)置每個組件的大小與位置//packagecom.wsy;importjava.awt.Container;//導(dǎo)入包importjavax.swing.*;//導(dǎo)入包publicclassAbsolutePositionextendsJFrame{ publicAbsolutePosition(){ setTitle(“本窗體使用絕對布局”);//設(shè)置該窗體的標題 setLayout(null);//使該窗體取消布局管理器設(shè)置 setBounds(500,500,200,150);//絕對定位窗體的位置與大小 Containerc=getContentPane();//創(chuàng)立容器對象 JButtonb1=newJButton(“按鈕1”);//創(chuàng)立按鈕 JButtonb2=newJButton(“按鈕2”);//創(chuàng)立按鈕 b1.setBounds(10,30,80,30);//設(shè)置按鈕的位置與大小 b2.setBounds(60,70,100,20); c.add(b1);//將按鈕添加到容器中 c.add(b2); setVisible(true);//使窗體可見 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } publicstaticvoidmain(String[]args){ newAbsolutePosition(); }}2〕流布局管理器〔FlowLayout〕 它是布局管理器中最根本的布局管理器,它像“流”一樣從左到右擺放組件,直到占據(jù)了這一行的所有空間,然后再向下移動一行,默認情況下,組件在每一行上都是居中排列的,但是通過設(shè)置更改組件在每一行的位置。其構(gòu)造方法有:publicFlowLayout()publicFlowLayout(intalignment)publicFlowLayout(intalignment,inthorizGap,intvertGap) 其中參數(shù)alignment表示使用流布局管理器后組件在每一行的具體擺放位置,值為:FlowLayout.LEFT=0//左對齊FlowLayout.CENTER=1//FlowLayout.RIGHT=2右對3〕邊界布局管理器〔BorderLayout〕它是Swing組件的默認布局模式,可將容器分為5個區(qū)域。成員變量含義BorderLayout.NORTH在容器中添加組件時,置于頂端BorderLayout.SOUTH在容器中添加組件時,置于底端BorderLayout.EAST在容器中添加組件時,置于右端BorderLayout.WEST在容器中添加組件時,置于左端BorderLayout.CENTER在容器中添加組件時,置于中間packagecom.wsy;importjava.awt.*;importjavax.swing.*;publicclassBorderLayoutPositionextendsJFrame{String[]border={BorderLayout.CENTER,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.EAST}; String[]buttonName={"centerbutton","northbutton","southbutton","westbutton","eastbutton"}; publicBorderLayoutPosition(){ setTitle("這個窗體使用邊界布局管理器"); Containerc=getContentPane(); setLayout(newBorderLayout()); for(inti=0;i<border.length;i++){ c.add(border[i],newJButton(buttonName[i])); } setSize(350,200); setVisible(true); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } publicstaticvoidmain(String[]args){ newBorderLayoutPosition(); }}4〕網(wǎng)格布局管理器〔GridLayout〕構(gòu)造方法publicGridLayout(introws,intcolumns)publicGridLayout(introws,intcolumns,inthorizGap,intvertGap) 其中rows與columns參數(shù)代表網(wǎng)格的行數(shù)與列數(shù),后兩個為間距。如下例。//packagecom.wsy;importjava.awt.*;importjavax.swing.*;publicclassGridLayoutPositionextendsJFrame{ publicGridLayoutPosition(){ Containerc=getContentPane(); setLayout(newGridLayout(7,3,5,5)); for(inti=0;i<20;i++){ c.add(newJButton("button"+i)); } setSize(300,300); setTitle("這是一個使用網(wǎng)格布局管理器的窗體"); setVisible(true); c.setBackground(Color.green); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } publicstaticvoidmain(String[]args){ newGridLayoutPosition(); }}7.4常用面板面板也是一個Swing容器,因為它繼承類:。它可以作為容器容納其他組件,但它也必須被添加到其他容器中。1〕JPanel面板 繼承類://packagecom.wsy;importjava.awt.*;importjavax.swing.*;publicclassJPanelTestextendsJFrame{ publicJPanelTest(){ Containerc=getContentPane(); c.setLayout(newGridLayout(2,1,10,10)); JPanelp1=newJPanel(newGridLayout(1,3,10,10)); JPanelp2=newJPanel(newGridLayout(1,2,10,10)); JPanelp3=newJPanel(newGridLayout(1,2,10,10)); JPanelp4=newJPanel(newGridLayout(2,1,10,10)); p1.setBackground(Color.red); p2.setBackground(Color.red); p3.setBackground(Color.red); p4.setBackground(Color.red); p1.add(newJButton("1"));p1.add(newJButton("2")); p1.add(newJButton("3"));p2.add(newJButton("4")); p2.add(newJButton("5"));p3.add(newJButton("6")); p3.add(newJButton("7"));p4.add(newJButton("8")); p4.add(newJButton("9")); c.add(p1); c.add(p2); c.a
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石河子大學(xué)《園林建筑設(shè)計》2021-2022學(xué)年第一學(xué)期期末試卷
- 大學(xué)學(xué)校辭職報告11篇
- dark green dress造句不同意思
- 石河子大學(xué)《水工建筑物》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《籃球》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《數(shù)字圖像處理》2023-2024學(xué)年期末試卷
- 沈陽理工大學(xué)《機器人技術(shù)及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 經(jīng)濟法基礎(chǔ)(下)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2018年四川遂寧中考滿分作文《爭取》3
- 股權(quán)合同 英文 模板
- 新商科“專業(yè)-產(chǎn)業(yè)雙鏈融通式”人才培養(yǎng)模式探究
- 公務(wù)員2018年國考《申論》真題卷及答案(副省級)
- 2024年基金從業(yè)資格證(含三個科目)考前必刷必練題庫500題(含真題、必會題)
- 2024年海南瓊中黎族苗族自治縣招聘事業(yè)單位人員17人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 水利基建項目內(nèi)部審計方法與技巧培訓(xùn)
- 路燈改造施工方案
- 湖北省武漢市東湖新技術(shù)開發(fā)區(qū)武漢光谷未來學(xué)校2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期中試卷
- 3.14 絲綢之路的開通與經(jīng)營西域 課件 2024-2025學(xué)年部編版
- 第三單元《分數(shù)除法》(單元測試)-2024-2025學(xué)年六年級上冊數(shù)學(xué)人教版
- 部編版2023-2024學(xué)年度六年級上冊語文期中測試卷(附答案)
- 食品安全自查、從業(yè)人員健康管理、進貨查驗記錄、食品安全事故處置保證食品安全規(guī)章制度
評論
0/150
提交評論