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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

第二十三頁,共46頁。事件類中包含有事件相關(guān)的信息,最重要的有:(1)事件源(即產(chǎn)生事件的組件),可能通過getSource()來得到;(2)事件的具體情況,如MouseEvent的getX(),getY()方法得到鼠標(biāo)的坐標(biāo),KeyEvent的getKeyChar()得到當(dāng)前的字符等。第二十四頁,共46頁。2.事件處理器WTEventListener事件處理器(Eventhandler)是對(duì)事件進(jìn)行處理的程序,在編程時(shí)通過實(shí)現(xiàn)事件監(jiān)聽器(EventListener)來實(shí)現(xiàn)對(duì)事件的處理。事件監(jiān)聽器是一些事件的接口,這些接口是java.awt.AWTEventListener的子類。接口中含有相關(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ì)信息。第二十五頁,共46頁。10.3.2

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

事件適配器用實(shí)現(xiàn)接口的方法,必須實(shí)現(xiàn)接口所規(guī)定的方法,如WindowListener有7個(gè)方法,即使一些方法不做任何事情,也得書寫。為簡化編程,針對(duì)一些事件監(jiān)聽器接口定義了相應(yīng)的實(shí)現(xiàn)類——事件適配器類(Adapter),在適配器類中,實(shí)現(xiàn)了相應(yīng)監(jiān)聽器接口中所有的方法,但不做任何事情。事件適配器包括如下幾種:(1)ComponentAdapter(組件適配器);(2)ContainerAdapter(容器適配器);(3)FocusAdapter(焦點(diǎn)適配器);(4)KeyAdapter(鍵盤適配器);(5)MouseAdapter(鼠標(biāo)適配器);(6)MouseMotionAdapter(鼠標(biāo)運(yùn)動(dòng)適配器);(7)WindowAdapter(窗口適配器)。程序中可以繼承事件適配器類,并只重寫所需要的方法,而不用寫那些空的方法體。第二十七頁,共46頁。10.3.4內(nèi)部類及匿名類在事件處理中的應(yīng)用在Java事件處理程序中,由于與事件相關(guān)的事件監(jiān)聽器的類經(jīng)常局限于一個(gè)類的內(nèi)部,所以經(jīng)常使用內(nèi)部類。而且定義的內(nèi)部類在事件處理中的使用就實(shí)例化一次(在其他地方不會(huì)用到該類,所以不需要類名),所以經(jīng)常使用匿名類。在類的內(nèi)部定義事件類:privateclassInnerMonitorimplementsMouseMotionListener,MouseListener{…}第二十八頁,共46頁。使用匿名類的例子f.addMouseMotionListener(newMouseMotionListener(){ publicvoidmouseDragged(MouseEvente){ Strings="位置("+e.getX()+","+e.getY()+")"; tf.setText(s); } publicvoidmouseMoved(MouseEvente){} });f.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); }});其中用匿名類實(shí)現(xiàn)了MouseMotionListener及繼承了WindowAdapter,同時(shí)實(shí)例化了這個(gè)匿名類的對(duì)象第二十九頁,共46頁。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)、鍵盤事件與畫布10.4.6Frame與窗口事件10.4.7Panel與容器事件10.4.8組件事件、焦點(diǎn)事件與對(duì)話框參見相應(yīng)的例子第三十頁,共46頁。10.5繪圖、圖形和動(dòng)畫10.5.1繪制圖形繪制圖形和文字將要用類Graphics。它相當(dāng)于組件的繪圖環(huán)境,利用它可以進(jìn)行各種繪圖操作。獲得Graphics對(duì)象常有兩種方法一是使用組件的getGraphics()方法來在Applet及Application程序中,常用Canvas及Applet對(duì)象來進(jìn)行繪圖。它們的paint()方法也會(huì)帶一個(gè)Graphics參數(shù),通過覆蓋paint()方法,就可以繪制各種圖形。第三十一頁,共46頁。Graphics的繪圖方法畫三維矩形 draw3DRect(intx,inty,intwidth,intheight,booleanraised)畫弧 drawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)畫文字 drawBytes(byte[]data,intoffset,intlength,intx,inty)畫文字 drawChars(char[]data,intoffset,intlength,intx,inty)畫直線 drawLine(intx1,inty1,intx2,inty2)畫橢圓 drawOval(intx,inty,intwidth,intheight)畫多邊形 drawPolygon(int[]xPoints,int[]yPoints,intnPoints)畫多邊形 drawPolygon(Polygonp)畫折線 drawPolyline(int[]xPoints,int[]yPoints,intnPoints)畫矩形 drawRect(intx,inty,intwidth,intheight)畫圓角矩形 drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)畫文字 drawString(AttributedCharacterIteratoriterator,intx,inty)畫文字 drawString(Stringstr,intx,inty)畫填充三維矩形 fill3DRect(intx,inty,intwidth,intheight,booleanraised)畫填充弧 fillArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)畫填充橢圓 fillOval(intx,inty,intwidth,intheight)畫填充多邊形 fillPolygon(int[]xPoints,int[]yPoints,intnPoints)畫填充多邊形 fillPolygon(Polygonp)畫填充矩形 fillRect(intx,inty,intwidth,intheight)畫填充圓角矩形 fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)第三十二頁,共46頁。幾個(gè)輔助類除了Graphics類,Java中還定義了其他一些用來表示幾何圖形的類,對(duì)繪制用戶自定義成分也很有幫助。例如,利用Point表示一個(gè)像素點(diǎn);利用Dimension類表示寬和高;利用Rectangle類表示一個(gè)矩形;利用Polygon類表示一個(gè)多邊形;利用Color類表示顏色等。Draw_r_cos2th.java第三十三頁,共46頁。10.5.2顯示文字Graphics類的方法drawString()可以在屏幕的指定位置顯示一個(gè)字符串一個(gè)Font類的對(duì)象表示了一種字體顯示效果,包括字體類型、字型和字號(hào)。下面的語句用于創(chuàng)建一個(gè)Font類的對(duì)象:FontMyFont=newFont(“TimesRoman”,F(xiàn)ont.BOLD,12);如果希望使用該Font對(duì)象,則可以利用Graphics類的setFont()方法DrawFonts.java第三十四頁,共46頁。10.5.3

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

第三十六頁,共46頁。10.5.5實(shí)現(xiàn)動(dòng)畫效果動(dòng)畫曾是JavaApplet最吸引人的特性之一。用Java實(shí)現(xiàn)動(dòng)畫的原理與放映動(dòng)畫片類似,取若干相關(guān)的圖像或圖片,順序、連續(xù)地在屏幕上先顯示,后擦除,循環(huán)往復(fù)就可以獲得動(dòng)畫的效果。第三十七頁,共46頁。10.6AppletApplet(小程序)是一種很重要的Java程序,是工作在Internet的瀏覽器上的Java程序。編寫Applet小程序必須要用到j(luò)ava.applet包中的Applet類。java.applet.Applet是java.awt.Panel的子類,如圖10-20所示。Applet的默認(rèn)布局是FlowLayout。第三十八頁,共46頁。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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論