Java語言教學(xué)課件:11-AWT編程_第1頁
Java語言教學(xué)課件:11-AWT編程_第2頁
Java語言教學(xué)課件:11-AWT編程_第3頁
Java語言教學(xué)課件:11-AWT編程_第4頁
Java語言教學(xué)課件:11-AWT編程_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、11.AWT編程本章要點(diǎn)GUI與AWTAWT容器與布局管理器對話框事件機(jī)制AWT繪圖機(jī)制剪貼板圖形用戶界面 作為一個程序設(shè)計者,必須優(yōu)先考慮用戶的感受,一定要讓用戶感到“爽”,我們的程序才會被需要、被使用,這樣的程序才有價值。 當(dāng)JDK1.0發(fā)布時,Sun提供了一個基本的GUI類庫,這個GUI類庫希望可以在所有平臺下都能運(yùn)行,這套基本類庫被稱為“抽象窗口工具集(Abstract Window Toolkit)”,它為Java應(yīng)用程序提供了基本的圖形組件。 AWT簡介當(dāng)JDK1.0發(fā)布時,Sun提供了一個基本的GUI類庫,這個GUI類庫希望可以在所有平臺下都能運(yùn)行,這套基本類庫被稱為“抽象窗口工

2、具集(Abstract Window Toolkit)”,它為Java應(yīng)用程序提供了基本的圖形組件。 AWT (Abstract Window Tools):抽象窗口工具AWT的問題使用AWT作出的圖形用戶界面在所有平臺上都顯得很丑陋,功能也非常有限。AWT為了迎合所有主流操作系統(tǒng)的界面設(shè)計,AWT組件只能使用這些操作系統(tǒng)上圖形界面組件的交集,所以不能使用特定操作系統(tǒng)上復(fù)雜的圖形界面組件,最多只能使用四種字體。AWT用的是非常笨拙的,非面向?qū)ο蟮木幊棠J健?Swing組件Swing為絕大部分的界面組件都提供了實現(xiàn)。這些界面組件都是直接繪制空白區(qū)域上。Swing自己實現(xiàn)了這些界面組件,因此Swi

3、ng無需使用各操作系統(tǒng)上界面組件的交集。由于Swing不再需要調(diào)用操作系統(tǒng)上相應(yīng)的界面組件,Swing的UI界面更加統(tǒng)一。java.awt包在這個包中,提供了基本的java程序GUI設(shè)計工具:Component/MenuComponentContainerLayoutManagerContainer(容器)容器(Container)實際上是Component的子類,因此容器類對象本身也是一個組件,具有組件的所有性質(zhì),另外還具有容納其它組件和容器的功能。容器類對象可使用方法add()添加組件兩種主要的容器類型Window:可獨(dú)立存在的頂級窗口Panel:可作為容器容納其它組件,但不能獨(dú)立存在,必

4、須被添加到其它容器中(如Window 或 Applet)Container層次關(guān)系圖ContainerPanelAppletWindowFrameScrollPaneDialogContainer常用方法add()setLocation():設(shè)置位置。setSize():設(shè)置大小setBoundes():同時設(shè)置大小、位置。setVisible()pack()組件定制組件的大小和位置由布局管理器(LayoutManager)決定。不使用布局管理器則可以定制組件的大小和位置,但必須在容器中使用組件的setLocation(), setSize(), setBounds()方法確定大小位置Fram

5、e類代表一個窗口。是Window類的子類有標(biāo)題,可通過拖拉改變大小初始化時為不可見,可用setVisible(true)使其顯示出來使用BorderLayout作為其缺省布局管理器使用setLayout方法改變布局管理器Panel為放置組件提供空間允許使用自己的布局管理器不能單獨(dú)存在,必須放置到其他容器中Container的布局管理器為了使我們生成的圖形用戶界面具有良好的平臺無關(guān)性,Java語言中,提供了布局管理器這個工具來管理組件在容器中的布局,而不使用直接設(shè)置組件位置和大小的方式。Container的布局管理器AWT中的布局管理器有:FlowLayoutBorderLayoutGridLa

6、youtCardLayoutGridBagLayoutFlowLayoutGUI Component從左到右按順序配置在Container中,若到達(dá)右邊界,則會折回到下一行中FlowLayout是Panel和Applet的默認(rèn)管理器FlowLayout()/ FlowLayout(int align)/ FlowLayout(int align,int hgap,int vgap)FlowLayout.LEFT/ FlowLayout.CENTER/ FlowLayout.RIGHT默認(rèn)為靠中對齊使用組件的理想尺寸BorderLayoutBorderLayout將Container分為EAST

7、、SOUTH、WEST、NORTH、CENTER五個區(qū)域,Component可以放置在這五個區(qū)域的任何一個BorderLayout是Frame、Dialog的默認(rèn)管理器每個區(qū)域只能放一個組件。如果在一個區(qū)域中放入多個Component,后放入的Component會把前面的覆蓋BorderLayout()/ BorderLayout(int hgap,int vgap) BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.CENTERBorderLayout(con.)Bor

8、derLayout布局格式:當(dāng)改變?nèi)萜鞔笮r當(dāng)某個區(qū)域沒有組件時,它的空間會被自動占滿。North, South和Center區(qū)域水平調(diào)整East, West和Center區(qū)域垂直調(diào)整North South West East CenterGridLayoutGridLayout將Component配置在縱橫格線分割的格子中,從左到右,從上到下;構(gòu)造器:GridLayout()/ GridLayout(int rows,int cols)/ GridLayout(int rows,int cols,int hgap,int vgap) GridBagLayoutGridBagLayout布局管

9、理器是功能最強(qiáng)大,但也是最復(fù)雜的布局管理器,與GridLayout布局管理器不同的是:在GridBagLayout布局管理器中,一個組件可以跨越一個或多個網(wǎng)格,并可以設(shè)置各網(wǎng)格的大小互不相同,從而增加了布局的靈活性。當(dāng)窗口的大小發(fā)生變化時,GridBagLayout布局管理也可以準(zhǔn)確地控制窗口各部分的反應(yīng)。為了處理GridBagLayout中GUI組件的大小、跨越性,Java提供了GridBagConstraints對象,該對象與特定的GUI組件關(guān)聯(lián),用于控制該GUI組件的大小、跨越性。CardLayout將加入到Container中的Component看成一疊卡片,只有最上面的那個Compo

10、net才可見構(gòu)造器:CardLayout()/ CardLayout(int hgap,int vgap)控制組件可見的方法:first(Container target) / last(Container target) /previous(Container target) /next(Container target) /show(Container target,String name)CardLayout將加入到Container中的Component看成一疊卡片,只有最上面的那個Componet才可見構(gòu)造器:CardLayout()/ CardLayout(int hgap,int

11、 vgap)控制組件可見的方法:first(Container target) / last(Container target) /previous(Container target) /next(Container target) /show(Container target,String name)絕對定位Java也提供了那種拖控件的方式,即Java也可以對GUI組件進(jìn)行絕對定位。在Java容器中采用絕對定位的步驟如下: (1)將Container的布局管理器設(shè)成null:setLayout(null)。(2)往容器上加組件的時候,先調(diào)用setBounds()或setSize()方法來先設(shè)

12、置組件的大小、位置?;蛘咧苯觿?chuàng)建GUI組件時通過構(gòu)造參數(shù)指定該組件的大小、位置,然后將該組件添加到容器中。BoxLayout布局管理器 GridBagLayout布局管理器雖然功能強(qiáng)大,但它是在太復(fù)雜了,以Swing引入了一個新的布局管理器:BoxLayout。它保留了GridBagLayout的很多優(yōu)點(diǎn),但是卻沒那么復(fù)雜。BoxLayout可以在垂直和水平兩個方向上擺放GUI組件,BoxLayout提供了一個如下的簡單構(gòu)造器:BoxLayout(Container target, int axis):指定創(chuàng)建基于target容器的BoxLayout布局管理器,該布局管理器里組件案axis方向

13、排列。其中axis有BoxLayout.X_AXIS(橫向)和BoxLayout.Y_AXIS(縱向)兩個方向。基本組件 Button:按鈕,可接收單擊操作。Canvas:用于繪圖的畫布。Checkbox:復(fù)選框組件(也可變成單選框組件)。CheckboxGroup:用于將多個Checkbox組件組合成一組,一組Checkbox組件將只有一個可以被選中,即全部變成單選框組件。Choice:下拉式選擇框組件。Frame:窗口,在GUI程序里通過該類創(chuàng)建窗口。Label:標(biāo)簽類,用于放置提示性文本。List。列表框組件,可以添加多項條目。Panel:不能單獨(dú)存在基本容器類,必須放到其他容器中。Sc

14、rollbar:滑動條組件。如果需要用戶輸入位于某個范圍的值,就可以使用滑動條組件。如調(diào)色板中設(shè)置RGB的三個值所用的滑動條。當(dāng)創(chuàng)建一個滑動條時,必須指定它的方向、初始值、滑塊的大小、最小值和最大值。ScrollPane:帶水平及垂直滾動條的容器組件。TextArea:多行文本域。TextField:單行文本框。 對話框 對話框是Window類的子類,是一個容器類,屬于特殊組件。對話框也是可以獨(dú)立存在的頂級窗口,因此用法與普通窗口用法幾乎完全一樣。但對話框有兩點(diǎn)需要注意:對話框必須依賴于其他窗口,就是必須有一個parent窗口。對話框有非模式(non-modal)和模式(modal)兩種,當(dāng)某

15、個模式對話框被打開之后,該模式對話框總是位于它依賴的窗口之上;在模式對話框被關(guān)閉之前,它依賴的窗口無法獲得焦點(diǎn)。對話框有多個重載的構(gòu)造器,它的構(gòu)造器可能有如下三個參數(shù):owner:指定該對話框所依賴的窗口,既可以是窗口,也可以是對話框。title:指定該對話框的窗口標(biāo)題。modal:指定該對話框是否是模式的,可以是true或false。 FileDialogDialog類還有一個子類:FileDialog,它代表一個文件對話框,用于打開、或者保存文件,F(xiàn)ileDialog也提供了幾個構(gòu)造器,分別可支持parent、title和mode三個構(gòu)造參數(shù),其中parent、title指定文件對話框的所

16、屬父窗口和標(biāo)題,而mode用于指定該窗口用于打開文件、或保存文件,該參數(shù)支持如下兩個參數(shù)值:FileDialog.LOAD、FileDialog.SAVE。事件處理事件(Event) 一個對象,它描述了發(fā)生什么事情 事件源(Event source) 產(chǎn)生事件的組件事件處理方法(Event handler) 能夠接收、解析和處理事件類對象、實現(xiàn)和用戶交互的方法AWT的事件處理方式委派式事件處理(delegation)-個別的組件將整個事件處理委托給特定的對象,當(dāng)該組件發(fā)生指定的事件時,就通知所委托的對象,有這個對象來處理這個事件。這個受委托處理事件的對象稱為事件傾聽對象(event liste

17、ner)每個組件均可以針對特定的事件指定一個或多個事件傾聽對象,由這些事件傾聽對象負(fù)責(zé)處理事件AWT事件分類 EventObjectActionEventAdjustmentEventAWTEventItemEventTextEventContainerEventFocusEventInputEventPaintEventWindowEventKeyEventMouseEventComponentEvent窗口事件當(dāng)一個窗口被激活、撤銷激活、打開、關(guān)閉、最大化、最小化時,發(fā)生窗口事件。從WindowEvent類中創(chuàng)建的對象表示窗口事件。不同事件類型的接口和方法分類接口名方法ActionActi

18、onListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)Mouse MotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)MouseMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseClicked(MouseEvent)mouseExited(MouseEvent)KeyK

19、eyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvnet)focusLost(FocusEvent)分類接口名方法AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componen

20、tResized(ComponentEvent)componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)ContainerContainerListenercomponen

21、tAdded(ContainerEvent)componentRemoved(ContainerEvent)TextTextListenertextValueChanged(TextEvent)不同事件類型的接口和方法事件適配器(Adapter)為簡化編程,針對大多數(shù)事件監(jiān)聽器接口定義了相應(yīng)的實現(xiàn)類-事件適配器類,在適配器類中,實現(xiàn)了相應(yīng)監(jiān)聽器接口中所有的方法,但不做任何事情。在定義監(jiān)聽器類時就可以繼承事件適配器類,并只重寫所需要的方法。事件處理類的形式利用內(nèi)部類來處理事件用匿名內(nèi)部類處理事件定義一個事件監(jiān)聽器類直接在當(dāng)前類中處理創(chuàng)建菜單創(chuàng)建一個菜單步驟:創(chuàng)建一個MenuBar對象,將其放置到

22、菜單容器中(如Frame)創(chuàng)建若干個Menu對象,將其放置到MenuBar對象中創(chuàng)建若干個MenuItem對象,將其放置到Menu對象中MenuItem包括MenuItem:普通的菜單項CheckboxMenuItem:可以選擇的菜單項右鍵菜單右鍵菜單使用PopupMenu對象表示,創(chuàng)建右鍵菜單的步驟如下:(1)創(chuàng)建PopupMenu的實例。(2)創(chuàng)建多個MenuItem實例,依次將這些實例加入PopupMenu中。(3)將PopupMenu加入到目標(biāo)組件之中。(4)為需要出現(xiàn)上下文菜單的組件編寫鼠標(biāo)監(jiān)聽器,當(dāng)用戶釋放鼠標(biāo)右鍵時彈出右鍵菜單。在AWT中畫圖通常,創(chuàng)建Canvas類或Panel的

23、子類,并覆蓋paint方法每當(dāng)組件出現(xiàn)時調(diào)用paint方法每個組件都有一個Graphics對象Graphics類實現(xiàn)了很多繪圖方法AWT中的坐標(biāo)(0,0)(x,y)x軸y軸Graphics類Graphics是一個抽象的畫筆對象,Graphics可以在組件上繪制豐富多彩的幾何圖形和位圖,Graphics類提供了如下幾個方法用于繪制幾何圖形和位圖:drawLine:繪制直線。drawString:繪制字符串。drawRect:繪制矩形。drawRoundRect:繪制圓角矩形。drawOval:繪制橢圓形狀。drawPolygon:繪制多邊形邊框。drawArc:繪制一段圓?。赡苁菣E圓的圓?。?。

24、drawPolyline:繪制折線。fillRect:填充一個矩形區(qū)域。fillRoundRect:填充一個圓角矩形區(qū)域。fillOval:填充橢圓區(qū)域。fillPolygon:填充一個多邊形區(qū)域。fillArc:填充圓弧和圓弧兩個端點(diǎn)到中心連線所包圍的區(qū)域。drawImage:繪制位圖。BufferedImage實現(xiàn)類 Image類代表了位圖,但它是一個抽象類,無法直接創(chuàng)建Image對象,為此Java為它提供了一個BufferedImage實現(xiàn)類,它是一個可訪問圖像數(shù)據(jù)緩沖區(qū)的Image實現(xiàn)類。該類提供了一個簡單的構(gòu)造器,用于創(chuàng)建一個BufferedImage對象:BufferedImage

25、(int width, int height, int imageType):創(chuàng)建指定大小、指定圖象類型的BufferedImage對象,其中imageType可以是BufferedImage.TYPE_INT_RGB、BufferedImage.TYPE_BYTE_GRAY等值。除此之外,BufferedImage還提供了一個getGraphics()方法返回該對象的Graphics對象,從而允許通過該Graphics對象向Image中添加圖形。借助于BufferedImage的幫助,我們可以在AWT中實現(xiàn)緩沖技術(shù):當(dāng)我們需要向GUI組件上繪制圖形時,不要直接繪制到該GUI組件上,而是先將圖

26、形繪制到BufferedImage對象中,然后再調(diào)用組件的drawImage一次性地將BufferedImage對象繪制到特定組件上。ImageIO輸入/輸出位圖 ImageIO類并不能支持讀寫全部格式的圖形文件,程序可以通過ImageIO類的如下幾個靜態(tài)方法來訪問該類所支持讀寫的圖形文件格式:getReaderFileSuffixes():返回一個 String 數(shù)組,該數(shù)組列出ImageIO所有能讀的圖形文件的文件后綴。getReaderFormatNames():返回一個 String 數(shù)組,該數(shù)組列出ImageIO所有能讀的圖形文件的非正式格式名稱。static String getW

27、riterFileSuffixes():返回一個 String 數(shù)組,該數(shù)組列出ImageIO所有能寫的圖形文件的文件后綴。static String getWriterFormatNames():返回一個 String 數(shù)組,該數(shù)組列出ImageIO所有能寫的圖形文件的非正式格式名稱。 剪貼板 AWT支持兩種剪貼板:系統(tǒng)剪貼板和本地剪貼板,如果在同一個虛擬機(jī)的不同窗口之間進(jìn)行數(shù)據(jù)傳遞,則無需使用系統(tǒng)剪貼板,使用系統(tǒng)剪貼板就可以了。系統(tǒng)剪貼板則與運(yùn)行平臺無關(guān),可以傳輸任意格式的數(shù)據(jù)。使用系統(tǒng)剪貼板Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();傳遞

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論