版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 主編 賈振華 2010年1月 JAVA 編 程 技 術(shù)圖形用戶界面(GUI)設(shè)計第8章java.awt 包 抽象窗口工具集AWT(Abstract Window Toolkit),Java 最早的用于編寫圖形節(jié)目應(yīng)用程序的開發(fā)包,Java進(jìn)行GUI設(shè)計的基礎(chǔ)。javax.swing 包 Swing組件存放在javax.swing包中。幾乎所有AWT組件對應(yīng)有新功能更強(qiáng)的Swing組件。所以說Swing是為了解決 AWT 存在的問題而新開發(fā)的包,它以 AWT 為基礎(chǔ),另外還加入了一些全新的組件。Swing組件在名稱上前面多了一個字母“J” 。 JAVA GUI 包 和 簡 單 GUI 程 序A
2、WT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫,這個工具包提供了一套與本地圖形界面進(jìn)行交互的接口。AWT 中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對應(yīng)的關(guān)系,我們把它稱為peers。 也就是說,當(dāng)我們利用 AWT 來構(gòu)件圖形用戶界面的時候,我們實際上是在利用操作系統(tǒng)所提供的圖形庫。由于不同操作系統(tǒng)的圖形庫所提供的功能是不一樣的,在一個平臺上存在的功能在另外一個平臺上則可能不存在。為了實現(xiàn)Java語言所宣稱的一次編譯,到處運行的概念,AWT 不得不通過犧牲功能來實現(xiàn)其平臺無關(guān)性,也就是說,AWT 所提供的圖形功能是各種通用型操作系統(tǒng)所提供的圖形功能的交
3、集。由于AWT 是依靠本地方法來實現(xiàn)其功能的,我們通常把AWT控件稱為重量級控件。 JAVA AWT 的 理 解Swing 是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),它提供了AWT 所能夠提供的所有功能,并且用純粹的Java代碼對AWT 的功能進(jìn)行了大幅度的擴(kuò)充。例如說并不是所有的操作系統(tǒng)都提供了對樹形控件的支持, Swing 利用了AWT 中所提供的基本作圖方法對樹形控件進(jìn)行模擬。由于 Swing 控件是用100%的Java代碼來實現(xiàn)的,因此在一個平臺上設(shè)計的樹形控件可以在其他平臺上使用。由于在Swing 中沒有使用本地方法來實現(xiàn)圖形功能,我們通常把Swing控件稱為輕量級控件。 JAV
4、A Swing 的 理 解AWT和Swing之間的基本區(qū)別:AWT 是基于本地方法的C/C+程序,其運行速度比較快;Swing是基于AWT 的Java程序,其運行速度比較慢。對于一個嵌入式應(yīng)用來說,目標(biāo)平臺的硬件資源往往非常有限,而應(yīng)用程序的運行速度又是項目中至關(guān)重要的因素。在這種矛盾的情況下,簡單而高效的AWT 當(dāng)然成了嵌入式Java的第一選擇。而在普通的基于PC或者是工作站的標(biāo)準(zhǔn)Java應(yīng)用中,硬件資源對應(yīng)用程序所造成的限制往往不是項目中的關(guān)鍵因素,所以在標(biāo)準(zhǔn)版的Java中則提倡使用Swing, 也就是通過犧牲速度來實現(xiàn)應(yīng)用程序的功能。 JAVA AWT 和 Swing 的 區(qū) 別 JAV
5、A AWT 和 Swing 的 關(guān) 系MVC即:Model(模型)、View(視圖)和Controller(控制)。這個模式認(rèn)為,程序不論簡單或復(fù)雜,從結(jié)構(gòu)上看,都可以分成三層。 1)最上面的一層,是直接面向最終用戶的視圖層(View)。它是提供給用戶的操作界面,是程序的外殼。 2)最底下的一層,是核心的數(shù)據(jù)層(Model),也就是程序需要操作的數(shù)據(jù)或信息。 3)中間的一層,就是控制層(Controller),它負(fù)責(zé)根據(jù)用戶從視圖層輸入的指令,選取數(shù)據(jù)層中的數(shù)據(jù),然后對其進(jìn)行相應(yīng)的操作,產(chǎn)生最終結(jié)果。這三層是緊密聯(lián)系在一起的,但又是互相獨立的,每一層內(nèi)部的變化不影響其他層。每一層都對外提供接口
6、(Interface),供上面一層調(diào)用。這樣一來,軟件就可以實現(xiàn)模塊化,修改外觀或者變更數(shù)據(jù)都不用修改其他層,大大方便了維護(hù)和升級。 JAVA 淺 談 MVC 模 式用Windows的計算器小程序為例,解釋一下MVC模式。在這個計算器程序中,外部的那些按鈕和最上面的顯示條,就是視圖層,那些需要運算的數(shù)字就是數(shù)據(jù)層,執(zhí)行加減乘除的那些內(nèi)部運算步驟就是控制層。每一層執(zhí)行不同的功能,整個程序的結(jié)構(gòu)非常清楚。我們擴(kuò)大一點想象會發(fā)現(xiàn),很多程序本質(zhì)上都是這種模式:對外提供一組觸發(fā)器( Windows的計算器中是按鈕),執(zhí)行一些內(nèi)部操作,最后返回結(jié)果。因此,MVC模式的應(yīng)用是非常廣泛的。 JAVA 淺 談
7、MVC 模 式j(luò)ava.awt包提供了基本的java程序的GUI設(shè)計工具。主要包括下述三個概念: 組件 - Component 容器 - Container 布局管理器 - LayoutManager JAVA GUI 設(shè) 計 工 具 JAVA 圖 形 化 設(shè) 計 步 驟第一步:創(chuàng)建頂層容器對應(yīng)于程序的初始顯現(xiàn)窗口,窗口中放入其它菜單、工具欄、文本框、按鈕等組件頂層容器圖形化界面顯示的基礎(chǔ),其它所有的組件(控件)都是直接或間接顯示在頂層容器中的。在java中頂層容器有三種,分別是JFrame(框架窗口,即通常的窗口)、JDialog(對話框)、JApplet(用于設(shè)計嵌入在網(wǎng)頁中的java小程
8、序)。頂層容器是容納其它組件的基礎(chǔ),即設(shè)計圖形化程序必須要有頂層容器。 JAVA 圖 形 化 設(shè) 計 步 驟 JAVA JFrame 框 架 窗 口 的 使 用 JAVA JFrame 框 架 窗 口 的 使 用 JAVA JFrame 框 架 窗 口 的 使 用第二步:創(chuàng)建中間容器、組件對應(yīng)于程序中出現(xiàn)的菜單、工具欄(中間容器)、文本框、按鈕、單選框、復(fù)選框等控件。有很多Swing組件可以使用,見后面的Swing UI組件表。 JAVA 圖 形 化 設(shè) 計 步 驟Java中間容器是可以包含其它相應(yīng)組件的容器,但是中間容器和組件一樣,不能單獨存在,必須依附于頂層容器。常見的中間容器有:JPan
9、el:最靈活、最常用的中間容器。JScrollPane:與 JPanel 類似,但還可在大的組件或可擴(kuò)展組件周圍提供滾動條。JTabbedPane:包含多個組件,但一次只顯示一個組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件。 JAVA 圖 形 化 設(shè) 計 步 驟第三步:將組件加入容器在java中創(chuàng)建組件后,還需要將組件放入相應(yīng)的容器,才能在頂層容器,如窗口中顯示出組件。第四步:設(shè)置容器內(nèi)組件的位置組件添加到容器中,還必須設(shè)置好組件的顯示位置,一般有兩種方法來設(shè)置組建的顯示位置,一是按照與容器的相對距離(以像素為單位),精確固定控件的位置;二是用布局管理器來管理組件在
10、容器內(nèi)的位置。 JAVA 圖 形 化 設(shè) 計 步 驟第五步:處理組件所產(chǎn)生的事件即用戶執(zhí)行選擇菜單、單擊按鈕等操作時,就要執(zhí)行相應(yīng)的命令,進(jìn)行相關(guān)的程序處理,這就需要設(shè)置組件的事件。 JAVA 圖 形 化 設(shè) 計 步 驟 JAVA AWT 類 的 層 次 結(jié) 構(gòu)在AWT類層次結(jié)構(gòu)的頂部是Component類。Component類是一個封裝了一個可視組件的 所有屬性的抽象類。在屏幕上顯示的所有用于用戶交互的用戶界面元素都是Component類 的子類。這個類定義了一百多個用于事件管理的公共方法,這些事件包括鼠標(biāo)或鍵盤的輸 入,窗口位置或大小的改變以及重繪窗口。一個Component對象可以保存當(dāng)
11、前的前景色、背景色以及被選 擇的文本的字體。 JAVA 組 件(Component)Container類是Component類的子類。這個類有一些附加方法,允許別的Component對象 嵌套在Container類的對象中。當(dāng)然,其他的Container對象可以被存放在一個Container對象中(因為它們也是Component類的實例)。這就形成了一個多層包容機(jī)制。容器主要負(fù)責(zé) 布置它所包含的組件的位置。而它是通過使用一些設(shè)計管理器來完成這個功能的。 JAVA 容 器(Container)Panel類是Container類的一個具體的子類。它沒有添加任何新的方法;它只是簡單的實現(xiàn)了Conta
12、iner類。一個Panel對象可以被看作是一個遞歸嵌套的具體的屏幕組件。Panel類是Applet類的父類。當(dāng)屏幕輸出直接傳遞給一個小應(yīng)用程序時,它將在一個Panel對象的表面被畫出。實際上,一個Panel對象是一個不包含標(biāo)題欄、菜單欄以及邊框的窗口。這就是為什么在瀏覽器中運行一個小應(yīng)用程序時,你看不見標(biāo)題欄、菜單欄以及邊框的原因。而當(dāng)你用小應(yīng)用程序查看器來運行一個小應(yīng)用程序時,小應(yīng)用程序查看器提供了標(biāo)題和邊框。 JAVA 面 板(Panel)其它的組件可以通過調(diào)用Panel類的add()方法被加入到一個Panel對象中,這個方法是從Container類繼承來的。一旦這些組件被加入,那么通常就
13、可以通過調(diào)用在Component類中定義了的setLocation(),setSize()以及setBounds()方法來改變組件的位置和大小。 JAVA 面 板(Panel)窗口類產(chǎn)生一個頂級窗口(Window)。頂級窗口不包含在任何別的對象中,它直接出現(xiàn)在桌面上。通常,不會直接產(chǎn)生Window對象。相反,我們常常使用Window類的子類,這就是Frame類。 JAVA 窗 口(Window)Frame類封裝了窗口通常所需要的一切組件,擁有標(biāo)題欄、菜單欄、邊框等等。我們經(jīng)常利用Frame類在應(yīng)用程序中創(chuàng)建頂級或子窗口,在小應(yīng)用程序之中創(chuàng)建子窗口。如果你在一個小應(yīng)用程序中創(chuàng)建了一個Frame對
14、象,它將包含一個例如“JavaAppletWindow”的警告消息給用戶,表示一個小應(yīng)用程序窗口已經(jīng)被創(chuàng)建。這個消息警告用戶,所看見的窗口是由小應(yīng)用程序啟動的,而不是被運行在他們機(jī)器上的軟件所啟動。 JAVA 框 架(Frame)雖然畫布不是小應(yīng)用程序和frame窗口的層次結(jié)構(gòu)的一部分,但是Canvas這種類型的窗口是很有用的。Canvas類封裝了一個你可以用來繪制的空白窗口。 JAVA 畫 布(Canvas)簡單地說,通過創(chuàng)建一個frame類的實例來就能創(chuàng)建一個窗口,但是可能很少會這樣做,因為對于這樣的窗口沒有什么可以做的。例如,不能接受和處理在這個窗口中發(fā)生的事件或者不能簡單的輸出信息給它
15、。大多數(shù)情況我們是創(chuàng)建一個frame類的子類。在小應(yīng)用程序中創(chuàng)建一個新的基于frame的窗口是很容易的。首先,創(chuàng)建一個frame類的子類。接下來,重載任何一個標(biāo)準(zhǔn)窗口方法,比如init()方法,start()方法,stop()方法和paint()方法。最后,實現(xiàn)windowListener監(jiān)聽器接口的windowClosing()方法,在這個方法中,當(dāng)窗口被關(guān)閉時,調(diào)用setVisible(false)方法將窗口從屏幕中除去。 JAVA 創(chuàng) 建 窗 口Swing體系結(jié)構(gòu)最初Smalltalk系統(tǒng)的UI工具使用所謂的模型視圖控制(MVC)模式,MVC引入這樣一個概念:數(shù)據(jù)源應(yīng)該同屏幕展現(xiàn)分開。這
16、是一個優(yōu)秀的體系設(shè)計結(jié)構(gòu),能促進(jìn)代碼重用和程序框架。Swing使用的是一個變體的MVC架構(gòu)。典型的Swing GUI組件包括至少三個對象:一個Component,一個Model和一個UI Delegate,在這個框架中,Model負(fù)責(zé)存儲數(shù)據(jù),UI Delegate負(fù)責(zé)從Model獲取數(shù)據(jù)并渲染到屏幕上去,Component通常協(xié)調(diào)Model和Delegate之間的操作,并同時負(fù)責(zé)將 Swing嵌入到AWT窗口系統(tǒng)中。注意,UI Delegate對象可以在運行的時候動態(tài)替換,這就使Swing具備了可插拔的外觀(Pluggable Look-And-Feel, PLAF)。 JAVA Swing
17、 體 系 結(jié) 構(gòu)Swing提供4個頂層容器JFrame, JDialog, JApplet,JWindow,如果是桌面應(yīng)用,則GUI必須要有一個JFrame,如果是瀏覽器應(yīng)用,則GUI必須要有一個JApplet。其他Swing組件,或自定義開發(fā)的Swing組件都擴(kuò)展自 ponent,并且其實例要存在于頂層容器的層次樹中。 JAVA Swing 開 發(fā) GUI 的 基 本 約 定 JAVA ponent(組件層次圖)與AWT組件不同,Swing組件不能直接添加到頂層容器中,它必須添加到一個與Swing頂層容器相關(guān)聯(lián)的內(nèi)容面板(content pane)上。內(nèi)容面板是頂層容器包含的一個普通容器,它
18、是一個輕量級組件?;疽?guī)則如下: (1)把Swing組件放入一個頂層Swing容器的內(nèi)容面板上 (2)避免使用非Swing的重量級組件。 JAVA 使 用 Swing 的 基 本 規(guī) 則 根面板由一個玻璃面板(glassPane)、一個內(nèi)容面板(contentPane)和一個可選擇的菜單條(JMenuBar)組成,而內(nèi)容面板和可選擇的菜單條放在同一分層。玻璃面板是完全透明的,缺省值為不可見,為接收鼠標(biāo)事件和在所有組件上繪圖提供方便。根面板提供的方法: Container getContentPane(); /獲得內(nèi)容面板 setContentPane(Container); /設(shè)置內(nèi)容面 JM
19、enuBar getMenuBar( ); /活動菜單條 setMenuBar(JMenuBar); /設(shè)置菜單條 JLayeredPane getLayeredPane(); /獲得分層面板 setLayeredPane(JLayeredPane); /設(shè)置分層面板 Component getGlassPane(); /獲得玻璃面板 setGlassPane(Component); /設(shè)置玻璃面板 JAVA 根 面 板面板(JPanel) 面板(JPanel)是一個輕量容器組件,用法與Panel相同,用于容納界面元素,以便在布局管理器的設(shè)置下可容納更多的組件,實現(xiàn)容器的嵌套。Jpanel,
20、JscrollPane, JsplitPane, JinteralFrame都屬于常用的中間容器,是輕量組件。Jpanel的缺省布局管理器是FlowLayout。分層面板(JLayeredPane) Swing提供兩種分層面板:JlayeredPane和JDesktopPane。 JDesktopPane是JLayeredPane的子類,專門為容納內(nèi)部框架(JInternalFrame)而設(shè)置。向一個分層面板種添加組件,需要說明將其加入哪一層,指明組件在該層中的位置:add(Component c, Integer Layer, int position)。 JAVA 面 板 和 分 層 面
21、板用getContentPane( )方法獲得JFrame的內(nèi)容面板,再對其加入組件:frame.getContentPane().add( ponent)建立一個Jpanel或 JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板: Jpanel contentPane=new Jpanel( ); /把其它組件添加到Jpanel中; frame.setContentPane(contentPane); /把contentPane對象設(shè)置成為frame的內(nèi)容面板 JAVA Jframe 添加組件的兩種方式 Jav
22、a 最新的事件處理方法是基于授權(quán)事件模型 當(dāng)事件來源對象因用戶的操作(鼠標(biāo)或鍵盤),系統(tǒng)會自動觸發(fā)此事件類對象E,并通知所授權(quán)的事件監(jiān)聽者A(若來源對象已向A注冊),事件監(jiān)聽者A中有處理各種事件的方法(事件處理者1n)便會處理此事件E的各種狀況 。 JAVA 事 件 處 理 模 型事件類說明事件源ActionEvent 通常按下按鈕,雙擊列表項或選中一個菜單項時,就會生成此事件。 Button、List、MenuItem、TextField AdjustmentEvent 操縱滾動條時會生成此事件。 Scrollbar ComponentEvent 當(dāng)一個組件移動、隱藏、調(diào)整大小或成為可見時會生成此事件。Component ItemEvent 單擊復(fù)選框或列表項時,或者當(dāng)一個選擇框或一個可選菜單的項被選擇或取消時生成此事件。 Checkbox、CheckboxMenuItem、Choice、List FocusEvent 組件獲得或失去鍵盤焦點時會生成此事件。 Component JAVA 事 件 層 次 結(jié) 構(gòu)事件類說明事件源KeyEvent 接收到鍵盤輸入時會生成此事件。 Component MouseEvent 拖動、移動、單擊、按下或釋放鼠標(biāo)或在鼠標(biāo)進(jìn)入或退出一個組
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 魯人版道德與法治九年級上冊11.1《合同是當(dāng)事人之間的法律》聽課評課記錄
- 滬教版數(shù)學(xué)九年級下冊27.1《圓的基本性質(zhì)》聽評課記錄
- 人教版地理七年級下冊第三節(jié)《撒哈拉以南的非洲》聽課評課記錄1
- 人教版七年級數(shù)學(xué)下冊 聽評課記錄5.1.3 第1課時《同位角、內(nèi)錯角、同旁內(nèi)角》
- 蘇科版數(shù)學(xué)七年級下冊聽評課記錄7.5多邊形的內(nèi)角和與外角和
- 聽評課記錄表8篇二年級
- 【部編版】道德與法治九年級下冊2.1《推動和平與發(fā)展》聽課評課記錄
- 湘教版數(shù)學(xué)七年級下冊《相交直線所成的角》聽評課記錄
- 生產(chǎn)計劃外包合同(2篇)
- 獨生子女合同
- 阿基米德課件
- 2024年步步高高考英語大一輪復(fù)習(xí)(新人教版)基礎(chǔ)知識默寫本必修第一冊含答案
- 盤錦市重點中學(xué)2024年中考英語全真模擬試卷含答案
- 2024年《幼兒教師職業(yè)道德》教案
- 平安產(chǎn)險湖南省商業(yè)性雞蛋價格指數(shù)保險條款
- 石家莊市第四十中學(xué)2021-2022學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試題
- 《共演戰(zhàn)略》分析工具
- 2023年煙花爆竹安全作業(yè)真題模擬匯編(共718題)
- 揚州市古樹名木匯編
- 提高臥床患者踝泵運動的執(zhí)行率
- 裝配式建筑預(yù)制構(gòu)件運輸與堆放-預(yù)制構(gòu)件運輸基本要求
評論
0/150
提交評論