版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Java程序設(shè)計圖形用戶界面第一頁,共46頁。10.1AWT組件10.1.1圖形用戶界面概述圖形用戶界面(graphicaluserinterface,GUI)處理圖形用戶界面的類庫主要是java.awt包和javax.swing包。AWT是abstractwindowtoolkit(抽象窗口工具集)的縮寫。javax.swing包是JDK1.2以后版本所引入的圖形用戶界面類庫。功能更強,界面更富。各種平臺上更統(tǒng)一。第二頁,共46頁。
設(shè)計和實現(xiàn)圖形用戶界面的工作主要有以下幾點。(1)創(chuàng)建組件(Component):創(chuàng)建組成界面的各種元素,如按鈕、文本框等。(2)指定布局(Layout):根據(jù)具體需要排列它們的位置關(guān)系。(3)響應(yīng)事件(Event):定義圖形用戶界面的事件和各界面元素對不同事件的響應(yīng),從而實現(xiàn)圖形用戶界面與用戶的交互功能。第三頁,共46頁。10.1.2AWT組件分類Java中構(gòu)成圖形用戶界面的各種元素,稱為組件(Component)。組件分為容器(Container)類和非容器類組件兩大類容器又分為頂層容器和非頂層容器兩大類第四頁,共46頁。重要的組件的繼承關(guān)系第五頁,共46頁。10.1.3Component的方法Component類是所有組件和容器的抽象父類,其中定義了一些每個容器和組件都可能用到的方法第六頁,共46頁。10.2
布局管理Java.awt包中共定義了五種布局管理器,每個布局管理器對應(yīng)一種布局策略,分別是FlowLayoutBorderLayoutCardLayoutGridLayoutGridBagLayout。
第七頁,共46頁。FlowLayout布局管理器FlowLayout是Panel類的默認布局管理器FlowLayout布局對組件逐行定位,行內(nèi)從左到右,一行排滿后換行默認對齊方式為居中對齊不改變組件的大小,按組件原有尺寸顯示組件可在構(gòu)造方法中設(shè)置不同的組件間距、行距及對齊方式第八頁,共46頁。FlowLayout舉例范例:TestFlowLayout.java第九頁,共46頁。FlowLayout的構(gòu)造方法newFlowLayout(FlowLayout.RIGHT,20,40);
右對齊,組件之間水平間距20個像素,豎直間距40個像素;newFlowLayout(FlowLayout.LEFT);
左對齊,水平和豎直間距為缺省值:5;newFlowLayout();
使用缺省的居中對齊方式,水平和豎直間距為缺省值:5;第十頁,共46頁。BorderLayout布局管理器BorderLayout是Frame類的默認布局管理器BorderLayout將整個容器的布局劃分成東、西、南、北、中五個區(qū)域,組件只能被添加到指定的區(qū)域如不指定組件的加入部位,則默認加入到Center區(qū)域每個區(qū)域只能加入一個組件,如加入多個,則先前加入的組件會被遺棄第十一頁,共46頁。BorderLayout布局管理器BorderLayout型布局容器尺寸縮放原則北、南兩個區(qū)域只能在水平方向縮放(寬度可調(diào)整)東、西兩個區(qū)域只能在垂直方向縮放(高度可調(diào)整)中部可在兩個方向上縮放NorthSouthWestEestCenter第十二頁,共46頁。BorderLayout舉例范例:estBorderLayout.java第十三頁,共46頁。GridLayout布局管理器GridLayout型布局管理器將布局劃分成規(guī)則的矩形網(wǎng)格,每個單元格區(qū)域大小相等.
組件被添加到每個單元格中,先從左到右添滿一行后換行,再從上到下.在GridLayout構(gòu)造方法中指定分割的行數(shù)和列數(shù). newGridLayout(3,4);第十四頁,共46頁。GridLayout舉例范例:TestGridLayout.java第十五頁,共46頁。*CardLayout布局管理器CardLayout布局管理器能夠幫助用戶處理兩個以至更多的成員共享同一顯示空間,就好象一疊卡片摞在一起。注意:在一張卡片中只能顯示一個組件,因此可以使用容器嵌套方法顯示多個組件。
addLayoutComponent,first,next,last方法第十六頁,共46頁。*GridBagLayout布局管理器AWT中最靈活、最復(fù)雜的布局管理器,各組件所占空間可以不相同且靈活規(guī)定,參見參考書及API文檔;第十七頁,共46頁。容器的嵌套使用舉例范例:NestedContainer.java第十八頁,共46頁。默認布局管理器ComponentContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayout第十九頁,共46頁。布局管理器總結(jié)(1)FrameFrame是一個頂級窗口。Frame的缺省布局管理器為BorderLayout。PanelPanel無法單獨顯示,必須添加到某個容器中。Panel的缺省布局管理器為FlowLayout。當(dāng)把Panel作為一個組件添加到某個容器中后,該Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某個區(qū)域顯示多個組件。第二十頁,共46頁。布局管理器總結(jié)(2)在程序中安排組件的位置和大小時,應(yīng)注意:容器中的布局管理器負責(zé)各個組件的大小和位置,因此用戶無法在這種情況下設(shè)置組件的這些屬性。如果試圖使用Java語言提供的setLocation(),setSize(),setBounds()等方法,則都會被布局管理器覆蓋。如果用戶確實需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的布局管理器,方法為:
setLayout(null);第二十一頁,共46頁。10.3事件處理10.3.1事件及事件監(jiān)聽器
Java中的圖形用戶界面中,對于用戶的鼠標(biāo)、鍵盤操作發(fā)生反應(yīng),就必須進行事件處理。這些鼠標(biāo)、鍵盤操作等統(tǒng)稱為事件(Event)。對這些事件作出響應(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)是對事件進行處理的程序,在編程時通過實現(xiàn)事件監(jiān)聽器(EventListener)來實現(xiàn)對事件的處理。事件監(jiān)聽器是一些事件的接口,這些接口是java.awt.AWTEventListener的子類。接口中含有相關(guān)的方法,如:MouseMotionListener是對鼠標(biāo)移動事件的處理的接口,它含有兩個重要的方法:voidmouseDragged(MouseEvente);//處理鼠標(biāo)拖動的方法voidmouseMoved(MouseEvente);//處理鼠標(biāo)移動的方法在這些方法中,都帶一個事件對象作為參數(shù),如MouseMotionListener的兩個方法都帶MouseEvent參數(shù)。程序中可以根據(jù)這個參數(shù)可以得到有關(guān)事件的詳細信息。第二十五頁,共46頁。10.3.2
事件監(jiān)聽器的注冊注冊事件監(jiān)聽器只需要使用組件對象的addXXXXEvent方法,它可以指明該對象感興趣的事件監(jiān)聽器(即實現(xiàn)了某個AWTEventListener子接口的對象)。這樣,當(dāng)事件源發(fā)生了某種類型的事件時,則觸發(fā)事先已注冊過的監(jiān)聽器中相應(yīng)的處理程序。一個對象上可注冊多個監(jiān)聽器多個對象可注冊同一個監(jiān)聽器第二十六頁,共46頁。10.3.3
事件適配器用實現(xiàn)接口的方法,必須實現(xiàn)接口所規(guī)定的方法,如WindowListener有7個方法,即使一些方法不做任何事情,也得書寫。為簡化編程,針對一些事件監(jiān)聽器接口定義了相應(yīng)的實現(xiàn)類——事件適配器類(Adapter),在適配器類中,實現(xiàn)了相應(yīng)監(jiān)聽器接口中所有的方法,但不做任何事情。事件適配器包括如下幾種:(1)ComponentAdapter(組件適配器);(2)ContainerAdapter(容器適配器);(3)FocusAdapter(焦點適配器);(4)KeyAdapter(鍵盤適配器);(5)MouseAdapter(鼠標(biāo)適配器);(6)MouseMotionAdapter(鼠標(biāo)運動適配器);(7)WindowAdapter(窗口適配器)。程序中可以繼承事件適配器類,并只重寫所需要的方法,而不用寫那些空的方法體。第二十七頁,共46頁。10.3.4內(nèi)部類及匿名類在事件處理中的應(yīng)用在Java事件處理程序中,由于與事件相關(guān)的事件監(jiān)聽器的類經(jīng)常局限于一個類的內(nèi)部,所以經(jīng)常使用內(nèi)部類。而且定義的內(nèi)部類在事件處理中的使用就實例化一次(在其他地方不會用到該類,所以不需要類名),所以經(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); }});其中用匿名類實現(xiàn)了MouseMotionListener及繼承了WindowAdapter,同時實例化了這個匿名類的對象第二十九頁,共46頁。10.4
常用組件的使用10.4.1標(biāo)簽、按鈕與動作事件10.4.2文本框、文本區(qū)域與文本事件10.4.3單、復(fù)選按鈕,列表與選擇事件10.4.4調(diào)整事件與滾動條10.4.5鼠標(biāo)、鍵盤事件與畫布10.4.6Frame與窗口事件10.4.7Panel與容器事件10.4.8組件事件、焦點事件與對話框參見相應(yīng)的例子第三十頁,共46頁。10.5繪圖、圖形和動畫10.5.1繪制圖形繪制圖形和文字將要用類Graphics。它相當(dāng)于組件的繪圖環(huán)境,利用它可以進行各種繪圖操作。獲得Graphics對象常有兩種方法一是使用組件的getGraphics()方法來在Applet及Application程序中,常用Canvas及Applet對象來進行繪圖。它們的paint()方法也會帶一個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頁。幾個輔助類除了Graphics類,Java中還定義了其他一些用來表示幾何圖形的類,對繪制用戶自定義成分也很有幫助。例如,利用Point表示一個像素點;利用Dimension類表示寬和高;利用Rectangle類表示一個矩形;利用Polygon類表示一個多邊形;利用Color類表示顏色等。Draw_r_cos2th.java第三十三頁,共46頁。10.5.2顯示文字Graphics類的方法drawString()可以在屏幕的指定位置顯示一個字符串一個Font類的對象表示了一種字體顯示效果,包括字體類型、字型和字號。下面的語句用于創(chuàng)建一個Font類的對象:FontMyFont=newFont(“TimesRoman”,F(xiàn)ont.BOLD,12);如果希望使用該Font對象,則可以利用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實現(xiàn)動畫效果動畫曾是JavaApplet最吸引人的特性之一。用Java實現(xiàn)動畫的原理與放映動畫片類似,取若干相關(guān)的圖像或圖片,順序、連續(xù)地在屏幕上先顯示,后擦除,循環(huán)往復(fù)就可以獲得動畫的效果。第三十七頁,共46頁。10.6AppletApplet(小程序)是一種很重要的Java程序,是工作在Internet的瀏覽器上的Java程序。編寫Applet小程序必須要用到j(luò)ava.applet包中的Applet類。java.applet.Applet是java.awt.Panel的子類,如圖10-20所示。Applet的默認布局是FlowLayout。第三十八頁,共46頁。10.6.1Applet的基本工作原理編譯好的字節(jié)碼文件(.class文件)保存在特定的WWW服務(wù)器上,同一個或另一個WWW服務(wù)器上保存著嵌入了該字節(jié)碼文件名的HTML文件。當(dāng)某一個瀏覽器向服務(wù)器請求下載嵌入了Applet的HTML文件時,當(dāng)瀏覽器遇到HTML文件中的特殊標(biāo)記<applet>,表明它嵌有一個Applet時,瀏覽器會根據(jù)這個Applet的名字和位置自動把字節(jié)碼從WWW服務(wù)器上下載到本地,并利
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年某服裝設(shè)計與某紡織廠關(guān)于環(huán)保材料應(yīng)用的合作協(xié)議
- 2024-2030年中國衛(wèi)生消毒場運行狀況及投資發(fā)展前景預(yù)測報告
- 2024年度養(yǎng)老機構(gòu)與專業(yè)護理團隊合作協(xié)議3篇
- 2024上海應(yīng)屆生落戶離職賠償金計算及協(xié)議3篇
- 2024年版房地產(chǎn)項目開發(fā)合作合同樣本版B版
- 珠海城市職業(yè)技術(shù)學(xué)院實訓(xùn)室安全事故應(yīng)急處置管理辦法(已發(fā)文)
- 滿洲里俄語職業(yè)學(xué)院《軟件工程原理與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025技術(shù)咨詢標(biāo)準(zhǔn)合同書
- 2025年石家莊道路貨物運輸駕駛員考試
- 2025年福州從業(yè)資格證模擬考試題貨運考題
- 前程無憂測評題庫及答案
- 《中韓關(guān)系演講》課件
- 直系親屬股權(quán)無償轉(zhuǎn)讓合同(2篇)
- 浙江省強基聯(lián)盟2024-2025學(xué)年高一上學(xué)期11月聯(lián)考數(shù)學(xué)試題(原卷版)-A4
- 2024年成人高考成考(專升本)醫(yī)學(xué)綜合試卷與參考答案
- 2023-2024學(xué)年廣東省廣州市白云區(qū)九年級(上)期末語文試卷
- 【初中生物】嘗試對生物進行分類-2024-2025學(xué)年七年級生物上冊同步教學(xué)課件(人教版2024)
- 企業(yè)愿景及三年規(guī)劃目標(biāo)
- 無子女離婚協(xié)議書范文百度網(wǎng)盤
- 北京市大興區(qū)2024-2025學(xué)年八年級上學(xué)期期中考試英語試題(含答案)
- wps課件教學(xué)課件
評論
0/150
提交評論