




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