JAVA圖形用戶界面_第1頁
JAVA圖形用戶界面_第2頁
JAVA圖形用戶界面_第3頁
JAVA圖形用戶界面_第4頁
JAVA圖形用戶界面_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論