版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
圖形用戶界面開(kāi)發(fā)與事件處理第7章圖形用戶界面開(kāi)發(fā)與事件處理教學(xué)目標(biāo):掌握用Swing來(lái)設(shè)計(jì)圖形用戶界面的方法掌握組件、容器、布局管理器等概念了解Swing主要組件的用法及所采用的事件處理接口1.圖形用戶界面的構(gòu)成圖形用戶界面是一組圖形界面成分和界面元素的有機(jī)組合,其中包括的元素如下。1)容器容器是一種特殊的組件,它能夠容納其他組件或容器組件。每一個(gè)GUI程序至少包含一個(gè)頂層容器。2)組件組件是可以用圖形化的方式顯示在屏幕上并能夠與用戶進(jìn)行交互的對(duì)象。(1)組件是圖形用戶界面的最小單位之一,里面不再包含其他的成分。(2)組件不能獨(dú)立地顯示出來(lái),必須放在一定的容器中才可以顯示出來(lái)。2.建立GUI應(yīng)用程序的流程建立GUI應(yīng)用程序的流程如下。(1)引用需要的包和類。(2)設(shè)置一個(gè)頂層的容器。(3)根據(jù)需要為容器設(shè)置布局管理器或使用默認(rèn)布局管理器。(4)將組件添加到容器內(nèi),位置自行設(shè)計(jì)。(5)為響應(yīng)事件的組件編寫事件處理代碼。7.1AWT簡(jiǎn)介28十月20246AWT的全稱是抽象窗口工具集(AbstractWindowToolkit)它是一個(gè)特殊的組件,其中包含有其他組件。AWT中包括圖形界面編程的基本類庫(kù)。其中主要由組件類(Component)、容器類(Container)、圖形類(Graphics)和布局管理器(LayoutManager)等幾部分組成。AWT中存在缺少剪貼板、缺少打印支持等缺陷。AWT包含四個(gè)主要的類:組件(Component)類、容器(Container)類、圖形(Graphics)類和布局管理器(LayoutManager)類。Component類:菜單、按鍵、列表等組件的抽象基本類。Container類:擴(kuò)展Component的抽象基本類。由Container派生的類有Panel、Applet、Window、Dialog和Frame類等。容器中可以包含多個(gè)組件。Graphics類:定義組件內(nèi)圖形操作的基本類。每個(gè)組件都有一個(gè)相關(guān)的圖形對(duì)象。LayoutManager類:定義容器中組件的位置和尺寸的接口。Java中定義了幾種默認(rèn)的布局管理器。
7.2Swing基礎(chǔ)Swing組件是Java語(yǔ)言提供的第二代GUI設(shè)計(jì)工具包,它以AWT為基礎(chǔ),在AWT內(nèi)容的基礎(chǔ)上新增或改進(jìn)了一些GUI組件,使得GUI程序功能更強(qiáng)大,設(shè)計(jì)更容易、更方便。Swing與AWT有以下不同。(1)
Swing是完全用Java語(yǔ)言編寫的,所以稱Swing組件是輕量級(jí)組件,沒(méi)有本地代碼,不依賴操作系統(tǒng)的支持,比AWT構(gòu)件具有更強(qiáng)的實(shí)用性。Swing在不同的平臺(tái)表現(xiàn)一致,并且有能力提供本地窗口系統(tǒng)不支持的其他特性。(2)
Swing采用了一種MVC的設(shè)計(jì)范式,即“模型-視圖-控制”(Model-View-Controller),其中:模型用來(lái)保存內(nèi)容;視圖用來(lái)顯示內(nèi)容;控制器用來(lái)控制用戶輸入。(3)
Swing的外觀感覺(jué)采用可插入的外觀感覺(jué)(PluggableLookandFeel,PL&F)。在AWT構(gòu)件中,由于控制構(gòu)件外觀對(duì)等類與具體平臺(tái)相關(guān),使得AWT構(gòu)件總是只有與本機(jī)相關(guān)的外觀;Swing可以使得Java程序在一個(gè)平臺(tái)上運(yùn)行時(shí)能夠有不同的外觀,用戶可以選擇自己習(xí)慣的外觀。(4)
Swing組件的名稱都以字母J開(kāi)頭,例如,AWT的框架類、面板類、按鈕類和菜單類被命名為Frame、Panel、Button和Menu,而Swing對(duì)應(yīng)的組件類被命名為JFrame、JPanel、JButton和JMenu。另外,AWT組件在java.awt包中,而Swing組件在javax.swing包中。Swing的類層次結(jié)構(gòu)如圖所示:3.簡(jiǎn)單的范例一個(gè)簡(jiǎn)單的SwingGUI應(yīng)用程序。該程序生成一個(gè)窗口,窗口中有一個(gè)標(biāo)簽,用于顯示輸出。(1)程序代碼:1. importjava.awt.*;2. importjavax.swing.*;3. publicclassSwingDemo4. {5. publicstaticvoidmain(Stringargs[])6. {7. JFramefm=newJFrame("第一個(gè)Windows程序");8. JLabellabel=newJLabel("這是第一個(gè)GUI程序");9. Containerc=fm.getContentPane();10. c.add(label);11. fm.setSize(200,150);12. fm.setVisible(true);13. }14. }例題7.1說(shuō)明了Swing中程序設(shè)計(jì)的結(jié)構(gòu)以及最基本的組件JLabel的用法。程序中建立了一個(gè)Swing風(fēng)格的窗口,并在其中添加了一個(gè)標(biāo)簽。本程序沒(méi)有編寫事件代碼,只是一個(gè)靜態(tài)窗口的顯示。提示: 由于Swing組件使用AWT的結(jié)構(gòu),所以,使用Swing組件的程序一般需要使用awt包。7.3容器Java的圖形用戶界面的最基本組成部分是構(gòu)件(Component)。構(gòu)件是能以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對(duì)象。構(gòu)件不能獨(dú)立地顯示出來(lái),必須將構(gòu)件放在一定的容器中才可以使其顯示出來(lái)。由java.awt.Container類擴(kuò)展的類稱為容器,Container類也是一個(gè)由Component類擴(kuò)展的抽象類。顧名思義,容器就是用來(lái)包含組件的,一個(gè)容器可以包含多個(gè)組件,也可以使用容器將相關(guān)組件關(guān)聯(lián)在一起,成為一個(gè)整體。合理地使用容器可以簡(jiǎn)化圖形界面的設(shè)計(jì),而且對(duì)于組件的顯示安排也很有用。Swing的容器從功能上分為以下三類。(1)頂層容器:它是構(gòu)建SwingGUI應(yīng)用程序的主窗口(2)中間容器:可以容納組件,但它本身必須添加到其他容器中使用。(3)特殊容器7.3.1框架窗體JFrame框架JFrame是在Swing中經(jīng)常使用到的組件,是最底層的容器,可稱之為“窗口”。JFrame是SwingGUI應(yīng)用程序的主窗口。窗口帶標(biāo)題、邊界、窗口狀態(tài)調(diào)節(jié)按鈕。每一個(gè)應(yīng)用程序都應(yīng)至少包含一個(gè)框架。
教材例題8.2,例題8.3用不同方法生成JFrame窗口7.3.2面板容器JPanel面板JPanel也是Java中常用到的容器之一,面板是一種透明的容器,既沒(méi)有標(biāo)題,也沒(méi)有邊框,就像一塊透明的玻璃。與JFrame不同,它不能作為最外層的容器單獨(dú)存在,它首先必須作為一個(gè)構(gòu)件放置到其他容器中,然后再把它作為容器,把其他構(gòu)件放到其中。教材例題8.6,例題8.7用不同方法創(chuàng)建面板7.4布局管理為了實(shí)現(xiàn)跨平臺(tái)的特性并且獲得動(dòng)態(tài)的布局效果,Java將容器內(nèi)的所有構(gòu)件安排給布局管理器(LayoutManager)負(fù)責(zé)管理。布局管理器負(fù)責(zé)指定容器中組件的位置和大小。布局管理器只需要確定組件和其他組件的相對(duì)位置,而不需要決定它的坐標(biāo),這樣的好處就是當(dāng)改動(dòng)窗口大小時(shí),布局管理器會(huì)自動(dòng)更新布局來(lái)配合窗口的大小,令與平臺(tái)無(wú)關(guān)的用戶界面更易于實(shí)現(xiàn)。當(dāng)創(chuàng)建一個(gè)新的容器時(shí),應(yīng)該調(diào)用setLayout方法指定布局管理器。布局管理器的相關(guān)類主要包括FlowLayout、BorderLayout、GridLayout、BoxLayout等。7.4.1FlowLayoutFlowLayout(流式布局管理器)將組件按照加入的先后順序從左向右排列,一行排滿轉(zhuǎn)入下一行繼續(xù)排列,直到把所有組件顯示出來(lái)。例題7-5在窗口中以FlowLayout方式加入5個(gè)按鈕。7.4.2BorderLayoutBorderLayout(邊界布局管理器)將容器的布局分為5個(gè)區(qū):北區(qū)、南區(qū)、東區(qū)、西區(qū)和中區(qū)。這幾個(gè)區(qū)的分布規(guī)律是“上北下南,左西右東”,與地圖的方位相同。當(dāng)容器的大小改變時(shí),容器中各個(gè)組件的相對(duì)位置不變,其中間部分組件的尺寸會(huì)發(fā)生變化,四周組件的寬度固定不變。組件可以指定自己放在哪個(gè)區(qū)內(nèi)。因?yàn)橹挥?個(gè)區(qū),所以最多只能容納5個(gè)組件(不一定非要將5個(gè)區(qū)全部放置組件)。教材例題7-6將5個(gè)按鈕加入BorderLayout的5個(gè)區(qū)7.4.3BoxLayoutBoxLayout按照自下而上(y軸)或者自左而右(x軸)的順序依次加入構(gòu)件。建立一個(gè)BoxLayout對(duì)象,必須指明兩個(gè)參數(shù):被布局的容器和BoxLayout的主軸。默認(rèn)情況下,構(gòu)件在縱軸方向上居中對(duì)齊。利用BoxLayout,可在容器中水平或垂直地安排布局例題7-7利用BoxLayout布局,設(shè)計(jì)登錄界面。(見(jiàn)教材)7.4.4GridLayoutGridLayout(網(wǎng)格布局管理器)把容器區(qū)域分成若干個(gè)大小相同的網(wǎng)格,每個(gè)網(wǎng)絡(luò)可以放置一個(gè)組件,這種布局方式對(duì)數(shù)量眾多的組件很合適。創(chuàng)建網(wǎng)格布局管理器時(shí),可以給定網(wǎng)格的行數(shù)和列數(shù)。改變?nèi)萜鞯拇笮『?,其中組件的相對(duì)位置不變,但大小改變。容器中各個(gè)組件同高度、同寬度。各個(gè)組件缺省的排列方式為從上到下、從左到右。教材例題7-8設(shè)置GridLayout布局7.5Swing組件7.5.1按鈕按鈕(JButton)是GUI中非常重要的一種基本組件。按鈕一般對(duì)應(yīng)于一個(gè)事先定義好的事件、執(zhí)行功能、一段程序。當(dāng)使用者單擊按鈕時(shí),系統(tǒng)自動(dòng)執(zhí)行與該按鈕聯(lián)系的程序,從而完成預(yù)定的功能。例題7-9設(shè)置按鈕的示例。(見(jiàn)教材)7.5.2復(fù)選框1.復(fù)選框JCheckBox類提供對(duì)復(fù)選框的支持。復(fù)選框是具有開(kāi)關(guān)或真假狀態(tài)的控件。教材例題7-10提供3個(gè)復(fù)選框供用戶選擇7.5.3單選按鈕在一組單選按鈕中,可進(jìn)行選擇其中一個(gè)的操作,即進(jìn)行“多選一”操作。JRadioButton類的類層次和構(gòu)造方法的參數(shù)構(gòu)成都與前面介紹的JCheckBox類相同。這里不再列出JRadioButton類的這些內(nèi)容。因?yàn)閱芜x按鈕是在一組按鈕中選擇一個(gè),因此,必須將單選按鈕分組,即指明在一個(gè)組中包含哪些單選按鈕??捎肂uttonGroup創(chuàng)建單選按鈕組對(duì)象,應(yīng)用對(duì)象的add()方法順序加入各個(gè)單選按鈕。教材例題7-11使用單選按鈕來(lái)選擇性別。7.5.4組合框在Java語(yǔ)言中,組合框(JComboBox)有可編輯的和不可編輯的兩種不同的形式。缺省是不可編輯的組合框。下面就對(duì)不可編輯的組合框進(jìn)行介紹。組合框用于在多個(gè)選項(xiàng)中選擇一項(xiàng)的操作。在未選擇組合框時(shí),組合框顯示為帶按鈕的一個(gè)選項(xiàng)的形式;當(dāng)對(duì)組合框按鍵或單擊時(shí),組合框會(huì)打開(kāi)可列出多個(gè)選項(xiàng)的一個(gè)列表,提供給用戶選擇。教材例題7-12利用組合框顯示、選取地名。7.5.5文本框與文本域Java語(yǔ)言提供了單行文本框、口令框和多行文本框等文本框形式,它們都是人機(jī)交互的主要組件。1.單行文本框單行文本框一般用來(lái)讓用戶輸入如姓名、地址這樣的信息,它是一個(gè)能夠接收用戶鍵盤輸入的單行文本區(qū)域。類JTextField提供對(duì)單行文本框的支持。2.口令框單行口令文本框JPasswordField類是JTextField類的子類。在JPasswordField對(duì)象中輸入的文字會(huì)被其他字符替代,這個(gè)組件常用來(lái)在Java程序中輸入口令。3.多行文本框JTextField是單行文本框,不能顯示多行文本,如果想要顯示大段的多行文本,可以使用JTextArea類支持的多行文本框。7.6事件處理事件處理技術(shù)是Java用戶界面設(shè)計(jì)中一個(gè)十分重要的技術(shù)。用戶在圖形用戶界面中輸入命令是通過(guò)移動(dòng)鼠標(biāo)或單擊特定界面元素來(lái)實(shí)現(xiàn)的。為了能夠接收用戶的命令,界面系統(tǒng)首先應(yīng)該能夠識(shí)別這些鼠標(biāo)或鍵盤的操作并做出相應(yīng)的反應(yīng)。通常,一個(gè)鍵盤或鼠標(biāo)的操作會(huì)激發(fā)一個(gè)系統(tǒng)預(yù)先定義好的事件,用戶只需要設(shè)計(jì)程序代碼定義每個(gè)特定事件發(fā)生時(shí)所對(duì)應(yīng)的響應(yīng)操作,這些程序代碼將在它們對(duì)應(yīng)的事件發(fā)生時(shí)由系統(tǒng)自動(dòng)調(diào)用。在前面編寫的程序中,對(duì)按鈕等組件進(jìn)行單擊操作,都沒(méi)有什么反應(yīng),就是因?yàn)闆](méi)有為事件編寫相應(yīng)的處理程序。28十月20241.事件事件是系統(tǒng)在捕獲用戶界面操作過(guò)程中產(chǎn)生的代表相應(yīng)操作的一個(gè)數(shù)據(jù)結(jié)構(gòu),是用戶操作在Java系統(tǒng)內(nèi)的數(shù)字表達(dá),它描述了發(fā)生了什么事情。用戶與用戶界面上的組件交互是通過(guò)響應(yīng)各種事件來(lái)實(shí)現(xiàn)的,如用戶單擊了一個(gè)按鈕,意味著發(fā)生了一個(gè)按鈕事件。2.事件源(EventSource)產(chǎn)生事件的組件稱事件源。例如,如果用戶用鼠標(biāo)單擊了按鈕對(duì)象button,則該按鈕button就是事件源。3.監(jiān)聽(tīng)器監(jiān)聽(tīng)器(Listener)是調(diào)用事件處理方法的對(duì)象,它能夠?qū)κ录催M(jìn)行監(jiān)聽(tīng),以便對(duì)事件源所發(fā)生的事件做出相應(yīng)的處理。Java事件處理中的幾個(gè)概念28十月20244.事件注冊(cè)事件源為了將其上產(chǎn)生的事件傳遞給監(jiān)聽(tīng)器接收并處理,應(yīng)該提供注冊(cè)和注銷事件監(jiān)聽(tīng)器的方法。注冊(cè)監(jiān)聽(tīng)器用于使該事件源上發(fā)生的事件能夠被監(jiān)聽(tīng)器接收并處理,注銷監(jiān)聽(tīng)器用于使監(jiān)聽(tīng)器不能監(jiān)聽(tīng)到該事件源上發(fā)生的事件。5.監(jiān)聽(tīng)器接口監(jiān)聽(tīng)器接口(事件處理方法)是能夠接收、解析和處理事件類對(duì)象、實(shí)現(xiàn)和用戶交互的方法。監(jiān)聽(tīng)器是一個(gè)對(duì)象,為了處理事件源發(fā)生的事件,監(jiān)聽(tīng)器會(huì)自動(dòng)調(diào)用一個(gè)方法。Java規(guī)定,為了使監(jiān)聽(tīng)器能夠?qū)κ录此l(fā)生的事件做出處理,創(chuàng)建該監(jiān)聽(tīng)器的類必須聲名實(shí)現(xiàn)相應(yīng)的接口,即必須在類體中給出該接口中所有方法的方法體。那么當(dāng)事件源發(fā)生事件時(shí),監(jiān)聽(tīng)器就會(huì)自動(dòng)調(diào)用執(zhí)行被類實(shí)現(xiàn)的某個(gè)接口方法。28十月2024不同事件源上發(fā)生的事件種類是不同的,由不同的監(jiān)聽(tīng)器處理。每類事件都有對(duì)應(yīng)的事件監(jiān)聽(tīng)器,監(jiān)聽(tīng)器是接口,根據(jù)動(dòng)作來(lái)定義方法。系統(tǒng)提供的監(jiān)聽(tīng)器是接口,它們定義在java.awt.event包中。見(jiàn)教材152頁(yè)。教材例題7-15設(shè)計(jì)3個(gè)按鈕,單擊不同的按鈕時(shí),在文本框中顯示不同的內(nèi)容。7.6.1事件監(jiān)聽(tīng)器28十月2024一旦指定一個(gè)類實(shí)現(xiàn)了某個(gè)事件監(jiān)聽(tīng)器接口,就必須實(shí)現(xiàn)這個(gè)監(jiān)聽(tīng)器接口的所有方法,否則你只能將你的類定義為抽象類而無(wú)法定義這個(gè)類的實(shí)例。為了方便起見(jiàn),Java語(yǔ)言提供了事件適配器Adapter類,用來(lái)實(shí)現(xiàn)含有多個(gè)方法的類。這些Adapter類中的方法是空的。你可以繼承Adapter類,而且只需重寫你所需要的方法。Adapter類的目的就是將那些具有很多方法的監(jiān)聽(tīng)器接口集合成為一個(gè)抽象類,使用戶不需要在程序中實(shí)現(xiàn)每個(gè)方法。Adapter類只是為了簡(jiǎn)化編程而提供的一種中間轉(zhuǎn)換工具,使程序員在定義監(jiān)聽(tīng)器類時(shí)可以不必因直接實(shí)現(xiàn)監(jiān)聽(tīng)器接口而被迫重寫所有的抽象方法。教材例題7-16使用事件監(jiān)聽(tīng)器接口方法關(guān)閉窗口7.6.2事件適配器28十月2024激活構(gòu)件事件處理——使用ActionEvent類ActionEven類只包含一個(gè)事件actionPerformed()。(1)事件源包括:JButton、JTextField、JTextArea、JRadioButton、JCheckBox、jcomboBox、JMenuItem。(2)需要實(shí)現(xiàn)的監(jiān)聽(tīng)器接口為ActionListener。(3)加入事件監(jiān)聽(tīng)器為addActionListener(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西師范大附屬中學(xué)2025屆中考二模生物試題含解析
- 北京市北京師范大附屬實(shí)驗(yàn)中學(xué)2025屆中考試題猜想生物試卷含解析
- 煥發(fā)傳統(tǒng)文化蓬勃活力的策略及實(shí)施路徑
- 2025年項(xiàng)目經(jīng)理個(gè)人工作計(jì)劃
- 2025屆陜西省西安一中中考考前最后一卷生物試卷含解析
- 貨物運(yùn)輸服務(wù)合作合同
- 全新房地產(chǎn)中介傭金合同下載年
- 2024秋七年級(jí)英語(yǔ)下冊(cè) Module 11 Body language Unit 2 Here are some ways to welcome them說(shuō)課稿 (新版)外研版
- 食品購(gòu)銷合同協(xié)議書范文
- 七年級(jí)生物上冊(cè) 第二單元 第一章 第2節(jié) 植物細(xì)胞說(shuō)課稿 (新版)新人教版
- 2025 年福建省中考語(yǔ)文試題:作文試題及范文
- 短視頻運(yùn)營(yíng)績(jī)效考核表KPI-企業(yè)管理
- 【譯林】九下英語(yǔ)單詞默寫表
- IEC 62368-1標(biāo)準(zhǔn)解讀-中文
- 15J403-1-樓梯欄桿欄板(一)
- QC課題提高金剛砂地面施工一次合格率
- 2024年發(fā)電廠交接班管理制度(二篇)
- 《數(shù)學(xué)課程標(biāo)準(zhǔn)》義務(wù)教育2022年修訂版(原版)
- 各種標(biāo)本采集的技術(shù)-痰標(biāo)本的采集(護(hù)理技術(shù))
- 實(shí)驗(yàn)室的設(shè)計(jì)規(guī)劃
評(píng)論
0/150
提交評(píng)論