九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

第7章 圖形用戶界面

  • 資源ID:65351499       資源大?。?span id="24d9guoke414" class="font-tahoma">1.21MB        全文頁數(shù):68頁
  • 資源格式: DOC        下載積分:16積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要16積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

第7章 圖形用戶界面

第7章 圖形用戶界面圖形用戶界面(Graphics User Interface, GUI),是指用圖形的方式實(shí)現(xiàn)用戶與計(jì)算機(jī)之間的交互。它通過圖形的方式,借助菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便地向計(jì)算機(jī)發(fā)出命令,啟動(dòng)程序,并將程序的運(yùn)行結(jié)果同樣以圖形的形式顯示給用戶。GUI通常由GUI組件(有時(shí)稱為控件或窗口小部件)構(gòu)成。GUI組件是用戶通過鼠標(biāo)、鍵盤或其它諸如聲音識(shí)別等輸入形式與應(yīng)用程序進(jìn)行交互的對(duì)象。學(xué)習(xí)Java的GUI設(shè)計(jì)就必須了解幾個(gè)概念:容器、組件、容器布局、事件處理機(jī)制。本章將通過實(shí)例剖析Swing常用組件的功能、如何在組件中繪圖、各種事件的應(yīng)用、以及各種布局的設(shè)置等問題。7.1 Java GUI概述隨著JDK1.2(現(xiàn)改名為Java 2)的發(fā)布,Java的API有兩套完整的按鈕、菜單、文本域以及其它GUI組件:抽象窗口工具集(Abstract Window Toolkit ,AWT)和Swing組件集。AWT從JDK1.0開始就是Java的一部分,由AWT擴(kuò)展而來的Swing組件集,是Java1.2引入的新的GUI組件庫。二者均包括在JFC(Java Foundation Classes,Java基礎(chǔ)類)中,JFC是一組支持在流行平臺(tái)的客戶端應(yīng)用程序中創(chuàng)建GUI和圖形功能的Java類庫,作為J2SE的一個(gè)有機(jī)部分,主要包含五個(gè)部分,即AWT、Java2D、Accessibility、Drag&Drop、Swing,它是一套幫助開發(fā)人員設(shè)計(jì)復(fù)雜應(yīng)用程序的開發(fā)包。7.1.1 AWT與SwingAWT是Java2版本之前的Java平臺(tái)提供的一套圖形用戶界面組件類型。AWT庫最重要的特征之一是,它與運(yùn)行Java程序的計(jì)算機(jī)窗口系統(tǒng)(經(jīng)常被稱作本地窗口系統(tǒng),native windowing system)底層相結(jié)合。AWT組件建立在對(duì)等模型(peer model)的基礎(chǔ)上。每個(gè)AWT組件有一個(gè)相應(yīng)的用本地系統(tǒng)的代碼編寫的對(duì)等類,對(duì)等類充當(dāng)Java代碼與本地窗口系統(tǒng)之間的接口,對(duì)等類里的方法是用本地代碼編寫的。例如,若要顯示Button類型的對(duì)象時(shí),需用java.awt.Button類,它有一個(gè)名為java.awt.peer.Button的對(duì)等類,在運(yùn)行微軟的Windows 操作系統(tǒng)的計(jì)算機(jī)上,該Button對(duì)象將具有與其它Windows應(yīng)用程序相同的外觀和感覺;同樣,在運(yùn)行Apple公司的Mac OS操作系統(tǒng)的計(jì)算機(jī)上,該Button對(duì)象將具有與其它Macintosh應(yīng)用程序相同的外觀和感覺。因此,AWT組件天生就是平臺(tái)相關(guān)的,AWT組件被認(rèn)為是重量級(jí)組件,它們直接映射到本地組件,需要由本地窗口系統(tǒng)提供資源。注意:本地方法封裝了用非Java語言(通常是C或者C+)編寫的代碼的調(diào)用,使JVM的功能獲得擴(kuò)展。Swing組件從根本上來說建立在AWT上,它的四個(gè)頂層的窗口類(JApplet, JDialog, JFrame與JWindow)是由AWT重量級(jí)組件派生而來,如圖7.1所示。它們本身也依賴于本地窗口,除此以外,所有Swing組件都是輕量級(jí)組件。Swing的一個(gè)顯著特點(diǎn)是用Swing實(shí)現(xiàn)的圖形界面外觀可以按需更換,而無需重寫任何代碼。這就讓Swing程序能自動(dòng)適應(yīng)于它所運(yùn)行的計(jì)算機(jī)的常規(guī)風(fēng)格和外觀,不需要程序員為特定的計(jì)算機(jī)開發(fā)特定的界面。事實(shí)上,這些外觀不限于常見的幾種機(jī)器,Swing可以開發(fā)新的外觀風(fēng)格。Swing中內(nèi)置了幾個(gè)觀感包。例如,javax.swing.plaf.motif包里有實(shí)現(xiàn)Motif界面的類。Motif界面是一種常用的基于UNIX的界面。這些類知道如何畫出每個(gè)組件,也知道如何響應(yīng)鼠標(biāo)、鍵盤以及其它和這些組件聯(lián)系在一起的事件。javax.swing.plaf.windows包則負(fù)責(zé)實(shí)現(xiàn)Windows風(fēng)格的界面。Java缺省的設(shè)計(jì)風(fēng)格是“Java外觀”(被稱為“Metal”),它獨(dú)立于任何一種窗口系統(tǒng)的Java外觀。圖7.1 AWT與Swing頂層窗口類之間的關(guān)系Swing改善了AWT包沒有彈性、缺乏效率的缺點(diǎn),提供了更豐富的視覺感受,人們?cè)絹碓蕉嗟厥褂肧wing組件構(gòu)建圖形用戶界面,在本書中給出的有關(guān)GUI程序中均使用Swing組件。7.1.2 Swing組件輕量級(jí)組件不是依靠本地組件來支持它的顯示,而是完全由Java代碼來繪制并顯示。Swing平臺(tái)無關(guān)的觀感,是通過把所有負(fù)責(zé)畫出一個(gè)組件的代碼從組件中抽出來形成一個(gè)單獨(dú)的類而實(shí)現(xiàn)的。例如,除了定義按鈕控件的JButton類之外,還有一個(gè)單獨(dú)的類負(fù)責(zé)把按鈕在屏幕上畫出來。畫圖的這個(gè)類將控制按鈕的顏色、形狀以及其它外面上的特征。構(gòu)建輕量級(jí)組件的一種方法是擴(kuò)展抽象的java.awt.Component 類,然后改寫它的paint()方法:public class LightWeightButton extends Componentpublic void paint(Graphics g)/*在此寫繪制組件的Java代碼*/抽象類JComponent是能夠出現(xiàn)在屏幕上的大多數(shù)組件的父類。Java GUI的基本組件都是JComponent類的子類,因此,每個(gè)組件都繼承了JComponent的所有方法和數(shù)據(jù)字段。JComponent直接從Container類派生而來,它和它的所有Swing子類都是輕量級(jí)組件(見圖7.2)。圖7.2 Swing部分輕量級(jí)組件Swing提供了若干包,在程序中,若使用Swing必須導(dǎo)入javax.swing包。swing包是Swing提供的最大包,它包含將近100個(gè)類和25個(gè)接口,幾乎所有的Swing組件都在swing包中。Swing組件從功能上可分為容器組件和原子組件。又可細(xì)分為:頂層容器、中間層容器、特殊容器、基本組件、不可編輯組件以及可編輯組件,如表7.1所示。原子組件必須加在容器組件中,容器組件用來容納其它容器組件或原子組件,并在其可視區(qū)域內(nèi)顯示這些組件。以下稱容器組件為容器,原子組件為組件。表7.1 Swing組件分類表GUI類別組件Swing類名基本組件按鈕JButton, JCheckBox, JRadioButton組合框JComboBox列表JList菜單JMenu, JMenuBar, JMenuItem, JPopupMenu滑塊JSlider工具欄JToolBar文本區(qū)JTextField, JPasswordField, JTextArea, JFormattedTextField不可編輯的顯示組件標(biāo)簽JLabel工具提示JToolTip進(jìn)度條JProgressBar可編輯的顯示組件表JTable文本JTextPane, JEditorPane樹JTree顏色選擇器JColorChooser文件選擇器JFileChooser數(shù)值選擇器JSpinner頂層容器窗體JFrame,JWindowappletJApplet對(duì)話框JDialog,JOptionPane中間層容器面板JPanel滾動(dòng)窗格JScrollPane, JScrollBar拆分窗格JSplitPane索查標(biāo)簽窗格JTabbedPane特殊容器內(nèi)部窗體JInternalFrame分層窗格JLayeredPane根窗格JRootPane7.1.3 Swing容器AWT中的Container類是容器組件的超類,其目的是容納其它若干組件。一個(gè)窗口實(shí)際上指的是屏幕上的一個(gè)矩形區(qū)域,允許程序員將若干獨(dú)立的組件作為一個(gè)整體處理。我們不能直接顯示組件,而是需要把它們加到容器中,由容器進(jìn)行顯示。容器也提供一些方法,用于獲取和設(shè)置許多屬性、增加和從自身中刪除組件等。在屏幕上顯示容器之前,必須調(diào)用容器的pack()方法,或者設(shè)置其初始尺寸。設(shè)置尺寸時(shí)可以使用容器的setSize方法:public void setSize(int width,int height)其中的參數(shù)以像素(屏幕上的點(diǎn))為單位。由于輕量級(jí)組件和重量級(jí)組件之間的差別,為使輕量級(jí)組件能夠正確地工作,必須使用Swing容器容納Swing組件。Swing容器按其用途分為頂層容器、中間層容器以及特殊容器。頂層容器(Top Level Container)是一個(gè)窗口容器對(duì)象,在這樣的一個(gè)對(duì)象里可以再加入其它的窗口對(duì)象。JFrame、JApplet、JDialog、JWindow等就可以作為頂層容器,其余的Swing組件都必須依附在此四組件之一上才能顯示出來。容器本身具有層次性,每一層都是一種特殊容器,這些特殊容器實(shí)際上是在GUI上起特殊作用的中間層。Swing容器具有獲取和調(diào)整這些面板層的方法。在簡(jiǎn)單編程過程中主要涉及到將組件加到容器的內(nèi)容面板中。Swing容器的層次結(jié)構(gòu)如圖7.3所示。JFrame JDialog JApplet JWindowJLayeredPaneJRootPaneJContentPaneJGlassPaneJMenuBar圖7.3 Swing容器層次結(jié)構(gòu)(1) 根面板JRootPane根面板是頂層容器中所包含的最內(nèi)層,四個(gè)頂層容器均實(shí)現(xiàn)RootPaneContainer這個(gè)接口,此接口定義了各種容器取得與設(shè)置。根面板并不是真實(shí)的容器,它是由層次面板(JLayeredPane)與玻璃面板(JGlassPane)所組成,不能在JRootPane上加入任何的組件,因?yàn)樗皇且粋€(gè)虛擬的容器,通常無法在這一層做操作與處理。若要在最上層組件上加入組件,必須加在JLayeredPane或是JLayeredPane里的內(nèi)容面板上。需要注意的是,只有頂層容器才有根面板,其它中間層容器沒有根面板。(2) 層次面板JLayeredPaneJLayeredPane用于管理JMenuBar和內(nèi)容面板JContentPane,并維護(hù)一個(gè)層次疊放順序(Z-order)標(biāo)記數(shù)據(jù),可以對(duì)加入在層次面板中的對(duì)象設(shè)定層次,而不會(huì)被內(nèi)容面板中的對(duì)象屏蔽。一般程序會(huì)提供良好的Z-order自動(dòng)管理機(jī)制,當(dāng)然java也不例外,大部分情況我們不會(huì)使用到Z-order,因?yàn)橄到y(tǒng)會(huì)自動(dòng)幫我們管理好。用戶只需將所需的組件直接加入內(nèi)容面板即可,不需要知道它們之間的順序關(guān)系。JMenuBar是一個(gè)對(duì)象,用于跟蹤與容器相關(guān)聯(lián)的任何菜單。JMenuBar是可選的,如果沒有,內(nèi)容面板就會(huì)充滿整個(gè)頂層容器。(3) 內(nèi)容面板JContentPane與AWT組件不同,Swing組件不能直接添加到頂層容器中,它必須添加到頂層Swing容器的內(nèi)容面板(JContentPane)上。JContentPane是Swing容器中一個(gè)對(duì)象,可以把Swing組件加到其中,并設(shè)置布局策略。大部分的可視對(duì)象都放在內(nèi)容面板中,一般在程序中必須用getContentPane()方法來獲取內(nèi)容面板,然后將其加到這一層中。內(nèi)容面板是頂層容器包含的一個(gè)普通容器,它是一個(gè)輕量級(jí)組件,應(yīng)避免在其上添加非Swing的重量級(jí)組件。(4) 玻璃面板JGlassPane在玻璃面板這一層次上主要用來產(chǎn)生繪圖效果,以及觸發(fā)窗口程序的各種事件。 中間層容器主要有JPanel、JScrollPane、JSplitPane、JTabbedPane等,它們沒有根面板,不能在桌面上浮動(dòng),必須填加到頂層容器中才能顯示。下面介紹一些常用的Swing容器。1框架窗口JFrame窗口是最基本的用戶界面元素??蚣艽翱谑且环N窗體,其中帶有邊框、標(biāo)題欄及用于關(guān)閉和最大/最小化窗口的圖標(biāo)等。在GUI的應(yīng)用程序中,一般至少應(yīng)使用一個(gè)框架窗口。通常將框架窗口簡(jiǎn)稱為窗口。JFrame類是由Container類派生而來的,是一種頂層容器類,可用于創(chuàng)建框架窗口。JFrame作為最頂層容器存在,不能被其它容器所包含。它可將加到其內(nèi)容面板的組件顯示在屏幕上,每個(gè)加到窗口中的組件需要明確它的大小和位置,以及在窗口中如何顯示。JFrame構(gòu)造方法主要有:JFrame(),建立一個(gè)無標(biāo)題的JFrame。JFrame(String title),建立一個(gè)標(biāo)題為title的JFrame。窗口的基本操作:(1) 創(chuàng)建窗口直接生成一個(gè)JFrame類的實(shí)例即可建立一個(gè)窗口,或通過繼承JFrame類來定義子類,再建立窗口。例如,創(chuàng)建一個(gè)無標(biāo)題的窗口,語句如下:JFrame frame=new JFrame();(2) 設(shè)置標(biāo)題通過super(String title)調(diào)用基類的構(gòu)造方法,或通過setTitle(String title)方法來設(shè)置窗口標(biāo)題。例如:JFrame frame=new JFrame(“JFrame testing”);或者:JFrame frame=new JFrame();frame.setTitle(“JFrame testing”);(3) 設(shè)置初始位置通過setLocation(int x,int y)方法設(shè)置窗口初始位置。其中x,y是窗口左上角在屏幕上的坐標(biāo)值。(4) 設(shè)置大小通過setSize(int width,int height)方法設(shè)置窗口初始大小。(5) 設(shè)置圖標(biāo)通過setIconImage(Icon icon)方法設(shè)置窗口圖標(biāo)。(6) 定義關(guān)閉行為通過setDefaultCloseOperation(int operation)方法設(shè)置窗口關(guān)閉行為。其中operation的取值可以是以下幾種:DO_NOTHING_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),不做任何處理;HIDE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏這個(gè)窗口;DISPOSE_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),隱藏并處理這個(gè)窗口;EXIT_ON_CLOSE:當(dāng)窗口關(guān)閉時(shí),退出程序。operation默認(rèn)值是HIDE_ON_CLOSE。(7) 添加組件創(chuàng)建好Jframe之后,就可以向它的內(nèi)容面板中添加組件。對(duì)Jframe添加組件有兩種方式:第一種方式,用getContentPane( )方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組件,語句如下:frame.getContentPane().add(childComponent)第二種方式,先建立一個(gè)JPanel或 JDesktopPane之類的中間容器,把組件添加到容器中,用窗口對(duì)象的setContentPane()方法把該容器置為JFrame的內(nèi)容面板:JPanel conPane=new JPanel(); / 把其它組件添加到JPanel中frame.setContentPane(conPane); /把conPane對(duì)象設(shè)置成為窗口對(duì)象frame的內(nèi)容面板 這里需要注意的是,Swing容器都可以用來容納其他組件,但除了JPanel及其子類可以直接添加組件以外,其它Swing容器都不允許把組件直接加進(jìn)去,添加方法和JFrame中添加組件一樣?!纠?.1】 建立一個(gè)標(biāo)題為“Swing窗口”,大小為(300,200),圖標(biāo)為javalogo.gif,位置居中的窗口。屏幕效果如圖7.4所示。圖7.4 Swing窗口源程序如下:/JFrameDemo.javaimport javax.swing.*;import java.awt.*;public class JFrameDemo extends JFrame / 定義一個(gè)窗口子類 JFrameDemo() setIconImage(new ImageIcon("javalogo.gif").getImage(); / 設(shè)置圖標(biāo)setSize(300,200); / 設(shè)置窗口大小setTitle("Swing窗口"); / 設(shè)置窗口標(biāo)題/ 取得屏幕尺寸Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();Dimension mySize=this.getSize(); / 取得窗口尺寸/設(shè)置初始位置于屏幕中央setLocation(screen.width-mySize.width)/2,(screen.height-mySize.height)/2); setVisible(true); / 使窗口可見 public static void main(String args) JFrameDemo myFrame=new JFrameDemo(); / 創(chuàng)建窗口myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); / 設(shè)置關(guān)閉行為 2. 無邊框的窗口JWindowJWindow可以構(gòu)造無邊框的窗口。主要構(gòu)造方法有:JWindow():創(chuàng)建一個(gè)無邊界的窗口;JWindow(Frame owner):創(chuàng)建一個(gè)依賴Frame對(duì)象的窗口。3對(duì)話框JDialog 對(duì)話框與框架窗口類似,是有邊框、有標(biāo)題、可獨(dú)立存在的頂級(jí)容器。對(duì)話框分為無模態(tài)對(duì)話框和模態(tài)對(duì)話框。模態(tài)對(duì)話框只讓程序響應(yīng)對(duì)話框內(nèi)部的事件,對(duì)于對(duì)話框以外的事件程序不響應(yīng),并且在該對(duì)話框被關(guān)閉之前,其他窗口無法接受任何形式的輸入;而無模態(tài)對(duì)話框可以讓程序響應(yīng)對(duì)話框以外的事件,沒有限制。JDialog的構(gòu)造方法有:JDialog(Frame owner);JDialog(Frame owner,Boolean modal);JDialog(Frame owner,String title);JDialog(Frame owner,String title,Boolean modal);其中,參數(shù)owner指明對(duì)話框隸屬哪個(gè)窗口,參數(shù)title指明對(duì)話框的標(biāo)題。參數(shù)modal為true時(shí),指明對(duì)話框是模態(tài)的;如果modal為false,則指明對(duì)話框是無模態(tài)的。用JDialog來作對(duì)話框,必須實(shí)現(xiàn)對(duì)話框中的每一個(gè)組件,但有時(shí)候?qū)υ捒蛑灰@示一段文字,或是作一些簡(jiǎn)單的選擇,這時(shí)候可以利用JOptionPane類,從而大大的減少了程序代碼的編寫。JOptionPane類也在javax.swing包內(nèi)。要利用JOptionPane類來輸出對(duì)話框,通常不使用new創(chuàng)建一個(gè)JOptionPane對(duì)象出來,而是使用JOptionPane所提供的一些靜態(tài)方法,這些方法都是以showXxxxxDialog的形式出現(xiàn)。例如,建立一個(gè)消息對(duì)話框可使用JOptionPane.showMessageDialog();另外,JOptionPane.showConfirmDialog()會(huì)建立一個(gè)確認(rèn)對(duì)話框,JOptionPane.showInputDialog()會(huì)建立一個(gè)輸入對(duì)話框。4面板JPanelSwing的JPanel,它替代了AWT的畫布(Canvas)和面板(Panel),兼有二者的功能。JPanel是一個(gè)非頂級(jí)的通用容器,總是處于其它一些容器中。JPanel不能象JFrame那樣能夠在桌面上浮動(dòng)。利用JPanel可以使版面的排列方式更生動(dòng),對(duì)于復(fù)雜GUI,通常由多個(gè)面板組成,而每個(gè)面板以特定的布局來排列組件。JPanel的構(gòu)造方法有:JPanel();JPanel(boolean isDoubleBuffered);JPanel(LayoutManager layout);JPanel(LayoutManager layout,boolean isDoubleBuffered);其中,isDoubleBuffered指明是否具有雙緩沖,layout指明布局方式。JPanel默認(rèn)是非雙緩沖,布局為流式布局(FlowLayout)。5. 分割面板JSplitPaneJSplitPane一次可將兩個(gè)組件同時(shí)顯示在兩個(gè)顯示區(qū)中,若想要同時(shí)在多個(gè)顯示區(qū)顯示組件,便必須同時(shí)使用多個(gè)JSplitPane。JSplitPane提供兩個(gè)常數(shù):HORIZONTAL_SPLIT、VERTICAL_SPLIT,用來設(shè)置水平分割或是垂直分割。6. JTabbedPane如果一個(gè)窗口的功能有幾項(xiàng),可以給每項(xiàng)設(shè)置一個(gè)標(biāo)簽,每個(gè)標(biāo)簽下面包含為完成此功能專用的若干組件。用戶要使用哪項(xiàng)功能,只要單擊相應(yīng)的標(biāo)簽,就可以進(jìn)入相應(yīng)的頁面。這種選項(xiàng)卡功能的實(shí)現(xiàn)就需要使用JTabbedPane這個(gè)中間層容器。7. 滾動(dòng)面板JScrollPane當(dāng)容器內(nèi)要容納的內(nèi)容大于容器時(shí),希望容器能夠有一個(gè)滾動(dòng)條,通過拖動(dòng)滑塊,就可以看到更多的內(nèi)容。JScrollPane就是能夠?qū)崿F(xiàn)這種功能的容器。8. JInternalFrame使用JInternalFrame容器類可以實(shí)現(xiàn)在一個(gè)主窗口中打開很多個(gè)文檔,每個(gè)文檔各自占用一個(gè)新的窗口。JInternalFrame的使用跟JFrame幾乎一樣,可以最大化、最小化、關(guān)閉窗口、加入菜單;唯一不同的是JInternalFrame是輕量級(jí)組件,它只能是中間容器,必須依附于頂層容器上。7.1.4 基于Swing的Java GUI設(shè)計(jì)思路構(gòu)造用戶界面會(huì)涉及到一些基本概念,包括前面已經(jīng)提到的組件、容器,還有后面要說明的布局管理器和事件處理等。Java GUI編程,一般可依據(jù)下面的設(shè)計(jì)思路:1. 設(shè)置頂層容器。通常是JFrame或Japplet,用于設(shè)計(jì)Java應(yīng)用程序或Java小應(yīng)用程序。2. 創(chuàng)建組件。組件包括按鈕、菜單以及選項(xiàng)等。3. 使用某種布局把組件加到某個(gè)容器中。對(duì)于復(fù)雜的用戶界面,通常會(huì)使用若干中間層容器,這樣便于對(duì)組件的管理,在編程時(shí)先將組件置于中間層容器中,之后再將中間層容器加到頂層容器中。對(duì)于組件在容器中的位置和大小,也可交給布局管理器全權(quán)負(fù)責(zé)。4. 實(shí)現(xiàn)事件處理程序,以便響應(yīng)點(diǎn)擊按鈕、菜單選擇、窗口縮放以及其它活動(dòng)等。7.2 圖形與繪圖7.2.1 繪圖表面為了在Java程序里進(jìn)行繪圖和繪畫,需要有一個(gè)可以操作的表面。在抽象窗口工具包(AWT)中,這個(gè)繪圖表面通常是一個(gè)Canvas組件。在Swing程序中可以直接在頂層窗口(通常是JApplet和JFrame)上繪圖,或者在JPanel的子類上繪圖。7.2.2 圖形環(huán)境和圖形對(duì)象要在Java中繪圖,還需理解Java的坐標(biāo)系統(tǒng),如圖7.5所示。GUI組件(諸如applet或窗口)的左上角坐標(biāo)默認(rèn)為(0,0),坐標(biāo)對(duì)由一個(gè)x坐標(biāo)(水平坐標(biāo))和一個(gè)y坐標(biāo)(垂直坐標(biāo))組成。x坐標(biāo)是從左上角向右移動(dòng)的水平距離,y坐標(biāo)是從左上角向下移動(dòng)的垂直距離。坐標(biāo)的單位是像素,它是顯示器分辨率的最小單位。圖7.5 以像素為單位的Java坐標(biāo)系統(tǒng)在屏幕上繪圖要使用Java圖形環(huán)境,每個(gè)Java組件(包括Swing組件),都有一個(gè)與之關(guān)聯(lián)的圖形環(huán)境,也稱圖形上下文,用java.awt.Graphics類的一個(gè)對(duì)象來表示。Graphics對(duì)象用于管理圖形環(huán)境,并在屏幕上繪制代表文本或其它圖形對(duì)象(如線條、橢圓、矩形或其它多邊形)的像素。Graphics 類是所有圖形上下文的抽象基類,這個(gè)上下文允許應(yīng)用程序?qū)D形繪制到由不同設(shè)備實(shí)現(xiàn)的組件上,以及繪制到空閑屏幕的映像中。 java.awt.Graphics類是一個(gè)抽象類,不能直接創(chuàng)建一個(gè)Graphics對(duì)象,這是由Java的可移植性決定的,因?yàn)樵谥С諮ava的各個(gè)平臺(tái)上,執(zhí)行的繪圖操作是不同的,例如運(yùn)行Microsoft Windows的PC機(jī)繪制矩形的圖形功能不同于UNIX工作站上繪制矩形的圖形功能,而且它們也不同于Macintosh系統(tǒng)中繪制矩形的圖形功能。在各個(gè)平臺(tái)實(shí)現(xiàn)Java時(shí),系統(tǒng)將創(chuàng)建Graphics的一個(gè)子類,以實(shí)現(xiàn)繪圖功能。一個(gè) Graphics 對(duì)象封裝有 Java 所支持的基本繪圖操作所需的狀態(tài)信息。此狀態(tài)信息包括下列屬性: (1) 要被繪制到其上的組件對(duì)象; (2) 繪制和剪貼坐標(biāo)的平移原點(diǎn)。; (3) 當(dāng)前的剪貼區(qū); (4) 當(dāng)前顏色; (5) 當(dāng)前的字體; (6) 當(dāng)前的邏輯像素操作函數(shù) (XOR 或 Paint) ; (7) 當(dāng)前的 XOR 替換顏色。 其中XOR模式稱為位異或模式,它符合邏輯操作異或。在XOR模式下,當(dāng)在背景色和前景色上執(zhí)行一個(gè)異或操作時(shí),像素點(diǎn)的前景色是由畫筆的顏色來決定的。在黑白繪圖方式下,如果畫筆是黑色的,在背景為白色的任何位置,繪圖都是黑色的;如果背景已經(jīng)是黑色的,那么繪圖就會(huì)是白色的。這樣,在這種情況下XOR模式會(huì)對(duì)背景色進(jìn)行反色操作。在有顏色的背景下,也能獲得類似的效果。Graphics類中定義了許多方法,包含用于改變上述屬性默認(rèn)值的訪問方法,以及各種繪圖方法,分別如表7.2和表7.3所示。表7.2 Graphics類的部分獲取和設(shè)置屬性默認(rèn)值的方法名稱說明Shape getClip()返回表示當(dāng)前剪貼區(qū)域的 Shape 對(duì)象Color getColor()返回該圖形上下文的當(dāng)前顏色Font getFont()返回該圖形上下文的當(dāng)前字體FontMetrics getFontMetrics()返回該圖形上下文當(dāng)前字體的字體度量void setClip(Shape clip)將當(dāng)前的剪貼域設(shè)置為任意剪貼形狀void setColor(Color c)將該圖形上下文的當(dāng)前顏色設(shè)置為指定的顏色void setFont(Font font)將指定的字體設(shè)置為該圖形上下文的字體。void translate(int x,int y)將圖形上下文的原點(diǎn)平移到當(dāng)前坐標(biāo)系的 (x ,y) 點(diǎn)處。修改該圖形的上下文,使得它的新原點(diǎn)與該圖形上下文原先坐標(biāo)系中的 (x,y) 點(diǎn)相一致表7.3 Graphics類的繪圖方法方法說明void drawString(String str,int x,int y)使用該圖形上下文的當(dāng)前字體和顏色,從坐標(biāo)點(diǎn)(x,y)位置處開始繪制由指定的字符串給出的文本void drawLine(int x1,int y1,int x2,int y2)繪制一條在點(diǎn)(x1,y1) 和(x2,y2) 之間的線void drawRect(int x,int y,int width,int height)畫一矩形,左上角坐標(biāo)為(x,y),寬width ,高h(yuǎn)eightvoid fillRect(int x,int y,int width,int height)繪制一個(gè)使用當(dāng)前顏色填充的指定矩形void clearRect(int x, int y, int width, int height)通過用當(dāng)前繪圖表面的背景顏色填充的方法來清除指定的矩形。void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)使用當(dāng)前顏色繪制圓角矩形。圓角是一個(gè)橢圓的1/4弧,此橢圓由arcWidth,arcHeight確定兩軸長(zhǎng)void fillRoundRect(int x, int y, int width,int height, int arcWidth, int arcHeight)用當(dāng)前顏色填充指定的圓角矩形void draw3DRect(int x, int y, int width, int height, boolean raised)繪制指定矩形的一個(gè)突出顯示的三維輪廓。raised為true時(shí),該矩形為凸的,反之為凹的void fill3DRect(int x, int y, int width, int height, boolean raised)繪制一個(gè)用當(dāng)前顏色填充的三維矩形void drawOval(int x,int y,int width,int height) 繪制橢圓形的輪廓。結(jié)果是一個(gè)圓或橢圓,并適合由 x ,y ,width 和 height 參數(shù)指定的矩形void fillOval(int x, int y, int width, int height)用當(dāng)前顏色填充由指定矩形限定的橢圓void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)繪制一個(gè)覆蓋指定矩形的圓或橢圓弧的輪廓void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)填充一個(gè)覆蓋了指定矩形的圓或橢圓弧void drawPolyline(int xPoints,int yPoints,int nPoints)繪制由 x 和 y 坐標(biāo)數(shù)組定義的連接線序列。每對(duì) (x,y)坐標(biāo)定義一個(gè)點(diǎn)void drawPolygon(int xPoints,int yPoints,int nPoints)繪制由 x 和 y 坐標(biāo)數(shù)組定義的閉合多邊形。每對(duì) (x,y) 坐標(biāo)定義一個(gè)點(diǎn)void drawPolygon(Polygon p)繪制由指定的 Polygon 對(duì)象定義的多邊形的輪廓void fillPolygon(int xPoints,int yPoints, int nPoints)填充由 x 和 y 坐標(biāo)數(shù)組定義的閉合多邊形void fillPolygon(Polygon p)用圖形上下文的當(dāng)前顏色填充由指定的 Polygon 對(duì)象定義的多邊形。多邊形內(nèi)的區(qū)域使用奇偶填充規(guī)則和交替填充規(guī)則來定義boolean drawImage(Image img, int x,int y, ImageObserver observer)繪制指定圖像的當(dāng)前可用部分。繪制的圖像,其左上角位于坐標(biāo)(x,y) 位置。如果圖像沒有被完全裝入,那么 drawImage 方法將返回 false7.2.3 顏色顏色美化了程序的外觀,并有助于信息的表達(dá)。Java的顏色是根據(jù)RGB值來建立的,RGB值是用于指定紅色、綠色和藍(lán)色量的3個(gè)數(shù)字的組合,這些顏色組件混合在一起形成了最終的顏色。java.awt.Color類聲明了用于操作Java程序中顏色的方法,同時(shí)Color類定義了一些標(biāo)準(zhǔn)顏色,作為類常量使用,這些常量共有13個(gè),它們的名稱有小寫名稱也有大寫名稱,表7.4中采用大寫形式,這樣符合常量的命名約定。表7.5給出了一些Color類的構(gòu)造函數(shù)和常用方法。表7.4 Color類的常量顏色常量顏色public final static Color BLACK黑色public final static Color BLUE藍(lán)色public final static Color CYAN藍(lán)綠色public final static Color DARKGRAY深灰色public final static Color GRAY灰色public final static Color GREEN綠色public final static Color LIGHT_GRAY淺灰色public final static Color MAGENTA紫紅色public final static Color ORANGE橙色public final static Color PINK粉紅色public final static Color RED紅色public final static Color WHITE白色public final static Color YELLOW黃色表7.5 Color類的方法方法說明Color(int r,int g,int b)用指定的紅、綠和藍(lán)色成分創(chuàng)建一個(gè)顏色。三個(gè)參數(shù)都必須在 0-255 范圍內(nèi)Color(int rgb)用指定的 RGB 值創(chuàng)建一個(gè)顏色,其中參數(shù)的 16-23 位表示紅色成分,8-15 位表示綠色成分,0-7 位表示藍(lán)色成分。0 表示這個(gè)基色成分沒有參與顏色構(gòu)成Color(float r, float g, float b)用指定的紅、綠和藍(lán)色值創(chuàng)建一個(gè)顏色,其中每個(gè)值在 0.0-1.0 范圍內(nèi)。0.0 值表示這個(gè)基色成分沒有貢獻(xiàn)。值 1.0 表示這個(gè)基色成分的最大飽和度int getRed()獲取這個(gè)顏色的紅色成分。返回結(jié)果是一個(gè)0 - 255 之間的整數(shù)int getGreen()獲取這個(gè)顏色的綠色成分。返回結(jié)果是一個(gè) 0 - 255 之間的整數(shù)int getBlue()獲取這個(gè)顏色的藍(lán)色成分。返回結(jié)果是一個(gè) 0 - 255 之間的整數(shù)設(shè)計(jì)使用顏色的程序時(shí)必須要小心,因?yàn)轭伾谋硎臼桥c系統(tǒng)有關(guān)的。在理論上講,可能指定256*256*256=16 777 216種不同的顏色。但是在實(shí)際系統(tǒng)中,真正能夠顯示的不同顏色的數(shù)目,取決于系統(tǒng)顯示器的質(zhì)量。如果顯示只允許使用8位顏色來表示每個(gè)像素,則最多可以表示28=256種顏色,在這種情況下,操作系統(tǒng)會(huì)決定顯示16 777 216種顏色中的哪256種顏色,如果程序需要這256種顏色之外的顏色,系統(tǒng)會(huì)選擇最相近的顏色。7.2.4 字體為了創(chuàng)建有吸引力的界面,常常需要選擇和控制所用的字體。Java中有關(guān)字體控制的類是Font類,有關(guān)字體度量的類是FontMetrics,它們都在java.awt包中。前面已經(jīng)提到,每個(gè)圖形上下文都有一個(gè)相關(guān)的字體Font對(duì)象和字體度量FontMetrics對(duì)象,F(xiàn)ont對(duì)象包括字體名、字號(hào)和風(fēng)格等屬性,F(xiàn)ontMetrics對(duì)象封裝了字體的許多重要數(shù)據(jù),如字體的高度和寬度等。表7.6給出了Font類的一些常量和常用方法。表7.6 Font類的方法和常量常量或方法說明public final static int PLAIN一個(gè)代表普通字體風(fēng)格的常量public final static int BOLD一個(gè)代表粗體字體風(fēng)格的常量public final static int ITALIC一個(gè)代表斜體字體風(fēng)格的常量Font(String name,int style,int size)利用指定的字體、風(fēng)格和大小創(chuàng)建一個(gè)Font對(duì)象int getStyle()返回一個(gè)表示當(dāng)前字體風(fēng)格的整數(shù)值int getSize()返回一個(gè)表示當(dāng)前字體大小的整數(shù)值String getName()以字符串形式返回當(dāng)前字體名稱String getFamily()以字符串形式返回當(dāng)前字體族名稱Boolean isPlain()測(cè)試一個(gè)字體是否是普通字體風(fēng)格Boolean isBold()測(cè)試一個(gè)字體是否是粗體字體風(fēng)格Boolean isItalic()測(cè)試一個(gè)字體是否是斜體字體風(fēng)格Font類的構(gòu)造函數(shù)有3個(gè)參數(shù):字體名稱、字體風(fēng)格和字體大小。字體名稱可以是運(yùn)行程序的當(dāng)前系統(tǒng)所支持的任何字體,在Java1.1和以后的版本中,所支持的字體名字有Monospaced、SansSerif、Serif、Dialog和DialogInput。字體風(fēng)格可以是表7.6已列出的三個(gè)之一,也可以是Font.ITALIC+Font.BOLD組合。字體大小以磅為度量單位,一磅等于1/72英寸。這些名字和風(fēng)格是平臺(tái)無關(guān)的,當(dāng)用于程序中時(shí),會(huì)映射成本地系統(tǒng)可用的實(shí)際字體。如果本地系統(tǒng)沒有與指定字體確切相匹配的字體,就會(huì)提供一個(gè)替代字體。7.2.5 使用Graphics類繪圖當(dāng)在AWT組件和Swing頂層窗口(JApplet和JFrame,是java.awt.Component的子類)上繪圖時(shí),需要重寫組件的paint()方法;當(dāng)在Swing的JComponent的子類組件上繪圖時(shí),則需重寫paintComponent()方法。在這兩種情況(Swing和AWT)下,都是以一個(gè)Graphics對(duì)象作為參數(shù)。在某個(gè)組件需要進(jìn)行繪圖操作時(shí),系統(tǒng)會(huì)將Graphics對(duì)象傳遞給paint方法或paintComponent方法。paint方法和paintComponent方法的頭部分別為:public void paint(Graphics g )public void paintComponent(Graphics g )程序員很少直接調(diào)用paint方法,因?yàn)槔L制圖形是一個(gè)事件驅(qū)動(dòng)過程。在執(zhí)行applet(在第九章對(duì)此進(jìn)行詳細(xì)說明)時(shí),applet的容器調(diào)用paint方法,要再次調(diào)用paint方法,必須產(chǎn)生一個(gè)事件(如隱藏或重新顯示applet的窗口)。類似地,在顯示任何組件對(duì)象時(shí),將調(diào)用該組件對(duì)象的paint方法。如果程序員需要強(qiáng)制執(zhí)行paint方法,一般是調(diào)用repaint()方法(此方法不應(yīng)重寫,因?yàn)樵摲椒▓?zhí)行一些與系統(tǒng)相關(guān)的任務(wù)),該方法自動(dòng)調(diào)用Component類的update(Graphics g)方法以清除Component背景中的舊圖,然后update方法直接調(diào)用paint方法。【例7.2】 使用各種顏色繪制文字及各種圖形。屏幕效果如圖7.6所示。源程序如下:/ Graphic.javaimport java.awt.*;import javax.swing.*;public class Graphic extends JFramepublic Graphic()super("字體、顏色與繪圖示例"); / 調(diào)用超類的構(gòu)造方法,設(shè)置窗口標(biāo)題setSize(480,240); / 設(shè)置窗口大小setVisible(true); / 使窗口可見public void paint(Graphics g) / 重寫paint方法super.paint(g);g.setFont(new Font("Serif",Font.BOLD,12);/*設(shè)置圖形環(huán)境的字體,名為Serif,黑體,12號(hào)*/g.setColor(Color.BLACK); / 設(shè)置顏色g.drawString("字體Serif,粗體,12號(hào),黑色",20,50); / 繪制字符串g.setFont(new Font("SansSerif",Font.BOLD+Font.ITALIC,15);g.setColor(new Color(255,0,0);g.drawString("字體SansSerif,粗斜體,15號(hào),紅色",200,50);g.drawLine(20,60,450,60); / 繪制直線g.setColor(Color.BLUE);g.drawRect(20,70,100,50); / 繪制矩形g.fillRect(130,70,100,50); / 繪制實(shí)心矩形g.setColor(Color.YELLOW);g.draw3DRect(20,130,100,50,true); / 繪制三維凸起矩形g.fill3DRect(130,130,100,50,false); / 繪制三維凹陷實(shí)心矩形g.setColor(Color.pink);g.drawOval(240,80,100,50); / 繪制橢圓g.fillOval(350,80,100,50); / 繪制實(shí)心橢圓g.setColor(Color.MAGENTA);int xValues=250,280,290,300,330,310,320,290,260,270;int yValues=160,160,140,160,160,170,180,170,180,170;g.drawPolygon(xValues,yValues,10); / 根據(jù)給定的10個(gè)坐標(biāo)點(diǎn),繪制空心多邊形int xValues2=360,390,400,410,440,420,430,400,370,380;g.fillPolygon(xValues2,yValues,10); / 根據(jù)給定的10個(gè)坐標(biāo)點(diǎn),繪制實(shí)心多邊形public static void main(String args) / 設(shè)置窗口的外觀和感覺為Java默認(rèn)JFrame.setDefaultLookAndFeelDecorated(true); Graphic myGraphic=new Graphic(); / 產(chǎn)生Graphic類的一個(gè)實(shí)例myGraphic.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); / 關(guān)閉窗口圖7.6 使用Graphics類繪圖7.3事件處理與Swing常用組件聲明組件、處理事件以及將組件置于容器內(nèi)這三個(gè)問題聯(lián)系得非常緊密,在后續(xù)小節(jié)中我們將分別進(jìn)行說明,而在所有基于GUI的程序中,其核心是事件處理,下面對(duì)此先進(jìn)行說明。GUI是事件驅(qū)動(dòng)的(即用戶與GUI進(jìn)行交互時(shí),GUI將產(chǎn)生事件)。一些常見的事件包括單擊鼠標(biāo)按鈕、移動(dòng)鼠標(biāo)、單擊按鈕、在文本字段內(nèi)進(jìn)行輸入、在菜單中選擇菜單項(xiàng)、關(guān)閉窗口等。若發(fā)生了一次用戶交互,就將一個(gè)消息發(fā)送給程序。GUI事件信息存儲(chǔ)在擴(kuò)展AWTEvent的類的一個(gè)對(duì)象中。AWT組件和Swing組件都可以使用java.awt.event包中的事件類型。javax.swing.event包還聲明了其它一些事件類型,這些事件類型是專用于Swing組件的。7.3.1 Java事件處理機(jī)制事件處理機(jī)制是一種事件處理框架,其設(shè)計(jì)目的是把GUI交互動(dòng)作(鼠標(biāo)點(diǎn)擊、菜單選擇等)轉(zhuǎn)變?yōu)檎{(diào)用相關(guān)的事件處理程序進(jìn)行處理。JDK1.1以后Java采取了授權(quán)處理機(jī)制(Delegation-based Model),事件源可以把在其自身所有可能發(fā)生的事件分別授權(quán)給不同的事件處理者來處理。由于窗口管理器無法直接調(diào)用開發(fā)人員提供的事件處理程序,必須在運(yùn)行時(shí)告訴事件模型,哪一個(gè)例程用于處理事件。因此,為了獲取任何事件,開發(fā)人員必須事先通知窗口系統(tǒng),令其將事件發(fā)送給自己提供的事件處理程序,把事件處理程序注冊(cè)為窗口管理器中的一個(gè)回調(diào)例程,使之連接到產(chǎn)生事件的組件上。要實(shí)現(xiàn)這個(gè)過程,就要用到事件處理機(jī)制中的三個(gè)對(duì)象:事件源、事件對(duì)象和事件監(jiān)聽器。事件源是與用戶進(jìn)行交互的特定組件。事件源提供注冊(cè)監(jiān)聽器或取消監(jiān)聽器的方法,它維護(hù)一個(gè)已注冊(cè)的監(jiān)聽器列表,如有事件發(fā)生,就會(huì)通知每個(gè)已注冊(cè)的監(jiān)聽器。一個(gè)事件源可以注冊(cè)多個(gè)事件監(jiān)聽器。事件對(duì)象封裝了有關(guān)已發(fā)生的事件的信息,這些信息包括事件源的一個(gè)引用和事件專用信息,事件監(jiān)聽器需要這些信息來處理事件。事件監(jiān)聽器也是一個(gè)對(duì)象,該對(duì)象所屬的類實(shí)現(xiàn)了java.awt.event或javax.swing.event包中的一個(gè)或多個(gè)事件監(jiān)聽器的接口。每個(gè)監(jiān)聽器可以對(duì)多種事件進(jìn)行響應(yīng)。事件監(jiān)聽器負(fù)責(zé)監(jiān)聽事件,它監(jiān)視所有事件類型,當(dāng)有事件發(fā)生時(shí),事件監(jiān)聽器會(huì)接收到事件源產(chǎn)生的事件對(duì)象,一旦該事件類型與自己所負(fù)責(zé)處理的事件類型一致,就會(huì)以該事件對(duì)象作為參數(shù)自動(dòng)調(diào)用相應(yīng)的事件處理程序作出響應(yīng)。許多事件監(jiān)聽器類型是Swing組件和AWT組件所共有的。這樣的事件監(jiān)聽器類型聲明在java.awt.event包中,并且其中許多都顯示在表7.7中。不同的組件會(huì)產(chǎn)生不同的事件,不同的事件處理程序要實(shí)現(xiàn)不同的接口,表7.7概括了三者之間的關(guān)系。每個(gè)接口所承諾的方法可查閱Java doc的API。表7.7 類別、事件與接口一般類別產(chǎn)生的事件事件處理程序?qū)崿F(xiàn)的接口鼠標(biāo)拖曳、移動(dòng)鼠標(biāo)產(chǎn)生的MouseEvent,點(diǎn)擊、選擇、釋放鼠標(biāo)引起的MouseEventMouseMotionListenerMouseListener鼠標(biāo)滾輪鼠標(biāo)滾輪事件MouseWheelListener鍵盤按鍵或釋放產(chǎn)生的KeyEventKeyListener選擇(列表、復(fù)選框等的某一項(xiàng))選擇某一選項(xiàng)時(shí)產(chǎn)生的ItemEventItemListener文本輸入組件輸入換行符時(shí)產(chǎn)生的TextEventTextListener滾動(dòng)控件滾動(dòng)條滑動(dòng)時(shí)引起的AdjustmentEventAdjustmentListener其它組件(按鈕、菜單等)點(diǎn)擊組件時(shí)或文本框中按下Enter鍵時(shí)產(chǎn)生的ActionEventActionListener窗口變動(dòng)打開、關(guān)閉窗口以及把窗口縮小為圖標(biāo)時(shí)產(chǎn)生的WindowEventWindowListener鍵盤焦點(diǎn)變動(dòng)使用制表鍵轉(zhuǎn)到下一個(gè)字段,或者要求聚焦時(shí)引起的FocusEvent。組件必須在獲得聚焦時(shí)才能產(chǎn)生事件FocusListener組件變動(dòng)縮放、隱藏、顯露或移動(dòng)組件時(shí)產(chǎn)生的ComponentEventComponentListener容器變動(dòng)加入或撤銷容器中的組件引起的ContainerEventContainerListener要使程序能夠處理圖形用戶界面的事件,程序員必須完成2項(xiàng)關(guān)鍵任務(wù):為產(chǎn)生事件的GUI組件注冊(cè)一個(gè)事件監(jiān)聽器;實(shí)現(xiàn)一個(gè)事件處理方法(或一組事件處理方法)。事件處理方法通常稱為事件處理程序。下面以“關(guān)閉窗口”事件為例,來說明Java事件處理框架。 【例7.3】 關(guān)閉窗口事件處理。源程序如下:/ CloseDemo1.javaimport javax.swing.*;import java.awt.event.*;public class CloseDemo1public static void main(String args)JFrame jframe=new JFrame("關(guān)閉窗口例");/ 創(chuàng)建一個(gè)窗口jframe.setSize(400,100); / 設(shè)置窗口大小jframe.setVisible(true); / 使窗口可見myWinClose handler=new myWinClose();

注意事項(xiàng)

本文(第7章 圖形用戶界面)為本站會(huì)員(liu****han)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!