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