Java 第九章組件及事件處理_第1頁
Java 第九章組件及事件處理_第2頁
Java 第九章組件及事件處理_第3頁
Java 第九章組件及事件處理_第4頁
Java 第九章組件及事件處理_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

注意:開始用功了!第1頁1

頁《Java2實用教程(第4版)》第9章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平組件及事件處理

第2頁導讀主要內(nèi)容JavaSwing概述窗口常用組件與布局處理事件使用MVC結構對話框發(fā)布GUI程序第3頁§9.1JavaSwing概述

javax.swing包中JComponent類是java.awt包中Container類的一個直接子類、是java.awt包中Component類的一個間接子類,學習GUI編程主要是學習掌握使用Component類的一些重要的子類。以下是GUI編程經(jīng)常提到的基本知識點

。(1)Java把Component類的子類或間接子類創(chuàng)建的對象稱為一個組件。(2)Java把Container的子類或間接子類創(chuàng)建的對象稱為一個容器。(3)可以向容器添加組件。Container類提供了一個public方法:add(),一個容器可以調(diào)用這個方法將組件添加到該容器中。(4)容器調(diào)用removeAll()方法可以移掉容器中的全部組件;調(diào)用remove(Componentc)方法可以移掉容器中參數(shù)c指定的組件。(5)注意到容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現(xiàn)容器的嵌套。(6)每當容器添加新的組件或移掉組件時,應當讓容器調(diào)用validate()方法,以保證容器中的組件能正確顯示出來第4頁

javax.swing包提供了功能更為強大的用來設計GUI的類。java.awt和javax.swing包中一部分類的層次關系的UML類圖如圖9.1。

第5頁§9.2窗口

Java提供的JFrame類的實例是一個底層容器,即通常所稱的窗口。其他組件必須被添加到底層容器中,以便借助這個地層容器和操作系統(tǒng)進行信息交互。

JFrame類是Container類的間接子類。當需要一個窗口時,可使用JFrame或其子類創(chuàng)建一個對象。第6頁§9.2.1JFrame常用方法JFrame()

創(chuàng)建一個無標題的窗口。JFrame(Strings)

創(chuàng)建標題為s的窗口。publicvoidsetBounds(inta,intb,intwidth,intheight

設置窗口的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。publicvoidsetSize(intwidth,intheight)

設置窗口的大小。publicvoidsetLocation(intx,inty)

設置窗口的位置,默認位置是(0,0)。publicvoidsetVisible(booleanb)

設置窗口是否可見,窗口默認是不可見的。publicvoidsetResizable(booleanb)設置窗口是否可調(diào)整大小,默認可調(diào)整大小。publicvoiddispose()

撤消當前窗口,并釋放當前窗口所使用的資源。publicvoidsetExtendedState(intstate)

設置窗口的擴展狀態(tài).publicvoidsetDefaultCloseOperation(intoperation)

該方法用來設置單擊窗體右上角的關閉圖標后,程序會做出怎樣的處理。例子1用JFrame創(chuàng)建了兩個窗口,程序運行效果如圖9.2。第7頁§9.2.2菜單條、菜單、菜單項1.菜單條JComponent類的子類JMenubar負責創(chuàng)建菜單條,JFrame類有一個將菜單條放置到窗口中的方法:setJMenuBar(JMenuBarbar);該方法將菜單條添加到窗口的頂端2.菜單:JComponent類的子類JMenu負責創(chuàng)建菜單,JMenu類的主要方法有以下幾種publicvoidadd(JMenuItemitem)

向菜單增加由參數(shù)item指定的菜單選項。publicJMenuItemgetItem(intn)

得到指定索引處的菜單選項。publicintgetItemCount()

得到菜單選項的數(shù)目。3.菜單項

JComponent類的子類JMenuItem負責創(chuàng)建菜單項,JMenuItem類的主要方法有以下幾種:

JMenuItem(Strings)

構造有標題的菜單項。JMenuItem(Stringtext,Iconicon)

構造有標題和圖標的菜單項publicvoidsetAccelerator(KeyStrokekeyStroke)

為菜單項設置快捷鍵。例子2(Example9_2.java

,WindowMenu.java

)在主類的main方法中用JFrame的子類創(chuàng)建一個含有菜單的窗口,效果如圖9.3。

第8頁§9.3常用組件與布局

可以使用JComponent的子類JTextField創(chuàng)建各種組件。利用組件可以完成應用程序與用戶的交互及事件處理等。也可以在命令行窗口反編譯組件即時查看組件所具有的屬性及常用方法,例如:C:\>javapjavax.swing.JComponent也可以查看類庫幫助文檔.例如下載Java類庫幫助文檔:jdk-6-doc.zip。

第9頁§9.3.1常用組件1.文本框:由JComponent的子類JTextField創(chuàng)建文本框。2.文本區(qū):由JComponent的子類JTexArea創(chuàng)建文本區(qū)。3.按鈕:由JComponent的子類JButton類用來創(chuàng)建按鈕。4.標簽:由JComponent的子類JLabel類用來創(chuàng)建標簽。5.選擇框:由JComponent的子類JCheckBox類用來創(chuàng)建選擇框。6.單選按鈕:由JComponent的子類JRadioButton類用來創(chuàng)建單項選擇框。7.下拉列表:由JComponent的子類JComboBox類用來創(chuàng)建下拉列表。8.密碼框:由JComponent的子類JPasswordField創(chuàng)建密碼框。

密碼框可以使用setEchoChar(charc)重新設置回顯字符。密碼框調(diào)用char[]getPassword()方法可以返回實際的密碼。例子3(Example9_3.java

,ComponentInWindow.java

)包含有上面提到的常用組件。第10頁§9.3.2常用容器

JComponent是Container的子類,因此JComponent子類創(chuàng)建的組件也都是容器。容器經(jīng)常用來添加組件。Jframe是底層容器,本節(jié)提到的容器被習慣地稱做中間容器,中間容器必須被添加到底層容器中才能發(fā)揮作用。1.JPanel面板:使用JPanel創(chuàng)建面板,再向這個面板添加組件,然后把這個面板添加到其它容器中。JPanel面板的默認布局是FlowLayout布局。2.滾動窗格JScrollPane:可以將文本區(qū)放到一個滾動窗格中。

JScorollPanescroll=newJScorollPane(newJTextArea());3.拆分窗格JSplitPane:窗格有兩種類型:水平拆分和垂直拆分JSplitPane的兩個常用的構造方法:JSplitPane(inta,Componentb,Componentc)JSplitPane(inta,booleanb,Componentc,Componentd)

4.JLayeredPane分層窗格:分層窗格使用add(Jcomponentcom,intlayer);添加組件com,并指定com所在的層publicvoidsetLayer(Componentc,intlayer)可以重新設置組件c所在的層publicintgetLayer(Componentc)可以獲取組件c所在的層數(shù)。第11頁§9.3.3常用布局_1容器可以使用方法setLayout(布局對象);設置自己的布局,控制組件在容器中的位置。1.FlowLayout布局:

1)創(chuàng)建布局對象FlowLayoutflow=newFlowLayout();2)容器con使用布局對象con.setLayout(flow);3)con可以使用Container類提供的add方法將組件順序地添加到容器中;

FlowLayout布局對象調(diào)用相應的方法可以重新設置布局的對齊方式等.2.BorderLayout布局:

BorderLayout布局是Window型容器的默認布局。使用BorderLayout布局的容器con,可以使用add方法將一個組件b添加到中心區(qū)域:con.add(b,BorderLayout.CENTER);或

con.add(BorderLayour.CENTER,b);

第12頁§9.3.3常用布局_23.CardLayout布局:

使用CardLayout的一般步驟如下:1)創(chuàng)建CardLayout對象CardLayoutcard=newCardLayout();2)為容器設置布局con.setLayout(card);3)容器調(diào)用add(Strings,Componentb)將組件b加入容器,并給出了顯示該組件的代號s。4)布局對象card用CardLayout類提供的show()方法,顯示容器con中組件代號為s的組件:card.show(con,s);4.GridLayout布局:

GridLayout布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。GridLayout布局編輯器的一般步驟如下:1)創(chuàng)建布局對象,指定劃分網(wǎng)格的行數(shù)m和列數(shù)n

GridLayoutgrid=newnewGridLayout(10,8);

2)使用GridLayout布局的容器調(diào)用方法add(Componentc)將組件c加入容器。

例題4

利用GriderLayout布局模擬的國際象棋棋盤,效果如圖9.5。

第13頁§9.3.3常用布局_35.BoxLayout布局:使用盒式布局的容器將組件排列在一行或一列.BoxLayout布局的一般步驟如下:1)創(chuàng)建布局對象,使用BoxLayou的構造方法BoxLayout(Containercon,,intaxis)可以創(chuàng)建一個盒式布局對象.2)可以使用Box類的類(靜態(tài))方法createHorizontalBox()獲得一個具有行型盒式布局的盒式容器;使用Box類的類(靜態(tài))方法createVerticalBox()獲得一個具有列型盒式布局的盒式容器。

3)控制盒式布局容器中組件之間的距離Box類調(diào)用靜態(tài)方法createHorizontalStrut(intwidth)可以得到一個不可見的水平Struct對象,稱做水平支撐。Box類調(diào)用靜態(tài)方法createVertialStrut(intheight)可以得到一個不可見的垂直Struct對象,稱做垂直支撐。

例子5

Example9_5.java

WindowBoxLayout.java

兩個列型盒式容器boxV1、boxV2和一個行型盒式容器baseBox。在列型盒式容器的組件之間添加垂直支撐,控制組件之間的距離,將boxV1、boxV2添加到baseBox中,并在它倆之間添加了水平支撐。程序運行效果如圖9.6。

6.null布局:

空布局容器可以準確地定位組件在容器的位置和大小。組件調(diào)用setBounds(inta,intb,intwidth,intheight)方法可以設置本身的大小和在容器中的位置。第14頁§9.4處理事件

學習組件除了要熟悉組件的屬性和功能外,一個更重要的方面是學習怎樣處理組件上發(fā)生的界面事件。當用戶在文本框中鍵入文本后按回車鍵、單擊按鈕、在一個下拉式列表中選擇一個條目等操作時,都發(fā)生界面事件。程序有時需對發(fā)生的事件作出反應,來實現(xiàn)特定的任務,例如,用戶單擊一個名字叫“確定”或名字叫“取消”的按鈕,程序可能需要作出不同的處理。

第15頁§9.4.1事件處理模式1.事件源:能夠產(chǎn)生事件的對象都可以成為事件源.2.監(jiān)視器:事件源通過調(diào)用相應的方法將某個對象注冊為自己的監(jiān)視器。對于文本框,這個方法是:addActionListener(監(jiān)視器);事件源注冊監(jiān)視器之后,相應的操作就會導致相應的事件的發(fā)生,并通知監(jiān)視器,監(jiān)視器就會作出相應的處理。

3.處理事件的接口:

監(jiān)視器負責處理事件源發(fā)生的事件。監(jiān)視器是一個對象,為了處理事件源發(fā)生的事件,監(jiān)視器這個對象會自動調(diào)用一個方法來處理事件。Java規(guī)定:為了讓監(jiān)視器這個對象能對事件源發(fā)生的事件進行處理,創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應的接口,那么當事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用被類重寫的某個接口方法(如圖9.7)。第16頁§9.4.2ActionEvent事件1.ActionEvent事件源:

文本框、按紐、菜單項、密碼框和單選按紐都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。2.注冊監(jiān)視器:能觸發(fā)ActionEvent事件的組件使用

addActionListener(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ā)生的事件作出處理。ActionEvent類事先創(chuàng)建的事件對象就會傳遞給該方法的參數(shù)e。

4.ActionEvent類中的方法:

publicObjectgetSource()

調(diào)用該方法可以獲取發(fā)生ActionEvent事件的事件源對象的引用。publicStringgetActionCommand()

調(diào)用該方法可以獲取發(fā)生ActionEvent事件時,和該事件相關的一個命令字符串。第17頁例子6(Example9_6.java,WindowActionEvent.java,ReaderListen.java)處理文本框上觸發(fā)的ActionEvent事件。在文本框text中輸入字符串回車,監(jiān)視器負責計算字符串的長度,并在命令行窗口顯示字符串的長度。例子6程序運行效果如圖9.8和9.9。第18頁例子7(Example9_7.java

,WindowActionEvent.java

,MyCommandListener.java

,PoliceListen.java

)

例子7(中的監(jiān)視器:PoliceListen與例子6中的ReaderListen略有不同,PoliceListen類實現(xiàn)了ActionListerner接口的子接口MyCommandListener(我們自己寫的一個接口)。當用戶在文本框中輸入字符串回車或單擊按紐(按鈕可以觸發(fā)ActionEvent事件,當按鈕獲得監(jiān)視器之后,如果激活按紐,比如用鼠標單擊按鈕或按鈕獲得焦點時按下空格鍵,就可以觸發(fā)ActionEvent事件),PoliceListen監(jiān)視器將字符串的長度顯示在一個文本區(qū)中。運行效果如圖9.10。

第19頁§9.4.3ItemEvent事件1.ItemEvent事件源:選擇框、下拉列表都可以觸發(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ā)生的事件作出處理。ItemEvent類事先創(chuàng)建的事件對象就會傳遞給該方法的參數(shù)e。4.ItemEvent類中的方法:

getSource()方法返回發(fā)生Itemevent事件的事件源外

getItemSelectable()方法返回發(fā)生Itemevent事件的事件源。第20頁例子8(Example9_8.java

,WindowOperation.java

,OperatorListener.java

,ComputerListener.java

)

例子8(是簡單的計算器(程序運行效果如圖9.11),實現(xiàn)如下功能:(1)用戶在窗口(WindowOperation類負責創(chuàng)建)中的兩個文本框中輸入?yún)⑴c運算的兩個操作數(shù)。(2)用戶在下拉列選擇運算符觸發(fā)ItemEvent事件,ItemEvent事件的監(jiān)視器operator(OperatorListener類負責創(chuàng)建)獲得運算符,并將運算符傳遞給ActionEvent事件的監(jiān)視器computer(3)用戶單擊按鈕觸發(fā)ActionEvent事件,監(jiān)視器computer(ComputerrListener類負責創(chuàng)建)給出運算結果。第21頁§9.4.4DocumentEvent事件1.DocumentEvent事件源:文本區(qū)所維護的文檔能觸發(fā)DocumentEvent事件2.注冊監(jiān)視器:能觸發(fā)DocumentEven事件的事件源使用

addDucumentListener(DocumentListenerlisten)將實現(xiàn)DocumentListener接口的類的實例注冊為事件源的監(jiān)視器。

3.DocumentListener接口:

DocumentListener接口在javax.swing.event包中,該接口中有三個方法:

publicvoidchangedUpdate(DocumentEvente)publicvoidremoveUpdate(DocumentEvente)publicvoidinsertUpdate(DocumentEvente)事件源觸發(fā)DucumentEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的DocumentEvent事件,然后調(diào)用接口中的相應方法對發(fā)生的事件作出處理。例子9(Example9_9.java

,

WindowDocument.java

,

TextListener.java

,

HandleListener.java

)將用戶在一個文本區(qū)輸入的單詞按字典序排序后放入另一個文本區(qū).第22頁§9.4.5MouseEvent事件_1

任何組件上都可以發(fā)生鼠標事件,如:鼠標進入組件、退出組件、在組件上方單擊鼠標、拖動鼠標等都觸發(fā)鼠標事件,即導致MouseEvent類自動創(chuàng)建一個事件對象。

1.使用MouseListener接口可以處理以下5種操作觸發(fā)的鼠標事件在事件源上按下鼠標鍵、在事件源上釋放鼠標鍵、在事件源上擊鼠標鍵、鼠標進入事件源、鼠標退出事件源。?MouseEvent中有下列幾個重要的方法:getX()

獲取鼠標指針在事件源坐標系中的x-坐標。getY()

獲取鼠標指針在事件源坐標系中的y-坐標。getModifiers()

獲取鼠標的左鍵或右鍵。getClickCount()

獲取鼠標被單擊的次數(shù)。getSource()

獲取發(fā)生鼠標事件的事件源。

?事件源注冊監(jiān)視器的方法是addMouseListener(MouseListenerlistener)。

?MouseListener接口中有如下方法:

mousePressed(MouseEvent)

負責處理在組件上按下鼠標鍵觸發(fā)的鼠標事件mouseReleased(MouseEvent)

負責處理在組件上釋放鼠標鍵觸發(fā)的鼠標事件mouseEntered(MouseEvent)

負責處理鼠標進入組件觸發(fā)的鼠標事件mouseExited(MouseEvent)

負責處理鼠標離開組件觸發(fā)的鼠標事件mouseClicked(MouseEvent)

負責處理在組件上單擊鼠標鍵觸發(fā)的鼠標事件第23頁§9.4.5MouseEvent事件_1

例子10Example9_10.java

WindowMouse.java

MousePolice.java

分別監(jiān)視按鈕、文本框和窗口上的鼠標事件,當發(fā)生鼠標事件時,獲取鼠標指針的坐標值,注意,事件源的坐標系的左上角是原點。

第24頁§9.4.5MouseEvent事件_32.使用MouseMotionListener接口可以處理以下兩種操作觸發(fā)的鼠標事件,在事件源上拖動鼠標、在事件源上移動鼠標。?事件源注冊監(jiān)視器的方法是

addMouseMotionListener(MouseMotionListenerlistener)。

?

MouseMotionListener接口中有如下方法:

mouseDragged(MouseEvent)

負責處理拖動鼠標觸發(fā)的鼠標事件。mouseMoved(MouseEvent)

負責處理移動鼠標觸發(fā)的鼠標事件。例子11

Example9_11.java

WindowMove.java

LP.java

使用坐標變換來實現(xiàn)組件的拖動

第25頁§9.4.6焦點事件1.焦點事件源:組件可以觸發(fā)焦點事件。

2.注冊監(jiān)視器:組件可以使用addFocusListener(FocusListenerlistener)注冊焦點事件監(jiān)視器。

3.FocusListener接口:創(chuàng)建監(jiān)視器的類必須要實現(xiàn)FocusListener接口,該接口有兩個方法:publicvoidfocusGained(FocusEvente)publicvoidfocusLost(FocusEvente)

當發(fā)生FocusEvent事件時,監(jiān)視器調(diào)用類實現(xiàn)的接口中的相應方法。4.組件也可調(diào)用

publicbooleanrequestFocusInWindow()

方法可以獲得輸入焦點。

第26頁§9.4.7鍵盤事件當一個組件處于激活狀態(tài)時,敲擊鍵盤上一個鍵就導致這個組件觸發(fā)鍵盤事件。1.某個組件使用addKeyListener方法注冊監(jiān)視器。2.接口KeyListener中有如下方法:

publicvoidkeyPressed(KeyEvente),publicvoidkeyTyped(KeyEvente),publicvoidKeyReleased(KeyEvente)

3.相關方法:

publicintgetKeyCode()判斷哪個鍵被按下、敲擊或釋放,返回一個鍵碼值。

getKeyChar()判斷哪個鍵被按下、敲擊或釋放,返回鍵上的字符。例子12

Example9_12.java

Win.java

Police.java通過處理鍵盤事件來實現(xiàn)軟件序列號的輸入。第27頁§9.4.8窗口事件JFrame及子類創(chuàng)建的窗口可以調(diào)用

setDefaultCloseOperation(intoperation);方法設置窗口的關閉方式(如前面各個例子所示).但是setDefaultCloseOperation方式可能不能滿足程序的需要,比如,用戶單擊窗口上的關閉圖標時,可能程序需要提示用戶是否需要保存窗口中的有關數(shù)據(jù)到磁盤等.第28頁1.WindowListener接口.(1)publicvoidwindowActivated(WindowEvente)當窗口從非激活狀態(tài)到激活時,窗口的監(jiān)視器調(diào)用該方法。(2)publicvoidwindowDeactivated(WindowEvente)當窗口激活狀態(tài)到非激活狀態(tài)時,窗口的監(jiān)視器調(diào)用該方法。(3)publicvoidwindowClosing(WindowEvente)當窗口正在被關閉時,窗口的監(jiān)視器調(diào)用該方法。(4)publicvoidwindowClosed(WindowEvente)當窗口關閉后,窗口的監(jiān)視器調(diào)用該方法。(5)publicvoidwindowIconified(WindowEvente)當窗口圖標化時,窗口的監(jiān)視器調(diào)用該方法。(6)publicvoidwindowDeiconified(WindowEvente)當窗口撤消圖標化時,窗口的監(jiān)視器調(diào)用該方法。(7)publicvoidwindowOpened(WindowEvente)當窗口打開時,窗口的監(jiān)視器調(diào)用該方法。第29頁2.WindowAdapter適配器.適配器可以代替接口來處理事件,當Java提供處理事件的接口中多于一個方法時,Java相應地就提供一個適配器類,比如WindowAdapter類。適配器已經(jīng)實現(xiàn)了相應的接口,例如WindowAdapter類實現(xiàn)了WindowListener接口。因此,可以使用WindowAdapte的子類創(chuàng)建的對象做監(jiān)視器,在子類中重寫所需要的接口方法即可。

例子13(Example9_13.java

)使用適配器做監(jiān)視器,只處理窗口關閉事件,因此只需重寫windowColsing方法即可。第30頁§9.4.9匿名類實例或窗口做監(jiān)視器匿名類的方便之處是匿名類的外嵌類的成員變量在匿名類中仍然有效,當發(fā)生事件時,監(jiān)視器就比較容易操作事件源所在的外嵌類中的成員.當事件的處理比較簡單、系統(tǒng)也不復雜時,使用匿名類做監(jiān)視器是一個不錯的選擇。讓事件源所在的類的實例作為監(jiān)視器,能讓事件的處理比較方便,這是因為,監(jiān)視器可以方便的操作事件源所在的類中的其他成員。當事件的處理比較簡單,系統(tǒng)也不復雜時,讓事件源所在的類的實例作為監(jiān)視器是一個不錯的選擇。例子14(Example9_14.java

)是一個猜數(shù)字小游戲第31頁§9.4.10事件總結

1.授權模式Java的事件處理是基于授權模式,即事件源調(diào)用調(diào)用方法將某個對象注冊為自己的監(jiān)視器。2.接口回調(diào)

addXXXListener(XXXListenerlistener)方法中的參數(shù)是一個接口,listener可以引用任何實現(xiàn)了該接口的類所創(chuàng)建的對象,當事件源發(fā)生事件時,接口listener立刻回調(diào)被類實現(xiàn)的接口中的某個方法。3.方法綁定

當事件源觸發(fā)事件發(fā)生后,監(jiān)視器準確知道去調(diào)用哪個方法。4.保持松耦合

當事件源觸發(fā)事件發(fā)生后,系統(tǒng)知道某個方法會被執(zhí)行,但無須關心到底是哪個對象去調(diào)用了這個方法,因為任何實現(xiàn)接口的類的實例(做為監(jiān)視器)都可以調(diào)用這個方法來處理事件。

第32頁§9.5使用MVC結構

模型-視圖-控制器(Model-View-Controller),簡稱為MVC。MVC是一種先進的設計結構,其目的是以會話形式提供方便的GUI支持。

MVC是一種通過三個不同部分構造一個軟件或組件的理想辦法:?模型(model)

用于存儲數(shù)據(jù)的對象。?視圖(view)

為模型提供數(shù)據(jù)顯示的對象。?控制器(controller)處理用戶的交互操作,對于用戶的操作作出響應,讓模型和視圖進行必要的交互,即通過視圖修改、獲取模型中的數(shù)據(jù);當模型中的數(shù)據(jù)變化時,讓視圖更新顯示。

第33頁例子15(Example9_15.java

,WindowTriangle.java

,Triangle.java

)首先編寫一個封裝三角形的類(模型角色)然后再編寫一個窗口。要求窗口使用三文本框和一個文本區(qū)為三角形對象中的數(shù)據(jù)提供視圖,其中三個文本框用來顯示和更新三角形對象的三個邊的長度;文本區(qū)對象用來顯示三角形的面積。窗口中有一個按鈕(控制器角色),用戶單擊該按鈕后,程序用3個文本框中的數(shù)據(jù)分別作為三角形的三個邊的長度,并將計算出的三角形的面積顯示在文本區(qū)中。程序運行效果如圖9.15。

第34頁§9.6對話框

JDialog類和JFrame都是Window的子類,二者的實例都是底層容器。

JDialog類創(chuàng)建的對話框必須要依賴于某個窗口。對話框分為無模式和有模式兩種。

有模式的對話框:當這個對話框處于激活狀態(tài)時,只讓程序響應對話框內(nèi)部的事件,而且將堵塞其它線程的執(zhí)行,用戶不能再激活對話框所在程序中的其它窗口,直到該對話框消失不可見。

無模式對話框:當這個對話框處于激活狀態(tài)時,能再激活其它窗口,也不堵塞其它線程的執(zhí)行。第35頁§9.6.1消息對話框消息對話框是有模式對話框,進行一個重要的操作動作之前,最好能彈出一個消息對話框??梢杂胘avax.swing包中的JOptionPane類的靜態(tài)方法:

publicstaticvoidshowMessageDialog(ComponentparentComponent,Stringmessage,Stringtitle,intmessageType)創(chuàng)建一個消息對話框。例子16(Example9_16.java

,WindowMess.java

),要求用戶在文本框中只能輸入英文字母,當輸入非英文字符時,彈出消息對話框。第36頁§9.6.2輸入對話框例子17(Example11_17.java

,WindowInput.java

),用戶在單擊按鈕彈出輸入對話框,用戶在輸入對話框中輸入若干個數(shù)字輸入對話框含有供用戶輸入文本的文本框、一個確認和取消按鈕,是有模式對話框??梢杂胘avax.swing包中的JOptionPane類的靜態(tài)方法:publicstaticStringshowInputDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType)創(chuàng)建一個輸入對話框。第37頁§9.6.3確認對話框確認對話框是有模式對話框??梢杂胘avax.swing包中的JOptionPane類的靜態(tài)方法:publicstaticintshowConfirmDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType)得到一個確認對話框。例子18(Example9_18.java

,WindowEnter.java

),用戶在文本框中輸入帳戶名稱,按回車后,將彈出一個確認對話框。第38頁§9.6.4顏色對話框可以用javax.swing包中的JColorChooser類的靜態(tài)方法:publicstaticColorshowDialog(Componentcomponent,Stringtitle,ColorinitialColor)創(chuàng)建一個有模式的顏色對話框

。例子19(Example9_19.java

,WindowColor.java

),當用戶單擊按鈕時,彈出一個顏色對話框第39頁§9.6.5自定義對話框

創(chuàng)建對話框與創(chuàng)建窗口類似,通過建立JDialog的子類來建立一個對話框類,然后這個類的一個實例,即這個子類創(chuàng)建的一個對象,就是一個對話框。對話框是一個容器,它的默認布局是BorderLayout,對話框可以添加組件,實現(xiàn)與用戶的交互操作。構造對話框的2個常用構造方法JDialog()

構造一個無標題的初始不可見的對話框,對話框依賴一個默認的不可見的窗口,該窗口由Java運行環(huán)境提供。JDialog(JFrameowner)

構造一個無標題的初始不可見的無模式的對話框,owner是對話框所依賴的窗口,如果owner取null,對話框依賴一個默認的不可見的窗口,該窗口由Java運行環(huán)境提供。例子20(Example9_20.java

,MyWindow.java

,MyDialog.java

)第40頁§9.7樹組件與表格組件9.7.1樹組件

1.DefaultMutableTreeNode節(jié)點

DefaultMutableTreeNode類的兩個常用的構造方法是:DefaultMutableTreeNode(ObjectuserObject)DefaultMutableTreeNode(ObjectuserObject,booleanallowChildren)2.樹上的TreeSelectionEvent事件使用addTreeSelectionListener(TreeSelectionListenerlistener)方法獲得一個監(jiān)視器。

例子21Example9_21.java

,

TreeWin.java

,Goods.java

節(jié)點中存放的對象由Goods類(描述商品)創(chuàng)建,當用戶選中節(jié)點時,窗口中的文本區(qū)顯示節(jié)點中存放的對象的有關信息.第41頁9.7.2表格組件例子22(Example9_22.java

)是一個成績單錄入程序,客戶通過一個表格的單元格輸入學生的數(shù)學和英語

溫馨提示

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

評論

0/150

提交評論