版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八章JFC/AWT/Swing
AWT
AWT事件處理模型
AWT組件類庫1JFC/SwingJFC(JavaFoundationClasses):Java基礎(chǔ)類,是關(guān)于GUI組件和服務(wù)的完整集合,主要包含5個(gè)API:AWT、Java2D、Accessibility、Drag&Drop、Swing。JFC提供了幫助開發(fā)人員設(shè)計(jì)復(fù)雜應(yīng)用程序的一整套應(yīng)用程序開發(fā)包。JavaFoundationClasses(JFC)包含如下特征:
Swing組件
支持可插入的look&feel
Accessibility
Java2D
DragandDrop2Java基礎(chǔ)類Java2D是一套圖形API,它為Java應(yīng)用程序提供了一套高級(jí)的有關(guān)二維(2D)圖形圖像處理的類。Java2DAPI擴(kuò)展了java.awt和java.awt.image類,并提供了豐富的繪圖風(fēng)格,定義了復(fù)雜圖形的機(jī)制和精心調(diào)節(jié)繪制過程的方法和類。這些API使得獨(dú)立于平臺(tái)的圖形應(yīng)用程序的開發(fā)更加簡(jiǎn)便。AccessibilityAPI提供了一套高級(jí)工具,用以輔助開發(fā)使用非傳統(tǒng)輸入和輸出的應(yīng)用程序。它提供了一個(gè)輔助的技術(shù)接口,如:屏幕閱讀器,屏幕放大器,聽覺文本閱讀器(語音處理)等等。Drag&Drop技術(shù)提供了Java和本地應(yīng)用程序之間的互操作性,用來在Java應(yīng)用程序和不支持Java技術(shù)的應(yīng)用程序之間交換數(shù)據(jù)。JFC模塊的重點(diǎn)在Swing。Swing用來進(jìn)行基于窗口的應(yīng)用程序開發(fā),它提供了一套豐富的組件和工作框架,以指定GUI如何獨(dú)立于平臺(tái)地展現(xiàn)其視覺效果。3AWT(抽象窗口工具包)AWT(AbstractWindowToolkit),抽象窗口工具包,SUN公司提供的用于圖形界面編程(GUI)的類庫。基本的AWT庫處理用戶界面元素的方法是把這些元素的創(chuàng)建和行為委托給每個(gè)目標(biāo)平臺(tái)上(Windows、Unix、Macintosh等)的本地GUI工具進(jìn)行處理。例如:如果我們使用AWT在一個(gè)Java窗口中放置一個(gè)按鈕,那么實(shí)際上使用的是一個(gè)具有本地外觀和感覺的按鈕。這樣,從理論上來說,我們所編寫的圖形界面程序能運(yùn)行在任何平臺(tái)上,做到了圖形界面程序的跨平臺(tái)運(yùn)行。4抽象窗口工具集AWTJava.awt包包括建立GUI所需基本組件。Java.awt的主要類及層次關(guān)系ObjectBorderLayoutFlowLayoutGridBagLayoutMenuComponentMenuBarMenuItemComponentButtonContainerpanelwindowScrollPane...DialogFrameApplet...LayoutManager5容器(Container)組件必須放在容器內(nèi)才能顯示容器主要包括:窗口(Window,Frame)面板(Panel)ContainerPanelWindowScrollPaneDialogFrameApplet6Frame框架類帶有標(biāo)題并可改變大小,可以使用add()方法向Frame中加組件。importjava.awt.*;publicclassMyFrameextendsFrame{publicstaticvoidmain(Stringargs[]){
MyFramefr=newMyFrame(“HelloOutThere!”); fr.setSize(500,500); fr.setBackground(color.green); fr.setVisible(true); }publicMyFrame(Stringstr){ super(str); }}HelloOutThere!7PanelPanel必須放在Window或Frame中。是一塊無邊框的區(qū)域??梢韵蚱渲蟹湃牖窘M件?!璮r=newFrame(“FramewithPanel”);Panelpan=newPanel();fr.setSize(200,200);fr.setBackground(Color.blue);pan.setSize(100,100);pan.setBackground(Color.yellow);fr.add(pan);fr.setVisible(true);…}FramewithPanel8LayoutManager容器中組件的位置和大小布局通常由LayoutManager布局管理器來控制。容器對(duì)布局管理器的特定實(shí)例保持一個(gè)引用。當(dāng)容器需要定位一個(gè)組件時(shí),它將調(diào)用布局管理器來完成。當(dāng)決定一個(gè)組件的大小時(shí),也是如此。LayoutManager負(fù)責(zé)決定容器的布局策略及容器內(nèi)每個(gè)組件的大小。每個(gè)容器都由一個(gè)缺省的LayoutManager,可通過setLayout()方法改變。Java提供的五種方式的布局管理器 FlowLayout BorderLayout GridLayout CardLayout GridBagLayout(最復(fù)雜的布局方式一般不使用)9LayoutManager(布局管理器)10布局管理器我們可以通過設(shè)置空布局管理器,來控制組件的大小和位置。調(diào)用setLayout(null)。在設(shè)置空布局管理器后,必須對(duì)所有的組件調(diào)用setLocation(),setSize()或setBounds(),將它們定位在容器中。11FlowLayoutManager組件采用從左到右,從上到下逐行擺放。FlowLayoutOpenCloseokFlowLayoutOpenCloseoksetLayout(newFlowLayout(intalign,inthgap,intvgap))FlowLayout.LEFTFlowLayout.RIGHTFlowLayout.CENTER缺省是居中12FlowLayoutManager例:importjava.awt.*; publicclassExGui{ privateFramef; privateButtonb1; privateButtonb2; publicstaticvoidmain(Stringargs[]){ ExGuiguiwindow=newExGui(); guiWindow.go(); } publicvoidgo(){ f=newFrame(“GUIexample”); f.setLayout(newFlowLayout()); b1=newButton(“PressMe”); b2=newButton(“Don’tPressMe“); f.add(b1); f.add(b2); f.setVisible(true);} }GUIexamplePressMeDon’tPressMe13BorderLayoutManagerBorderLayout分5個(gè)區(qū):JAVAAPI幫助文檔BorderLayoutNorthWestEastSouthCenterBorderLayout缺省:Center位置14BorderLayoutManager構(gòu)造與安裝BorderLayout:setLayout(newBorderLayout())-組件間無縫隙setLayout(newBorderLayout(inthgap,intVgap));加入組件:add(button,BorderLayout.CENTER)15GridLayoutManager把窗口分成網(wǎng)格,n行*m列。組件從左到右,從上到下填充。構(gòu)造與安裝布局管理器: setLayout(newGridLayout(introws,intcols));16Grid123456GridLayoutManager例: … f=newFrame(“Grid”); f.setLayout(newGridlayout(3,2)); b1=newButton(“1”); b2=newButton(“2”); b3=newButton(“3”); b4=newButton(“4”); b5=newButton(“5”); b6=newButton(“6”); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.pack(); f.setVisible(true); …17CardLayoutManager把組件象一系列卡片一樣疊放,一個(gè)時(shí)刻只能看到最上面的。18GridBagLayout19如何選擇布局管理器組件盡量充滿容器空間——使用BorderLayout或 GridBagLayout組件以自然大小緊湊的在一行中顯示——FlowLayout組件大小相同,并且成行或成列顯示——GridLayout20GUI的設(shè)計(jì)步驟先設(shè)計(jì)一個(gè)窗口,如Frame確定布局管理器在窗口中添加所需組件改變組件顏色、字體增加事件處理21AWT事件處理模型什么是事件事件處理機(jī)制事件目錄事件、接口、方法列表多監(jiān)聽器事件適配器22Event的含義Events(事件):描述發(fā)生了什么的對(duì)象。Java中有很多不同類型的事件類,用來描述不同 類型的用戶動(dòng)作Eventsource(事件源):
產(chǎn)生事件的組件。Eventhandlers(事件處理器):接收事件對(duì)象、解釋事件對(duì)象并處理用戶交互的方法。23JDK1.2中的事件處理機(jī)制FramePanelButtonPanelandFrameeventhandlersactionperformed(ActionEvente){ }ActionEvent(二)JDK1.1的事件模型:委托模型事件監(jiān)聽器方式:實(shí)現(xiàn)了監(jiān)聽器接口的類。一個(gè)監(jiān)聽器對(duì)象是一個(gè)實(shí)現(xiàn)了專門的監(jiān)聽器接口的類的實(shí)例。事件監(jiān)聽器Actionhandlers24JDK1.2中的事件處理機(jī)制監(jiān)聽器:每個(gè)事件有一個(gè)相應(yīng)的監(jiān)聽器接口,定義了接收事件的方法。實(shí)現(xiàn)該接口的類,可作為監(jiān)聽器注冊(cè)。每個(gè)組件都注冊(cè)有一個(gè)或多個(gè)監(jiān)聽器(類),該監(jiān)聽器包含了能接收和處理事件的事件處理。事件對(duì)象只向已注冊(cè)的監(jiān)聽器報(bào)告。25JDK1.2中的事件處理機(jī)制包含事件處理的程序應(yīng)該包括以下三部分內(nèi)容:1.在事件處理類的聲明中指定要實(shí)現(xiàn)的監(jiān)聽器名,如:publicclassMyClassimplementsActionListener{
…}2.實(shí)現(xiàn)監(jiān)聽器中的接口,如:publicvoidactionPerformed(ActionEvente){
...//響應(yīng)某個(gè)動(dòng)作的代碼...
}
3.在一個(gè)或多個(gè)組件上將監(jiān)聽器類的實(shí)例注冊(cè)為監(jiān)聽器,如:someComponent.addActionListener(instanceOfMyClass);
26事件分類java.util.EventObjectJava.awt.AWTEventActionEventAdjustmentEventComponentEventItemEventTextEventContainerEventFocusEventInputEventWindowEventJava.beans.beanContext...27事件監(jiān)聽器接口java.util.EventListenerActionListener…...ItemListener…28事件接口與方法目錄ListenerInterfaceAdapterClassMethodsActionListener
無actionPerformedAdjustmentListener
無adjustmentValueChangedComponentListener
ComponentAdapter
componentHidden
componentMoved
componentResized
componentShownContainerListener
ContainerAdaptercomponentAdded
componentRemoved
FocusListener
FocusAdapter
focusGained
focusLostItemListener
無itemStateChanged
29ListenerInterfaceAdapterClassMethodsKeyListener
KeyAdapterkeyPressed
keyReleased
keyTypedMouseListener
MouseAdapter
mouseClicked
mouseEntered
mouseExited
mousePressed
mouseReleasedMouseMotionListenerMouseMotionAdaptermouseDragged
mouseMoved
TextListener
無textValueChangedWindowListener
WindowAdapterwindowActivated
windowClosed
windowClosing
windowDeactivated
windowDeiconified
windowIconified
windowOpened事件接口與方法目錄30舉例--帶有兩個(gè)監(jiān)聽器的Frame…publicclassTwoListenerimplements MouseMotionListener,MouseListener{ Framef; TextFieldtf; publicstaticvoidmain(Stringargs[]){ TwoListenertwo=newTwoListener(); two.go(); }
31publicvoidgo(){ f=newFrame(“TwoListener”); tf=newTextField(30); f.add(tf,”BorderLayout.SOUTH”);
f.addMouseMotionListener(this); f.addMouseListener(this); … }//TheseareMouseMotionListenereventspublicvoidmouseDragged(MouseEvente){}publicvoidmouseMoved(MouseEvente){…}//TheseareMouseListenereventspublicvoidmouseEntered(MouseEvente){ Strings=“Themouseentered”; tf.setText(s);}publicvoidmouseClicked(MouseEvente){…}publicvoidmouseReleased(…){…}……}舉例--帶有兩個(gè)監(jiān)聽器的Frame32多監(jiān)聽器在同一個(gè)組件上注冊(cè)多個(gè)監(jiān)聽器。根據(jù)需要多次調(diào)用addXXXListener()方法注冊(cè)多個(gè)監(jiān)聽器。33EventAdaptersAdapter類實(shí)現(xiàn)了相應(yīng)Listener接口,但所有方法體都是空的。用戶可以把自己的監(jiān)聽器類聲明為adapter類的子類,便可以只重寫需要的方法?!璸ublicclassMouseClickHandlerextendsMouseAdapter{ publicvoidmouseClicked(MouseEvente){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度企事業(yè)單位通勤大客車租賃合同范本2篇
- 2025中國郵政集團(tuán)限公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國航天科工集團(tuán)光量子技術(shù)及應(yīng)用總體部人才招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國科學(xué)院海洋研究所海洋腐蝕與防護(hù)科研財(cái)務(wù)助理招聘1人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 智能樓宇照明相關(guān)行業(yè)投資方案
- 2025中國電信股份限公司保山分公司(騰沖電信)招聘13人(云南)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國電信寧夏公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國核工業(yè)集團(tuán)限公司校園招聘8000人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中冶華天南京電氣工程技術(shù)限公司招聘10人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年湖南岳陽市城市建設(shè)投資集團(tuán)限公司招聘25人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 日結(jié)工協(xié)議書日結(jié)工用工協(xié)議
- 行政管理能力提升培訓(xùn)
- 全新聘用項(xiàng)目經(jīng)理勞務(wù)協(xié)議
- 浙江省金華市東陽市 2024 年初中學(xué)業(yè)水平考試模擬試卷 科學(xué)試題
- 【人教版】九年級(jí)化學(xué)上冊(cè)期末試卷(匯編)
- 中國歷史地理智慧樹知到期末考試答案章節(jié)答案2024年泰山學(xué)院
- 2023年檢驗(yàn)檢測(cè)機(jī)構(gòu)質(zhì)量手冊(cè)(依據(jù)2023年版評(píng)審準(zhǔn)則編制)
- 2023年玻璃廠年終工作總結(jié)
- 專題06 習(xí)作-2023-2024學(xué)年統(tǒng)部編版語文六年級(jí)上冊(cè)期末備考真題分類匯編
- 水泥企業(yè)的個(gè)人年度工作總結(jié)
- 人事管理系統(tǒng)設(shè)計(jì)與開發(fā)答辯
評(píng)論
0/150
提交評(píng)論