




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java程序設計圖形用戶界面第一頁,共46頁。10.1AWT組件10.1.1圖形用戶界面概述圖形用戶界面(graphicaluserinterface,GUI)處理圖形用戶界面的類庫主要是java.awt包和javax.swing包。AWT是abstractwindowtoolkit(抽象窗口工具集)的縮寫。javax.swing包是JDK1.2以后版本所引入的圖形用戶界面類庫。功能更強,界面更富。各種平臺上更統一。第二頁,共46頁。
設計和實現圖形用戶界面的工作主要有以下幾點。(1)創建組件(Component):創建組成界面的各種元素,如按鈕、文本框等。(2)指定布局(Layout):根據具體需要排列它們的位置關系。(3)響應事件(Event):定義圖形用戶界面的事件和各界面元素對不同事件的響應,從而實現圖形用戶界面與用戶的交互功能。第三頁,共46頁。10.1.2AWT組件分類Java中構成圖形用戶界面的各種元素,稱為組件(Component)。組件分為容器(Container)類和非容器類組件兩大類容器又分為頂層容器和非頂層容器兩大類第四頁,共46頁。重要的組件的繼承關系第五頁,共46頁。10.1.3Component的方法Component類是所有組件和容器的抽象父類,其中定義了一些每個容器和組件都可能用到的方法第六頁,共46頁。10.2
布局管理Java.awt包中共定義了五種布局管理器,每個布局管理器對應一種布局策略,分別是FlowLayoutBorderLayoutCardLayoutGridLayoutGridBagLayout。
第七頁,共46頁。FlowLayout布局管理器FlowLayout是Panel類的默認布局管理器FlowLayout布局對組件逐行定位,行內從左到右,一行排滿后換行默認對齊方式為居中對齊不改變組件的大小,按組件原有尺寸顯示組件可在構造方法中設置不同的組件間距、行距及對齊方式第八頁,共46頁。FlowLayout舉例范例:TestFlowLayout.java第九頁,共46頁。FlowLayout的構造方法newFlowLayout(FlowLayout.RIGHT,20,40);
右對齊,組件之間水平間距20個像素,豎直間距40個像素;newFlowLayout(FlowLayout.LEFT);
左對齊,水平和豎直間距為缺省值:5;newFlowLayout();
使用缺省的居中對齊方式,水平和豎直間距為缺省值:5;第十頁,共46頁。BorderLayout布局管理器BorderLayout是Frame類的默認布局管理器BorderLayout將整個容器的布局劃分成東、西、南、北、中五個區域,組件只能被添加到指定的區域如不指定組件的加入部位,則默認加入到Center區域每個區域只能加入一個組件,如加入多個,則先前加入的組件會被遺棄第十一頁,共46頁。BorderLayout布局管理器BorderLayout型布局容器尺寸縮放原則北、南兩個區域只能在水平方向縮放(寬度可調整)東、西兩個區域只能在垂直方向縮放(高度可調整)中部可在兩個方向上縮放NorthSouthWestEestCenter第十二頁,共46頁。BorderLayout舉例范例:estBorderLayout.java第十三頁,共46頁。GridLayout布局管理器GridLayout型布局管理器將布局劃分成規則的矩形網格,每個單元格區域大小相等.
組件被添加到每個單元格中,先從左到右添滿一行后換行,再從上到下.在GridLayout構造方法中指定分割的行數和列數. newGridLayout(3,4);第十四頁,共46頁。GridLayout舉例范例:TestGridLayout.java第十五頁,共46頁。*CardLayout布局管理器CardLayout布局管理器能夠幫助用戶處理兩個以至更多的成員共享同一顯示空間,就好象一疊卡片摞在一起。注意:在一張卡片中只能顯示一個組件,因此可以使用容器嵌套方法顯示多個組件。
addLayoutComponent,first,next,last方法第十六頁,共46頁。*GridBagLayout布局管理器AWT中最靈活、最復雜的布局管理器,各組件所占空間可以不相同且靈活規定,參見參考書及API文檔;第十七頁,共46頁。容器的嵌套使用舉例范例:NestedContainer.java第十八頁,共46頁。默認布局管理器ComponentContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayout第十九頁,共46頁。布局管理器總結(1)FrameFrame是一個頂級窗口。Frame的缺省布局管理器為BorderLayout。PanelPanel無法單獨顯示,必須添加到某個容器中。Panel的缺省布局管理器為FlowLayout。當把Panel作為一個組件添加到某個容器中后,該Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某個區域顯示多個組件。第二十頁,共46頁。布局管理器總結(2)在程序中安排組件的位置和大小時,應注意:容器中的布局管理器負責各個組件的大小和位置,因此用戶無法在這種情況下設置組件的這些屬性。如果試圖使用Java語言提供的setLocation(),setSize(),setBounds()等方法,則都會被布局管理器覆蓋。如果用戶確實需要親自設置組件大小或位置,則應取消該容器的布局管理器,方法為:
setLayout(null);第二十一頁,共46頁。10.3事件處理10.3.1事件及事件監聽器
Java中的圖形用戶界面中,對于用戶的鼠標、鍵盤操作發生反應,就必須進行事件處理。這些鼠標、鍵盤操作等統稱為事件(Event)。對這些事件作出響應的程序,稱為事件處理器(Eventhandler)。第二十二頁,共46頁。1.事件類AWTEvent
第二十三頁,共46頁。事件類中包含有事件相關的信息,最重要的有:(1)事件源(即產生事件的組件),可能通過getSource()來得到;(2)事件的具體情況,如MouseEvent的getX(),getY()方法得到鼠標的坐標,KeyEvent的getKeyChar()得到當前的字符等。第二十四頁,共46頁。2.事件處理器WTEventListener事件處理器(Eventhandler)是對事件進行處理的程序,在編程時通過實現事件監聽器(EventListener)來實現對事件的處理。事件監聽器是一些事件的接口,這些接口是java.awt.AWTEventListener的子類。接口中含有相關的方法,如:MouseMotionListener是對鼠標移動事件的處理的接口,它含有兩個重要的方法:voidmouseDragged(MouseEvente);//處理鼠標拖動的方法voidmouseMoved(MouseEvente);//處理鼠標移動的方法在這些方法中,都帶一個事件對象作為參數,如MouseMotionListener的兩個方法都帶MouseEvent參數。程序中可以根據這個參數可以得到有關事件的詳細信息。第二十五頁,共46頁。10.3.2
事件監聽器的注冊注冊事件監聽器只需要使用組件對象的addXXXXEvent方法,它可以指明該對象感興趣的事件監聽器(即實現了某個AWTEventListener子接口的對象)。這樣,當事件源發生了某種類型的事件時,則觸發事先已注冊過的監聽器中相應的處理程序。一個對象上可注冊多個監聽器多個對象可注冊同一個監聽器第二十六頁,共46頁。10.3.3
事件適配器用實現接口的方法,必須實現接口所規定的方法,如WindowListener有7個方法,即使一些方法不做任何事情,也得書寫。為簡化編程,針對一些事件監聽器接口定義了相應的實現類——事件適配器類(Adapter),在適配器類中,實現了相應監聽器接口中所有的方法,但不做任何事情。事件適配器包括如下幾種:(1)ComponentAdapter(組件適配器);(2)ContainerAdapter(容器適配器);(3)FocusAdapter(焦點適配器);(4)KeyAdapter(鍵盤適配器);(5)MouseAdapter(鼠標適配器);(6)MouseMotionAdapter(鼠標運動適配器);(7)WindowAdapter(窗口適配器)。程序中可以繼承事件適配器類,并只重寫所需要的方法,而不用寫那些空的方法體。第二十七頁,共46頁。10.3.4內部類及匿名類在事件處理中的應用在Java事件處理程序中,由于與事件相關的事件監聽器的類經常局限于一個類的內部,所以經常使用內部類。而且定義的內部類在事件處理中的使用就實例化一次(在其他地方不會用到該類,所以不需要類名),所以經常使用匿名類。在類的內部定義事件類: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); }});其中用匿名類實現了MouseMotionListener及繼承了WindowAdapter,同時實例化了這個匿名類的對象第二十九頁,共46頁。10.4
常用組件的使用10.4.1標簽、按鈕與動作事件10.4.2文本框、文本區域與文本事件10.4.3單、復選按鈕,列表與選擇事件10.4.4調整事件與滾動條10.4.5鼠標、鍵盤事件與畫布10.4.6Frame與窗口事件10.4.7Panel與容器事件10.4.8組件事件、焦點事件與對話框參見相應的例子第三十頁,共46頁。10.5繪圖、圖形和動畫10.5.1繪制圖形繪制圖形和文字將要用類Graphics。它相當于組件的繪圖環境,利用它可以進行各種繪圖操作。獲得Graphics對象常有兩種方法一是使用組件的getGraphics()方法來在Applet及Application程序中,常用Canvas及Applet對象來進行繪圖。它們的paint()方法也會帶一個Graphics參數,通過覆蓋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類的對象表示了一種字體顯示效果,包括字體類型、字型和字號。下面的語句用于創建一個Font類的對象:FontMyFont=newFont(“TimesRoman”,Font.BOLD,12);如果希望使用該Font對象,則可以利用Graphics類的setFont()方法DrawFonts.java第三十四頁,共46頁。10.5.3
控制顏色Color類中定義有如下的三種構造函數: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實現動畫效果動畫曾是JavaApplet最吸引人的特性之一。用Java實現動畫的原理與放映動畫片類似,取若干相關的圖像或圖片,順序、連續地在屏幕上先顯示,后擦除,循環往復就可以獲得動畫的效果。第三十七頁,共46頁。10.6AppletApplet(小程序)是一種很重要的Java程序,是工作在Internet的瀏覽器上的Java程序。編寫Applet小程序必須要用到java.applet包中的Applet類。java.applet.Applet是java.awt.Panel的子類,如圖10-20所示。Applet的默認布局是FlowLayout。第三十八頁,共46頁。10.6.1Applet的基本工作原理編譯好的字節碼文件(.class文件)保存在特定的WWW服務器上,同一個或另一個WWW服務器上保存著嵌入了該字節碼文件名的HTML文件。當某一個瀏覽器向服務器請求下載嵌入了Applet的HTML文件時,當瀏覽器遇到HTML文件中的特殊標記<applet>,表明它嵌有一個Applet時,瀏覽器會根據這個Applet的名字和位置自動把字節碼從WWW服務器上下載到本地,并利
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 拋石擠淤施工方案
- 鋼支撐施工方案
- 營銷策劃 -廬山旅游傳播策劃方案
- Mn-Ce復合催化劑催化氧化燒結煙氣CO性能研究
- 云南省昆明市2022-2023學年高二下學期7月化學期末試題(含答案)
- 共產黨員在企業發展中的責任與作用
- 8月廣州大學城二期雅樂軒酒店智能化功能技術設想方案
- 醫院財務日常管理制度
- 國藥控股存貨管理制度
- 物理中考一輪復習教案 第二十六講 電阻、變阻器、歐姆定律
- 2025年安全生產考試題庫:安全生產隱患排查治理安全教育培訓試題
- 馬列原著選讀試題及答案
- 2025江蘇鹽城燕舞集團有限公司招聘58人筆試參考題庫附帶答案詳解析
- 上海韻達java面試題及答案
- T/CIQA 32-2022出入境生物安全消毒服務機構質量管理要求
- 電競店加盟合同協議書
- 6s安全管理考試試題及答案
- 【滇人版】《信息技術》四年級第4冊 第10.1課《設置動畫效果》課件
- 2025年甘肅省平涼市崆峒區中考二模英語試題
- 租房銷售實戰技能培訓
- 2025巴州財睿金融投資管理限公司招聘6人易考易錯模擬試題(共500題)試卷后附參考答案
評論
0/150
提交評論