版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/2/51第10章基于Swing的圖形用戶界面設(shè)計(jì)本章導(dǎo)讀☆
AWT組件與SWING組件☆JFrame窗體、菜單組件、布局設(shè)計(jì)☆中間容器、文本組件☆按鈕與標(biāo)簽組件、復(fù)選框與單選按鈕組件☆列表組件、☆窗口事件、鼠標(biāo)事件、焦點(diǎn)事件和鍵盤事件2023/2/5210.1AWT組件與SWING組件概述
Java早期進(jìn)行用戶界面設(shè)計(jì)時(shí),使用java.awt包中提供的類。
“AWT”就是AbstracWindowToolkit(抽象窗口工具包)的縮寫。
Java2(JDK1.2)推出之后,增加了一個(gè)新的javax.swing包,該包提供了功能更為強(qiáng)大的用來(lái)設(shè)計(jì)GUI界面的類。
2023/2/53圖10.1JComponent類的部分子類以及JFrame類和JDialog類
AWT2023/2/54容器類(Container)和組件類(Component)
Java把由Component類的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)組件;把由Container的子類或間接子類創(chuàng)建的對(duì)象稱為一個(gè)容器。
◆可以向容器添加組件。Container類提供了一個(gè)public方法add(),一個(gè)容器可以調(diào)用這個(gè)方法將組件添加到該容器中。
◆調(diào)用removeAll()方法可以移掉容器中的全部組件,調(diào)用remove(Componentc)方法可以移掉容器中參數(shù)指定的組件?!裘慨?dāng)容器添加新的組件或移掉組件時(shí),應(yīng)該讓容器調(diào)用validate()方法,以保證容器中的組件能正確顯示出來(lái)。容器本身也是一個(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套。
2023/2/5510.2JFrame窗體
javax.swing包中的JFrame類是java.awt包中Frame類的子類,因此JFrame類其子類創(chuàng)建的對(duì)象是窗體。
當(dāng)應(yīng)用程序需要一個(gè)窗口時(shí),可使用JFrame或其子類創(chuàng)建一個(gè)對(duì)象。窗口默認(rèn)地被系統(tǒng)添加到顯示器屏幕上,因此不允許將一個(gè)窗口添加到另一個(gè)容器中。Frame類常用方法如下:◆JFrame()
創(chuàng)建一個(gè)無(wú)標(biāo)題的窗口?!鬔Frame(Strings)
創(chuàng)建一個(gè)標(biāo)題為s的窗口?!魀ublicvoidsetBounds(inta,intb,intwidth,intheight)設(shè)置出現(xiàn)在屏幕上時(shí)的初始位置為(a,b),即距屏幕左面a個(gè)像素、距屏幕上方b個(gè)像素;窗口的寬是width,高是height?!魀ublicvoidsetSize(intwidth,intheight)
設(shè)置窗口的大小,在屏幕出現(xiàn)默認(rèn)位置是(0,0)?!魀ublicvoidsetVisible(booleanb)
設(shè)置窗口是可見(jiàn)還是不可見(jiàn),窗口默認(rèn)是不可見(jiàn)的?!魀ublicvoidsetResizable(booleanb)
設(shè)置窗口是否可調(diào)整大小,窗口默認(rèn)是可調(diào)整大小的。2023/2/56◆publicvoidsetDefaultCloseOperation(intoperation)
該方法用來(lái)設(shè)置單擊窗體右上角的關(guān)閉圖標(biāo)后,程序會(huì)做出怎樣的處理。其中的參數(shù)operation取下列有效值:1)DO_NOTHING_ON_CLOSE
什么也不做2)HIDE_ON_CLOSE
隱藏當(dāng)前窗口3)DISPOSE_ON_CLOSE
隱藏當(dāng)前窗口,并釋放窗體占有的其他資源4)EXIT_ON_CLOSE
結(jié)束窗體所在的應(yīng)用程序
這4個(gè)常量都是JFrame類中的static常量,單擊關(guān)閉圖標(biāo)后,程序根據(jù)operation取值做出不同的處理。
例子10-1用JFrame創(chuàng)建了兩個(gè)窗口,程序運(yùn)行效果如圖10.2。2023/2/57例子10-1運(yùn)行效果圖10.22023/2/5810.3菜單組件
窗口中的菜單條、菜單、菜單項(xiàng)是我們所熟悉的界面,菜單條、菜單、菜單項(xiàng)是窗口常用的組件,菜單項(xiàng)放在菜單里,菜單放在菜單條里。1.JMenuBar菜單條
JComponent類的子類JMenuBar是負(fù)責(zé)創(chuàng)建菜單條的,即JMenuBar的一個(gè)實(shí)例就是一個(gè)菜單條。
JFrame類有一個(gè)將菜單條放置到窗口中的方法:
publicvoidsetJMenuBar(JMenuBarmenubar);
該方法將菜單條添加到窗口的菜單條區(qū)域(注意:只能向窗口添加一個(gè)菜單條)。
2023/2/592.JMenu菜單
JComponent類的子類JMenu類是負(fù)責(zé)創(chuàng)建菜單的,即JMenu的一個(gè)實(shí)例就是一個(gè)菜單。JMenu類的主要方法有以下幾種:◆JMenu(Strings)
建立一個(gè)指定標(biāo)題菜單,標(biāo)題由參數(shù)s確定◆publicvoidadd(MenuItemitem)
向菜單增加由參數(shù)item指定的菜單選項(xiàng)對(duì)象。◆publicvoidadd(Strings)
向菜單增加指定的選項(xiàng)?!魀ublicJMenuItemgetItem(intn)
得到指定索引處的菜單選項(xiàng)。◆publicintgetItemCount()
得到菜單選項(xiàng)數(shù)目?!?/p>
publicaddSeparator()
添加分隔線。2023/2/5103.JMenuItem菜單項(xiàng)
該類是負(fù)責(zé)創(chuàng)建菜單項(xiàng)的,即JMenuItem的一個(gè)實(shí)例就是一個(gè)菜單項(xiàng)。菜單項(xiàng)放在菜單里。JMenuItem類的主要方法有以下幾種:◆JMenuItem(Strings)
構(gòu)造有標(biāo)題的菜單項(xiàng)?!魀ublicvoidsetEnabled(booleanb)設(shè)置當(dāng)前菜單項(xiàng)是否可被選擇?!魀ublicStringgetLabel()
得到菜單項(xiàng)的名字。2023/2/5114.嵌入子菜單
JMenu是JMenuItem的子類,因此菜單項(xiàng)本身還可以是一個(gè)菜單,這樣的菜單項(xiàng)稱為子菜單。下面的例10-2中有一個(gè)含有菜單的窗口(效果如圖10.3所示)。2023/2/51210.4布局設(shè)計(jì)
當(dāng)把組件添加到容器中時(shí),希望控制組件在容器中的位置,這就需要學(xué)習(xí)布局設(shè)計(jì)的知識(shí)。本節(jié)將介紹java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局類和java.swing.border包中的BoxLayout布局類。容器可以使用方法
setLayout(布局對(duì)象);來(lái)設(shè)置自己的布局。對(duì)于JFrame窗口,默認(rèn)布局是BorderLayout布局。2023/2/5131.FlowLayout布局
FlowLayout類的對(duì)象稱為FlowLayout布局。FlowLayout類的一個(gè)常用構(gòu)造方法如下:◆FlowLayout();構(gòu)造方法可以創(chuàng)建一個(gè)居中對(duì)齊的布局對(duì)象,如:
FlowLayoutflow=newFlowLayout();◆
con.setLayout(flow);容器con使用flow這個(gè)布局對(duì)象◆容器con可以使用Container類提供的add()方法將組件順序地添加到容器中,組件按順序加入的先后順序從左向右排列,一列排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列,每一行中的組件都居中對(duì)齊,組件之間的默認(rèn)水平和垂直間隙都是5個(gè)像素。組件的大小為默認(rèn)的最佳大小。如,按鈕的大小剛能顯示其上面的名字。2023/2/514FlowLayout布局對(duì)象調(diào)用setAlignment(intaligin)方法可以重新設(shè)置布局的對(duì)齊方式,其中aligin可以取值FlowLayout.LEFT、FlowLayout.CENTER或FlowLayout.RIGHT?!?/p>
FlowLayout布局對(duì)象調(diào)用setHgap(inthgap)方法和setVgap(intvgap)方法可以重新設(shè)置布局的水平間隙和垂直間隙?!羧绻枰淖冏罴汛笮。M件需調(diào)用:
publicvoidsetPreferredSize(DimensionpreferredSize)設(shè)置大小,例如:button.setPreferredSize(newDimension(20,20));注:對(duì)于添加到使用FlowLayout布局的容器中的組件,組件調(diào)用setSize(intx,inty)設(shè)置的大小無(wú)效。
例10-3中,JFrame使用FlowLayout布局放置10個(gè)組件(效果如圖10.4所示)。2023/2/515例子10-3運(yùn)行效果圖10.4組件從左向右排列一行排滿之后轉(zhuǎn)下一行組件間的默認(rèn)水平和垂直間隙是5個(gè)像素。組件調(diào)用setSize()方法設(shè)置的大小無(wú)效,用setPreferredSize(DimensionpreferredSize)調(diào)節(jié)大小。2023/2/5162.BorderLayout布局
BorderLayout布局是Window容器的默認(rèn)布局。
JFrame、JDialog都是Window類的間接子類,它們的默認(rèn)布局都是BorderLayout布局。如果一個(gè)容器使用這種布局,那么容器空間簡(jiǎn)單地劃分為東、西、南、北、中五個(gè)區(qū)域。每加入一個(gè)組件都應(yīng)該指明把這個(gè)組件添加在哪個(gè)區(qū)域中,區(qū)域由BorderLayout中的靜態(tài)常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,一個(gè)使用BorderLayout布局的容器con,可以使用add()方法將一個(gè)組件b添加到中心區(qū)域:
con.add(b,BorderLayout.CENTER);或con.add(BorderLayour.CENTER,b);
注:添加到某個(gè)區(qū)域的組件將占據(jù)整個(gè)這個(gè)區(qū)域.每個(gè)區(qū)域只能放置一個(gè)組件,如果向某個(gè)已放置了組件的區(qū)域再放置一個(gè)組件,那么先前的組件將被后者替換。注:使用BorderLayout布局的容器最多能添加5個(gè)組件,如果容器中需要添加的組件超過(guò)5個(gè),就必須使用容器的嵌套或改用其他布局策略。
例10-4使用了BorderLayout布局(效果如圖10.5所示)。2023/2/517例子10-4運(yùn)行效果圖10.52023/2/5183.CardLayout布局
使用CardLayout容器可以容納多個(gè)組件,但同一時(shí)刻容器只能從這些組件中選出一個(gè)來(lái)顯示,就像一疊“撲克牌”每次只能顯示最上面的一張一樣,被顯示的組件將占據(jù)所有的容器空間。(1)使用CardLayout對(duì)象作為布局,如:
CardLayoutcard=newCardLayout();(2)容器使用setLayout()方法設(shè)置布局,如:
con.setLayout(card);(3)容器調(diào)用add(Strings,Componentb)方法將組件b加入容器,并給出了顯示該組件的代號(hào)s。最先加入con的是第一張,依次排序。(4)創(chuàng)建的布局card用CardLayout類提供的show()方法,根據(jù)容器con和其中的組件代號(hào)s顯示這一組件:
card.show(con,s)(5)也可按組件加入容器的順序顯示組件:如Card.first(con)Card.last(con)Card.next(con)Card.previous(con)2023/2/519例子2023/2/5204.GridLayout布局
GridLayout是使用較多的布局編輯器,其基本布局策略是把容器劃分成若干行若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來(lái)的小格中使用GridLayout布局編輯器的一般步驟如下:(1)使用GridLayout的構(gòu)造方法GridLayout(intm,intn)創(chuàng)建布局對(duì)象,指定劃分網(wǎng)格的行數(shù)m和列數(shù)n,如GridLayoutgrid=newGridLayout(10,8);(2)使用GridLayout布局的容器調(diào)用方法add()將組件加入容器,組件進(jìn)入容器的順序?qū)凑盏谝恍械谝粋€(gè)、第一行第二個(gè)…第一行最后一個(gè)、第二行第一個(gè)…最后一行第一個(gè)…最后一行最后一個(gè)。使用GridLayout布局的容器最多可添加m×n個(gè)組件。GridLayout布局中每個(gè)網(wǎng)格都是相同大小,并且強(qiáng)制組件與網(wǎng)格的大小相同。
可通過(guò)容器的嵌套克服這個(gè)缺點(diǎn)2023/2/521例子2023/2/5225.BoxLayout布局
用BoxLayout類可以創(chuàng)建一個(gè)布局對(duì)象,稱為盒式布局。
BoxLayout在javax.swing.border包中。
BoxLayout的構(gòu)造方法BoxLayout(Containercon,intaxis)可以創(chuàng)建一個(gè)盒式布局對(duì)象,并指定容器con使用該布局對(duì)象,參數(shù)axis的有效值是BoxLayout.X_AXIS和BoxLayout.Y_AXIS。
javaswing包提供了Box類,創(chuàng)建對(duì)象的默認(rèn)布局是盒式布局,而且不允許更改盒式容器的布局??梢岳萌萜鞯那短祝瑢⒛硞€(gè)容器嵌入幾個(gè)盒式容器,達(dá)到布局目的。
2023/2/523Box類的類(靜態(tài))方法createHorizontalBox()可以獲得一個(gè)具有行型盒式布局的盒式容器;Box類的類(靜態(tài))方法createVerticalBox()可以獲得一個(gè)具有列型盒式布局的盒式容器??刂坪惺讲季秩萜髦薪M件之間的距離,需要使用水平支撐或垂直支撐。
Box類調(diào)用靜態(tài)方法createHorizontalStrut(intwidth)可以得到一個(gè)不可見(jiàn)的水平Struct類型對(duì)象.稱為水平支撐.該水平支撐的高度為0,寬度是width。
Box類調(diào)用靜態(tài)方法createVertialStrut(intheight)可以得到一個(gè)不可見(jiàn)的垂直Struct類型對(duì)象,稱為垂直支撐.參數(shù)height決定垂直支撐的高度,垂直支撐的寬度為0。
例10-6中(效果如圖10.7所示),有兩個(gè)列型盒式容器boxV1、boxV2和一個(gè)行型盒式容器baseBox。在列型盒式容器的組件之間添加垂直支撐,控制組件之間的距離,將boxV1、boxV2添加到baseBox中,并在它們之間添加水平支撐。2023/2/5242023/2/5256.null布局
可以把一個(gè)容器的布局設(shè)置為null布局(空布局)。p.setLayout(null);把p的布局設(shè)置為空布局。向空布局的容器p添加一個(gè)組件c需要兩個(gè)步驟。
首先使用add(c)方法向容器添加組件,
然后組件c再調(diào)用setBounds(inta,intb,intwidth,intheight)方法設(shè)置該組件在容器中的位置和本身的大小。組件都是一個(gè)矩形結(jié)構(gòu),方法中的參數(shù)a和b是被添加的組件c的左上角在容器中的位置坐標(biāo),即該組件距容器左面a個(gè)像素,距容器上方b個(gè)像素;weidth和height是組件c的寬和高。2023/2/52610.5中間容器1.JPanel面板可以使用JPanel創(chuàng)建一個(gè)面板,再向這個(gè)面板添加組件,然后把這個(gè)面板添加到底層容器或其他中間容器中。JPanel面板的默認(rèn)布局是FlowLayout布局。JPanel類構(gòu)造方法Jpanel()可以構(gòu)造一個(gè)面板容器對(duì)象。2023/2/52710.6文本組件_1JTextField文本框,2JPasswordField密碼框1.JTextField文本框
JComponent的子類JTextField是專門用來(lái)建立文本框的,即JTextField創(chuàng)建的一個(gè)對(duì)象就是一個(gè)文本框。用戶可以在文本框輸入單行的文本。JTextField類的主要方法如下:◆
JTextField(intx)
創(chuàng)建文本框?qū)ο螅梢栽谖谋究蛑休斎肴舾蓚€(gè)字符,文本框的可見(jiàn)字符個(gè)數(shù)由參數(shù)x指定?!鬔TextField(Strings)
創(chuàng)建文本框?qū)ο?,則文本框的初始字符串為s,可以在文本框中輸入若干個(gè)字符?!?/p>
publicvoidsetText(Strings)
設(shè)置文本框中的文本為參數(shù)s指定的文本,文本框中先前的文本將被清除?!?/p>
publicStringgetText()
獲取文本框中的文本?!?/p>
publicvoidsetEditable(booleanb)
指定文本框的可編輯性。創(chuàng)建的文本框默認(rèn)是可編輯的?!?/p>
publicvoidsetHorizontalAlignment(intalignment)
設(shè)置文本在文本框中的對(duì)齊方式,alignment的有效值為JTextField.LEFT、JTextField.CENTER和JTextField.RIGHT。2023/2/5282.JPasswordField密碼框使用JTextField的子類JPasswordField可以建立一個(gè)密碼框?qū)ο?。setEchoChar(charc)設(shè)置回顯字符(默認(rèn)的回顯字符是'*'),char[]
getPassword()方法返回密碼框中的密碼。2023/2/5293.ActionEvent事件
當(dāng)用戶在有輸入焦點(diǎn)的文本框中按回車鍵、單擊按鈕、在一個(gè)下拉式列表中選擇一個(gè)條目等操作時(shí),都發(fā)生界面事件。程序有時(shí)要對(duì)發(fā)生的事件做出反應(yīng),來(lái)實(shí)現(xiàn)特定的任務(wù)。在學(xué)習(xí)處理事件時(shí),讀者必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個(gè)概念。
JTextField和JPasswordField觸發(fā)ActionEvent事件,通過(guò)處理文本框這個(gè)具體的組件上的事件,來(lái)掌握處理事件的基本原理。2023/2/5303.ActionEvent事件_處理事件的基本原理1)事件源:
能夠產(chǎn)生事件的對(duì)象都可以稱為事件源,如文本框、按鈕、下拉式列表等。也就是說(shuō),事件源必須是一個(gè)對(duì)象,而且這個(gè)對(duì)象必須是Java認(rèn)為能夠發(fā)生事件的對(duì)象。2)監(jiān)視器:
需要一個(gè)對(duì)象對(duì)事件源進(jìn)行監(jiān)視,以便對(duì)發(fā)生的事件做出處理。事件源通過(guò)調(diào)用相應(yīng)的方法將某個(gè)對(duì)象作為監(jiān)視器。例如,對(duì)于文本框,這個(gè)方法是:addActionListener(ActionListenerlistener)
對(duì)于獲取了監(jiān)視器的文本框?qū)ο?在文本框獲得輸入焦點(diǎn)之后,如果用戶按回車鍵,Java運(yùn)行系統(tǒng)就自動(dòng)用ActionEvent類創(chuàng)建了一個(gè)對(duì)象,即發(fā)生了ActionEvent事件。3)處理事件的接口:
監(jiān)視器負(fù)責(zé)處理事件源發(fā)生的事件,要求創(chuàng)建該監(jiān)視器的類必須聲明實(shí)現(xiàn)相應(yīng)的接口,即必須在類體中給出該接口中的所有的方法的方法體,當(dāng)事件源發(fā)生時(shí),監(jiān)視器就自動(dòng)調(diào)用類實(shí)現(xiàn)的某個(gè)接口方法。對(duì)于文本框,接口的名字是ActionListener,這個(gè)接口只有一個(gè)方法:actionPerformed(ActionEvente)2023/2/5313.ActionEvent事件_事件處理模式圖10.92023/2/5323.ActionEvent事件_ActionEvent類中的方法4)ActionEvent類中的方法
ActionEvent事件對(duì)象調(diào)用方法publicObjectgetSource()可以返回發(fā)生ActionEvent事件的對(duì)象的引用。
ActionEvent事件對(duì)象調(diào)用方法publicStringgetActionCommand()獲取發(fā)生ActionEvent事件時(shí),和該事件相關(guān)的一個(gè)命令字符串,對(duì)于文本框,當(dāng)發(fā)生ActionEvent事件時(shí),用戶在文本框中輸入的文本字符串就是和該事件相關(guān)的一個(gè)命令字符串。
例10-8中,窗口中有一個(gè)文本框text,text的事件監(jiān)視器由A類負(fù)責(zé)創(chuàng)建。當(dāng)用戶在text中輸入字符串回車后,監(jiān)視器負(fù)責(zé)在命令輸出該字符串以及它的長(zhǎng)度(效果如圖10.10所示)。
例10-9中,有titleText和passwordText監(jiān)視器。當(dāng)在titleText中輸入字符串回車后,監(jiān)視器負(fù)責(zé)將窗體的標(biāo)題更改為當(dāng)前titleText中的文本。當(dāng)在passwordText中輸入密碼回車后,監(jiān)視器負(fù)責(zé)將密碼顯示在titleText中(效果如圖10.11所示)。
例10-10使用匿名對(duì)象作為inputText的監(jiān)視器,當(dāng)在inputText中輸入一個(gè)數(shù)字字符串后,監(jiān)視器負(fù)責(zé)計(jì)算這個(gè)數(shù)的平方,并將結(jié)果放入showText中(效果如圖10.12所示)。2023/2/533
例子10-8,9,10運(yùn)行效果圖10.10,10.11,10.122023/2/5344.菜單項(xiàng)上的ActionEvent事件
單擊某個(gè)菜單項(xiàng)可以發(fā)生ActionEvent事件。菜單項(xiàng)使用
addActionListener(ActionListenerlistner)方法獲得監(jiān)視器。例子:
2023/2/53510.7按鈕與標(biāo)簽組件_1.JButton按鈕JButton類是專門用來(lái)建立按鈕的,即JButton類創(chuàng)建的一個(gè)對(duì)象就是一個(gè)按鈕。JButton類常用的方法如下:◆Button(Stringtext)
創(chuàng)建名字是text的按鈕?!魀ublicvoidsetText(Stringtext)重新設(shè)置當(dāng)前按鈕的名字,名字由參數(shù)text指定。◆publicStringgetText()
獲取當(dāng)前按鈕上的名字。◆publicvoidaddActionListener(ActionListener)
向按鈕增加動(dòng)作監(jiān)視器。◆publicvoidremoveActionListener(ActionListener)
移去按鈕上的動(dòng)作監(jiān)視器。按鈕可以發(fā)生ActionEvent事件,當(dāng)按鈕獲得監(jiān)視器之后,用鼠標(biāo)單擊按鈕或按鈕獲得焦點(diǎn)時(shí)按下空格鍵(Space鍵),就發(fā)生ActionEven事件,即java.awt.envent包中的ActionEvent類自動(dòng)創(chuàng)建了一個(gè)事件對(duì)象。
例10-13中,單擊按鈕變換按鈕上的文字,效果如圖10.15所示2023/2/536
例子10-13運(yùn)行效果圖10.152023/2/5372.JLabel標(biāo)簽JLabel類負(fù)責(zé)創(chuàng)建標(biāo)簽對(duì)象,標(biāo)簽用來(lái)顯示信息,但沒(méi)有編輯功能。JLabel類的構(gòu)造方法如下:
◆
publicJLabel()
創(chuàng)建沒(méi)有名字的標(biāo)簽。
◆
publicJLabel(Strings)
創(chuàng)建名字是s的標(biāo)簽,s在標(biāo)簽中靠左對(duì)齊。
◆
publicJLabel(Strings,intaligment)
參數(shù)aligment決定標(biāo)簽中的文字在標(biāo)簽中的水平對(duì)齊方式。aligment的取值是JLabel.CENTER、JLabel.LEFT或JLabel.RIGHT。JLabel類的常用實(shí)例方法如下:
◆
StringgetText()
獲取標(biāo)簽的名字。
◆
voidsetText(Strings)
設(shè)置標(biāo)簽的名字是s。2023/2/53810.8復(fù)選框與單選按鈕組件_1.JCheckBox復(fù)選框
復(fù)選框提供兩種狀態(tài)一種是選中,另一種是未選中,用戶通過(guò)單擊該組件切換狀態(tài)。JCheckBox類常用方法如下:◆
publicJCheckBox()
創(chuàng)建一個(gè)沒(méi)有名字的復(fù)選框,初始狀態(tài)是未選中。◆
publicJCheckBox(Stringtext)
創(chuàng)建一個(gè)名字是text的復(fù)選框,初始狀態(tài)是未選中?!?/p>
publicbooleanisSelected()
如果復(fù)選框處于選中狀態(tài)該方法返回true,否則返回false。如果復(fù)選框沒(méi)有指定默認(rèn)圖標(biāo),復(fù)選框就顯示為一個(gè)“小方框”,如果是選中狀態(tài),“小方框”里面就有個(gè)小對(duì)號(hào)。2023/2/539復(fù)選框與單選按鈕組件_ItemEvent事件
當(dāng)復(fù)選框獲得監(jiān)視器之后,復(fù)選框從未選中狀態(tài)變成選中狀態(tài)或從選中狀態(tài)變成未選中狀態(tài)時(shí)就發(fā)生ItemEvent事件,ItemEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象?!舭l(fā)生ItemEvent事件的事件源獲得監(jiān)視器的方法是
addItemListener(ItemListenerlistener)
由于復(fù)選框可以發(fā)生ItemEvent事件,JCheckBox類提供了addItemListener()方法?!籼幚鞩temEvent事件的接口是ItemListener,創(chuàng)建監(jiān)視器的類必須實(shí)現(xiàn)ItemListener接口,該接口中只有一個(gè)的方法。當(dāng)在復(fù)選框發(fā)生ItemEvent事件時(shí),監(jiān)視器將自動(dòng)調(diào)用接口方法publicvoiditemStateChanged(ItemEvente)對(duì)發(fā)生的事件做出處理?!鬒temEvent事件對(duì)象除了可以使用getSource()方法返回發(fā)生Itemevent事件的事件源外,也可以使用getItemSelectable()方法返回發(fā)生Itemevent事件的事件源。例10-14處理了復(fù)選框上的ItemEvent事件,當(dāng)復(fù)選框被選中時(shí),窗口中心顯示一個(gè)帶藍(lán)色按鈕,否則顯示灰色按鈕,效果如圖10.16所示。2023/2/54010.8復(fù)選框與單選按鈕組件_2.JRadioButton單選按鈕
單選按鈕和復(fù)選框很類似,所不同的是在若干個(gè)復(fù)選框中我們可以同時(shí)選中多個(gè),而一組單選按鈕同一時(shí)刻只能有一個(gè)被選中。當(dāng)創(chuàng)建了若干個(gè)單選按鈕后,應(yīng)使用ButtonGroup類再創(chuàng)建一個(gè)對(duì)象,然后利用這個(gè)對(duì)象把這若干個(gè)單選按鈕歸組。歸到同一組的單選按鈕每一時(shí)刻只能選一。單選按鈕和復(fù)選框一樣,也觸發(fā)ItemEvent事件。
ButtonGroupfruit=newButtonGroup();JRadioButtonbutton1=newJRadioButton("小學(xué)"),button2=newJRadioButton("中學(xué)"),button3=newJRadioButton("大學(xué)");
fruit.add(button1);
fruit.add(button2);
fruit.add(button3);2023/2/54110.9列表組件
下拉列表是用戶十分熟悉的一個(gè)組件。用戶可以在下拉列表看到第一個(gè)選項(xiàng)和它旁邊的箭頭按鈕,當(dāng)用戶單擊箭頭按鈕時(shí),選項(xiàng)列表打開(kāi)。下拉列表的常用方法如下:◆
publicJComboBox()
創(chuàng)建一個(gè)沒(méi)有選項(xiàng)下拉列表。◆
publicvoidaddItem(ObjectanObject)
增加選項(xiàng)?!?/p>
publicintgetSelectedIndex()
返回當(dāng)前下拉列表中被選中的選項(xiàng)的索引,索引的起始值是0?!?/p>
publicObjectgetSelectedItem()
返回當(dāng)前下拉列表中被選中的選項(xiàng)。◆
publicvoidremoveItemAt(intanIndex)
從下拉列表的選項(xiàng)中刪除索引值是anIndex的選項(xiàng)。◆
publicvoidremoveAllItems()
刪除全部選項(xiàng)?!?/p>
publicvoidaddItemListener(ItemListener)
向下拉列表增加ItemEvent事件的監(jiān)視器。下拉式列表事件源可以發(fā)生ItemEvent事件。當(dāng)下拉列表獲得監(jiān)視器后,用戶在下拉列表的選項(xiàng)中選中某個(gè)選項(xiàng)時(shí)就發(fā)生ItemEvent事件,ItemEvent類將自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。
例10-15中,包含一個(gè)下拉列表和一個(gè)按鈕,下拉列表中有10、14、18三個(gè)選項(xiàng)。選擇10時(shí),按鈕中文字的字號(hào)為10,選擇14時(shí),按鈕中文字的字號(hào)為14,選擇18時(shí),按鈕中文字的字號(hào)為18。效果如圖10.17所示。2023/2/542
例子10-15運(yùn)行效果圖10.172023/2/54310.14窗口事件_1.WindowListener接口
Frame類是Window類的子類,Window對(duì)象都能觸發(fā)WindowEvent事件。當(dāng)一個(gè)JFrame窗口被激活、撤銷激活、打開(kāi)、關(guān)閉、圖標(biāo)化或撤銷圖標(biāo)化時(shí),就引發(fā)了窗口事件,即WindowEvent創(chuàng)建一個(gè)窗口事件對(duì)象。窗口使用addWindowlistener()方法獲得監(jiān)視器,創(chuàng)建監(jiān)視器對(duì)象的類必須實(shí)現(xiàn)WindowListener接口,該接口中有7個(gè)不同的方法:◆
publicvoidWindowActivated(WindowEvente)
當(dāng)窗口從非激活狀態(tài)到激活時(shí),窗口的監(jiān)視器調(diào)用該方法?!?/p>
publicvoidWindowDeactivated(WindowEvente)當(dāng)窗口激活狀態(tài)到非激活狀態(tài)時(shí),窗口的監(jiān)視器調(diào)用該方法?!?/p>
publicvoidWindowClosing(WindowEvente)窗口正在被關(guān)閉時(shí),窗口監(jiān)視器調(diào)用該方法?!?/p>
publicvoidWindowClosed(WindowEvente)
當(dāng)窗口關(guān)閉時(shí),窗口的監(jiān)視器調(diào)用該方法?!?/p>
publicvoidWindowIconified(WindowEvente)窗口圖標(biāo)化時(shí),窗口的監(jiān)視器調(diào)用該方法。◆
publicvoidWindowDeiconified(WindowEvente)當(dāng)窗口撤銷圖標(biāo)化時(shí),窗口的監(jiān)視器調(diào)用該方法?!?/p>
publicvoidWindowOpened(WindowEvente)
當(dāng)窗口打開(kāi)時(shí),窗口的監(jiān)視器調(diào)用該方法。2023/2/54410.14窗口事件_幾個(gè)特別的方法
WindowEvent創(chuàng)建的事件對(duì)象調(diào)用getWindow()方法可以獲取發(fā)生窗口事件的窗口。當(dāng)單擊窗口上的關(guān)閉圖標(biāo)時(shí),監(jiān)視器首先調(diào)用WindowClosing()方法,然后執(zhí)行窗口初始化時(shí)用setDefaultCloseOperation(intn)方法設(shè)定的關(guān)閉操作,最后再執(zhí)行WindowClosed()方法。如果在WindowClosing()方法執(zhí)行了System.exit(0);或setDefaultCloseOperation設(shè)定的關(guān)閉操作是EXITON_ON_CLOSE或DO_NOTHING_ON_CLOSE,那么監(jiān)視器就沒(méi)有機(jī)會(huì)再調(diào)用WindowClosed()方法。當(dāng)單擊窗口的圖標(biāo)化按鈕時(shí),監(jiān)視器調(diào)用WindowIconified()方法后,還將調(diào)用windowDeactivated()方法。當(dāng)撤銷窗口圖標(biāo)化時(shí),監(jiān)視器調(diào)用windowDeiconified()方法后還會(huì)調(diào)用windowActivated()方法。2023/2/54510.14窗口事件_2.WindowAdapter適配器
接口中如果有多個(gè)方法會(huì)給使用者帶來(lái)諸多不便,因?yàn)閷?shí)現(xiàn)這個(gè)接口的類必須實(shí)現(xiàn)接口中的全部方法,否則這個(gè)類必須是一個(gè)abstract類。為了給編程人員提供方便,對(duì)于Java提供的接口,如果其中的方法多于一個(gè),就提供一個(gè)相關(guān)的稱為適配器的類,這個(gè)適配器是已經(jīng)實(shí)現(xiàn)了相應(yīng)接口的類。例如,Java在提供WindowListener接口的同時(shí),又提供了WindowAdapter類,WindowAdapter類實(shí)現(xiàn)了WindowListener接口。因此,可以使用WindowAdapter的子類創(chuàng)建的對(duì)象作為監(jiān)視器,在子類中重寫所需要的接口方法即可。
例10-21使用WindowAdapter的匿名類(匿名類就是WindowAdapter的一個(gè)子類)作為窗口的監(jiān)視器。2023/2/54610.15鼠標(biāo)事件_1.鼠標(biāo)事件的觸發(fā)
組件是可以觸發(fā)鼠標(biāo)事件的事件源。怎樣才能導(dǎo)致組件觸發(fā)鼠標(biāo)事件呢?用戶的下列7種操作都可以使得組件觸發(fā)鼠標(biāo)事件:◆鼠標(biāo)指針從組件之外進(jìn)入?!羰髽?biāo)指針從組件內(nèi)退出。◆鼠標(biāo)指針停留在組件上時(shí),按下鼠標(biāo)?!羰髽?biāo)指針停留在組件上時(shí),釋放鼠標(biāo)?!羰髽?biāo)指針停留在組件上時(shí),單擊鼠標(biāo)。◆在組件上拖動(dòng)鼠標(biāo)指針。◆在組件上運(yùn)動(dòng)鼠標(biāo)指針。鼠標(biāo)事件的類型是MouseEvent,即組件觸發(fā)鼠標(biāo)事件時(shí),MouseEvent類自動(dòng)創(chuàng)建一個(gè)事件對(duì)象。2023/2/54710.15鼠標(biāo)事件_2.MouseListener接口
Java分別使用MouseListener接口與MouseMotionListener接口兩個(gè)接口來(lái)處理鼠標(biāo)事件。如果事件源使用addMouseListener(MouseListenerlistener)獲取監(jiān)視器,那么用戶的下列5種操作可使得事件源觸發(fā)鼠標(biāo)事件:◆鼠標(biāo)指針從組件之外進(jìn)入。◆鼠標(biāo)指針從組件內(nèi)退出。◆鼠標(biāo)指針停留在組件上面時(shí),按下鼠標(biāo)?!羰髽?biāo)指針停留在組件上面時(shí),釋放鼠標(biāo)?!羰髽?biāo)指針停留在組件上面時(shí),單擊或連續(xù)單擊鼠標(biāo)。創(chuàng)建監(jiān)視器的類必須實(shí)現(xiàn)MouseListener接口,該接口有5個(gè)方法:◆
mousePressed(MouseEvent)
負(fù)責(zé)處理鼠標(biāo)按下觸發(fā)的鼠標(biāo)事件。◆
mouseReleased(MouseEvente)
負(fù)責(zé)處理鼠標(biāo)釋放觸發(fā)的鼠標(biāo)事件?!?/p>
mouseEntered(MouseEvente)
負(fù)責(zé)處理鼠標(biāo)進(jìn)入組件觸發(fā)的鼠標(biāo)事件?!?/p>
mouseExited(MouseEvente)
負(fù)責(zé)處理鼠標(biāo)退出組件觸發(fā)的鼠標(biāo)事件?!?/p>
mouseClicked(MouseEvente)
負(fù)責(zé)處理鼠標(biāo)單擊或連擊觸發(fā)的鼠標(biāo)事件。2023/2/54810.15鼠標(biāo)事件_2.MouseMotionListener接口
Java分別使用MouseListener接口與MouseMotionListener接口兩個(gè)接口來(lái)處理鼠標(biāo)事件。如果事件源使用
addMouseMotionListener(MouseMotionListenerlistener)獲取監(jiān)視器,那么用戶的下列兩種操作可使得事件源觸發(fā)鼠標(biāo)事件:◆在組件上拖動(dòng)鼠標(biāo)指針?!粼诮M件上運(yùn)動(dòng)鼠標(biāo)指針。
創(chuàng)建監(jiān)視器的類必須實(shí)現(xiàn)MouseMotionListener接口,該接口有兩個(gè)方法:◆
mouseDragged(MouseEvente)
負(fù)責(zé)處理鼠標(biāo)拖動(dòng)事件,即在事件源上拖動(dòng)鼠標(biāo)時(shí),監(jiān)視器將自動(dòng)調(diào)用接口中的這個(gè)方法對(duì)事件做出處理?!?/p>
mouseMoved(MouseEvente)
負(fù)責(zé)處理鼠標(biāo)移動(dòng)事件,即在事件源上運(yùn)動(dòng)鼠標(biāo)時(shí),監(jiān)視器將自動(dòng)調(diào)用接口中的這個(gè)方法對(duì)事件做出處理。
由于處理鼠標(biāo)事件的接口中的方法多于一個(gè),Java提供了相應(yīng)的適配器類,分別是MouseAdapter和MouseMotionAdapter,這兩個(gè)類分別實(shí)現(xiàn)了MouseListener接口和MouseMotionListener接口。2023/2/54910.15鼠標(biāo)事件_3.MouseEvent類
在處理鼠標(biāo)事件時(shí),程序經(jīng)常關(guān)心鼠標(biāo)在當(dāng)前組件坐標(biāo)系中的位置,以及觸發(fā)鼠標(biāo)事件使用的是鼠標(biāo)的左鍵或右鍵等信息。MouseEvent類中有下列幾個(gè)重要的方法:◆
getX()
返回觸發(fā)當(dāng)前鼠標(biāo)事件時(shí)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 買房賣房協(xié)議書(shū)樣本
- 小學(xué)生衛(wèi)生習(xí)慣教育主題班會(huì)《好習(xí)慣伴我成長(zhǎng)》課件
- 八年級(jí)語(yǔ)文上冊(cè)《古詩(shī)十九首 庭中有奇樹(shù)》教案 新人教版
- 2024年五年級(jí)英語(yǔ)下冊(cè) Unit 1 Welcome to our school Fun Facts教案 人教精通版(三起)
- 八年級(jí)物理上冊(cè) 第五章 第四節(jié) 眼睛和眼鏡教案 (新版)新人教版
- 易制爆化學(xué)品使用部門職責(zé)
- 國(guó)開(kāi)(湖北)2024年秋《國(guó)學(xué)經(jīng)典選讀》形考作業(yè)1-4答案
- 汽車試驗(yàn)技術(shù) 課件 項(xiàng)目6 整車碰撞安全性能試驗(yàn)
- 租廠房合同(2篇)
- 葉公好龍課件小班
- 2024年房地產(chǎn)開(kāi)發(fā)商與裝修公司裝修合同
- 二年級(jí)排球教案
- 小數(shù)乘除法豎式計(jì)算專項(xiàng)練習(xí)題大全(每日一練共15份)
- 天津市和平區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期中考試英語(yǔ)試題
- 2024版抗菌藥物DDD值速查表
- 小學(xué)二年級(jí)數(shù)學(xué)上冊(cè)期中試卷(全套)
- DB11T 1580-2018 生產(chǎn)經(jīng)營(yíng)單位安全生產(chǎn)應(yīng)急資源調(diào)查規(guī)范
- 北師大版(2024新版)七年級(jí)上冊(cè)數(shù)學(xué)期中學(xué)情評(píng)估檢測(cè)試卷(含答案解析)
- 2024二十屆三中全會(huì)知識(shí)競(jìng)賽題庫(kù)及答案
- (高清版)JTG 5142-2019 公路瀝青路面養(yǎng)護(hù)技術(shù)規(guī)范
- 預(yù)防接種工作規(guī)范(2023年版)解讀課件
評(píng)論
0/150
提交評(píng)論