圖形用戶界面設計課件_第1頁
圖形用戶界面設計課件_第2頁
圖形用戶界面設計課件_第3頁
圖形用戶界面設計課件_第4頁
圖形用戶界面設計課件_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、15.1 Java Swing概述 Java的java.awt包,即Java抽象窗口工具包(AWT:Abstract Window Toolkit)提供了許多用來設計GUI的組件類 在學習GUI編程時,必須很好地理解掌握兩個概念:容器類(Container)和組件類(Component)。javax.swing包中JComponent類是java.awt包中Container類的一個直接子類、是Component類的一個間接子類,學習GUI編程主要是學習掌握使用Component類的一些重要的子類。 Java把Component類的子類或間接子類創(chuàng)建的對象稱為一個組件。Java把Contain

2、er的子類或間接子類創(chuàng)建的對象稱為一個容器??梢韵蛉萜魈砑咏M件。Container類提供了一個public方法:add( ),一個容器可以調(diào)用這個方法將組件添加到該容器中。容器調(diào)用removeAll()方法可以移掉容器中的全部組件;調(diào)用remove(Component c)方法可以移掉容器中參數(shù)c指定的組件。注意到容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現(xiàn)容器的嵌套。圖15.1 Component類的部分子類ContainerComponentJComponentWindow JButton JTextField JTeatArea JTree JPanel JTable

3、JFrameJDialogFrameDialog15.2 窗口 Java提供的JFrame類的實例就是一個底層容器(JDialog類的實例也是一個底層容器,見后面的15.6),即通常所稱的窗口。其他組件必須被添加到底層容器中,以便借助這個地層容器和操作系統(tǒng)進行信息交互 JFrame類是Container類的間接子類。當需要一個窗口時,可使用JFrame或其子類創(chuàng)建一個對象 15.2.1 JFrame常用方法 JFrame() 創(chuàng)建一個無標題的窗口。JFrame(String s) 創(chuàng)建標題為s的窗口。public void setVisible(boolean b) 設置窗口是否可見,窗口默認

4、是不可見的。public void dispose() 撤消當前窗口,并釋放當前窗口所使用的資源。public void setDefaultCloseOperation(int operation) 該方法用來設置單擊窗體右上角的關(guān)閉圖標后,程序會做出怎樣的處理。 15.2.2 菜單條、菜單、菜單項 窗口中的菜單條、菜單、菜單項是我們所熟悉的組件,菜單放在菜單條里,菜單項放在菜單里。 1菜單條JComponent類的子類JMenubar負責創(chuàng)建菜單條,即JMenubar的一個實例就是一個菜單條。JFrame類有一個將菜單條放置到窗口中的方法:setJMenuBar(JMenuBar bar)

5、;該方法將菜單條添加到窗口的頂端,需要注意的是,只能向窗口添加一個菜單條。 2菜單JComponent類的子類JMenu負責創(chuàng)建菜單,即JMenu的一個實例就是一個菜單。3菜單項JComponent類的子類JMenuItem負責創(chuàng)建菜單項,即JMenuItem的一個實例就是一個菜單項。 4嵌入子菜單JMenu是JMenuItem的子類,因此菜單本身也是一個菜單項,當把一個菜單看作菜單項添加到某個菜單中時,稱這樣的菜單為子菜單。5菜單上的圖標圖15.3 帶菜單的窗口為了使菜單項有一個圖標,可以用圖標類Icon聲明一個圖標,然后使用其子類ImageIcon類創(chuàng)建一個圖標 15.3 常用組件與布局

6、可以使用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標簽使用JComponent的子類JLabel類用來創(chuàng)建標簽,標簽為用戶提供信息提示。5選擇框使用JComponent的子類JCheckBox類用來創(chuàng)建選擇框,為用戶提供多項

7、選擇。選擇框的右面有個名字,并提供兩種狀態(tài),一種是選中,另一種是未選中,用戶通過單擊該組件切換狀態(tài)。6單選按鈕使用JComponent的子類JRadioButton類用來創(chuàng)建單項選擇框,為用戶提供單項選擇。 7下拉列表使用JComponent的子類JComboBox類用來創(chuàng)建下拉列表,為用戶提供單項選擇。用戶可以在下拉列表看到第一個選項和它旁邊的箭頭按鈕,當用戶單擊箭頭按鈕時,選項列表打開。8密碼框可以使用JComponent的子類JPasswordField創(chuàng)建密碼框。允許用戶在密碼框中輸入單行密碼,密碼框的默認回顯字符是*。密碼框可以使用setEchoChar(char c)重新設置回顯字

8、符,用戶輸入密碼時,密碼框只顯示回顯字符。密碼框調(diào)用char getPassword()方法可以返回實際的密碼。 15.3.2 常用容器 1JPanel 面板我們會經(jīng)常使用JPanel創(chuàng)建一個面板,再向這個面板添加組件,然后把這個面板添加到其它容器中。JPanel面板的默認布局是FlowLayout布局。2滾動窗格JScrollPane滾動窗格只可以添加一個組件,可以把一個組件放到一個滾動窗格中,然后通過滾動條來該組件。JTextArea不自帶滾動條,因此我們就需要把文本區(qū)放到一個滾動窗格中 3拆分窗格JSplitPane顧名思義,拆分窗格就是被分成兩部分的容器。拆分窗格有兩種類型:水平拆分和

9、垂直拆分。水平拆分窗格用一條拆分線把窗格分成左右兩部分,左面放一個組件,右面放一個組件,拆分線可以水平移動。垂直拆分窗格用一條拆分線把窗格分成上下兩部分,上面放一個組件,下面放一個組件,拆分線可以垂直移動。 JSplitPane的兩個常用的構(gòu)造方法:JSplitPane(int a,Component b,Component c)參數(shù)a取JSplitPane的靜態(tài)常量 HORIZONTAL_SPLIT或VERTICAL_SPLIT,以決定是水平還是垂直拆分。后兩個參數(shù)決定要放置的組件。當拆分線移動時,組件不是連續(xù)變化的。JSplitPane(int a, boolean b,Component

10、 c,Component d)參數(shù)a取JSplitPane的靜態(tài)常量 HORIZONTAL_SPLIT或VERTICAL_SPLIT,以決定是水平還是垂直拆分。參數(shù)b決定當拆分線移動時,組件是否連續(xù)變化(true是連續(xù)),后兩個參數(shù)決定要放置的組件。4JLayeredPane分層窗格如果添加到容器中的組件經(jīng)常需要處理重疊問題,就可以考慮將組件添加到分層窗格。分層窗格分成5個層,分層窗格使用add(Jcomponent com, int layer);添加組件com,并指定com所在的層,其中參數(shù)layer取值JLayeredPane類中的類常量:DEFAULT_LAYER、PALETTE_LA

11、YER、MODAL_LAYER、POPUP_LAYER、DRAG_LAYER15.3.3 常用布局 容器可以使用方法:setLayout(布局對象);設置自己的布局。 1FlowLayout布局FlowLayout類創(chuàng)建的對象稱做FlowLayout型布局。FlowLayout型布局是JPanel型容器的默認布局,即JPanel及其子類創(chuàng)建的容器對象,如果不專門為其指定布局,則它們的布局就是FlowLayout型布局。FlowLayout類的一個常用構(gòu)造方法如下:FlowLayout(); 該構(gòu)造方法可以創(chuàng)建一個居中對齊的布局對象 如果一個容器con使用這個布局對象:con.setLayout

12、(flow);那么,con可以使用Container類提供的add方法將組件順序地添加到容器中,組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列,每一行中的組件都居中排列,組件之間的默認水平和垂直間隙是5個像素。組件的大小為默認的最佳大小 對于添加到使用FlowLayout布局的容器中的組件,組件調(diào)用setSize(int x,int y)設置的大小無效,如果需要改變最佳大小,組件需調(diào)用:public void setPreferredSize(DimensionpreferredSize)設置大小 FlowLayout布局對象調(diào)用setAlignment(int

13、aligin)方法可以重新設置布局的對齊方式,其中aligin可以取值:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHTFlowLayout布局對象調(diào)用setHgap(int hgap)方法和setVgap(int vgap)可以重新設置水平間隙和垂直間隙 2BorderLayout布局BorderLayout 布局是Window型容器的默認布局,例如JFrame、JDialog都是Window類的子類,它們的默認布局都是BorderLayout布局。BorderLayout也是一種簡單的布局策略,如果一個容器使用這種布局,那么容器空間簡單地

14、劃分為東、西、南、北、中五個區(qū)域,中間的區(qū)域最大。每加入一個組件都應該指明把這個組件加在哪個區(qū)域中,區(qū)域由BorderLayout中的靜態(tài)常量CENTER、NORTH、SOUTH、WEST、EAST表示 每個區(qū)域只能放置一個組件,如果向某個已放置了組件的區(qū)域再放置一個組件,那么先前的組件將被后者替換掉。使用BorderLayout布局的容器最多能添加5個組件,如果容器中需要加入超過5個組件,就必須使用容器的嵌套或改用其它的布局策略。 3CardLayout 布局使用CardLayout 的容器可以容納多個組件,這些組件被層疊放如容器中,最先加入容器的是第一張(在最上面),依次向下排序。使用該布

15、局的特點是,同一時刻容器只能從這些組件中選出一個來顯示,就像疊“撲克牌”,每次只能顯示其中的一張,這個被顯示的組件將占據(jù)所有的容器空間。 假設有一個容器con,那么,使用CardLayout的一般步驟如下:創(chuàng)建CardLayout對象作為布局,使用容器的setLayout()方法為容器設置布局,容器調(diào)用add(String s,Component b)將組件b加入容器,并給出了顯示該組件的代號s。組件的代號是一個字符串,和組件的名字沒有必然聯(lián)系,但是,不同的組件代號必須互不相同。最先加入con的是第一張,依次排序。創(chuàng)建的布局card用CardLayout類提供的show()方法,顯示容器con

16、中組件代號為s的組件:card.show(con,s);3GridLayout布局GridLayout是使用較多的布局編輯器,其基本布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。GridLayout比較靈活,劃分多少網(wǎng)格由程序自由控制,而且組件定位也比較精確,使用GridLayout布局編輯器的一般步驟如下:使用GridLayout的構(gòu)造方法GridLayout(int m,int n)創(chuàng)建布局對象,指定劃分網(wǎng)格的行數(shù)m和列數(shù)n,使用GridLayout布局的容器調(diào)用方法add(Component c)將組件c加入容器,組件進入容器的順序?qū)凑盏谝恍械谝粋€、第

17、一行第二個、第一行最后一個、第二行第一個、最后一行第一個、最后一行最后一個。 使用GridLayout布局的容器最多可添加mn個組件。GridLayout布局中每個網(wǎng)格都是相同大小并且強制組件與網(wǎng)格的大小相同。5BoxLayout布局用BoxLayout類可以創(chuàng)建一個布局對象,稱為盒式布局。BoxLayout在javax.swing.border包中。javax. swing包提供了Box類,該類也是Container類的一個子類,創(chuàng)建的容器稱作一個盒式容器,盒式容器的的默認布局是盒式布局,而且不允許更改盒式容器的布局。因此,在策劃程序的布局時,可以利用容器的嵌套,將某個容器嵌入幾個盒式容器,

18、達到你的布局目的。 使用盒式布局的容器將組件排列在一行或一列,這取決于創(chuàng)建盒式布局對象時,是否指定了是行排列還是列排列。使用BoxLayou的構(gòu)造方法BoxLayout(Container con,,int axis)可以創(chuàng)建一個盒式布局對象 行型盒式布局容器中添加的組件的上沿在同一水平線上。列型盒式布局容器中添加的組件的左沿在同一垂直線上。容器的目的是向其添加組件,并根據(jù)需要設置合理的布局。如果需要一個盒式布局的容器,可以使用Box類的類(靜態(tài))方法 createHorizontalBox()獲得一個具有行型盒式布局的盒式容器;使用Box類的類(靜態(tài))方法 createVerticalBox

19、()獲得一個具有列型盒式布局的盒式容器。如果想控制盒式布局容器中組件之間的距離,就需要使用水平支撐組件或垂直支撐組件。Box類調(diào)用靜態(tài)方法createHorizontalStrut(int width)可以得到一個不可見的水平Struct對象,稱做水平支撐。該水平支撐的高度為0,寬度是width。Box類調(diào)用靜態(tài)方法createVertialStrut(int height)可以得到一個不可見的垂直Struct對象,稱做垂直支撐。參數(shù)height決定垂直支撐的高度,垂直支撐的寬度為0。一個行型盒式布局的容器,可以在組件之間插入水平支撐來控制組件之間的距離。一個列型盒式布局的容器,可以在組件之間

20、插入垂直支撐來控制組件之間的距離 6null布局可以把一個容器的布局設置為null布局(空布局)??詹季秩萜骺梢詼蚀_地定位組件在容器的位置和大小。setBounds(int a,int b,int width,int height)方法是所有組件都擁有的一個方法,組件調(diào)用該方法可以設置本身的大小和在容器中的位置。15.4 處理事件 15.4.1 事件處理模式 1事件源能夠產(chǎn)生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是Java認為能夠發(fā)生事件的對象。 2監(jiān)視器。我們需要一個對象對事件源進行監(jiān)視,以便對發(fā)生的事件作出處理。事件源通過

21、調(diào)用相應的方法將某個對象注冊為自己的監(jiān)視器 事件源注冊監(jiān)視器之后,相應的操作就會導致相應的事件的發(fā)生,并通知監(jiān)視器,監(jiān)視器就會作出相應的處理。 3處理事件的接口。監(jiān)視器負責處理事件源發(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ā)生的事件進行處理,創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應的接口,即必須在類體中重寫接口中所有方法,那么當事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用被類重寫的某個接口方法。

22、發(fā)生圖15.6 處理事件示意圖XXX事件事件源.addXXXListener (監(jiān)視器)class A implements XXXListener類A負責創(chuàng)建監(jiān)視器,A必須實現(xiàn)XXXListenet接口通知監(jiān)視器回調(diào)接口方法接口方法15.4.2 ActionEvent事件 1ActionEvent事件源文本框、按紐、菜單項、密碼框和單選按紐都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。比如,對于注冊了監(jiān)視器的文本框,在文本框獲得輸入焦點后,如果用戶按回車鍵,Java運行環(huán)境就自動用ActionEvent類創(chuàng)建一個對象,即觸發(fā)ActionEvent事件;

23、對于注冊了監(jiān)視器的按紐,如果用戶按單擊按紐,就會觸發(fā)ActionEvent事件;對于注冊了監(jiān)視器的菜單項,如果用戶按選中該菜單項,就會觸發(fā)ActionEvent事件;如果用戶按選擇了某個單選按紐,就會觸發(fā)ActionEvent事件。 2注冊監(jiān)視器能觸發(fā)ActionEvent事件的組件使用addActiomListener(ActionListener listen)將實現(xiàn)ActionListener接口的類的實例注冊為事件源的監(jiān)視器。 3ActionListener接口ActionListener接口在java.awt.event包中,該接口中只有一個方法:public void action

24、Performed(ActinEvent e)事件源觸發(fā)ActionEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ActionEvent事件,然后調(diào)用接口中的方法:actionPerformed(ActinEvent e)對發(fā)生的事件作出處理。當監(jiān)視器調(diào)用actionPerformed(ActinEvent e)方法時,ActionEvent類事先創(chuàng)建的事件對象就會傳遞給該方法的參數(shù)e。 4ActionEvent類中的方法ActionEvent類有如下常用的方法:public Object getSource() public String getActionCommand()15.4.3 ItemEv

25、ent事件 1ItemEvent事件源選擇框、下拉列表都可以觸發(fā)ItemEvent事件。選擇框提供兩種狀態(tài),一種是選中,另一種是未選中,對于注冊了監(jiān)視器的選擇框,當用戶的操作使得選擇框從未選中狀態(tài)變成選中狀態(tài)或從選中狀態(tài)變成未選中狀態(tài)時就觸發(fā)ItemEvent事件;同樣,對于注冊了監(jiān)視器的下拉列表,如果用戶按選中下拉列表中的某個選項,就會觸發(fā)ItemEvent事件。 2注冊監(jiān)視器能觸發(fā)ItemEvent事件的組件使用addItemListener(ItemListener listen)將實現(xiàn)ItemListener接口的類的實例注冊為事件源的監(jiān)視器。 3ItemListener接口ItemL

26、istener接口在java.awt.event包中,該接口中只有一個方法:public void itemStateChanged(ItemEvent e)事件源觸發(fā)ItemEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ItemEvent事件,然后調(diào)用接口中的方法:itemStateChanged(ItemEvent e)對發(fā)生的事件作出處理。當監(jiān)視器調(diào)用itemStateChanged(ItemEvent e)方法時,ItemEvent類事先創(chuàng)建的事件對象就會傳遞給該方法的參數(shù)e。ItemEvent事件對象除了可以使用getSource()方法返回發(fā)生Itemevent事件的事件源外,也可以使用ge

27、tItemSelectable()方法返回發(fā)生Itemevent事件的事件源。 15.4.4 DocumentEvent事件 1DocumentEvent事件源文本區(qū)含有一個實現(xiàn)Document接口的實例,該實例被稱做文本區(qū)所維護的文檔,文本區(qū)調(diào)用getDocument()方法返回所維護的文檔。文本區(qū)所維護的文檔能觸發(fā)DocumentEvent事件。需要特別注意的是,DocumentEvent不在java.awt.event包中,而是在javax.swing.event包中。用戶在文本區(qū)中進行文本編輯操作,使得文本區(qū)中的文本區(qū)內(nèi)容發(fā)生變化,將導致文本區(qū)所維護的文檔模型中的數(shù)據(jù)發(fā)生變化,從而導致

28、文本區(qū)所維護的文檔觸發(fā)DocumentEvent事件。 2注冊監(jiān)視器能觸發(fā)DocumentEven事件的事件源使用addDucumentListener(DocumentListener listen)將實現(xiàn)DocumentListener接口的類的實例注冊為事件源的監(jiān)視器。 3DocumentListener接口DocumentListener接口在java.swing.event包中,該接口中有三個方法: public void changedUpdate(DocumentEvent e) public void removeUpdate(DocumentEvent e) public v

29、oid insertUpdate(DocumentEvent e)事件源觸發(fā)DucumentEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的DocumentEvent事件,然后調(diào)用接口中的相應方法對發(fā)生的事件作出處理。 15.4.5 MouseEvent事件 1使用MouseListener接口處理鼠標事件使用MouseListener接口可以處理以下5種操作觸發(fā)的鼠標事件:在事件源上按下鼠標鍵。在事件源上釋放鼠標鍵。在事件源上擊鼠標鍵。鼠標進入事件源。鼠標退出事件源。 MouseEvent 中有下列幾個重要的方法:getX() 獲取鼠標指針在事件源坐標系中的x-坐標。getY() 獲取鼠標指針在事件源坐

30、標系中的y-坐標。getModifiers() 獲取鼠標的左鍵或右鍵。鼠標的左鍵和右鍵分別使用InputEvent類中的常量BUTTON1_MASK和BUTTON3_MASK來表示。getClickCount() 獲取鼠標被單擊的次數(shù)。getSource() 獲取發(fā)生鼠標事件的事件源。 事件源注冊監(jiān)視器的方法是addMouseListener(MouseListener listener)。MouseListener接口中有如下方法:mousePressed(MouseEvent) mouseReleased(MouseEvent)mouseEntered(MouseEvent) mouseE

31、xited(MouseEvent)mouseClicked(MouseEvent) 2使用MouseMotionListener接口處理鼠標事件使用MouseMotionListener接口可以處理以下兩種操作觸發(fā)的鼠標事件。在事件源上拖動鼠標在事件源上移動鼠標鼠標事件的類型是MouseEvent,即當發(fā)生鼠標事件時,MouseEvent類自動創(chuàng)建一個事件對象。事件源注冊監(jiān)視器的方法是addMouseMotionListener(監(jiān)視器MotionListener listener)。MouseMotionListener接口中有如下方法。mouseDragged(MouseEvent) mo

32、useMoved(MouseEvent)15.4.6 焦點事件 組件可以觸發(fā)焦點事件。組件可以使用addFocusListener(FocusListener listener)注冊焦點事件監(jiān)視器。當組件獲得焦點監(jiān)視器后,如果組件從無輸入焦點變成有輸入焦點或從有輸入焦點變成無輸入焦點都會觸發(fā)FocusEvent事件。 創(chuàng)建監(jiān)視器的類必須要實現(xiàn)FocusListener接口,該接口有兩個方法:public void focusGained(FocusEvent e)public void focusLost(FocusEvent e) 用戶通過單擊組件可以使得該組件有輸入焦點,同時也使得其它組件

33、變成無輸入焦點。一個組件也可調(diào)用public boolean requestFocusInWindow()方法可以獲得輸入焦點。 15.4.7 鍵盤事件 當按下、釋放或敲擊鍵盤上一個鍵時就觸發(fā)了鍵盤事件,在Java事件模式中,必須要有發(fā)生事件的事件源。當一個組件處于激活狀態(tài)時,敲擊鍵盤上一個鍵就導致這個組件觸發(fā)鍵盤事件。使用KeyListener接口處理鍵盤事件,該中有如下3個方法。public void keyPressed(KeyEvent e)public void keyTyped(KeyEvent e)public void KeyReleased(KeyEvent e) 15.4.

34、8 匿名類實例或窗口做監(jiān)視器讓事件源所在的類的實例作為監(jiān)視器,能讓事件的處理比較方便,這是因為,監(jiān)視器可以方便的操作事件源所在的類中的其他成員。當事件的處理比較簡單,系統(tǒng)也不復雜時,讓事件源所在的類的實例作為監(jiān)視器是一個不錯的選擇。但是,當事件的處理比較復雜時,使用當前窗口會讓系統(tǒng)缺乏彈性,因為每當修改處理事件的代碼時都將導致事件源所在的類的代同時被編譯,反之也是。 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(XXXListener l

35、istener)方法中的參數(shù)是一個接口,listener可以引用任何實現(xiàn)了該接口的類所創(chuàng)建的對象,當事件源發(fā)生事件時,接口listener立刻回調(diào)被類實現(xiàn)的接口中的某個方法。 3.方法綁定從方法綁定角度看,Java將某種事件的處理綁定到對應的接口,即綁定到接口中的方法,也就是說,當事件源觸發(fā)事件發(fā)生后,監(jiān)視器準確知道去調(diào)用哪個方法。 4.保持松藕合監(jiān)視器和事件源應當保持是一種松藕合關(guān)系,也就是說盡量讓事件源所在的類和監(jiān)視器是組合關(guān)系,盡量不要讓事件源所在的類的實例、以及它的子類的實例或內(nèi)部類、匿名類的實例做監(jiān)視器。也就是說,當事件源觸發(fā)事件發(fā)生后,系統(tǒng)知道某個方法會被執(zhí)行,但無須關(guān)心到底是哪個

36、對象去調(diào)用了這個方法,因為任何實現(xiàn)接口的類的實例(做為監(jiān)視器)都可以調(diào)用這個方法來處理事件。15.5 使用MVC結(jié)構(gòu)MVC是一種通過三個不同部分構(gòu)造一個軟件或組件的理想辦法:模型(model) 用于存儲數(shù)據(jù)的對象。視圖(view) 為模型提供數(shù)據(jù)顯示的對象??刂破鳎╟ontroller)處理用戶的交互操作,對于用戶的操作作出響應,讓模型和視圖進行必要的交互,即通過視圖修改、獲取模型中的數(shù)據(jù);當模型中的數(shù)據(jù)變化時,讓視圖更新顯示。15.6 對話框JDialog類和JFrame都是Window的子類,二者的實例都是底層容器,但二者有相似之處也有不同的地方,主要區(qū)別是,JDialog類創(chuàng)建的對話框必

37、須要依賴于某個窗口。對話框分為無模式和有模式兩種。如果一個對話框是有模式的對話框,那么當這個對話框處于激活狀態(tài)時,只讓程序響應對話框內(nèi)部的事件,而且將堵塞其它線程的執(zhí)行,用戶不能再激活對話框所在程序中的其它窗口,直到該對話框消失不可見。無模式對話框處于激活狀態(tài)時,能再激活其它窗口,也不堵塞其它線程的執(zhí)行。15.6.1 消息對話框消息對話框是有模式對話框,進行一個重要的操作動作之前,最好能彈出一個消息對話框??梢杂胘avax.swing包中的JOptionPane類的靜態(tài)方法:public static void showMessageDialog(Component parentCompone

38、nt, String message, String title, int messageType)創(chuàng)建一個消息對話框15.6.2 輸入對話框輸入對話框含有供用戶輸入文本的文本框、一個確認和取消按鈕,是有模式對話框。當輸入對話框可見時,要求用戶輸入一個字符串。javax.swing包中的JOptionPane類的靜態(tài)方法:public static String showInputDialog(Component parentComponent, Object message, String title, int messageType)可以創(chuàng)建一個輸入對話框15.6.3 確認對話框確認對話框是有模式對話框,可以用javax.swing包中的JOptionPane類的靜

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論