版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第八章
GUI程序設(shè)計(jì)基礎(chǔ)
Java程序設(shè)計(jì)本章主要內(nèi)容圖形用戶界面概述布局管理事件處理GUI設(shè)計(jì)中容器的應(yīng)用小結(jié)2024/12/24李飛——計(jì)算中心2/33圖形界面的基本概念組件GUI組件也叫控件,它是GUI用來定義屏幕元素的一個(gè)對象,用它可以顯示信息行或允許用戶以特定的方式與程序進(jìn)行交互。例如標(biāo)簽、按鈕、文本框等都是組件。
事件事件在Java中是一種對象,它代表能夠引起我們注意的某些事情。通常引發(fā)事件的都是用戶的動(dòng)作或程序運(yùn)行時(shí)系統(tǒng)的某些狀態(tài)變化。例如用戶單擊鼠標(biāo)引發(fā)鼠標(biāo)單擊事件。3.監(jiān)聽器監(jiān)聽器在Java中也是一種對象,它就像一個(gè)天眼,在被啟動(dòng)后監(jiān)視著程序運(yùn)行,等待著事件的發(fā)生。一旦發(fā)生事件,監(jiān)聽器會以某種方式進(jìn)行響應(yīng)。4.容器。容器是用來組織其他組件的組件。一般來說,一個(gè)應(yīng)用程序的圖形用界面首先對應(yīng)一個(gè)容器,如一個(gè)窗口、一個(gè)對話框亦或是一個(gè)面板。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心3/33圖形界面的基本概念窗口窗口是在圖形界面的操作系統(tǒng)中執(zhí)行應(yīng)用程序時(shí)打開的一個(gè)矩形區(qū)域。菜單是GUI界面中為用戶提供的在程序進(jìn)行中出現(xiàn)在顯示屏上的選項(xiàng)列表。它的每個(gè)選項(xiàng)對應(yīng)一個(gè)應(yīng)用程序功能。用戶可以通過點(diǎn)選這些選項(xiàng)來命令程序執(zhí)行相應(yīng)的程序完成對應(yīng)的功能。工具欄工具欄是一組帶圖標(biāo)的按鈕的集合。工具欄的每個(gè)按鈕代表一個(gè)程序功能,當(dāng)用戶點(diǎn)選某一按鈕時(shí),系統(tǒng)會執(zhí)行該按鈕對應(yīng)的程序,以完成相應(yīng)的功能。8.對話框。對話框可以看成是一種特殊的窗口,它包含按鈕和各種選項(xiàng),通過它們可以完成特定命令或任務(wù)。對話框主要為用戶提供一種人機(jī)交流的方式,用戶對對話框進(jìn)行設(shè)置,計(jì)算機(jī)就會執(zhí)行相應(yīng)的命令。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心4/33Java圖形界面的組成2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心5/50GUI相關(guān)的包和類2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心6/33GUI相關(guān)的包和類2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心7/338.2布局管理我們在圖形用戶界面程序設(shè)計(jì)中一方面要考慮程序的功能,同時(shí)還要考慮GUI的美觀,這就需要在設(shè)計(jì)界面時(shí)考慮界面中各種組件在容器中的位置和相互關(guān)系。在這方面,JDK為程序員提供了布局管理器類,用于解決組件的位置和布局的問題。Java設(shè)置組件布局的方法是通過為容器設(shè)置布局管理器來實(shí)現(xiàn)的。特別的,如果當(dāng)用戶不設(shè)定布局管理器(布局管理器設(shè)為null時(shí))的時(shí)候,Java認(rèn)為用戶需要把組件放到絕對坐標(biāo)指定的位置,這時(shí)GUI將和平臺相關(guān),我們也稱這種做法為絕對位置布局。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心8/33布局管理器FlowLayout類:對應(yīng)流式布局策略,指組件按照加入順序排成一行,一行排滿后自動(dòng)換行排列。BorderLayout類:對應(yīng)邊界布局策略,指把容器劃分為東、西、南、北、中五個(gè)區(qū)域,加入組件時(shí)指定其所在區(qū)域。CardLayout類:對應(yīng)卡式布局策略,指各個(gè)組件層疊安排,某一時(shí)刻只顯示一個(gè)組件。GridLayout類:對應(yīng)網(wǎng)格布局策略,是把容器劃分成若干行乘若干列的網(wǎng)格,組件放置在指定的網(wǎng)格中。GridBagLayout類:對應(yīng)網(wǎng)格包布局策略,是把容器劃分為網(wǎng)格,但組件可以占用一個(gè)或多個(gè)網(wǎng)格。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心9/33流式布局流式布局是Panel類、JPanel類、Applet類和它們的子類的默認(rèn)布局策略。對應(yīng)的類:java.awt包中的FlowLayout類。使用方法:對一個(gè)原本不使用流式布局管理器的容器,若需要將其布局策略改變?yōu)榱魇讲季植呗?,可以使用setLayout()方法。其格式是setLayout(newFlowLayout());對于使用FlowLayout的容器,加入組件使用容器的add()方法即可,這些組件將順序的排列在容器中。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心10/33流式布局流式布局管理器對象的構(gòu)造方法FlowLayout(intalign,inthgap,intvgap);或FlowLayout(intalign);其中,參數(shù)align指定每行組件的對齊方式,可以取三個(gè)靜態(tài)常量LEFT、CENTER、RIGHT之一;參數(shù)hgap和vgap分別指定各組件間的橫向和縱向間的間距(以像素為單位)。當(dāng)僅有align參數(shù)時(shí),組件間的縱橫間距默認(rèn)均為五個(gè)像素。當(dāng)使用沒有任何參數(shù)的構(gòu)造方法時(shí),系統(tǒng)默認(rèn)對齊方式是居中對齊,且組件間距默認(rèn)五個(gè)像素。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心11/33例8.1采用流式布局管理器創(chuàng)建用戶界面。importjava.awt.*;importjavax.swing.*;classmyWindowextendsJFrame{ JButtonbutton1,button2,button3,button4,button5; JPanelpanel1,panel2,panel3; publicmyWindow(){ FlowLayoutfl=newFlowLayout(FlowLayout.CENTER,10,10); Containercp=this.getContentPane(); button1=newJButton("按鈕1"); button2=newJButton("按鈕2"); button3=newJButton("按鈕3"); button4=newJButton("按鈕4"); button5=newJButton("按鈕5");2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心12/50 panel1=newJPanel(); panel2=newJPanel(); panel3=newJPanel(); panel1.add(button1); panel1.add(button2); panel2.setLayout(fl); panel2.add(button3); panel3.add(button4); panel3.add(button5); cp.setLayout(newFlowLayout()); cp.add(panel1); cp.add(panel2); cp.add(panel3); this.setSize(200,200); this.setVisible(true); }}2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心13/33publicclasseg8_1{ publicstaticvoidmain(String[]args){ myWindowwin=newmyWindow(); }}2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心14/33邊界布局邊界布局對應(yīng)的類是BorderLayout。它是把容器的空間簡單的劃分為East(東)、West(西)、South(南)、North(北)、Center(中)五個(gè)區(qū)域。五個(gè)區(qū)域采用類似于地圖的方位,遵循上北、下南、左西、右東的劃分方法。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心15/33邊界布局邊界布局管理器的構(gòu)造方法有兩個(gè),他們分別是BorderLayout()和BorderLayout(inthgap,intvgap)BorderLayout布局是Window、Frame和Dialog類的默認(rèn)布局管理器。例8.2為大家示范了邊界布局管理器的使用方法。例:Eg8.22024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心16/33卡式布局卡式布局對應(yīng)CardLayout類,設(shè)置了卡式布局的容器可以容納多個(gè)組件,但在同一時(shí)刻只能顯示其中的一個(gè)組件。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心17/33使用卡式布局的方法和步驟如下CardLayout對象的構(gòu)造方法CardLayoutmyLayout=newCardLayout();使用容器的setLayout()方法為容器設(shè)置布局管理器。setLayout(myLayout);使用Add(字符串,組件)方法將該容器的每個(gè)組件添加到容器,同時(shí)為每個(gè)組件分配一個(gè)字符串的名字,以便布局管理器根據(jù)這個(gè)名字調(diào)用顯示這個(gè)組件。4.使用show(容器名,字符串)方法可以按第(3)步分配的字符串名字顯示相應(yīng)的組件;也可按組件加入容器的順序顯示組件。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心18/33
CardLayout的常用方法方法名說明addLayoutComponent(Componentcomp,Objectconstraints)將組件添加到卡片布局的內(nèi)部名稱表。constraints指組件的引用名稱。first(Containerparent)翻轉(zhuǎn)到容器的第一張卡片。next(Containerparent)翻轉(zhuǎn)到容器的下一張卡片。previous(Containerparent)翻轉(zhuǎn)到容器的前一張卡片。last(Containerparent)翻轉(zhuǎn)到容器的最后一張卡片。show(Containerparent,Stringname)翻轉(zhuǎn)到指定name的組件。如果不存在,則不發(fā)生任何操作。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心19/33網(wǎng)格布局格布局的策略是把容器的空間劃分成若干行和列組成的網(wǎng)格,組件放在網(wǎng)格中的每個(gè)小格中。網(wǎng)格布局管理器的一般步驟:創(chuàng)建GridLayout對象作為布局管理器。指定劃分網(wǎng)格的行數(shù)和列數(shù)。使用容器的setLayout()方法為容器設(shè)置網(wǎng)格布局管理器調(diào)用容器的方法add()將組件加入容器。每個(gè)網(wǎng)格中必須填入一個(gè)組件,如果希望某個(gè)網(wǎng)格為空白,可以為它加入一個(gè)空的標(biāo)簽,例如add(newLabel())。例8.42024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心20/50網(wǎng)格袋布局網(wǎng)格袋布局與網(wǎng)格布局類似,也是將容器劃分為若干網(wǎng)格。但不同的是,首先,網(wǎng)格袋布局中的每個(gè)網(wǎng)格的寬度和高度都可以不同;其次,每個(gè)組件可以占據(jù)一個(gè)和多個(gè)網(wǎng)格;再次,可以指定組件在網(wǎng)格中的??课恢?。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心21/33網(wǎng)格袋布局管理器使用的基本步驟通過new創(chuàng)建GridBagLayout類的實(shí)例對象。通過setLayout()方法為容器指定網(wǎng)格袋布局。為網(wǎng)格袋布局管理器創(chuàng)建約束條件對象,即創(chuàng)建GridBagConstraints類的實(shí)例對象。通過設(shè)置約束條件對象的屬性,設(shè)置網(wǎng)格袋布局的約束條件。通過add(GUI組件名,約束條件對象名)方法按照約束條件將GUI組件添加到容器中。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心22/338.3事件處理事件(event):是指用戶使用鼠標(biāo)或鍵盤對窗口中的組件進(jìn)行交互操作或者系統(tǒng)狀態(tài)改變時(shí)所發(fā)生的事情,如單擊按鈕,向文本框中輸入文字或雙擊鼠標(biāo)等。在Java中,事件是通過類來描述,并通過事件類的實(shí)例對象來表示的。事件類用于描述發(fā)生了什么事情。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心23/33常用事件列表事件事件類名說明組件動(dòng)作事件ActionEvent當(dāng)用戶對組件進(jìn)行操作觸發(fā)該事件。調(diào)整滾動(dòng)條事件AdjustmentEvent各種滾動(dòng)條調(diào)整時(shí)觸發(fā)該事件。改變?nèi)萜鲀?nèi)容事件ContainerEvent容器內(nèi)容因?yàn)樘砑踊蛞瞥M件而更改時(shí)觸發(fā)該事件。組件更改事件ComponentEvent組件被移動(dòng)、大小被更改或可見性被更改時(shí)觸發(fā)該事件。事件源狀態(tài)改變事件ChangeEvent通知感興趣的參與者事件源中的狀態(tài)已發(fā)生更改。焦點(diǎn)變化事件FocusEvent當(dāng)組件獲得或失去焦點(diǎn)時(shí)觸發(fā)該事件。條目變化事件ItemEvent在列表框或組合框中,某行被選定或取消選定時(shí)觸發(fā)該事件。擊鍵事件KeyEvent當(dāng)按下、釋放某個(gè)鍵時(shí)觸發(fā)該事件。列表項(xiàng)選擇事件ListSelectionEvent用戶選擇列表中的條目時(shí)觸發(fā)該事件。鼠標(biāo)操作事件MouseEvent當(dāng)鼠標(biāo)按下、放開、單擊,雙擊,右擊,拖拽、移動(dòng)等操作。菜單操作事件MenuEvent當(dāng)用戶操作菜單時(shí)觸發(fā)該事件彈出式菜單操作事件PopupMenuEvent當(dāng)用戶操作彈出式菜單時(shí)觸發(fā)該事件文本變化事件TextEvent當(dāng)文本改變時(shí)觸發(fā)該事件窗口變化事件WindowEvent當(dāng)打開、關(guān)閉、激活、停用、最小化或取消圖標(biāo)化窗口時(shí),或者焦點(diǎn)轉(zhuǎn)移到或移出窗口時(shí)觸發(fā)此事件。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心24/33事件監(jiān)聽模型2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心25/33發(fā)生事件系統(tǒng)發(fā)送事件發(fā)生消息事件監(jiān)聽器捕捉事件執(zhí)行相應(yīng)的事件處理程序等待新事件發(fā)生事件的監(jiān)聽器接口和處理方法事件類監(jiān)聽器接口事件處理接口的方法ActionEventActionListeneractionPerformed(ActionEvente)AdjustmentEventAdjustmentListeneradjustmentValueChanged(AdjustmentEvente)ContainerEventContainerListenercomponentAdded(ContainerEvente)componentRemoved(ContainerEvente)ChangeEventChangeListenerstateChanged(ChangeEvente)TextEventTextListenertextValueChanged(TextEvente)ItemEventItemListeneritemStateChanged(ItemEvente)ListSelectionEventListSelectionListenervalueChanged(ListSelectionEvente)ComponentEventComponentListenercomponentMoved(ComponentEvente)componentHidden(ComponentEvente)componentResized(ComponentEvente)componentShown(ComponentEvente)FocusEventFocusListenerfocusGained(FocusEvente)focusLost(FocusEvente)KeyEventKeyListenerkeyPressed(KeyEvente)keyReleased(KeyEvente)keyTyped(KeyEvente)2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心26/33MenuEventMenuListenermenuCanceled(MenuEvente)
menuDeselected(MenuEvente)
menuSelected(MenuEvente)MouseEventMouseMotionListenermouseDragged(MouseEvente)
mouseMoved(MouseEvente)
MouseListenermousePressed(MouseEvente)
mouseReleased(MouseEvente)
mouseEntered(MouseEvente)
mouseExited(MouseEvente)
mouseClicked(MouseEvente)WindowEventWindowListenerwindowClosing(WindowEvente)
windowOpened(WindowEvente)
windowIconified(WindowEvente)
windowDeiconified(WindowEvente)
windowClosed(WindowEvente)
windowActivated(WindowEvente)
windowDeactivated(WindowEvente)2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心27/33事件類監(jiān)聽器接口事件處理接口的方法事件處理機(jī)制(例8.6)2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心28/33事件適配器在實(shí)現(xiàn)事件監(jiān)聽器接口的過程中,我們會發(fā)現(xiàn)很多時(shí)候我們僅需要對某個(gè)事件的一個(gè)動(dòng)作進(jìn)行處理,但由于接口繼承的特性,卻不得不把此事件對應(yīng)的事件監(jiān)聽器接口中的所有事件處理方法實(shí)現(xiàn),盡管有些方法并不需要,也要在形式上實(shí)現(xiàn),即實(shí)現(xiàn){}。這樣會很麻煩。為了方便編程,Java為某些包含多個(gè)抽象方法的監(jiān)聽器接口提供了事件適配器類,這些事件適配器類已經(jīng)形式上的實(shí)現(xiàn)了對應(yīng)的相關(guān)事件監(jiān)聽器接口,這樣我們編寫事件監(jiān)聽器程序時(shí)只需繼承相應(yīng)的事件適配器類,并在子類中重寫并覆蓋我們需要的處理方法即可,而不必一一實(shí)現(xiàn)接口中其他無關(guān)的方法。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心29/33事件與適配器類(例8.7)事件類事件處理接口適配器類ActionEventActionListener無AdjustmentEventAdjustmentListener無ComponentEventComponentListenerComponentAdapterContainerEventContainerListenerContainerAdapterItemEventItemListener無KeyEventKeyListenerKeyAdapterMouseEventMouseListenerMouseAda
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游泳行業(yè)游泳技巧培訓(xùn)總結(jié)
- 零食店服務(wù)員工作技巧
- 時(shí)尚店銷售員的工作總結(jié)
- 快遞行業(yè)派送專員培訓(xùn)總結(jié)
- 《瑜伽與健康》課件
- 《卒中優(yōu)化治療》課件
- 2023年江蘇省宿遷市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年青海省西寧市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年江蘇省鹽城市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2021年河北省石家莊市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 西安信息職業(yè)大學(xué)《工程管理導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- CNC技理考(含答案)
- 電氣領(lǐng)域知識培訓(xùn)課件
- 金融產(chǎn)品分類介紹
- 小收納大世界-整li與收納(黑龍江幼兒師范高等專科學(xué)校)知到智慧樹答案
- 2024-2025學(xué)年上學(xué)期深圳初中語文七年級期末模擬卷2
- 河南省鄭州市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試題含解析
- BOSS GT-6效果處理器中文說明書
- 2024廣東煙草專賣局校園招聘筆試管理單位遴選500模擬題附帶答案詳解
- 孕產(chǎn)婦高危五色管理(醫(yī)學(xué)講座培訓(xùn)課件)
- 幼兒體適能培訓(xùn)
評論
0/150
提交評論