版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、11.AWT編程講師:瘋狂軟件 本章要點(diǎn)GUI與AWTAWT容器與布局管理器對(duì)話框機(jī)制AWT繪圖機(jī)制剪貼板瘋狂軟件 圖形用戶界面作為一個(gè)程序設(shè)計(jì)者,必須優(yōu)先考慮用戶的感受,一定要讓用戶感到“爽”,我們的程序才會(huì)被需要、被使用,這樣的程序才有價(jià)值。當(dāng)JDK1.0發(fā)布時(shí),Sun提供了一個(gè)基本的GUI類庫,這個(gè)GUI類庫希望可以在所有平臺(tái)下都能運(yùn)行,這套基本類庫被稱為“抽象窗口工具集(Abstract Window Toolkit)”,它為Java應(yīng)用程序提供了基本的圖形組件。瘋狂軟件 AWT簡(jiǎn)介當(dāng)JDK1.0發(fā)布時(shí)
2、,Sun提供了一個(gè)基本的GUI類庫,這個(gè)GUI類庫希望可以在所有平臺(tái)下都能運(yùn)行,這套基本類庫被稱為“抽象窗口工具集(Abstract Window Toolkit)”,它為Java應(yīng)用程序提供了基本的圖形組件。AWT (Abstract Window Tools):抽象窗口工具瘋狂軟件 AWT的問題使用AWT作出的圖形用戶界面在所有平臺(tái)上都顯得很,功能也非常有限。AWT為了迎合所有主流操作系統(tǒng)的界面設(shè)計(jì),AWT組件只能使用這些操作系統(tǒng)上圖形界面組件的交集,所以不能使用特定操作系統(tǒng)上復(fù)雜的圖形界面組件,最多只能使用四種字體。AWT用的是非常笨拙的,非面向?qū)ο蟮木幊棠J?/p>
3、。瘋狂軟件 Swing組件Swing為絕大部分的界面組件都提供了實(shí)現(xiàn)。這些界面組件都是直接繪制空白區(qū)域上。Swing自己實(shí)現(xiàn)了這些界面組件,因此Swing無需使用各操作系統(tǒng)上界面組件的交集。由于Swing不再需要調(diào)用操作系統(tǒng)上相應(yīng)的界面組件,Swing的UI界面更加統(tǒng)一。瘋狂軟件 nerManagerjava.awt包在這個(gè)包中,提供了基本的java程序GUI設(shè)計(jì)工具: Component/MenuComponent Contai Layout瘋狂軟件 Container(容器)容器(Container)實(shí)際上
4、是Component的子類,因此容器類對(duì)象本身也是一個(gè)組件,具有組件的所有性質(zhì),另外還具有容納其它組件和容器的功能。容器類對(duì)象可使用方法add()添加組件兩種主要的容器類型Window:可獨(dú)立存在的頂級(jí)窗口Panel:可作為容器容納其它組件,但不能獨(dú)立存在, 必須被添加到其它容器中(如Window 或Applet)瘋狂軟件 Container層次關(guān)系圖ContainerScrollPaneWindowPanelFrameDialogApplet瘋狂軟件 Container常用方法add()setLocation(): 設(shè) 置 位 置 。
5、 setSize(): 設(shè) 置 大 小 setBoundes():同時(shí)設(shè)置大小、位置。setVisible()pack()瘋狂軟件 組件定制組件的大小和位置由布局管理器(LayoutManager)決定。不使用布局管理器則可以定制組件的大小和位置,但必須在容器中使用組件的setLocation(), setSize(), setBounds()方法確定大小位置瘋狂軟件 Frame類代表一個(gè)窗口。是Window類的子類有標(biāo)題,可通過拖拉改變大小初始化時(shí)為不可見,可用setVisible(true)使其顯示出來使用BorderLayout作為
6、其缺省布局管理器使用setLayout方法改變布局管理器瘋狂軟件 Panel為放置組件提供空間允許使用自己的布局管理器不能單獨(dú)存在,必須放置到其他容器中瘋狂軟件 Container的布局管理器為了使我們生成的圖形用戶界面具有良好的平臺(tái)無關(guān)性,Java語言中,提供了布局管理器這個(gè)工具來管理組件在容器中的布局,而不使用直接設(shè)置組件位置和大小的方式。瘋狂軟件 Container的布局管理器AWT中的布局管理器有: FlowLayout BorderLayout GridLayout CardLayout GridBa
7、gLayout瘋狂軟件 FlowLayoutGUI Component從左到右按順序配置在Container中,若到達(dá)右邊界,則會(huì)折回到下一行中FlowLayout是Panel和Applet的默認(rèn)管理器FlowLayout()/ FlowLayout(int align)/ FlowLayout(int align,int hgap,int vgap)FlowLayout.LEFT/ FlowLayout.CENTER/ FlowLayout.RIGHT默認(rèn)為靠中對(duì)齊使用組件的理想尺寸瘋狂軟件 BorderLayoutBorderLayo
8、ut將Container分為EAST、SOUTH、WEST、NORTH、CENTER五個(gè)區(qū)域, Component可以放置在這五個(gè)區(qū)域的任何一個(gè)BorderLayout是Frame、Dialog的默認(rèn)管理器每個(gè)區(qū)域只能放一個(gè)組件。如果在一個(gè)區(qū)域中放入多個(gè)Component,后放入的Component會(huì)把前面的覆蓋BorderLayout()/ BorderLayout(int hgap,int vgap)BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.CENTER瘋狂軟
9、件 th和Center區(qū)域水平和Ce直調(diào)nter區(qū)域垂BorderLayout(con.)BorderLayout布局格式:當(dāng)改變?nèi)萜鞔笮r(shí) 當(dāng)某個(gè)區(qū)域沒有組件時(shí),它的空間會(huì)被自動(dòng)占滿。 North, Sou East, West調(diào)整整瘋狂軟件 NorthWestCenterEastSouthGridLayoutGridLayout將Component配置在縱橫格線分割的格子中,從左到右,從上到下;構(gòu)造器:GridLayout()/ GridLayout(int rows,int cols)/ GridLayout(int rows,in
10、t cols,int hgap,int vgap)瘋狂軟件 GridBagLayoutGridBagLayout布局管理器是功能最強(qiáng)大,但也是最復(fù)雜的布局管理器,與GridLayout布局管理器不同的是:在GridBagLayout布局管理器中,一個(gè)組件可以跨越一個(gè)或多個(gè)網(wǎng)格,并可以設(shè)置各網(wǎng)格的大小互不相同,從而增加了布局的靈活性。當(dāng)窗口的大小發(fā)生變化時(shí),GridBagLayout 布局管理也可以準(zhǔn)確地控制窗口各部分的反應(yīng)。為了處理GridBagLayout中GUI組件的大小、跨越性,Java提供了GridBagConstraints對(duì)象,該對(duì)象與特定的GUI組件關(guān)
11、聯(lián),用于控制該GUI組件的大小、跨越性。瘋狂軟件 CardLayout將加入到Container中的Component看成一疊卡片, 只有最上面的那個(gè)Componet才可見構(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)瘋狂軟件 www
12、.CardLayout將加入到Container中的Component看成一疊卡片, 只有最上面的那個(gè)Componet才可見構(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)瘋狂軟件 絕對(duì)定位Java也提供了那種拖控件
13、的方式,即Java也可以對(duì)GUI組件進(jìn)行絕對(duì)定位。在Java 容器中采用絕對(duì)定位的步驟如下: (1)將Container的布局管理器設(shè)成null:setLayout(null)。 (2)往容器上加組件的時(shí)候,先調(diào)用setBounds()或setSize()方法來先設(shè)置組件的大小、位置?;蛘咧苯觿?chuàng)建GUI組件時(shí)通過構(gòu)造參數(shù)指定該組件的大小、位置,然后將該組件添加到容器中。瘋狂軟件 BoxLayout布局管理器GridBagLayout布局管理器雖然功能強(qiáng)大,但它是在太復(fù)雜了,以Swing引入了一個(gè)新的布局管理器:BoxLayout。它保留了GridBagLayout的
14、很多優(yōu)點(diǎn),但是卻沒那么復(fù)雜。BoxLayout可以在垂直和水平兩個(gè)方向上擺放GUI組件, BoxLayout提供了一個(gè)如下的簡(jiǎn)單構(gòu)造器:BoxLayout(Container target, int axis):指定創(chuàng)建基于target容器的BoxLayout布局管理器,該布局管理器里組件案axis方向排列。其中axis有BoxLayout.X_AXIS(橫向)和BoxLayout.Y_AXIS(縱向)兩個(gè)方向。瘋狂軟件 基本組件Button:按鈕,可接收單擊操作。 Canvas: 用 于 繪 圖 的 畫 布 。 Checkbox:復(fù)選框組件(也可變成單選框組件)。
15、CheckboxGroup:用于將多個(gè)Checkbox組件組合成一組,一組Checkbox組件將只有一個(gè)可以被選中,即全部變成單選框組件。 Choice:下拉式選擇框組件。Frame:窗口,在GUI程序里通過該類創(chuàng)建窗口。Label:標(biāo)簽類,用于放置提示性文本。List。列表框組件,可以添加多項(xiàng)條目。Panel:不能單獨(dú)存在基本容器類,必須放到其他容器中。 Scrollbar:滑動(dòng)條組件。如果需要用戶輸入位于某個(gè)范圍的值,就可以使用滑動(dòng)條組件。如調(diào)色板中設(shè)置RGB的三個(gè)值所用的滑動(dòng)條。當(dāng)創(chuàng)建一個(gè)滑動(dòng)條時(shí),必須指定它的方向、初始值、滑塊的大小、最小值和最大值。ScrollPane:帶水平及垂直滾
16、動(dòng)條的容器組件。TextArea: 多 行 文 本 域 。 TextField:?jiǎn)涡形谋究颉/偪褴浖?對(duì)話框?qū)υ捒蚴荳indow類的子類,是一個(gè)容器類,屬于特殊組件。對(duì)話框也是可以獨(dú)立存在的頂級(jí)窗口,因此用法與 普通窗口用法幾乎完全一樣。但對(duì)話框有兩點(diǎn)需要注意:對(duì)話框必須依賴于其他窗口,就是必須有一個(gè)parent窗口。對(duì)話框有非模式(non-modal)和模式(modal)兩種,當(dāng)某個(gè)模式對(duì)話框開之后,該模式對(duì)話框總是位于它依賴的窗口之上;在模式對(duì)話框被關(guān)閉之前,它依賴的窗口無法獲得焦點(diǎn)。對(duì)話框有多個(gè)重載的構(gòu)造器,它的構(gòu)造器可能有如下三個(gè)參數(shù):owner:指定該對(duì)話
17、框所依賴的窗口,既可以是窗口,也可以是對(duì)話框。title:指定該對(duì)話框的窗口標(biāo)題。 modal:指定該對(duì)話框是否是模式的,可以是true或false。瘋狂軟件 FileDialogDialog類還有一個(gè)子類:FileDialog,它代表一個(gè)文件對(duì)話框,用于打開、或者保存 文件,F(xiàn)ileDialog也提供了幾個(gè)構(gòu)造器,分別可支持parent、title和mode三個(gè)構(gòu)造參數(shù), 其中parent、title指定文件對(duì)話框的所屬父 窗口和標(biāo)題,而mode用于指定該窗口用于 打開文件、或保存文件,該參數(shù)支持如下 兩個(gè)參數(shù)值:FileDialog.LOAD、FileDialo
18、g.SAVE。瘋狂軟件 處理(Event) 一個(gè)對(duì)象,它描述了發(fā)生什么事情源(Event source) 產(chǎn)生的組件處理方法(Event handler) 能夠接收、解析和處理的方法類對(duì)象、實(shí)現(xiàn)和用戶交互瘋狂軟件 AWT的處理方式處理(delegation)個(gè)別的組處理委托給特定的對(duì)象,當(dāng)委派式件將整個(gè)該組件發(fā)生指定的時(shí),就所委托。這傾聽對(duì)的對(duì)象,有這個(gè)對(duì)象來處理這個(gè)個(gè)受委托處理的對(duì)象稱為象(event listener)每個(gè)組件均可以針對(duì)特定的指定一個(gè)傾聽對(duì)或多個(gè)傾聽對(duì)象,由這些象負(fù)責(zé)處理瘋狂軟件 AWT分類
19、EventObjectActionEventAWTEventTextEventItemEventAdjustmentEventComponentEventContainerEventWindowEventPaintEventFocusEventInputEventKeyEventMouseEvent瘋狂軟件 窗口當(dāng)一個(gè)窗口被激活、撤銷激活、打開、關(guān)閉、最大化、最小化時(shí),發(fā)生窗口。從WindowEvent類中創(chuàng)建的對(duì)象表示窗口。瘋狂軟件 不同類型的接口和方法瘋狂軟件 分類接口名方法ActionActionList
20、eneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)Mouse MotionMouseMotionListenermouseDragged(MouseEvent) mouseMoved(MouseEvent)MouseMouseListenermousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseClicked(MouseEvent) mouseExited(MouseEvent)KeyKe
21、yListenerkeyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvnet) focusLost(FocusEvent)不同類型的接口和方法瘋狂軟件 分類接口名方法AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent) compone
22、ntHidden(ComponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(Window
23、Event)ContainerContainerListenercomponentAdded(ContainerEvent) componentRemoved(ContainerEvent)TextTextListenertextValueChanged(TextEvent)適配器(Adapter)為簡(jiǎn)化編程,針對(duì)大多數(shù)定義了相應(yīng)的實(shí)現(xiàn)類-適配器類中,實(shí)現(xiàn)了相應(yīng)器接口適配器類,在器接口中所有的方法,但不做任何事情。在定義器類時(shí)就可以繼承適配器類,并只重寫所需要的方法。瘋狂軟件 處理類的形式利用內(nèi)部類來處理用內(nèi)部類處理定義一個(gè)器類直接在當(dāng)前類中處理瘋狂軟件 www.f
24、創(chuàng)建菜單創(chuàng)建一個(gè)菜單步驟:創(chuàng)建一個(gè)MenuBar對(duì)象,將其放置到菜單容器中(如Frame)創(chuàng)建若干個(gè)Menu對(duì)象,將其放置到MenuBar對(duì)象中創(chuàng)建若干個(gè)MenuItem對(duì)象,將其放置到Menu對(duì)象中MenuItem包括MenuItem:普通的菜單項(xiàng)CheckboxMenuItem:可以選擇的菜單項(xiàng)瘋狂軟件 右鍵菜單右鍵菜單使用PopupMenu對(duì)象表示,創(chuàng)建右鍵菜單的步驟如下:(1) 創(chuàng)建PopupMenu的實(shí)例。(2) 創(chuàng)建多個(gè)MenuItem實(shí)例,依次將這些實(shí)例加入PopupMenu中。(3) 將PopupMenu加入到目標(biāo)組件之中。瘋狂軟件
25、 在AWT中畫圖通常,創(chuàng)建Canvas類或Panel的子類,并覆蓋paint方法每當(dāng)組件出現(xiàn)時(shí)調(diào)用paint方法每個(gè)組件都有一個(gè)Graphics對(duì)象Graphics類實(shí)現(xiàn)了很多繪圖方法瘋狂軟件 AWT中的坐標(biāo)x軸(0,0)(x,y)軸瘋狂軟件 yGraphics類Graphics是一個(gè)抽象的畫筆對(duì)象,Graphics可以在組件上繪制豐富多彩的幾何圖形和位圖,Graphics類提供了如下幾個(gè)方法用于繪制幾何圖形和位圖:drawLine: 繪 制 直 線 。 drawString: 繪 制 字 符 串 。 draw
26、Rect: 繪 制 矩 形 。 drawRoundRect: 繪 制 圓 角 矩 形 。 drawOval: 繪 制 橢 圓 形 狀 。 drawPolygon: 繪 制 多 邊 形 邊 框 。 drawArc:繪制一段圓?。赡苁菣E圓的圓?。?。drawPolyline: 繪 制 折 線 。 fillRect: 填 充 一 個(gè) 矩 形 區(qū) 域 。 fillRoundRect:填充一個(gè)圓角矩形區(qū)域。fillOval: 填 充 橢 圓 區(qū) 域 。 fillPolygon:填充一個(gè)多邊形區(qū)域。fillArc:填充圓弧和圓弧兩個(gè)端點(diǎn)到中心連線所包圍的區(qū)域。drawImage:繪制位圖。瘋狂軟件 www
27、.BufferedImage實(shí)現(xiàn)類Image類代表了位圖,但它是一個(gè)抽象類,無法直接創(chuàng)建Image對(duì)象, 為此Java為它提供了一個(gè)BufferedImage實(shí)現(xiàn)類,它是一個(gè)可訪問圖 像數(shù)據(jù)緩沖區(qū)的Image實(shí)現(xiàn)類。該類提供了一個(gè)簡(jiǎn)單的構(gòu)造器,用于創(chuàng)建一個(gè)BufferedImage對(duì)象:BufferedImage(int width, int height, int imageType):創(chuàng)建指定大小、指定圖象類型的BufferedImage對(duì)象,其中imageType可以是BufferedImage.TYPE_INT_RGB、BufferedImage.TYPE_BYTE
28、_GRAY等值。除此之外,BufferedImage還提供了一個(gè)getGraphics()方法返回該對(duì)象的Graphics對(duì)象,從而允許通過該Graphics對(duì)象向Image中添加圖形。借助于BufferedImage的幫助,我們可以在AWT中實(shí)現(xiàn)緩沖技術(shù):當(dāng)我們需要向GUI組件上繪制圖形時(shí),不要直接繪制到該GUI組件上, 而是先將圖形繪制到BufferedImage對(duì)象中,然后再調(diào)用組件的drawImage一次性地將BufferedImage對(duì)象繪制到特定組件上。瘋狂軟件 ImageIO輸入/輸出位圖ImageIO類并不能支持讀寫全部格式的圖形文件,程序可以通過I
29、mageIO類的如下幾個(gè)靜態(tài)方法來訪問該類所支持讀寫的圖形文件格式:getReaderFileSuffixes():返回一個(gè)String 數(shù)組,該數(shù)組列出ImageIO所有能讀的圖形文件的文件后綴。getReaderFormatNames():返回一個(gè)String 數(shù)組,該數(shù)組列出ImageIO所有能讀的圖形文件的非正式格式名稱。static String getWriterFileSuffixes():返回一個(gè) String 數(shù)組,該數(shù)組列出ImageIO所有能寫的圖形文件的文件后綴。static String getWriterFormatNames():返回一個(gè)String 數(shù)組,該數(shù)組列出ImageIO所有能寫的圖形文件的非正式格式名稱。瘋狂軟件 剪貼板AWT支持兩種剪貼板:系統(tǒng)剪貼板和本地剪貼板,如果在同一個(gè)虛擬機(jī)的不同窗口之間進(jìn)行數(shù)據(jù)傳遞,則無需使用系統(tǒng)剪貼板,使用系統(tǒng)剪貼板就可以了。系統(tǒng)剪貼板則與運(yùn)行平臺(tái)無關(guān),可以傳輸任意格式的數(shù)據(jù)。瘋狂軟件 使用系統(tǒng)剪貼板Clipboard clipboard = Toolkit.getDefaultToolk
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2163-2024漆膜劃格器校準(zhǔn)規(guī)范
- 2024年度隔墻板市場(chǎng)推廣與銷售合同
- 2024年企業(yè)合規(guī)管理與風(fēng)險(xiǎn)評(píng)估服務(wù)合同
- 2024人工智能在金融服務(wù)中的應(yīng)用合同
- 2024年度品牌授權(quán)合同:知名品牌授權(quán)使用合同
- 句子改寫課件教學(xué)課件
- 2024年度云計(jì)算服務(wù)帶寬擴(kuò)展及維護(hù)合同
- 2024年度吊車保險(xiǎn)合同:保險(xiǎn)責(zé)任與賠償限額
- 2024中小企業(yè)貸款及還款細(xì)節(jié)合同
- 2024年應(yīng)急響應(yīng):消防設(shè)施建設(shè)與維護(hù)合同
- 新課標(biāo)下小學(xué)生運(yùn)算能力的培養(yǎng)研究的開題報(bào)告
- 餐飲行業(yè)初期投資預(yù)算分析
- 遼寧省重點(diǎn)高中沈陽市郊聯(lián)體2023-2024學(xué)年高三上學(xué)期期中生物試題(解析版)
- 剪映:手機(jī)短視頻制作-配套課件
- 西氣東輸二線25標(biāo)段山嶺隧道內(nèi)管道安裝技術(shù)
- 防校園欺凌-課件(共28張PPT)
- 第6章 智能網(wǎng)聯(lián)汽車測(cè)評(píng)技術(shù)
- 單向板結(jié)構(gòu)設(shè)計(jì)
- 普通高等學(xué)校學(xué)生轉(zhuǎn)學(xué)申請(qǐng)表
- 房租、水、電費(fèi)(專用)收據(jù)Excel模板
評(píng)論
0/150
提交評(píng)論