版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章Swing程序設(shè)計(jì)主講:王芳Java程序設(shè)計(jì)本章知識(shí)點(diǎn)javaSwing概述掌握常用窗體的使用掌握常用組件與布局的使用掌握常用面板掌握按鈕、列表、文本組件掌握常用事件監(jiān)聽(tīng)器7.1Swing概述Swing特點(diǎn)java的優(yōu)勢(shì)是網(wǎng)絡(luò)應(yīng)用方面,但java也提供了強(qiáng)大的用于開(kāi)發(fā)桌面程序的API,這些API在javax.swing包中。通過(guò)圖形用戶(hù)界面(GraphicsUserInterface,GUI),用戶(hù)和程序之間可以方便地進(jìn)行交互。java的java.awt包,即java抽象工具包(AbstractWindowToolkit,AWT)提供了許多用來(lái)設(shè)計(jì)GUI的組件類(lèi)。
java早期進(jìn)行用戶(hù)界面設(shè)計(jì)時(shí),主要使用java.awt包提供的類(lèi),比如Button、TextField、List等。JDK1.2推出之后,增加了一個(gè)新的javax.swing包,該包提供了功能更為強(qiáng)大的設(shè)計(jì)GUI的類(lèi)。java.awt和javax.swing包中的一部分類(lèi)的層次關(guān)系的UML圖如圖7.1所示。ComponentContainerJComponentWindowJDialogJFrameDialogFrameJButtonJTextFieldJPanelJTableJTextArea圖7.1component類(lèi)的部分子類(lèi)
掌握兩個(gè)概念:容器類(lèi)(Container)和組件類(lèi)(Component)javax.swing包中Jcomponent類(lèi)是java.awt包Container類(lèi)的一個(gè)直接子類(lèi),是java.awt包中Component類(lèi)的間接子類(lèi),學(xué)習(xí)GUI編程主要是學(xué)習(xí)掌握使用Component類(lèi)的一些重要的子類(lèi)。以下是GUI編程經(jīng)常用到的基本知識(shí)點(diǎn)。java把Component類(lèi)的子類(lèi)或間接子類(lèi)創(chuàng)建的對(duì)象稱(chēng)為一個(gè)組件。java把Container的子類(lèi)或間接子類(lèi)創(chuàng)建的對(duì)象稱(chēng)為一個(gè)容器??梢韵蛉萜髦刑砑咏M件。Container類(lèi)提供了一個(gè)public方法add(),一個(gè)容器可以調(diào)用這個(gè)方法將組件添加到該容器中。容器調(diào)用removeAll()方法可以移調(diào)容器中的全部組件,調(diào)用remove(Componentc)方法可以移調(diào)容器中參數(shù)為c指定的組件。容器本身也是一個(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套。每當(dāng)容器添加新的組件或移調(diào)組件時(shí),要調(diào)用validate()方法,以保證容器中的組件能正常顯示出來(lái)。頂層類(lèi)介紹Component類(lèi)包含paint、repaint方法,可以在屏幕上繪制組件大多數(shù)GUI組件直接或間接擴(kuò)展ComponentContainer類(lèi)容納相關(guān)組件包括add方法,用來(lái)添加組件包括setLayout方法,這個(gè)方法可用來(lái)設(shè)置布局,以幫助Container對(duì)象對(duì)其中的組件進(jìn)行定位和設(shè)置組件大小JComponent類(lèi)——多數(shù)Swing組件的超類(lèi)可抽換的外觀和感覺(jué),即可根據(jù)需求定制外觀和感覺(jué)??旖萱I(通過(guò)鍵盤(pán)直接訪(fǎng)問(wèn)GUI組件)一般的事件處理功能Swing的組件和容器層次通常將javax.swing包里的Swing組件歸為三個(gè)層次最外層容器中間層容器原子組件(最內(nèi)層)頂層容器Swing提供三個(gè)最外層容器的類(lèi)JFrame實(shí)現(xiàn)單個(gè)主窗口JDialog實(shí)現(xiàn)一個(gè)二級(jí)窗口(對(duì)話(huà)框)JApplet在瀏覽器窗口中實(shí)現(xiàn)一個(gè)applet顯示區(qū)域必須和操作系統(tǒng)打交道,所以都是重量級(jí)組件。從繼承結(jié)構(gòu)上來(lái)看,它們分別是從原來(lái)AWT組件的Frame、Dialog和Applet類(lèi)繼承而來(lái)。每個(gè)使用Swing組件的Java程序都必須至少有一個(gè)頂層容器,別的組件都必須放在這個(gè)頂層容器上才能顯現(xiàn)出來(lái)。JFrame窗體(常用方法)JFame()創(chuàng)建一個(gè)無(wú)標(biāo)題的窗口。JFame(Strings)創(chuàng)建標(biāo)題為s的窗口。publicvoidserSize(intwidth,intheight)設(shè)置窗口的大小。publicvoidsetBounds(inta,intb,intwidth,intheight)設(shè)置窗口的初始位置是(a,b),距屏幕左面a個(gè)像素,距屏幕上方b個(gè)像素,窗口的寬是width,高是height.publicvoidsetVisible(booleanb)設(shè)置窗口是否可見(jiàn),窗口默認(rèn)是不可見(jiàn)的。7.2常用窗體publicvoidsetDefaultCloseOperation(intoperation)該方法用來(lái)設(shè)置單擊窗體右上角的關(guān)閉圖標(biāo)后,程序會(huì)做出怎樣的處理。其中的參數(shù)operation取JFrame類(lèi)中的下列int型static常量,程序根據(jù)參數(shù)operation取值做出不同的處理:
DO_NOTHING_ON_CLOSE(什么也不做),HIDE_ON_COLSE(隱藏當(dāng)前窗口),DISPOSE_ON_COLSE(隱藏當(dāng)前窗口,并釋放窗體占有的其他資源),EXIT_ON_CLOSE(結(jié)束窗口所在的應(yīng)用程序)。例swing1.java容器的主要作用和特點(diǎn)容器有一定的范圍。一般容器都是矩形的,容器范圍邊界可以用邊框框出來(lái),有些則沒(méi)有可見(jiàn)的標(biāo)記。容器有一定的位置。這個(gè)位置可以是屏幕四角的絕對(duì)位置,也可以是相對(duì)于其他容器邊框的相對(duì)位置。容器中可以包含其他的許多界面成份和元素。當(dāng)容器被打開(kāi)顯示時(shí),它上面的成份和元素也同時(shí)顯示出來(lái);當(dāng)容器被關(guān)閉和隱藏時(shí),它所包含的成份和元素也一起被隱藏。容器可以按一定的規(guī)則來(lái)安排它所包含的元素,如這些元素的相對(duì)位置關(guān)系、它們的前后排列關(guān)系等。三層容器結(jié)構(gòu)示例
最外層容器(窗口JFram)中間層容器(JPanel)最內(nèi)層原子組件JFrame類(lèi)JFrame的繼承結(jié)構(gòu)java.lang.Object└java.awt.Component└java.awt.Container└java.awt.Window└java.awt.Frame└javax.swing.JFrameJFrame類(lèi)JFrame類(lèi)是頂層容器。JFrame類(lèi)的重要方法如下:setTitle()——設(shè)置窗口中標(biāo)題欄的文字。setSize()——設(shè)置窗口的大小。dispose()方法——關(guān)閉窗口,并回收該窗口的所有資源。setLocation()——設(shè)置組件的位置。setResizable()——設(shè)置用戶(hù)是否可以改變框架大小。setIconImage()設(shè)置圖示有關(guān)ToolkitToolkitkit=Toolkit.getDefaultToolkit();Imageicon=kit.getImage("icon.gif");JDialog窗體(常用方法)JDialog()創(chuàng)建一個(gè)無(wú)標(biāo)題和父窗體的對(duì)話(huà)框。JDialog(Framef)創(chuàng)建一個(gè)指定父窗體的對(duì)話(huà)框,該窗體沒(méi)有標(biāo)題publicJDialog(Framef,booleanmodel)創(chuàng)建一個(gè)指定類(lèi)型的對(duì)話(huà)框并指定父窗體,但該窗體沒(méi)有指定標(biāo)題。publicJDialog(Framef,Stringtitle)創(chuàng)建一個(gè)指定標(biāo)題和父窗體的對(duì)話(huà)框。publicJDialog(Framef,Stringtitle,booleanmodel)創(chuàng)建一個(gè)指定標(biāo)題、窗體和模式的對(duì)話(huà)框。例MyFrame.java
菜單條、菜單、菜單項(xiàng)是窗口常用的組件,菜單放在菜單條里,菜單項(xiàng)放在菜單里。菜單條
JComponent類(lèi)的子類(lèi)JMenubar負(fù)責(zé)創(chuàng)建菜單條,即JMenuBar的一個(gè)實(shí)例就是一個(gè)菜單條,JFrame類(lèi)將一個(gè)菜單條放在窗口的方法:setJMenuBar(JMenuBarbar);該方法是將菜單條添加到窗口的頂端,需要注意的是,只能向窗口添加一個(gè)菜單條。7.2菜單條、菜單、菜單項(xiàng)菜單
JComponent的子類(lèi)JMenu負(fù)責(zé)創(chuàng)建菜單,JMenu的一個(gè)實(shí)例就是一個(gè)菜單。菜單項(xiàng)JComponent的子類(lèi)JMenuItem負(fù)責(zé)創(chuàng)建的菜單項(xiàng),JMenuItem的一個(gè)實(shí)例就是一個(gè)菜單項(xiàng)。嵌入式菜單
JMenu是JMenuItem的子類(lèi),菜單本身也是一個(gè)菜單項(xiàng),當(dāng)把一個(gè)菜單看作菜單項(xiàng)添加到某個(gè)菜單時(shí),成這樣的菜單為子菜單。菜單Menu菜單Menu菜單的幾部分,如上頁(yè)ppt所示:JMenuBarJMenuJMenuItem代碼演示增加一個(gè)File菜單,并且生成new/open/save/saveas/exit菜單項(xiàng)由學(xué)生生成一個(gè)新的菜單Help且此菜單下有一個(gè)About菜單項(xiàng)帶圖標(biāo)的菜單菜單上的圖標(biāo)
為了使菜單項(xiàng)上有一個(gè)圖標(biāo),可以使用圖標(biāo)類(lèi)Icon聲明一個(gè)圖標(biāo),然后使用子類(lèi)ImageIcon類(lèi)創(chuàng)建一個(gè)圖標(biāo),如:Iconicon=newImageIcon("a.gif");然后菜單項(xiàng)調(diào)用setIcon(Iconicon)方法將圖標(biāo)設(shè)置為icon。例WindowMenu.java層級(jí)菜單彈出式菜單彈出式菜單彈出式菜單必須綁定到某一JComponent上面Jcomponent.setComponentPopupMenu()方法學(xué)習(xí)備注中的代碼菜單的響應(yīng)給菜單項(xiàng)添加ActionListener即可newItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){ System.out.println("Menuitemnew...");}});菜單相關(guān)的快捷鍵JMenuItem.setAccelerator()Ctrl+s:KeyEvent.VK_S+InputEvent.CTRL_MASK學(xué)習(xí)備注中的代碼7.3JPanel類(lèi)是一種經(jīng)常使用的輕量級(jí)中間容器。在默認(rèn)狀態(tài)下,除了背景色外它并不繪制任何東西??梢院苋菀椎臑樗O(shè)置邊框和繪制特性,我們可以把它設(shè)置為頂層容器contentPane。有效地利用JPanel可以使版面管理更為容易??梢允褂貌季止芾砥鱽?lái)規(guī)劃它所容納的組件的位置和大小可以通過(guò)setLayout方法來(lái)改變其布局;也可以在創(chuàng)建一個(gè)JPanel對(duì)象時(shí)就為它確定某種布局方式。在默認(rèn)狀態(tài)下panel使用FlowLayout布局,將各組件布局在一行。JPanel類(lèi)常用方法7.4JButton類(lèi)JButton是一個(gè)按鈕工具。JButton對(duì)象除了可以擁有文本標(biāo)簽之外,還可以擁有一個(gè)圖標(biāo),這個(gè)圖標(biāo)可以是用戶(hù)自己繪制的圖形,也可以是已經(jīng)存在的.gif圖像。JButton按鈕不但可以擁有一個(gè)圖標(biāo),而且可以擁有一個(gè)以上的圖標(biāo),并根據(jù)Swing按鈕所處狀態(tài)的不同而自動(dòng)變換不同的Swing按鈕圖標(biāo)。程序編程步驟及其代碼說(shuō)明首先創(chuàng)建一個(gè)JFrame類(lèi)最外層容器。然后創(chuàng)建一個(gè)JPanel類(lèi)的中間容器panel然后創(chuàng)建原子組件Jbutton等,并將它們添加到中間容器上。然后將中間容器通過(guò)內(nèi)容面板添加到最外層容器上。代碼示例7.6JTextField/JTextAreaJTextField:文本域,用于文本輸入,但只接受單行輸入JTextArea:文本區(qū),可以輸入多行文本,下面會(huì)單獨(dú)列出來(lái)講一下具有共同的父親,JTextComponent相關(guān)方法voidsetText(Stringt)StringgetText()voidsetEditable(booleanb)調(diào)用方式:JTextFieldtextField=newJTextField(“defaultinput”,20);//20指可以輸入的最大列數(shù),超過(guò)這個(gè)列數(shù)會(huì)滾動(dòng),系統(tǒng)并不一定非要遵守這個(gè)列規(guī)定JTextFieldtextField=newJTextField(20);7.7JLabel標(biāo)簽,沒(méi)有邊框,不能響應(yīng)用戶(hù)的點(diǎn)擊構(gòu)造方法:請(qǐng)查看API文檔(可以指定文本和圖標(biāo))可以在構(gòu)造方法中指定對(duì)齊方式,可以使用SwingContants中的常量(通過(guò)登錄界面演示效果)JPasswordField密碼域,用戶(hù)輸入的字符以*號(hào)顯示常用方法publicJPasswordFiled(Strings,intcolumns),如果不需要初始字符串可以設(shè)置s為nullvoidsetEchoChar(charecho)設(shè)置回顯字符,0表示默認(rèn)的回顯字符*char[]getPassword()返回密碼域,返回的不是字符串,因?yàn)樽址诙言诖鎯?chǔ),等待垃圾回收器回收,不安全如需要更多的設(shè)置請(qǐng)查看API說(shuō)明文檔7.5布局管理將下級(jí)組件有秩序地?cái)[在上一級(jí)容器中,可以選擇:在程序中具體指定每個(gè)組件的位置。使用布局管理器。布局管理器使用方法是通過(guò)調(diào)用容器對(duì)象的setLayout()方法,并以某種布局管理器對(duì)象為參數(shù)。使用布局管理器可以更容易地進(jìn)行布局,而且當(dāng)改變窗口大小時(shí),它還會(huì)自動(dòng)更新版面來(lái)配合窗口的大小,不需要擔(dān)心版面會(huì)因此混亂。在Java中有很多實(shí)現(xiàn)LayoutManager接口的布局管理器類(lèi),經(jīng)常用到的有以下幾個(gè)BorderLayoutFlowLayoutGridLayoutGridBagLayout下面分別介紹這幾種布局管理器,其他布局管理器類(lèi)的使用可以參見(jiàn)JDK幫助文檔。BorderLayoutBorderLayout以將組件放置到五個(gè)區(qū)域:東、西、南、北、中。是JFrame的默認(rèn)布局,先放入邊緣組件,剩余空間由中間組件填充,當(dāng)容器縮放時(shí),邊緣厚度不會(huì)改變,而中部組件會(huì)發(fā)生變化.添加組件時(shí),通過(guò)BorderLayout.NORTH/SOUTH/WEST/EAST/CENTER指定位置BorderLayout布局示意圖CenterNorthSouthWestEastFlowLayoutFlowLayout是JPanel默認(rèn)使用的布局管理器,它只是簡(jiǎn)單地把組件放在一行,如果容器不是足夠?qū)拋?lái)容納所有組件,就會(huì)自動(dòng)開(kāi)始新的一行,當(dāng)容器縮放時(shí)各組件會(huì)根據(jù)空間自動(dòng)調(diào)整位置。通過(guò)FlowLayoutDemo.java例中,演示了該布局管理器的使用方法和效果。GridLayout網(wǎng)絡(luò)布局像電子數(shù)據(jù)表一樣,按行列排序所有的組件,不過(guò)它的每個(gè)單元大小都是一樣的,構(gòu)造的時(shí)候制定行和列,如newGridLayout(5,4)代碼編寫(xiě)計(jì)算器界面GridBagLayout(網(wǎng)格箱布局管理器)網(wǎng)格箱布局管理器以網(wǎng)格為基礎(chǔ),允許組件使用最適當(dāng)?shù)拇笮?,既可以占多個(gè)網(wǎng)格,也可以只占網(wǎng)格的一部分。1.GridBagLayout的構(gòu)造方法GridBagLayout()2.創(chuàng)建網(wǎng)格箱布局管理器setConstraints(Componentcomp,GridBagConstrainsconstrians)例GridBagLayout.javaCalculator.java登錄窗口、注冊(cè)窗口例子1、應(yīng)該使用什么布局管理器2、準(zhǔn)備如何構(gòu)造界面3、界面不好看,如何進(jìn)一步設(shè)置對(duì)齊方式,設(shè)置各組件之間的距離,這需要更高級(jí)的布局管理器4、自己用代碼編寫(xiě)界面確實(shí)比較累也比較煩,如果有一種可視化開(kāi)發(fā)工具,拉控件就好了.例Login.javaBoxLayoutTest.java7.8事件處理當(dāng)一個(gè)按鈕被點(diǎn)擊時(shí),就是產(chǎn)生了一個(gè)事件,那么事件應(yīng)該被如何處理看一個(gè)例子,點(diǎn)擊按鈕時(shí)會(huì)改變顏色,代碼見(jiàn)備注事件處理以上過(guò)程其實(shí)是一個(gè)著名的設(shè)計(jì)模式:觀察者模式舉一個(gè)天氣顯示牌例子(或者望風(fēng)小偷的例子)主題(Subject):JButton觀察者(observer):監(jiān)聽(tīng)器推送的內(nèi)容:Event什么叫注冊(cè)、什么叫取消注冊(cè),對(duì)于Jbutton如何注冊(cè)觀察者是否明白上頁(yè)ppt中的原理JButton監(jiān)聽(tīng)器Event事件處理常見(jiàn)事件ActionEventFocusEventKeyEvent、MouseEvent、MouseWheelEventWindowEvent對(duì)應(yīng)的監(jiān)聽(tīng)器ActionListenerFocusListenerKeyListener、MouseListener、MouseMotionLisener、MouseWheelListenerWindowListener、WindowFoucsListener、WindowStateLisener雖然類(lèi)很多,但名子很好記7.8.1事件處理模式1.事件源:能夠產(chǎn)生事件的對(duì)象都可以成為事件源.2.監(jiān)視器:事件源通過(guò)調(diào)用相應(yīng)的方法將某個(gè)對(duì)象注冊(cè)為自己的監(jiān)視器。對(duì)于文本框,這個(gè)方法是:addActionListener(監(jiān)視器);事件源注冊(cè)監(jiān)視器之后,相應(yīng)的操作就會(huì)導(dǎo)致相應(yīng)的事件的發(fā)生,并通知監(jiān)視器,監(jiān)視器就會(huì)作出相應(yīng)的處理。
3.處理事件的接口:
監(jiān)視器負(fù)責(zé)處理事件源發(fā)生的事件。監(jiān)視器是一個(gè)對(duì)象,為了處理事件源發(fā)生的事件,監(jiān)視器這個(gè)對(duì)象會(huì)自動(dòng)調(diào)用一個(gè)方法來(lái)處理事件。Java規(guī)定:為了讓監(jiān)視器這個(gè)對(duì)象能對(duì)事件源發(fā)生的事件進(jìn)行處理,創(chuàng)建該監(jiān)視器對(duì)象的類(lèi)必須聲明實(shí)現(xiàn)相應(yīng)的接口,那么當(dāng)事件源發(fā)生事件時(shí),監(jiān)視器就自動(dòng)調(diào)用被類(lèi)重寫(xiě)的某個(gè)接口方法(如圖9.7)。7.8.2ActionEvent事件1.ActionEvent事件源:
文本框、按紐、菜單項(xiàng)、密碼框和單選按紐都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。2.注冊(cè)監(jiān)視器:能觸發(fā)ActionEvent事件的組件使用
addActionListener(ActionListenerlisten)
將實(shí)現(xiàn)ActionListener接口的類(lèi)的實(shí)例注冊(cè)為事件源的監(jiān)視器。3.ActionListener接口:
ActionListener接口在java.awt.event包中,該接口中只有一個(gè)方法:
publicvoidactionPerformed(ActinEvente)
事件源觸發(fā)ActionEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ActionEvent事件,然后調(diào)用接口中的方法:actionPerformed(ActinEvente)對(duì)發(fā)生的事件作出處理。ActionEvent類(lèi)事先創(chuàng)建的事件對(duì)象就會(huì)傳遞給該方法的參數(shù)e。
4.ActionEvent類(lèi)中的方法:
publicObjectgetSource()
調(diào)用該方法可以獲取發(fā)生ActionEvent事件的事件源對(duì)象的引用。publicStringgetActionCommand()
調(diào)用該方法可以獲取發(fā)生ActionEvent事件時(shí),和該事件相關(guān)的一個(gè)命令字符串。
例6(Example9_6.java,WindowActionEvent.java,ReaderListen.java)
處理文本框上觸發(fā)的ActionEvent事件。在文本框text中輸入字符串回車(chē),監(jiān)視器負(fù)責(zé)計(jì)算字符串的長(zhǎng)度,并在命令行窗口顯示字符串的長(zhǎng)度。例子6程序運(yùn)行效果如圖9.8和9.9。7.8.3DocumentEvent事件1.DocumentEvent事件源:文本區(qū)所維護(hù)的文檔能觸發(fā)DocumentEvent事件2.注冊(cè)監(jiān)視器:能觸發(fā)DocumentEven事件的事件源使用
addDucumentListener(DocumentListenerlisten)將實(shí)現(xiàn)DocumentListener接口的類(lèi)的實(shí)例注冊(cè)為事件源的監(jiān)視器。
3.DocumentListener接口:
DocumentListener接口在javax.swing.event包中,該接口中有三個(gè)方法:
publicvoidchangedUpdate(DocumentEvente)publicvoidremoveUpdate(DocumentEvente)publicvoidinsertUpdate(DocumentEvente)事件源觸發(fā)DucumentEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的DocumentEvent事件,然后調(diào)用接口中的相應(yīng)方法對(duì)發(fā)生的事件作出處理。例子9(Example9_9.java
,
WindowDocument.java
,
TextListener.java
,
HandleListener.java
)將用戶(hù)在一個(gè)文本區(qū)輸入的單詞按字典序排序后放入另一個(gè)文本區(qū).7.8.4ItemEvent事件1.ItemEvent事件源:選擇框、下拉列表都可以觸發(fā)ItemEvent事件。2.注冊(cè)監(jiān)視器:能觸發(fā)ItemEvent事件的組件使用
addItemListener(ItemListenerlisten)將實(shí)現(xiàn)ItemListener接口的類(lèi)的實(shí)例注冊(cè)為事件源的監(jiān)視器。3.ItemListener接口:
ItemListener接口在java.awt.event包中,該接口中只有一個(gè)方法:publicvoiditemStateChanged(ItemEvente)事件源觸發(fā)ItemEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ItemEvent事件,然后調(diào)用接口中的itemStateChanged(ItemEvente)方法對(duì)發(fā)生的事件作出處理。ItemEvent類(lèi)事先創(chuàng)建的事件對(duì)象就會(huì)傳遞給該方法的參數(shù)e。4.ItemEvent類(lèi)中的方法:
getSource()方法返回發(fā)生Itemevent事件的事件源外
getItemSelectable()方法返回發(fā)生Itemevent事件的事件源。7.8.5MouseEvent事件_1
任何組件上都可以發(fā)生鼠標(biāo)事件,如:鼠標(biāo)進(jìn)入組件、退出組件、在組件上方單擊鼠標(biāo)、拖動(dòng)鼠標(biāo)等都觸發(fā)鼠標(biāo)事件,即導(dǎo)致MouseEvent類(lèi)自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。
1.使用MouseListener接口可以處理以下5種操作觸發(fā)的鼠標(biāo)事件在事件源上按下鼠標(biāo)鍵、在事件源上釋放鼠標(biāo)鍵、在事件源上擊鼠標(biāo)鍵、鼠標(biāo)進(jìn)入事件源、鼠標(biāo)退出事件源。?MouseEvent中有下列幾個(gè)重要的方法:getX()
獲取鼠標(biāo)指針在事件源坐標(biāo)系中的x-坐標(biāo)。getY()
獲取鼠標(biāo)指針在事件源坐標(biāo)系中的y-坐標(biāo)。getModifiers()
獲取鼠標(biāo)的左鍵或右鍵。getClickCount()
獲取鼠標(biāo)被單擊的次數(shù)。getSource()
獲取發(fā)生鼠標(biāo)事件的事件源。
?事件源注冊(cè)監(jiān)視器的方法是addMouseListener(MouseListenerlistener)。
?MouseListener接口中有如下方法:
mousePressed(MouseEvent)
負(fù)責(zé)處理在組件上按下鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件mouseReleased(MouseEvent)
負(fù)責(zé)處理在組件上釋放鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件mouseEntered(MouseEvent)
負(fù)責(zé)處理鼠標(biāo)進(jìn)入組件觸發(fā)的鼠標(biāo)事件mouseExited(MouseEvent)
負(fù)責(zé)處理鼠標(biāo)離開(kāi)組件觸發(fā)的鼠標(biāo)事件mouseClicked(MouseEvent)
負(fù)責(zé)處理在組件上單擊鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件7.8.5MouseEvent事件_1
例子10Example9_10WindowMouse.javaMousePolice.java分別監(jiān)視按鈕、文本框和窗口上的鼠標(biāo)事件,當(dāng)發(fā)生鼠標(biāo)事件時(shí),獲取鼠標(biāo)指針的坐標(biāo)值,注意,事件源的坐標(biāo)系的左上角是原點(diǎn)。
7.8.5MouseEvent事件_32.使用MouseMotionListener接口可以處理以下兩種操作觸發(fā)的鼠標(biāo)事件,在事件源上拖動(dòng)鼠標(biāo)、在事件源上移動(dòng)鼠標(biāo)。?事件源注冊(cè)監(jiān)視器的方法是
addMouseMotionListener(MouseMotionListenerlistener)?
MouseMotionListener接口中有如下方法:mouseDragged(MouseEvent)
負(fù)責(zé)處理拖動(dòng)鼠標(biāo)觸發(fā)的鼠標(biāo)事件。mouseMoved(MouseEvent)
負(fù)責(zé)處理移動(dòng)鼠標(biāo)觸發(fā)的鼠標(biāo)事件。例子11
Example9_11.java
,WindowMove.java,LP.java
使用坐標(biāo)變換來(lái)實(shí)現(xiàn)組件的拖動(dòng)
7.8.6焦點(diǎn)事件
1.焦點(diǎn)事件源:組件可以觸發(fā)焦點(diǎn)事件。
2.注冊(cè)監(jiān)視器:組件可以使用addFocusListener(FocusListenerlistener)注冊(cè)焦點(diǎn)事件監(jiān)視器。
3.FocusListener接口:創(chuàng)建監(jiān)視器的類(lèi)必須要實(shí)現(xiàn)FocusListener接口,該接口有兩個(gè)方法:publicvoidfocusGained(FocusEvente)publicvoidfocusLost(FocusEvente)
當(dāng)發(fā)生FocusEvent事件時(shí),監(jiān)視器調(diào)用類(lèi)實(shí)現(xiàn)的接口中的相應(yīng)方法。4.組件也可調(diào)用
publicbooleanrequestFocusInWindow()
方法可以獲得輸入焦點(diǎn)。
7.8.7鍵盤(pán)事件當(dāng)一個(gè)組件處于激活狀態(tài)時(shí),敲擊鍵盤(pán)上一個(gè)鍵就導(dǎo)致這個(gè)組件觸發(fā)鍵盤(pán)事件。1.某個(gè)組件使用addKeyListener方法注冊(cè)監(jiān)視器。2.接口KeyListener中有如下方法:
publicvoidkeyPressed(KeyEvente)publicvoidkeyTyped(KeyEvente)publicvoidKeyReleased(KeyEvente)
3.相關(guān)方法:
publicintgetKeyCode()判斷哪個(gè)鍵被按下、敲擊或釋放,返回一個(gè)鍵碼值。
getKeyChar()判斷哪個(gè)鍵被按下、敲擊或釋放,返回鍵上的字符。例子12
Example9_12.java
Win.java
Police.java通過(guò)處理鍵盤(pán)事件來(lái)實(shí)現(xiàn)軟件序列號(hào)的輸入。7.8.8窗口事件
JFrame及子類(lèi)創(chuàng)建的窗口可以調(diào)用
setDefaultCloseOperation(intoperation);方法設(shè)置窗口的關(guān)閉方式(如前面各個(gè)例子所示).但是setDefaultCloseOperation方式可能不能滿(mǎn)足程序的需要,比如,用戶(hù)單擊窗口上的關(guān)閉圖標(biāo)時(shí),可能程序需要提示用戶(hù)是否需要保存窗口中的有關(guān)數(shù)據(jù)到磁盤(pán)等.WindowListener接口.
(1)publicvoidwindowActivated(WindowEvente)當(dāng)窗口從非激活狀態(tài)到激活時(shí),窗口的監(jiān)視器調(diào)用該方法。(2)publicvoidwindowDeactivated(WindowEvente)當(dāng)窗口激活狀態(tài)到非激活狀態(tài)時(shí),窗口的監(jiān)視器調(diào)用該方法。(3)publicvoidwindowClosing(WindowEvente)當(dāng)窗口正在被關(guān)閉時(shí),窗口的監(jiān)視器調(diào)用該方法。(4)publicvoidwindowClosed(WindowEvente)當(dāng)窗口關(guān)閉后,窗口的監(jiān)視器調(diào)用該方法。(5)publicvoidwindowIconified(WindowEvente)當(dāng)窗口圖標(biāo)化時(shí),窗口的監(jiān)視器調(diào)用該方法。(6)publicvoidwindowDeiconified(WindowEvente)當(dāng)窗口撤消圖標(biāo)化時(shí),窗口的監(jiān)視器調(diào)用該方法。(7)publicvoidwindowOpened(WindowEvente)當(dāng)窗口打開(kāi)時(shí),窗口的監(jiān)視器調(diào)用該方法。練習(xí)在登錄界面,如果用戶(hù)密碼錯(cuò)誤,你應(yīng)該如何提示?如何安裝監(jiān)聽(tīng)器??事件監(jiān)聽(tīng)器內(nèi)部類(lèi)的不同使用方式Jbutton.addActionListener(newActionListener(){});形式classMyPanelimplementsAcionListener形式適配器的概念(adapter)用WindowListener來(lái)說(shuō)明常見(jiàn)適配器FocusAdapter/KeyAdpater/MouseAdpater/MouseMotionAdapter/WindowAdapterJTextArea輸入多行文本構(gòu)造方法newJTextArea(8,40)//8行40列設(shè)置自動(dòng)換行setLineWrap(true)如果行數(shù)太多增加滾動(dòng)功能 textArea=newJTextArea(8,40); JScrollPanescrollPane=newJScrollPane(textArea);通過(guò)備注中的代碼學(xué)習(xí)JTextArea復(fù)選框JCheckBox重要方法bold=newJCheckBox(“Bold”);bold.setSelected(true)isSelected()通過(guò)備注中程序?qū)W習(xí)單選按鈕JRadioButtonJRadioButtonsmall=newJRadioButton(“small”,false);必須要放在一個(gè)RadioGroup里(見(jiàn)代碼)備注中的代碼描述了JRadioButton用法邊界Border凸斜面/凹斜面/蝕刻/直線(xiàn)等通過(guò)BorderFactory中的靜態(tài)方法生成上述BorderJcomponent.setBorder()方法給組件添加border下拉列表JComboBox通過(guò)備注中代碼學(xué)習(xí)對(duì)話(huà)框模式和無(wú)模式:模式對(duì)話(huà)框在關(guān)閉之前不允許用戶(hù)操作本程序的其它界面簡(jiǎn)單對(duì)話(huà)框介紹JOptionPane的四個(gè)方法:showMessageDialog(提示一個(gè)消息)showConfirmDialog(OK/No/Cancel)showOptionDialog(有幾個(gè)選項(xiàng)讓你選擇)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合同法學(xué)教學(xué)大綱
- 2025有限公司員工試用期合同
- 2025商業(yè)地產(chǎn)銷(xiāo)售代理合同
- 二零二五年度地質(zhì)災(zāi)害應(yīng)急土方運(yùn)輸服務(wù)合同3篇
- 2025年度養(yǎng)殖場(chǎng)養(yǎng)殖廢棄物資源化利用合同3篇
- 2025年度科技創(chuàng)新園區(qū)拆遷房產(chǎn)分割與產(chǎn)業(yè)扶持協(xié)議3篇
- 2025年度林業(yè)產(chǎn)業(yè)發(fā)展競(jìng)業(yè)禁止模板木方交易協(xié)議3篇
- 二零二五年度農(nóng)村集體建設(shè)用地個(gè)人地基買(mǎi)賣(mài)合同2篇
- 二零二五年度高速公路建設(shè)項(xiàng)目承包協(xié)議3篇
- 2025年度水上旅游安全事故處理與救援服務(wù)協(xié)議3篇
- 春節(jié)期間健康飲食知識(shí)講座
- 新概念英語(yǔ)第一冊(cè)Lesson-67-68練習(xí)題
- 2024年杭州市能源集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 數(shù)字孿生應(yīng)用技術(shù)基礎(chǔ)知識(shí)考試題庫(kù)(600題)
- 企業(yè)融資盡調(diào)報(bào)告
- 保育員(高級(jí))考試題庫(kù)附答案(600題)
- 中國(guó)鋁業(yè)股份有限公司河南分公司鞏義市山川鋁土礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 工商企業(yè)管理畢業(yè)論文范文六篇
- 二十五項(xiàng)反措檢查表優(yōu)質(zhì)資料
- 保密辦主任工作總結(jié)保密辦主任工作總結(jié)八篇
- 機(jī)械原理課程設(shè)計(jì)-壓床機(jī)構(gòu)的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論