JAVA 圖形用戶界面設(shè)計.ppt
《JAVA 圖形用戶界面設(shè)計.ppt》由會員分享,可在線閱讀,更多相關(guān)《JAVA 圖形用戶界面設(shè)計.ppt(73頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第15章圖形用戶界面設(shè)計,,15.1JavaSwing概述,Java的java.awt包,即Java抽象窗口工具包(AWT:AbstractWindowToolkit)提供了許多用來設(shè)計GUI的組件類在學(xué)習(xí)GUI編程時,必須很好地理解掌握兩個概念:容器類(Container)和組件類(Component)。javax.swing包中JComponent類是java.awt包中Container類的一個直接子類、是Component類的一個間接子類,學(xué)習(xí)GUI編程主要是學(xué)習(xí)掌握使用Component類的一些重要的子類。,,Java把Component類的子類或間接子類創(chuàng)建的對象稱為一個組件。Java把Container的子類或間接子類創(chuàng)建的對象稱為一個容器??梢韵蛉萜魈砑咏M件。Container類提供了一個public方法:add(),一個容器可以調(diào)用這個方法將組件添加到該容器中。容器調(diào)用removeAll()方法可以移掉容器中的全部組件;調(diào)用remove(Componentc)方法可以移掉容器中參數(shù)c指定的組件。注意到容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現(xiàn)容器的嵌套。,,,15.2窗口,Java提供的JFrame類的實例就是一個底層容器(JDialog類的實例也是一個底層容器,見后面的15.6),即通常所稱的窗口。其他組件必須被添加到底層容器中,以便借助這個地層容器和操作系統(tǒng)進(jìn)行信息交互JFrame類是Container類的間接子類。當(dāng)需要一個窗口時,可使用JFrame或其子類創(chuàng)建一個對象,15.2.1JFrame常用方法,JFrame()創(chuàng)建一個無標(biāo)題的窗口。JFrame(Strings)創(chuàng)建標(biāo)題為s的窗口。publicvoidsetVisible(booleanb)設(shè)置窗口是否可見,窗口默認(rèn)是不可見的。publicvoiddispose()撤消當(dāng)前窗口,并釋放當(dāng)前窗口所使用的資源。publicvoidsetDefaultCloseOperation(intoperation)該方法用來設(shè)置單擊窗體右上角的關(guān)閉圖標(biāo)后,程序會做出怎樣的處理。,15.2.2菜單條、菜單、菜單項,窗口中的菜單條、菜單、菜單項是我們所熟悉的組件,菜單放在菜單條里,菜單項放在菜單里。,,1.菜單條JComponent類的子類JMenubar負(fù)責(zé)創(chuàng)建菜單條,即JMenubar的一個實例就是一個菜單條。JFrame類有一個將菜單條放置到窗口中的方法:setJMenuBar(JMenuBarbar);該方法將菜單條添加到窗口的頂端,需要注意的是,只能向窗口添加一個菜單條。,,2.菜單JComponent類的子類JMenu負(fù)責(zé)創(chuàng)建菜單,即JMenu的一個實例就是一個菜單。3.菜單項JComponent類的子類JMenuItem負(fù)責(zé)創(chuàng)建菜單項,即JMenuItem的一個實例就是一個菜單項。,,4.嵌入子菜單JMenu是JMenuItem的子類,因此菜單本身也是一個菜單項,當(dāng)把一個菜單看作菜單項添加到某個菜單中時,稱這樣的菜單為子菜單。5.菜單上的圖標(biāo)圖15.3帶菜單的窗口為了使菜單項有一個圖標(biāo),可以用圖標(biāo)類Icon聲明一個圖標(biāo),然后使用其子類ImageIcon類創(chuàng)建一個圖標(biāo),15.3常用組件與布局,可以使用JComponent的子類JTextField創(chuàng)建文本框。文本框的特點是允許用戶在文本框中輸入單行文本。,15.3.1常用組件,1.文本框使用JComponent的子類JTextField創(chuàng)建文本框,允許用戶在文本框中輸入單行文本。2.文本區(qū)使用JComponent的子類JTexArea創(chuàng)建文本區(qū),允許用戶在文本區(qū)中輸入多行文本。3.按鈕使用JComponent的子類JButton類用來創(chuàng)建按鈕,允許用戶單擊按鈕。,,4.標(biāo)簽使用JComponent的子類JLabel類用來創(chuàng)建標(biāo)簽,標(biāo)簽為用戶提供信息提示。5.選擇框使用JComponent的子類JCheckBox類用來創(chuàng)建選擇框,為用戶提供多項選擇。選擇框的右面有個名字,并提供兩種狀態(tài),一種是選中,另一種是未選中,用戶通過單擊該組件切換狀態(tài)。6.單選按鈕使用JComponent的子類JRadioButton類用來創(chuàng)建單項選擇框,為用戶提供單項選擇。,,7.下拉列表使用JComponent的子類JComboBox類用來創(chuàng)建下拉列表,為用戶提供單項選擇。用戶可以在下拉列表看到第一個選項和它旁邊的箭頭按鈕,當(dāng)用戶單擊箭頭按鈕時,選項列表打開。8.密碼框可以使用JComponent的子類JPasswordField創(chuàng)建密碼框。允許用戶在密碼框中輸入單行密碼,密碼框的默認(rèn)回顯字符是*。密碼框可以使用setEchoChar(charc)重新設(shè)置回顯字符,用戶輸入密碼時,密碼框只顯示回顯字符。密碼框調(diào)用char[]getPassword()方法可以返回實際的密碼。,15.3.2常用容器,1.JPanel面板我們會經(jīng)常使用JPanel創(chuàng)建一個面板,再向這個面板添加組件,然后把這個面板添加到其它容器中。JPanel面板的默認(rèn)布局是FlowLayout布局。2.滾動窗格JScrollPane滾動窗格只可以添加一個組件,可以把一個組件放到一個滾動窗格中,然后通過滾動條來該組件。JTextArea不自帶滾動條,因此我們就需要把文本區(qū)放到一個滾動窗格中,,3.拆分窗格JSplitPane顧名思義,拆分窗格就是被分成兩部分的容器。拆分窗格有兩種類型:水平拆分和垂直拆分。水平拆分窗格用一條拆分線把窗格分成左右兩部分,左面放一個組件,右面放一個組件,拆分線可以水平移動。垂直拆分窗格用一條拆分線把窗格分成上下兩部分,上面放一個組件,下面放一個組件,拆分線可以垂直移動。,,JSplitPane的兩個常用的構(gòu)造方法:JSplitPane(inta,Componentb,Componentc)參數(shù)a取JSplitPane的靜態(tài)常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,以決定是水平還是垂直拆分。后兩個參數(shù)決定要放置的組件。當(dāng)拆分線移動時,組件不是連續(xù)變化的。JSplitPane(inta,booleanb,Componentc,Componentd)參數(shù)a取JSplitPane的靜態(tài)常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,以決定是水平還是垂直拆分。參數(shù)b決定當(dāng)拆分線移動時,組件是否連續(xù)變化(true是連續(xù)),后兩個參數(shù)決定要放置的組件。,,4.JLayeredPane分層窗格如果添加到容器中的組件經(jīng)常需要處理重疊問題,就可以考慮將組件添加到分層窗格。分層窗格分成5個層,分層窗格使用add(Jcomponentcom,intlayer);添加組件com,并指定com所在的層,其中參數(shù)layer取值JLayeredPane類中的類常量:DEFAULT_LAYER、PALETTE_LAYER、MODAL_LAYER、POPUP_LAYER、DRAG_LAYER,15.3.3常用布局,容器可以使用方法:setLayout(布局對象);設(shè)置自己的布局。,,1.FlowLayout布局FlowLayout類創(chuàng)建的對象稱做FlowLayout型布局。FlowLayout型布局是JPanel型容器的默認(rèn)布局,即JPanel及其子類創(chuàng)建的容器對象,如果不專門為其指定布局,則它們的布局就是FlowLayout型布局。FlowLayout類的一個常用構(gòu)造方法如下:FlowLayout();該構(gòu)造方法可以創(chuàng)建一個居中對齊的布局對象,,如果一個容器con使用這個布局對象:con.setLayout(flow);那么,con可以使用Container類提供的add方法將組件順序地添加到容器中,組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列,每一行中的組件都居中排列,組件之間的默認(rèn)水平和垂直間隙是5個像素。組件的大小為默認(rèn)的最佳大小,,對于添加到使用FlowLayout布局的容器中的組件,組件調(diào)用setSize(intx,inty)設(shè)置的大小無效,如果需要改變最佳大小,組件需調(diào)用:publicvoidsetPreferredSize(DimensionpreferredSize)設(shè)置大小,,FlowLayout布局對象調(diào)用setAlignment(intaligin)方法可以重新設(shè)置布局的對齊方式,其中aligin可以取值:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHTFlowLayout布局對象調(diào)用setHgap(inthgap)方法和setVgap(intvgap)可以重新設(shè)置水平間隙和垂直間隙,,2.BorderLayout布局BorderLayout布局是Window型容器的默認(rèn)布局,例如JFrame、JDialog都是Window類的子類,它們的默認(rèn)布局都是BorderLayout布局。BorderLayout也是一種簡單的布局策略,如果一個容器使用這種布局,那么容器空間簡單地劃分為東、西、南、北、中五個區(qū)域,中間的區(qū)域最大。每加入一個組件都應(yīng)該指明把這個組件加在哪個區(qū)域中,區(qū)域由BorderLayout中的靜態(tài)常量CENTER、NORTH、SOUTH、WEST、EAST表示,,每個區(qū)域只能放置一個組件,如果向某個已放置了組件的區(qū)域再放置一個組件,那么先前的組件將被后者替換掉。使用BorderLayout布局的容器最多能添加5個組件,如果容器中需要加入超過5個組件,就必須使用容器的嵌套或改用其它的布局策略。,,3.CardLayout布局使用CardLayout的容器可以容納多個組件,這些組件被層疊放如容器中,最先加入容器的是第一張(在最上面),依次向下排序。使用該布局的特點是,同一時刻容器只能從這些組件中選出一個來顯示,就像疊“撲克牌”,每次只能顯示其中的一張,這個被顯示的組件將占據(jù)所有的容器空間。,,假設(shè)有一個容器con,那么,使用CardLayout的一般步驟如下:創(chuàng)建CardLayout對象作為布局,使用容器的setLayout()方法為容器設(shè)置布局,容器調(diào)用add(Strings,Componentb)將組件b加入容器,并給出了顯示該組件的代號s。組件的代號是一個字符串,和組件的名字沒有必然聯(lián)系,但是,不同的組件代號必須互不相同。最先加入con的是第一張,依次排序。創(chuàng)建的布局card用CardLayout類提供的show()方法,顯示容器con中組件代號為s的組件:card.show(con,s);,,3.GridLayout布局GridLayout是使用較多的布局編輯器,其基本布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。GridLayout比較靈活,劃分多少網(wǎng)格由程序自由控制,而且組件定位也比較精確,使用GridLayout布局編輯器的一般步驟如下:使用GridLayout的構(gòu)造方法GridLayout(intm,intn)創(chuàng)建布局對象,指定劃分網(wǎng)格的行數(shù)m和列數(shù)n,使用GridLayout布局的容器調(diào)用方法add(Componentc)將組件c加入容器,組件進(jìn)入容器的順序?qū)凑盏谝恍械谝粋€、第一行第二個、…第一行最后一個、第二行第一個、…最后一行第一個、…最后一行最后一個。,,使用GridLayout布局的容器最多可添加mn個組件。GridLayout布局中每個網(wǎng)格都是相同大小并且強(qiáng)制組件與網(wǎng)格的大小相同。,,5.BoxLayout布局用BoxLayout類可以創(chuàng)建一個布局對象,稱為盒式布局。BoxLayout在javax.swing.border包中。javax.swing包提供了Box類,該類也是Container類的一個子類,創(chuàng)建的容器稱作一個盒式容器,盒式容器的的默認(rèn)布局是盒式布局,而且不允許更改盒式容器的布局。因此,在策劃程序的布局時,可以利用容器的嵌套,將某個容器嵌入幾個盒式容器,達(dá)到你的布局目的。,,使用盒式布局的容器將組件排列在一行或一列,這取決于創(chuàng)建盒式布局對象時,是否指定了是行排列還是列排列。使用BoxLayou的構(gòu)造方法BoxLayout(Containercon,,intaxis)可以創(chuàng)建一個盒式布局對象,,行型盒式布局容器中添加的組件的上沿在同一水平線上。列型盒式布局容器中添加的組件的左沿在同一垂直線上。容器的目的是向其添加組件,并根據(jù)需要設(shè)置合理的布局。如果需要一個盒式布局的容器,可以使用Box類的類(靜態(tài))方法createHorizontalBox()獲得一個具有行型盒式布局的盒式容器;使用Box類的類(靜態(tài))方法createVerticalBox()獲得一個具有列型盒式布局的盒式容器。如果想控制盒式布局容器中組件之間的距離,就需要使用水平支撐組件或垂直支撐組件。,,Box類調(diào)用靜態(tài)方法createHorizontalStrut(intwidth)可以得到一個不可見的水平Struct對象,稱做水平支撐。該水平支撐的高度為0,寬度是width。Box類調(diào)用靜態(tài)方法createVertialStrut(intheight)可以得到一個不可見的垂直Struct對象,稱做垂直支撐。參數(shù)height決定垂直支撐的高度,垂直支撐的寬度為0。一個行型盒式布局的容器,可以在組件之間插入水平支撐來控制組件之間的距離。一個列型盒式布局的容器,可以在組件之間插入垂直支撐來控制組件之間的距離,,6.null布局可以把一個容器的布局設(shè)置為null布局(空布局)。空布局容器可以準(zhǔn)確地定位組件在容器的位置和大小。setBounds(inta,intb,intwidth,intheight)方法是所有組件都擁有的一個方法,組件調(diào)用該方法可以設(shè)置本身的大小和在容器中的位置。,15.4處理事件,15.4.1事件處理模式1.事件源能夠產(chǎn)生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是Java認(rèn)為能夠發(fā)生事件的對象。,,2.監(jiān)視器。我們需要一個對象對事件源進(jìn)行監(jiān)視,以便對發(fā)生的事件作出處理。事件源通過調(diào)用相應(yīng)的方法將某個對象注冊為自己的監(jiān)視器事件源注冊監(jiān)視器之后,相應(yīng)的操作就會導(dǎo)致相應(yīng)的事件的發(fā)生,并通知監(jiān)視器,監(jiān)視器就會作出相應(yīng)的處理。,,3.處理事件的接口。監(jiān)視器負(fù)責(zé)處理事件源發(fā)生的事件。監(jiān)視器是一個對象,為了處理事件源發(fā)生的事件,監(jiān)視器這個對象會自動調(diào)用一個方法來處理事件。那么監(jiān)視器去調(diào)用哪個方法呢?我們已經(jīng)知道,對象可以調(diào)用創(chuàng)建它的那個類中的方法,那么它到底調(diào)用該類中的哪個方法呢?Java規(guī)定:為了讓監(jiān)視器這個對象能對事件源發(fā)生的事件進(jìn)行處理,創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應(yīng)的接口,即必須在類體中重寫接口中所有方法,那么當(dāng)事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用被類重寫的某個接口方法。,,,15.4.2ActionEvent事件,1.ActionEvent事件源文本框、按紐、菜單項、密碼框和單選按紐都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。比如,對于注冊了監(jiān)視器的文本框,在文本框獲得輸入焦點后,如果用戶按回車鍵,Java運(yùn)行環(huán)境就自動用ActionEvent類創(chuàng)建一個對象,即觸發(fā)ActionEvent事件;對于注冊了監(jiān)視器的按紐,如果用戶按單擊按紐,就會觸發(fā)ActionEvent事件;對于注冊了監(jiān)視器的菜單項,如果用戶按選中該菜單項,就會觸發(fā)ActionEvent事件;如果用戶按選擇了某個單選按紐,就會觸發(fā)ActionEvent事件。,,2.注冊監(jiān)視器能觸發(fā)ActionEvent事件的組件使用addActiomListener(ActionListenerlisten)將實現(xiàn)ActionListener接口的類的實例注冊為事件源的監(jiān)視器。,,3.ActionListener接口ActionListener接口在java.awt.event包中,該接口中只有一個方法:publicvoidactionPerformed(ActinEvente)事件源觸發(fā)ActionEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ActionEvent事件,然后調(diào)用接口中的方法:actionPerformed(ActinEvente)對發(fā)生的事件作出處理。當(dāng)監(jiān)視器調(diào)用actionPerformed(ActinEvente)方法時,ActionEvent類事先創(chuàng)建的事件對象就會傳遞給該方法的參數(shù)e。,,4.ActionEvent類中的方法ActionEvent類有如下常用的方法:publicObjectgetSource()publicStringgetActionCommand(),15.4.3ItemEvent事件,1.ItemEvent事件源選擇框、下拉列表都可以觸發(fā)ItemEvent事件。選擇框提供兩種狀態(tài),一種是選中,另一種是未選中,對于注冊了監(jiān)視器的選擇框,當(dāng)用戶的操作使得選擇框從未選中狀態(tài)變成選中狀態(tài)或從選中狀態(tài)變成未選中狀態(tài)時就觸發(fā)ItemEvent事件;同樣,對于注冊了監(jiān)視器的下拉列表,如果用戶按選中下拉列表中的某個選項,就會觸發(fā)ItemEvent事件。,,2.注冊監(jiān)視器能觸發(fā)ItemEvent事件的組件使用addItemListener(ItemListenerlisten)將實現(xiàn)ItemListener接口的類的實例注冊為事件源的監(jiān)視器。,,3.ItemListener接口ItemListener接口在java.awt.event包中,該接口中只有一個方法:publicvoiditemStateChanged(ItemEvente)事件源觸發(fā)ItemEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ItemEvent事件,然后調(diào)用接口中的方法:itemStateChanged(ItemEvente)對發(fā)生的事件作出處理。當(dāng)監(jiān)視器調(diào)用itemStateChanged(ItemEvente)方法時,ItemEvent類事先創(chuàng)建的事件對象就會傳遞給該方法的參數(shù)e。ItemEvent事件對象除了可以使用getSource()方法返回發(fā)生Itemevent事件的事件源外,也可以使用getItemSelectable()方法返回發(fā)生Itemevent事件的事件源。,15.4.4DocumentEvent事件,1.DocumentEvent事件源文本區(qū)含有一個實現(xiàn)Document接口的實例,該實例被稱做文本區(qū)所維護(hù)的文檔,文本區(qū)調(diào)用getDocument()方法返回所維護(hù)的文檔。文本區(qū)所維護(hù)的文檔能觸發(fā)DocumentEvent事件。需要特別注意的是,DocumentEvent不在java.awt.event包中,而是在javax.swing.event包中。用戶在文本區(qū)中進(jìn)行文本編輯操作,使得文本區(qū)中的文本區(qū)內(nèi)容發(fā)生變化,將導(dǎo)致文本區(qū)所維護(hù)的文檔模型中的數(shù)據(jù)發(fā)生變化,從而導(dǎo)致文本區(qū)所維護(hù)的文檔觸發(fā)DocumentEvent事件。,,2.注冊監(jiān)視器能觸發(fā)DocumentEven事件的事件源使用addDucumentListener(DocumentListenerlisten)將實現(xiàn)DocumentListener接口的類的實例注冊為事件源的監(jiān)視器。,,3.DocumentListener接口DocumentListener接口在java.swing.event包中,該接口中有三個方法:publicvoidchangedUpdate(DocumentEvente)publicvoidremoveUpdate(DocumentEvente)publicvoidinsertUpdate(DocumentEvente)事件源觸發(fā)DucumentEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的DocumentEvent事件,然后調(diào)用接口中的相應(yīng)方法對發(fā)生的事件作出處理。,15.4.5MouseEvent事件,1.使用MouseListener接口處理鼠標(biāo)事件使用MouseListener接口可以處理以下5種操作觸發(fā)的鼠標(biāo)事件:在事件源上按下鼠標(biāo)鍵。在事件源上釋放鼠標(biāo)鍵。在事件源上擊鼠標(biāo)鍵。鼠標(biāo)進(jìn)入事件源。鼠標(biāo)退出事件源。,,MouseEvent中有下列幾個重要的方法:getX()獲取鼠標(biāo)指針在事件源坐標(biāo)系中的x-坐標(biāo)。getY()獲取鼠標(biāo)指針在事件源坐標(biāo)系中的y-坐標(biāo)。getModifiers()獲取鼠標(biāo)的左鍵或右鍵。鼠標(biāo)的左鍵和右鍵分別使用InputEvent類中的常量BUTTON1_MASK和BUTTON3_MASK來表示。getClickCount()獲取鼠標(biāo)被單擊的次數(shù)。getSource()獲取發(fā)生鼠標(biāo)事件的事件源。,,事件源注冊監(jiān)視器的方法是addMouseListener(MouseListenerlistener)。MouseListener接口中有如下方法:mousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent),,2.使用MouseMotionListener接口處理鼠標(biāo)事件使用MouseMotionListener接口可以處理以下兩種操作觸發(fā)的鼠標(biāo)事件。在事件源上拖動鼠標(biāo)在事件源上移動鼠標(biāo)鼠標(biāo)事件的類型是MouseEvent,即當(dāng)發(fā)生鼠標(biāo)事件時,MouseEvent類自動創(chuàng)建一個事件對象。,,事件源注冊監(jiān)視器的方法是addMouseMotionListener(監(jiān)視器MotionListenerlistener)。MouseMotionListener接口中有如下方法。mouseDragged(MouseEvent)mouseMoved(MouseEvent),15.4.6焦點事件,組件可以觸發(fā)焦點事件。組件可以使用addFocusListener(FocusListenerlistener)注冊焦點事件監(jiān)視器。當(dāng)組件獲得焦點監(jiān)視器后,如果組件從無輸入焦點變成有輸入焦點或從有輸入焦點變成無輸入焦點都會觸發(fā)FocusEvent事件。,,創(chuàng)建監(jiān)視器的類必須要實現(xiàn)FocusListener接口,該接口有兩個方法:publicvoidfocusGained(FocusEvente)publicvoidfocusLost(FocusEvente),,用戶通過單擊組件可以使得該組件有輸入焦點,同時也使得其它組件變成無輸入焦點。一個組件也可調(diào)用publicbooleanrequestFocusInWindow()方法可以獲得輸入焦點。,15.4.7鍵盤事件,當(dāng)按下、釋放或敲擊鍵盤上一個鍵時就觸發(fā)了鍵盤事件,在Java事件模式中,必須要有發(fā)生事件的事件源。當(dāng)一個組件處于激活狀態(tài)時,敲擊鍵盤上一個鍵就導(dǎo)致這個組件觸發(fā)鍵盤事件。使用KeyListener接口處理鍵盤事件,該中有如下3個方法。publicvoidkeyPressed(KeyEvente)publicvoidkeyTyped(KeyEvente)publicvoidKeyReleased(KeyEvente),15.4.8匿名類實例或窗口做監(jiān)視器,讓事件源所在的類的實例作為監(jiān)視器,能讓事件的處理比較方便,這是因為,監(jiān)視器可以方便的操作事件源所在的類中的其他成員。當(dāng)事件的處理比較簡單,系統(tǒng)也不復(fù)雜時,讓事件源所在的類的實例作為監(jiān)視器是一個不錯的選擇。但是,當(dāng)事件的處理比較復(fù)雜時,使用當(dāng)前窗口會讓系統(tǒng)缺乏彈性,因為每當(dāng)修改處理事件的代碼時都將導(dǎo)致事件源所在的類的代同時被編譯,反之也是。,15.4.9事件總結(jié),1.授權(quán)模式Java的事件處理是基于授權(quán)模式,即事件源調(diào)用調(diào)用方法將某個對象注冊為自己的監(jiān)視器。2.接口回調(diào)Java語言使用接口回調(diào)技術(shù)實現(xiàn)處理事件的過程。addXXXListener(XXXListenerlistener)方法中的參數(shù)是一個接口,listener可以引用任何實現(xiàn)了該接口的類所創(chuàng)建的對象,當(dāng)事件源發(fā)生事件時,接口listener立刻回調(diào)被類實現(xiàn)的接口中的某個方法。,,3.方法綁定從方法綁定角度看,Java將某種事件的處理綁定到對應(yīng)的接口,即綁定到接口中的方法,也就是說,當(dāng)事件源觸發(fā)事件發(fā)生后,監(jiān)視器準(zhǔn)確知道去調(diào)用哪個方法。,,4.保持松藕合監(jiān)視器和事件源應(yīng)當(dāng)保持是一種松藕合關(guān)系,也就是說盡量讓事件源所在的類和監(jiān)視器是組合關(guān)系,盡量不要讓事件源所在的類的實例、以及它的子類的實例或內(nèi)部類、匿名類的實例做監(jiān)視器。也就是說,當(dāng)事件源觸發(fā)事件發(fā)生后,系統(tǒng)知道某個方法會被執(zhí)行,但無須關(guān)心到底是哪個對象去調(diào)用了這個方法,因為任何實現(xiàn)接口的類的實例(做為監(jiān)視器)都可以調(diào)用這個方法來處理事件。,15.5使用MVC結(jié)構(gòu),MVC是一種通過三個不同部分構(gòu)造一個軟件或組件的理想辦法:模型(model)用于存儲數(shù)據(jù)的對象。視圖(view)為模型提供數(shù)據(jù)顯示的對象。控制器(controller)處理用戶的交互操作,對于用戶的操作作出響應(yīng),讓模型和視圖進(jìn)行必要的交互,即通過視圖修改、獲取模型中的數(shù)據(jù);當(dāng)模型中的數(shù)據(jù)變化時,讓視圖更新顯示。,15.6對話框,JDialog類和JFrame都是Window的子類,二者的實例都是底層容器,但二者有相似之處也有不同的地方,主要區(qū)別是,JDialog類創(chuàng)建的對話框必須要依賴于某個窗口。對話框分為無模式和有模式兩種。如果一個對話框是有模式的對話框,那么當(dāng)這個對話框處于激活狀態(tài)時,只讓程序響應(yīng)對話框內(nèi)部的事件,而且將堵塞其它線程的執(zhí)行,用戶不能再激活對話框所在程序中的其它窗口,直到該對話框消失不可見。無模式對話框處于激活狀態(tài)時,能再激活其它窗口,也不堵塞其它線程的執(zhí)行。,15.6.1消息對話框,消息對話框是有模式對話框,進(jìn)行一個重要的操作動作之前,最好能彈出一個消息對話框??梢杂胘avax.swing包中的JOptionPane類的靜態(tài)方法:publicstaticvoidshowMessageDialog(ComponentparentComponent,Stringmessage,Stringtitle,intmessageType)創(chuàng)建一個消息對話框,15.6.2輸入對話框,輸入對話框含有供用戶輸入文本的文本框、一個確認(rèn)和取消按鈕,是有模式對話框。當(dāng)輸入對話框可見時,要求用戶輸入一個字符串。javax.swing包中的JOptionPane類的靜態(tài)方法:publicstaticStringshowInputDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType)可以創(chuàng)建一個輸入對話框,15.6.3確認(rèn)對話框,確認(rèn)對話框是有模式對話框,可以用javax.swing包中的JOptionPane類的靜態(tài)方法:publicstaticintshowConfirmDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType)得到一個確認(rèn)對話框,15.6.4顏色對話框,可以用javax.swing包中的JColorChooser類的靜態(tài)方法:publicstaticColorshowDialog(Componentcomponent,Stringtitle,ColorinitialColor)創(chuàng)建一個有模式的顏色對話框,15.6.5文件對話框,文件對話框是一個從文件中選擇文件的界面。javax.swing包中的JFileChooser類可以創(chuàng)建文件對話框,使用該類的構(gòu)造方法JFileChooser()創(chuàng)建初始不可見的有模式的文件對話框。然后文件對話框調(diào)用下述2個方法:showSaveDialog(Componenta);showOpenDialog(Componenta);都可以使得對話框可見,只是呈現(xiàn)的外觀有所不同,showSaveDialog方法提供保存文件的界面,showOpenDialog方法提供打開文件的界面,15.6.6自定義對話框,創(chuàng)建對話框與創(chuàng)建窗口類似,通過建立JDialog的子類來建立一個對話框類,然后這個類的一個實例,即這個子類創(chuàng)建的一個對象,就是一個對話框。對話框是一個容器,它的默認(rèn)布局是BorderLayout,對話框可以添加組件,實現(xiàn)與用戶的交互操作,,以下是構(gòu)造對話框的2個常用構(gòu)造方法。JDialog()構(gòu)造一個無有標(biāo)題的初始不可見的對話框,對話框依賴一個默認(rèn)的不可見的窗口,該窗口由Java運(yùn)行環(huán)境提供。JDialog(JFrameowner)構(gòu)造一個無標(biāo)題的初始不可見的無模式的對話框,owner是對話框所依賴的窗口,如果owner取null,對話框依賴一個默認(rèn)的不可見的窗口,該窗口由Java運(yùn)行環(huán)境提供。,15.7發(fā)布GUI程序,可以使用jar.exe把一些文件壓縮成一個JAR文件,來發(fā)布我們的應(yīng)用程序。我們可以把java應(yīng)用程序中涉及到的類壓縮成一個JAR文件,比如Tom.jar,然后使用java解釋器(使用參數(shù)-jar)執(zhí)行這個壓縮文件,或用鼠標(biāo)雙擊該文件,執(zhí)行這個壓縮文件。java-jarTom.jar,,假設(shè)D:\test目錄中的應(yīng)用程序有兩個類A、B,其中A是主類。生成一個Jar文件的步驟如下:1.首先用文本編輯器(比如Windows下的記事本)編寫一個清單文件。Mymoon.mf:Manifest-Version:1.0Main-Class:ACreated-By:1.6,,2.生成JAR文件D:\test\jarcfmTom.jarMymoon.mfA.classB.class如果目錄test下的字節(jié)碼文件剛好是應(yīng)用程序需要的全部字節(jié)碼文件,也可以如下生成JAR文件:D:\test\jarcfmTom.jarMymoon.mf*.class,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- JAVA 圖形用戶界面設(shè)計 圖形 用戶 界面設(shè)計
鏈接地址:http://m.appdesigncorp.com/p-3337272.html