Java程序設(shè)計(jì)圖形用戶(hù)界面_第1頁(yè)
Java程序設(shè)計(jì)圖形用戶(hù)界面_第2頁(yè)
Java程序設(shè)計(jì)圖形用戶(hù)界面_第3頁(yè)
Java程序設(shè)計(jì)圖形用戶(hù)界面_第4頁(yè)
Java程序設(shè)計(jì)圖形用戶(hù)界面_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java程序設(shè)計(jì)圖形用戶(hù)界面第一頁(yè),共46頁(yè)。10.1AWT組件10.1.1圖形用戶(hù)界面概述圖形用戶(hù)界面(graphicaluserinterface,GUI)處理圖形用戶(hù)界面的類(lèi)庫(kù)主要是java.awt包和javax.swing包。AWT是abstractwindowtoolkit(抽象窗口工具集)的縮寫(xiě)。javax.swing包是JDK1.2以后版本所引入的圖形用戶(hù)界面類(lèi)庫(kù)。功能更強(qiáng),界面更富。各種平臺(tái)上更統(tǒng)一。第二頁(yè),共46頁(yè)。

設(shè)計(jì)和實(shí)現(xiàn)圖形用戶(hù)界面的工作主要有以下幾點(diǎn)。(1)創(chuàng)建組件(Component):創(chuàng)建組成界面的各種元素,如按鈕、文本框等。(2)指定布局(Layout):根據(jù)具體需要排列它們的位置關(guān)系。(3)響應(yīng)事件(Event):定義圖形用戶(hù)界面的事件和各界面元素對(duì)不同事件的響應(yīng),從而實(shí)現(xiàn)圖形用戶(hù)界面與用戶(hù)的交互功能。第三頁(yè),共46頁(yè)。10.1.2AWT組件分類(lèi)Java中構(gòu)成圖形用戶(hù)界面的各種元素,稱(chēng)為組件(Component)。組件分為容器(Container)類(lèi)和非容器類(lèi)組件兩大類(lèi)容器又分為頂層容器和非頂層容器兩大類(lèi)第四頁(yè),共46頁(yè)。重要的組件的繼承關(guān)系第五頁(yè),共46頁(yè)。10.1.3Component的方法Component類(lèi)是所有組件和容器的抽象父類(lèi),其中定義了一些每個(gè)容器和組件都可能用到的方法第六頁(yè),共46頁(yè)。10.2

布局管理Java.awt包中共定義了五種布局管理器,每個(gè)布局管理器對(duì)應(yīng)一種布局策略,分別是FlowLayoutBorderLayoutCardLayoutGridLayoutGridBagLayout。

第七頁(yè),共46頁(yè)。FlowLayout布局管理器FlowLayout是Panel類(lèi)的默認(rèn)布局管理器FlowLayout布局對(duì)組件逐行定位,行內(nèi)從左到右,一行排滿(mǎn)后換行默認(rèn)對(duì)齊方式為居中對(duì)齊不改變組件的大小,按組件原有尺寸顯示組件可在構(gòu)造方法中設(shè)置不同的組件間距、行距及對(duì)齊方式第八頁(yè),共46頁(yè)。FlowLayout舉例范例:TestFlowLayout.java第九頁(yè),共46頁(yè)。FlowLayout的構(gòu)造方法newFlowLayout(FlowLayout.RIGHT,20,40);

右對(duì)齊,組件之間水平間距20個(gè)像素,豎直間距40個(gè)像素;newFlowLayout(FlowLayout.LEFT);

左對(duì)齊,水平和豎直間距為缺省值:5;newFlowLayout();

使用缺省的居中對(duì)齊方式,水平和豎直間距為缺省值:5;第十頁(yè),共46頁(yè)。BorderLayout布局管理器BorderLayout是Frame類(lèi)的默認(rèn)布局管理器BorderLayout將整個(gè)容器的布局劃分成東、西、南、北、中五個(gè)區(qū)域,組件只能被添加到指定的區(qū)域如不指定組件的加入部位,則默認(rèn)加入到Center區(qū)域每個(gè)區(qū)域只能加入一個(gè)組件,如加入多個(gè),則先前加入的組件會(huì)被遺棄第十一頁(yè),共46頁(yè)。BorderLayout布局管理器BorderLayout型布局容器尺寸縮放原則北、南兩個(gè)區(qū)域只能在水平方向縮放(寬度可調(diào)整)東、西兩個(gè)區(qū)域只能在垂直方向縮放(高度可調(diào)整)中部可在兩個(gè)方向上縮放NorthSouthWestEestCenter第十二頁(yè),共46頁(yè)。BorderLayout舉例范例:estBorderLayout.java第十三頁(yè),共46頁(yè)。GridLayout布局管理器GridLayout型布局管理器將布局劃分成規(guī)則的矩形網(wǎng)格,每個(gè)單元格區(qū)域大小相等.

組件被添加到每個(gè)單元格中,先從左到右添滿(mǎn)一行后換行,再?gòu)纳系较?在GridLayout構(gòu)造方法中指定分割的行數(shù)和列數(shù). newGridLayout(3,4);第十四頁(yè),共46頁(yè)。GridLayout舉例范例:TestGridLayout.java第十五頁(yè),共46頁(yè)。*CardLayout布局管理器CardLayout布局管理器能夠幫助用戶(hù)處理兩個(gè)以至更多的成員共享同一顯示空間,就好象一疊卡片摞在一起。注意:在一張卡片中只能顯示一個(gè)組件,因此可以使用容器嵌套方法顯示多個(gè)組件。

addLayoutComponent,first,next,last方法第十六頁(yè),共46頁(yè)。*GridBagLayout布局管理器AWT中最靈活、最復(fù)雜的布局管理器,各組件所占空間可以不相同且靈活規(guī)定,參見(jiàn)參考書(shū)及API文檔;第十七頁(yè),共46頁(yè)。容器的嵌套使用舉例范例:NestedContainer.java第十八頁(yè),共46頁(yè)。默認(rèn)布局管理器ComponentContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayout第十九頁(yè),共46頁(yè)。布局管理器總結(jié)(1)FrameFrame是一個(gè)頂級(jí)窗口。Frame的缺省布局管理器為BorderLayout。PanelPanel無(wú)法單獨(dú)顯示,必須添加到某個(gè)容器中。Panel的缺省布局管理器為FlowLayout。當(dāng)把Panel作為一個(gè)組件添加到某個(gè)容器中后,該P(yáng)anel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某個(gè)區(qū)域顯示多個(gè)組件。第二十頁(yè),共46頁(yè)。布局管理器總結(jié)(2)在程序中安排組件的位置和大小時(shí),應(yīng)注意:容器中的布局管理器負(fù)責(zé)各個(gè)組件的大小和位置,因此用戶(hù)無(wú)法在這種情況下設(shè)置組件的這些屬性。如果試圖使用Java語(yǔ)言提供的setLocation(),setSize(),setBounds()等方法,則都會(huì)被布局管理器覆蓋。如果用戶(hù)確實(shí)需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的布局管理器,方法為:

setLayout(null);第二十一頁(yè),共46頁(yè)。10.3事件處理10.3.1事件及事件監(jiān)聽(tīng)器

Java中的圖形用戶(hù)界面中,對(duì)于用戶(hù)的鼠標(biāo)、鍵盤(pán)操作發(fā)生反應(yīng),就必須進(jìn)行事件處理。這些鼠標(biāo)、鍵盤(pán)操作等統(tǒng)稱(chēng)為事件(Event)。對(duì)這些事件作出響應(yīng)的程序,稱(chēng)為事件處理器(Eventhandler)。第二十二頁(yè),共46頁(yè)。1.事件類(lèi)AWTEvent

第二十三頁(yè),共46頁(yè)。事件類(lèi)中包含有事件相關(guān)的信息,最重要的有:(1)事件源(即產(chǎn)生事件的組件),可能通過(guò)getSource()來(lái)得到;(2)事件的具體情況,如MouseEvent的getX(),getY()方法得到鼠標(biāo)的坐標(biāo),KeyEvent的getKeyChar()得到當(dāng)前的字符等。第二十四頁(yè),共46頁(yè)。2.事件處理器WTEventListener事件處理器(Eventhandler)是對(duì)事件進(jìn)行處理的程序,在編程時(shí)通過(guò)實(shí)現(xiàn)事件監(jiān)聽(tīng)器(EventListener)來(lái)實(shí)現(xiàn)對(duì)事件的處理。事件監(jiān)聽(tīng)器是一些事件的接口,這些接口是java.awt.AWTEventListener的子類(lèi)。接口中含有相關(guān)的方法,如:MouseMotionListener是對(duì)鼠標(biāo)移動(dòng)事件的處理的接口,它含有兩個(gè)重要的方法:voidmouseDragged(MouseEvente);//處理鼠標(biāo)拖動(dòng)的方法voidmouseMoved(MouseEvente);//處理鼠標(biāo)移動(dòng)的方法在這些方法中,都帶一個(gè)事件對(duì)象作為參數(shù),如MouseMotionListener的兩個(gè)方法都帶MouseEvent參數(shù)。程序中可以根據(jù)這個(gè)參數(shù)可以得到有關(guān)事件的詳細(xì)信息。第二十五頁(yè),共46頁(yè)。10.3.2

事件監(jiān)聽(tīng)器的注冊(cè)注冊(cè)事件監(jiān)聽(tīng)器只需要使用組件對(duì)象的addXXXXEvent方法,它可以指明該對(duì)象感興趣的事件監(jiān)聽(tīng)器(即實(shí)現(xiàn)了某個(gè)AWTEventListener子接口的對(duì)象)。這樣,當(dāng)事件源發(fā)生了某種類(lèi)型的事件時(shí),則觸發(fā)事先已注冊(cè)過(guò)的監(jiān)聽(tīng)器中相應(yīng)的處理程序。一個(gè)對(duì)象上可注冊(cè)多個(gè)監(jiān)聽(tīng)器多個(gè)對(duì)象可注冊(cè)同一個(gè)監(jiān)聽(tīng)器第二十六頁(yè),共46頁(yè)。10.3.3

事件適配器用實(shí)現(xiàn)接口的方法,必須實(shí)現(xiàn)接口所規(guī)定的方法,如WindowListener有7個(gè)方法,即使一些方法不做任何事情,也得書(shū)寫(xiě)。為簡(jiǎn)化編程,針對(duì)一些事件監(jiān)聽(tīng)器接口定義了相應(yīng)的實(shí)現(xiàn)類(lèi)——事件適配器類(lèi)(Adapter),在適配器類(lèi)中,實(shí)現(xiàn)了相應(yīng)監(jiān)聽(tīng)器接口中所有的方法,但不做任何事情。事件適配器包括如下幾種:(1)ComponentAdapter(組件適配器);(2)ContainerAdapter(容器適配器);(3)FocusAdapter(焦點(diǎn)適配器);(4)KeyAdapter(鍵盤(pán)適配器);(5)MouseAdapter(鼠標(biāo)適配器);(6)MouseMotionAdapter(鼠標(biāo)運(yùn)動(dòng)適配器);(7)WindowAdapter(窗口適配器)。程序中可以繼承事件適配器類(lèi),并只重寫(xiě)所需要的方法,而不用寫(xiě)那些空的方法體。第二十七頁(yè),共46頁(yè)。10.3.4內(nèi)部類(lèi)及匿名類(lèi)在事件處理中的應(yīng)用在Java事件處理程序中,由于與事件相關(guān)的事件監(jiān)聽(tīng)器的類(lèi)經(jīng)常局限于一個(gè)類(lèi)的內(nèi)部,所以經(jīng)常使用內(nèi)部類(lèi)。而且定義的內(nèi)部類(lèi)在事件處理中的使用就實(shí)例化一次(在其他地方不會(huì)用到該類(lèi),所以不需要類(lèi)名),所以經(jīng)常使用匿名類(lèi)。在類(lèi)的內(nèi)部定義事件類(lèi):privateclassInnerMonitorimplementsMouseMotionListener,MouseListener{…}第二十八頁(yè),共46頁(yè)。使用匿名類(lèi)的例子f.addMouseMotionListener(newMouseMotionListener(){ publicvoidmouseDragged(MouseEvente){ Strings="位置("+e.getX()+","+e.getY()+")"; tf.setText(s); } publicvoidmouseMoved(MouseEvente){} });f.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); }});其中用匿名類(lèi)實(shí)現(xiàn)了MouseMotionListener及繼承了WindowAdapter,同時(shí)實(shí)例化了這個(gè)匿名類(lèi)的對(duì)象第二十九頁(yè),共46頁(yè)。10.4

常用組件的使用10.4.1標(biāo)簽、按鈕與動(dòng)作事件10.4.2文本框、文本區(qū)域與文本事件10.4.3單、復(fù)選按鈕,列表與選擇事件10.4.4調(diào)整事件與滾動(dòng)條10.4.5鼠標(biāo)、鍵盤(pán)事件與畫(huà)布10.4.6Frame與窗口事件10.4.7Panel與容器事件10.4.8組件事件、焦點(diǎn)事件與對(duì)話(huà)框參見(jiàn)相應(yīng)的例子第三十頁(yè),共46頁(yè)。10.5繪圖、圖形和動(dòng)畫(huà)10.5.1繪制圖形繪制圖形和文字將要用類(lèi)Graphics。它相當(dāng)于組件的繪圖環(huán)境,利用它可以進(jìn)行各種繪圖操作。獲得Graphics對(duì)象常有兩種方法一是使用組件的getGraphics()方法來(lái)在Applet及Application程序中,常用Canvas及Applet對(duì)象來(lái)進(jìn)行繪圖。它們的paint()方法也會(huì)帶一個(gè)Graphics參數(shù),通過(guò)覆蓋paint()方法,就可以繪制各種圖形。第三十一頁(yè),共46頁(yè)。Graphics的繪圖方法畫(huà)三維矩形 draw3DRect(intx,inty,intwidth,intheight,booleanraised)畫(huà)弧 drawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)畫(huà)文字 drawBytes(byte[]data,intoffset,intlength,intx,inty)畫(huà)文字 drawChars(char[]data,intoffset,intlength,intx,inty)畫(huà)直線(xiàn) drawLine(intx1,inty1,intx2,inty2)畫(huà)橢圓 drawOval(intx,inty,intwidth,intheight)畫(huà)多邊形 drawPolygon(int[]xPoints,int[]yPoints,intnPoints)畫(huà)多邊形 drawPolygon(Polygonp)畫(huà)折線(xiàn) drawPolyline(int[]xPoints,int[]yPoints,intnPoints)畫(huà)矩形 drawRect(intx,inty,intwidth,intheight)畫(huà)圓角矩形 drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)畫(huà)文字 drawString(AttributedCharacterIteratoriterator,intx,inty)畫(huà)文字 drawString(Stringstr,intx,inty)畫(huà)填充三維矩形 fill3DRect(intx,inty,intwidth,intheight,booleanraised)畫(huà)填充弧 fillArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)畫(huà)填充橢圓 fillOval(intx,inty,intwidth,intheight)畫(huà)填充多邊形 fillPolygon(int[]xPoints,int[]yPoints,intnPoints)畫(huà)填充多邊形 fillPolygon(Polygonp)畫(huà)填充矩形 fillRect(intx,inty,intwidth,intheight)畫(huà)填充圓角矩形 fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)第三十二頁(yè),共46頁(yè)。幾個(gè)輔助類(lèi)除了Graphics類(lèi),Java中還定義了其他一些用來(lái)表示幾何圖形的類(lèi),對(duì)繪制用戶(hù)自定義成分也很有幫助。例如,利用Point表示一個(gè)像素點(diǎn);利用Dimension類(lèi)表示寬和高;利用Rectangle類(lèi)表示一個(gè)矩形;利用Polygon類(lèi)表示一個(gè)多邊形;利用Color類(lèi)表示顏色等。Draw_r_cos2th.java第三十三頁(yè),共46頁(yè)。10.5.2顯示文字Graphics類(lèi)的方法drawString()可以在屏幕的指定位置顯示一個(gè)字符串一個(gè)Font類(lèi)的對(duì)象表示了一種字體顯示效果,包括字體類(lèi)型、字型和字號(hào)。下面的語(yǔ)句用于創(chuàng)建一個(gè)Font類(lèi)的對(duì)象:FontMyFont=newFont(“TimesRoman”,F(xiàn)ont.BOLD,12);如果希望使用該Font對(duì)象,則可以利用Graphics類(lèi)的setFont()方法DrawFonts.java第三十四頁(yè),共46頁(yè)。10.5.3

控制顏色Color類(lèi)中定義有如下的三種構(gòu)造函數(shù):publicColor(intRed,intGreen,intBlue);publicColor(floatRed,floatGreen,floatBlue);publicColor(intRGB)。還可以直接使用Color類(lèi)中定義好的顏色常量Color.cyanred等第三十五頁(yè),共46頁(yè)。10.5.4顯示圖像利用Graphics類(lèi)的drawImage()方法顯示圖像DrawImageAnimator.java

第三十六頁(yè),共46頁(yè)。10.5.5實(shí)現(xiàn)動(dòng)畫(huà)效果動(dòng)畫(huà)曾是JavaApplet最吸引人的特性之一。用Java實(shí)現(xiàn)動(dòng)畫(huà)的原理與放映動(dòng)畫(huà)片類(lèi)似,取若干相關(guān)的圖像或圖片,順序、連續(xù)地在屏幕上先顯示,后擦除,循環(huán)往復(fù)就可以獲得動(dòng)畫(huà)的效果。第三十七頁(yè),共46頁(yè)。10.6AppletApplet(小程序)是一種很重要的Java程序,是工作在Internet的瀏覽器上的Java程序。編寫(xiě)Applet小程序必須要用到j(luò)ava.applet包中的Applet類(lèi)。java.applet.Applet是java.awt.Panel的子類(lèi),如圖10-20所示。Applet的默認(rèn)布局是FlowLayout。第三十八頁(yè),共46頁(yè)。10.6.1Applet的基本工作原理編譯好的字節(jié)碼文件(.class文件)保存在特定的WWW服務(wù)器上,同一個(gè)或另一個(gè)WWW服務(wù)器上保存著嵌入了該字節(jié)碼文件名的HTML文件。當(dāng)某一個(gè)瀏覽器向服務(wù)器請(qǐng)求下載嵌入了Applet的HTML文件時(shí),當(dāng)瀏覽器遇到HTML文件中的特殊標(biāo)記<applet>,表明它嵌有一個(gè)Applet時(shí),瀏覽器會(huì)根據(jù)這個(gè)Applet的名字和位置自動(dòng)把字節(jié)碼從WWW服務(wù)器上下載到本地,并利

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論