版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第6章圖形用戶界面
圖形用戶界面(GraphicalUserInterface,GUI)提供Windows應(yīng)用程序與用戶進(jìn)行數(shù)據(jù)交流的界面。
Java在java.awt和javax.swing包中提供了構(gòu)成Java圖形用戶界面的組件類和事件類。
圖形用戶界面由組件組成,組件需要響應(yīng)約定的事件。
26.1
AWT組件及其屬性類6.2
事件處理6.3Swing組件及事件6.4圖形圖像第6章圖形用戶界面31.
圖形用戶界面概述圖形用戶界面—使用圖形方式借助菜單、編輯框、按鈕等標(biāo)準(zhǔn)界面元素和鍵盤、鼠標(biāo)操作,提供應(yīng)用程序與用戶進(jìn)行數(shù)據(jù)交流的界面,實(shí)現(xiàn)人機(jī)交互。用戶界面的作用:A.獲得用戶輸入的數(shù)據(jù)和需要執(zhí)行的命令;
B.顯示計(jì)算結(jié)果,讓用戶看得到。用戶界面的特點(diǎn):(1)提供數(shù)據(jù)交流功能;(2)具有友好的可操作性;(3)隨著操作系統(tǒng)的特性而變化。構(gòu)成圖形用戶界面的基本元素是組件,而應(yīng)用程序的運(yùn)行過程則是事件驅(qū)動(dòng)的。6.1AWT組件及其屬性類42.
Java的AWT和SwingJava圖形用戶界面的組件和事件由java.awt和javax.swing包共同提供。java.awt包提供抽象窗口工具集(AbstractWindowTookit,AWT),主要包括組件、事件處理模型、圖形和圖像工具、布局管理器等。javax.swing包提供JDK1.2的Swing組件,它擴(kuò)展了AWT組件的功能。AWT組件—重型(heavyweight)組件,運(yùn)行時(shí)需要一個(gè)與平臺(tái)相關(guān)的本地組件為之服務(wù)。Swing組件—輕型(lightweight)組件,不直接使用本地組件。6.1AWT組件及其屬性類56.1AWT組件及其屬性類6.1.1
AWT組件6.1.2
布局管理6.1.3顏色和字體66.1.1AWT組件
AWT主要相關(guān)軟件包有:java.awt:AWT核心包,提供AWT組件類、組件布局類等;java.awt.Event:提供事件類和監(jiān)聽器類。
java.awt包主要由組件類(Component)、事件類(Event)、布局類(FlowLayout)、菜單組件類(MenuComponent)等組成。
76.1.1AWT組件
81.
組件(Component)組件——構(gòu)成圖形用戶界面的基本成分和核心元素,組件類是一個(gè)抽象類,是AWT組件類層次結(jié)構(gòu)的根類,實(shí)際使用的組件都是組件類的子類。組件的特性:運(yùn)行時(shí)可見,具有坐標(biāo)位置、尺寸、字體、顏色等屬性,能擁有及管理其他組件,可獲得輸入焦點(diǎn)可被操作,可響應(yīng)事件等。Component類提供對(duì)組件操作的通用方法:包括獲得或設(shè)置組件位置、大小、標(biāo)題文本字體、標(biāo)題文本顏色、背景顏色等屬性,響應(yīng)鼠標(biāo)或鍵盤事件、組件繪圖等。6.1.1AWT組件
91.
組件(Component)publicabstractclass
Component
extendsObject
implementsImageObserver,MenuContainer,Serializable{publicintgetWidth()
//獲得組件寬度
publicintgetHeight()
//獲得組件高度
publicvoidsetVisible(intwidth,intheight)
//設(shè)置組件的寬度和高度
publicintgetX()
//返回組件位置的x坐標(biāo)值
publicintgetY()
//返回組件位置的y坐標(biāo)值
publicvoidsetLocation(intx,inty)
//設(shè)置組件坐標(biāo)位置,x、y指定組件左上角相對(duì)于容器的坐標(biāo)位置6.1.1AWT組件
101.
組件(Component)publicvoidsetBounds(intx,inty,intwidth,intheight)
//設(shè)置組件坐標(biāo)位置和寬度、高度
publicColorgetBackground()
//獲得組件的背景顏色
publicvoidsetBackground(Colorc) //設(shè)置組件的背景顏色
publicFontgetFont()
//獲得組件字體
publicvoidsetFont(Fontf)
//設(shè)置組件字體
publicvoidsetVisible(booleanb)
//設(shè)置組件是否可見}6.1.1AWT組件
112.
容器(Container)一種特殊組件,能容納其他組件,在其可視區(qū)域內(nèi)顯示這些組件。容器中各組件的大小和位置由容器的布局管理器(layoutmanager)進(jìn)行控制。一個(gè)容器之中可以放置其他容器,使用多層容器可以表達(dá)復(fù)雜的布局。6.1.1AWT組件
122.
容器(Container)public
classContainerextendsComponent{
publicvoidsetLayout(LayoutManagermgr)//設(shè)置布局管理器
publicComponentadd(Componentcomp)
//在容器中添加組件,用于任何布局publicvoidremove(Componentcomp)
//從容器中移去指定組件publicvoidremoveAll()
//從容器中移去所有組件}6.1.1AWT組件
133.
窗口(window)與面板(panel)窗口有標(biāo)題欄和關(guān)閉控制按鈕,有邊框,可添加菜單欄;窗口可獨(dú)立存在,運(yùn)行時(shí)可被移動(dòng),可改變大?。淮翱谑琼攲尤萜?,窗口不能包含在其他容器中。
publicclassWindowextendsContainerimplementsAccessible注意:窗口類和面板類都是容器類的子類。6.1.1AWT組件
143.
窗口(window)與面板(panel)面板沒有標(biāo)題,沒有邊框,不可添加菜單欄;不能獨(dú)立存在,必須包含在其他容器中;一個(gè)窗口可以包含多個(gè)面板,一個(gè)面板可以包含另一個(gè)面板,但面板不能包含窗口。
6.1.1AWT組件
publicclassPanelextendsContainerimplementsAccessible{publicPanel()
//默認(rèn)FlowLayout布局
publicPanel(LayoutManagerlayout)//layout指定布局管理器}154.
框架(Frame)與對(duì)話框(Dialog)(1)框架Java應(yīng)用程序使用Frame作為主窗口,F(xiàn)rame帶有最大化和最小化控制按鈕。6.1.1AWT組件
注意:Frame框架類和Dialog對(duì)話框類都是Window窗口類的子類。publicclassFrameextendsWindowimplementsMenuContainer{publicFrame()
publicFrame(Stringtitle)
//title指定框架標(biāo)題
publicStringgetTitle()
//獲取框架的標(biāo)題
publicvoidsetTitle(Stringtitle)
//設(shè)置或修改框架標(biāo)題
publicvoidsetResizable(booleanresizable)
//設(shè)置框架是否可變大小,b默認(rèn)true}16(2)對(duì)話框4.
框架(Frame)與對(duì)話框(Dialog)對(duì)話框不能作為應(yīng)用程序的主窗口,它依附于一個(gè)框架,當(dāng)框架關(guān)閉時(shí),對(duì)話框也關(guān)閉。對(duì)話框界面比框架簡(jiǎn)單,沒有最大化和最小化控制按鈕。對(duì)話框可以設(shè)置為模式窗口,特點(diǎn)是總在最前面,如果不關(guān)閉模式對(duì)話框,則不能對(duì)其他窗口進(jìn)行操作。Frame和Dialog實(shí)例默認(rèn)是白色背景、最小化的、不可見的,調(diào)用setSize()方法設(shè)定窗口大小,調(diào)用setBackground()方法設(shè)置背景顏色,調(diào)用setVisible(true)方法使窗口可見。6.1.1AWT組件
17publicclassDialog
extendsWindow{publicDialog(Frameowner)
//owner指明擁有對(duì)話框的框架publicDialog(Frameowner,Stringtitle)
//title指定對(duì)話框標(biāo)題publicDialog(Frameowner,booleanmodal)
//modal指定模式窗口,默認(rèn)falsepublicDialog(Frameowner,Stringtitle,booleanmodal)}(2)對(duì)話框6.1.1AWT組件
185.
標(biāo)簽(Label):用于顯示一行文本信息,只能顯示信息,不能用于輸入。
publicclassLabelextendsComponentimplementsAccessible{publicstaticfinalintLEFT=0;
//左對(duì)齊,默認(rèn)值
publicstaticfinalintCENTER=1;
//居中
publicstaticfinalintRIGHT=2;
//右對(duì)齊
publicLabel()
publicLabel(Stringtext)
//text指定顯示字符串
publicLabel(Stringtext,intalignment)
//alignment指定對(duì)齊方式,取值為L(zhǎng)abel的常量
publicStringgetText()
//獲得顯示字符串
publicvoidsetText(Stringtext)
//設(shè)定顯示字符串}6.1.1AWT組件
196.
文本行(TextField)文本行:一個(gè)單行文本編輯框,用于輸入一行文字。
TextField類從其父類TextComponent中繼承了獲得和設(shè)置文本內(nèi)容的getText()、setText()等方法。
publicclassTextFieldextendsponent{publicTextField()publicTextField(Stringtext)//text指定顯示字符串publicTextField(intcolumns)//columns指定列數(shù)publicTextField(Stringtext,intcolumns)}6.1.1AWT組件
206.
文本行(TextField)publicclassponentextendsComponentimplementsAccessible{publicStringgetText()//獲得文本行字符串publicvoidsetText(Stringtext)//設(shè)置文本行字符串publicvoidsetEditable(booleanb) //設(shè)置是否可編輯,b默認(rèn)true,可編輯 publicbooleanisEditable()//判斷文本行是否可編輯 }6.1.1AWT組件
217.
按鈕(Button)按鈕:圖形界面設(shè)計(jì)中最常見的一個(gè)組件,用于執(zhí)行一種特定操作。調(diào)用容器的add()方法,可以將按鈕等組件放置在容器中。
publicclassButtonextendsComponentimplementsAccessible{
publicButton(Stringtext)
//text指定按鈕標(biāo)題
publicStringgetLabel()
//獲得按鈕標(biāo)簽
publicvoidsetLabel(Stringlabel)
//設(shè)置按鈕標(biāo)簽}6.1.1AWT組件
22【例6.1】用戶登錄窗口。演示功能:(1)創(chuàng)建一個(gè)框架類Frame對(duì)象作為應(yīng)用程序的主窗口;(2)設(shè)置窗口標(biāo)題、大小及背景顏色,添加標(biāo)簽、文本行及按鈕組件。與真正的Windows應(yīng)用程序的差距:(1)組件布局較亂,當(dāng)窗口大小改變時(shí),各組件的相對(duì)位置也隨之改變。解決辦法是,為容器設(shè)置一種合理的布局。(2)該窗口不能關(guān)閉,單擊按鈕沒有響應(yīng)。解決辦法是,為窗口關(guān)閉和按鈕單擊事件編寫事件處理程序。6.1.1AWT組件
23布局管理器類(layoutmanager)對(duì)容器中的組件進(jìn)行相對(duì)布局,當(dāng)改變?nèi)萜鞔笮r(shí),或者改變組件的大小,或者改變組件之間的相對(duì)位置,保證組件不會(huì)被遮蓋并且容器沒有空白區(qū)域。每種布局管理器指定一種組件之間的相對(duì)位置。布局管理器是容器類所具有的特性,每種容器有一種默認(rèn)的布局管理器。Window窗口類的默認(rèn)布局是BorderLayout;Panel面板類的默認(rèn)布局是FlowLayout。如果一個(gè)容器需要改變其默認(rèn)布局管理器,可以調(diào)用Container容器類的setLayout()方法。6.1.2布局管理241.
FlowLayout(流布局管理器)布局:按行布局組件,將組件按從左至右的順序,一行一行地排列,一行放滿時(shí)再放置到下一行。特點(diǎn):組件保持自己尺寸,容器中一行的寬度隨容器的寬度發(fā)生改變。特點(diǎn):當(dāng)改變?nèi)萜鞔笮r(shí),組件的相對(duì)位置隨容器大小而變化,將呈現(xiàn)一行或多行。6.1.2布局管理25publicclassFlowLayoutimplementsLayoutManager,java.io.Serializable{
publicstaticfinalintLEFT=0;
//左對(duì)齊,類常量,全部大寫
publicstaticfinalintCENTER=1;
//居中
publicstaticfinalintRIGHT=2;
//右對(duì)齊
publicFlowLayout()
//構(gòu)造方法,默認(rèn)居中
publicFlowLayout(intalign)
//align參數(shù)指定對(duì)齊方式
publicFlowLayout(intalign,inthgap,intvgap)
//hgap、vgap參數(shù)指定組件之間水平和垂直間距}6.1.2布局管理262.
BorderLayout(邊布局管理器)布局特點(diǎn):將容器劃分為5個(gè)區(qū)域:東、南、西、北四條邊和中間,組件占滿每條邊或中間部分。特點(diǎn):當(dāng)容器大小改變時(shí),南北兩邊組件長(zhǎng)變而寬不變,東西兩邊組件長(zhǎng)不變而寬變,中間組件的長(zhǎng)和寬都隨容器大小而變化。6.1.2布局管理27publicclassBorderLayoutimplementsLayoutManager2,java.io.Serializable{publicstaticfinalStringNORTH="North";
publicstaticfinalStringSOUTH="South";publicstaticfinalStringEAST="East";publicstaticfinalStringWEST="West";publicstaticfinalStringCENTER="Center";
//注意,字符串首字母大寫
publicBorderLayout()
//構(gòu)造方法,組件之間的間距為0像素
publicBorderLayout(inthgap,intvgap)
//參數(shù)指定組件之間水平和垂直的間距(像素)}6.1.2布局管理286.1.2布局管理Container類為BorderLayout布局提供以下添加組件的方法:
publicvoidadd(Componentcomp,Objectconstraints)
//constraints指定組件添加到BorderLayout布局容器的位置例如:
Frameframe=newFrame();//框架默認(rèn)布局是BorderLayout
frame.add(newButton(“東”),BorderLayout.EAST);
//組件添加在框架東邊
frame.add(newButton(“南”),“South”);
frame.add(newButton(“西”),“West”);frame.add(newButton(“北”),“North”);frame.add(newButton(“中”),BorderLayout.CENTER);2.
BorderLayout(邊布局管理器)293.
GridLayout(網(wǎng)格布局管理器)布局:將容器劃分為大小相等的若干行乘若干列的網(wǎng)格,組件從左至右、從上到下依次放入網(wǎng)格中,每個(gè)組件占滿一格。特點(diǎn):組件大小隨容器大小而變化,如果組件個(gè)數(shù)多于網(wǎng)格數(shù),Java將自動(dòng)增加網(wǎng)格數(shù);如果組件個(gè)數(shù)少于網(wǎng)格數(shù),沒有用到的區(qū)域置空。6.1.2布局管理GridLayout布局的組件放置次序是行優(yōu)先,從第一行開始,
從左至右依次放置,一行放滿后自動(dòng)轉(zhuǎn)入下一行。如果組件數(shù)超過網(wǎng)格數(shù),則布局管理器會(huì)自動(dòng)增加網(wǎng)格數(shù),增加的原則是保持行數(shù)不變。30publicclassGridLayoutimplementsLayoutManager,java.io.Serializable
{
publicGridLayout()
//構(gòu)造方法
publicGridLayout(introws,intcols)
//參數(shù)指定行、列
publicGridLayout(introws,intcols,inthgap,intvgap)
//后兩個(gè)參數(shù)指定組件之間水平和垂直的間距(像素)}3.
GridLayout(網(wǎng)格布局管理器)6.1.2布局管理316.1.2布局管理3.
GridLayout(網(wǎng)格布局管理器)在指定位置放置組件,調(diào)用Container類提供的以下方法:
publicComponentadd(Componentcomp,intindex)
//index指定GridLayout布局容器位置例如:
Frameframe=newFrame();
frame.setLayout(newGridLayout(3,2));
//設(shè)置3行2列的網(wǎng)格布局
frame.add(newButton(“button1”));//依次添加組件frame.add(newButton(“button2”),0);//將組件插入在指定位置326.1.3顏色和字體1.
顏色RGB值:一種顏色由紅、綠、藍(lán)三元色值組成,稱為RGB值。一個(gè)int整數(shù)可以表示一種顏色,結(jié)構(gòu)為:最高字節(jié)全1,其后3字節(jié)分別存儲(chǔ)“紅、綠、藍(lán)”單色值,單色值范圍是0-255.例如:RGB(0,0,0)(0xff000000)表示黑色,
RGB(255,0,0)(0xffff0000)表示紅色,
RGB(0,255,0)(0xff00ff00)表示綠色,
RGB(0,0,255)(0xff0000ff)表示藍(lán)色,
RGB(255,255,255)(0xffffffff)表示白色.336.1.3顏色和字體1.
顏色Java.awt.Color類表示顏色.publicclassColorimplementsPaint,java.io.Serializable{publicColor(intr,intg,intb)
//以三元色值構(gòu)造對(duì)象publicColor(intrgb)
//以RGB值構(gòu)造對(duì)象publicintgetRed()
//返回紅色值publicintgetGreen()
//返回綠色值
publicintgetBlue()
//返回藍(lán)色值
publicintgetRGB()
//返回顏色的RGB值
publicColorbrighter()
//使顏色變淺
publicColordarker()
//使顏色變深}346.1.3顏色和字體2.字體Java.awt.Font類表示字體,一種字體由字體名、字形(粗體或斜體)、字號(hào)等屬性組成。publicclassFontimplementsjava.io.Serializable{publicstaticfinalintPLAIN=0;//常規(guī)
publicstaticfinalintBOLD=1;//粗體
publicstaticfinalintITALIC=2;//斜體
publicFont(Stringname,intstyle,intsize)
//參數(shù)指定字體名、字形、字號(hào)
publicStringgetName()//返回字體名稱
publicintgetSize()//返回字體大小
publicintgetStyle()//返回粗、斜體值}356.2事件處理6.2.1
委托事件模型6.2.2
AWT事件類和事件監(jiān)聽器接口366.2.1委托事件模型
1.
事件(event)和事件源(eventsource)事件——指一個(gè)狀態(tài)的改變,或者一個(gè)活動(dòng)的發(fā)生。事件源——產(chǎn)生事件的組件稱為事件源。例如:
用戶單擊窗口關(guān)閉命令的操作
——產(chǎn)生窗口關(guān)閉事件,框架窗口組件是事件源單擊一個(gè)按鈕——產(chǎn)生單擊事件,按鈕組件是事件源許多事件由用戶操作觸發(fā),如單擊、窗口關(guān)閉等;有些事件由系統(tǒng)觸發(fā),如定時(shí)器的時(shí)間到了等。372.
事件類和事件監(jiān)聽器接口Java將事件封裝成事件類,并為每個(gè)事件類定義一個(gè)事件監(jiān)聽器接口,約定事件處理辦法,指定產(chǎn)生事件時(shí)執(zhí)行的操作。6.2.1委托事件模型
例如:
單擊事件監(jiān)聽器接口ActionListener聲明actionPerformed()方法如下,約定單擊事件的事件處理方法,該方法的參數(shù)e是一個(gè)ActionEvent事件類的對(duì)象。publicinterfaceActionListenerextendsEventListener{//單擊事件監(jiān)聽器接口
publicvoidactionPerformed(ActionEvente);
//單擊事件處理方法}382.
事件類和事件監(jiān)聽器接口一個(gè)描述圖形用戶界面的類聲明實(shí)現(xiàn)一個(gè)事件監(jiān)聽器接口,意味著該類將響應(yīng)指定事件并提供事件處理方法。此外,還必須指明哪個(gè)組件要響應(yīng)單擊事件。6.2.1委托事件模型
例如:
窗口事件監(jiān)聽器接口WindowListener聲明多個(gè)窗口事件的處理方法如下:publicinterfaceWindowListenerextendsEventListener{//窗口事件監(jiān)聽器接口
publicvoidwindowOpened(WindowEvente);
//窗口打開事件處理方法
publicvoidwindowClosing(WindowEvente);
//窗口關(guān)閉事件處理方法}393.組件注冊(cè)事件監(jiān)聽器對(duì)象publicclassButtonextendsComponentimplementsAccessible{publicvoidaddActionListener(ActionListenerl)
//注冊(cè)單擊事件監(jiān)聽器
publicvoidremoveActionListener(ActionListenerl)
//取消單擊事件監(jiān)聽器}例如:Button類有以下注冊(cè)或取消單擊事件監(jiān)聽器的方法。一個(gè)組件能夠響應(yīng)的事件是有約定的。一個(gè)組件能夠響應(yīng)多個(gè)事件,不同的組件響應(yīng)不同的事件。Java在各組件類中聲明了組件注冊(cè)事件監(jiān)聽器方法,表示該組件要響應(yīng)指定事件。6.2.1委托事件模型
403.組件注冊(cè)事件監(jiān)聽器對(duì)象publicclassWindowextendsContainerimplementsAccessible{publicvoidaddWindowListener(WindowListenerl)
//注冊(cè)窗口事件監(jiān)聽器
publicvoidremoveWindowListener(WindowListenerl)
//取消窗口事件監(jiān)聽器}例如:Window類有以下注冊(cè)和取消窗口事件的方法。6.2.1委托事件模型
41一個(gè)組件如果注冊(cè)了一個(gè)事件監(jiān)聽器對(duì)象,表明該組件聲明要響應(yīng)該事件。程序運(yùn)行時(shí),button按鈕和frame框架將被監(jiān)聽:當(dāng)用戶單擊button按鈕時(shí),執(zhí)行this對(duì)象實(shí)現(xiàn)的actionPerformed()方法;當(dāng)用戶單擊框架窗口的關(guān)閉按鈕時(shí),執(zhí)行this對(duì)象實(shí)現(xiàn)的windowClosing()方法。6.2.1委托事件模型
例如:
button.addActionListener(this);//為按鈕注冊(cè)單擊事件監(jiān)聽器
frame.addWindowListener(this);//為框架注冊(cè)單擊事件監(jiān)聽器3.組件注冊(cè)事件監(jiān)聽器對(duì)象426.2.1委托事件模型
3.組件注冊(cè)事件監(jiān)聽器對(duì)象總結(jié):(1)
如果一個(gè)組件需要響應(yīng)多個(gè)事件,可以注冊(cè)多個(gè)事件監(jiān)聽器;(2)如果多個(gè)組件需要響應(yīng)同一個(gè)事件,則可以注冊(cè)同一個(gè)事件監(jiān)聽器;這樣,事件只傳遞給已注冊(cè)的組件,不會(huì)被其他組件或容器獲得。(3)一個(gè)事件監(jiān)聽器對(duì)應(yīng)一個(gè)事件處理方法;(4)事件處理方法既可以由本類實(shí)現(xiàn),也可以委托其他類實(shí)現(xiàn),多個(gè)類可分工合作。43【例6.2】Unicode字符查詢器。(1)按鈕單擊事件的響應(yīng)和處理(2)關(guān)閉窗口事件的響應(yīng)和處理——演示按鈕組件如何響應(yīng)及處理單擊事件;框架如何響應(yīng)及處理窗口關(guān)閉事件。6.2.1委托事件模型
444.
圖形用戶界面的運(yùn)行由事件驅(qū)動(dòng)①不同組件的事件或同一組件的不同事件具有約定的執(zhí)行次序。②各組件的事件處理方法是否執(zhí)行、執(zhí)行次序以及執(zhí)行次數(shù),取決于用戶操作。
③在一個(gè)事件處理方法中,程序按照語(yǔ)句次序順序執(zhí)行。6.2.1委托事件模型
圖形用戶界面的程序運(yùn)行由事件驅(qū)動(dòng)。一個(gè)組件的多個(gè)事件之間,多個(gè)組件的多個(gè)事件之間,事件處理方法的執(zhí)行次序是有規(guī)律的。
45圖6.8AWT事件類及其層次結(jié)構(gòu)
6.2.2AWT事件類和事件監(jiān)聽器接口
1.AWT事件類466.2.2AWT事件類和事件監(jiān)聽器接口
Java事件類層次結(jié)構(gòu)的根節(jié)點(diǎn)是java.util.EventObject類,是所有事件類的祖先類。publicclassEventObjectimplementsjava.io.Serializable{publicObjectgetSource()
//返回產(chǎn)生事件的事件源組件
publicStringtoString()
//返回事件對(duì)象信息}1.AWT事件類47java.awt.AWTEvent事件類是一個(gè)抽象類,是AWT事件類的父類。其子類ActionEvent單擊事件類的部分聲明如下:publicclassActionEventextendsjava.awt.AWTEvent{publicStringmand()//獲得按鈕標(biāo)題}6.2.2AWT事件類和事件監(jiān)聽器接口
1.AWT事件類482.AWT事件監(jiān)聽器接口在java.awt.event包中的每個(gè)事件類都有一個(gè)對(duì)應(yīng)的事件監(jiān)聽器接口,接口中聲明了一個(gè)或多個(gè)事件處理方法。AWT事件監(jiān)聽器接口及其方法如表6-1所示—P153.6.2.2AWT事件類和事件監(jiān)聽器接口
接口提供方法聲明與方法實(shí)現(xiàn)相分離的機(jī)制。Java通過事件監(jiān)聽器接口約定事件以及事件處理方法聲明;而事件處理方法實(shí)現(xiàn)由程序員編寫,對(duì)一個(gè)事件,每個(gè)圖形用戶界面可有不同的處理方式。事件監(jiān)聽器接口的意義
Java在事件監(jiān)聽器接口中封裝了消息處理;接口中的抽象方法留給程序員編寫事件處理程序的。493.
事件適配器類適配器類(Adapter):
為每個(gè)包含多個(gè)方法的事件監(jiān)聽器接口提供實(shí)現(xiàn)該接口的一個(gè)抽象類,稱為適配器類。例如:WindowAdapter適配器類實(shí)現(xiàn)WindowListener接口。6.2.2AWT事件類和事件監(jiān)聽器接口
publicabstractclass
WindowAdapter
implementsWindowListener,WindowStateListener,WindowFocusListener{publicvoidwindowOpened(WindowEvente){}//打開窗口
publicvoidwindowClosing(WindowEvente){}//關(guān)閉窗口時(shí)
publicvoidwindowClosed(WindowEvente){}//關(guān)閉窗口后
50publicvoidwindowIconified(WindowEvente){}//窗口最小化publicvoidwindowDeiconified(WindowEvente){}//窗口恢復(fù)publicvoidwindowActivated(WindowEvente){}//激活窗口publicvoidwindowDeactivated(WindowEvente){}
//變?yōu)椴换顒?dòng)窗口
publicvoidwindowGainedFocus(WindowEvente){}
//窗口獲得焦點(diǎn)
publicvoidwindowLostFocus(WindowEvente){}
//窗口失去焦點(diǎn)
publicvoidwindowStateChanged(WindowEvente){}
//窗口狀態(tài)改變
}6.2.2AWT事件類和事件監(jiān)聽器接口
51例如:classWinCloseextendsWindowAdapter
//繼承適配器類{//單擊窗口關(guān)閉按鈕時(shí)觸發(fā)并執(zhí)行
publicvoidwindowClosing
(WindowEvente)
{
//覆蓋WindowAdapter類中的方法
System.exit(0);
//結(jié)束程序運(yùn)行
}}AWT事件監(jiān)聽器接口與其對(duì)應(yīng)的適配器類,如表6-2所示—P155.6.2.2AWT事件類和事件監(jiān)聽器接口
一個(gè)需要處理窗口事件的類,可以聲明為繼承WindowAdapter類,只需要覆蓋所響應(yīng)的事件處理方法即可,不需要再將其它方法實(shí)現(xiàn)為空方法。524.
AWT組件類中注冊(cè)事件監(jiān)聽器的方法—P155表6-36.2.2AWT事件類和事件監(jiān)聽器接口
AWT組件類中注冊(cè)事件監(jiān)聽器的方法如表6-3所示,表明哪些組件能夠響應(yīng)哪些事件,每個(gè)addListener()方法都有對(duì)應(yīng)的一個(gè)removeListener()方法取消事件監(jiān)聽器。53Swing庫(kù)是抽象窗口工具庫(kù)(AWT)的擴(kuò)展,提供了比AWT更多的特性和工具,用于建立更復(fù)雜的圖形用戶界面。6.3
Swing組件及事件AWT組件—重型(heavyweight)組件,運(yùn)行時(shí)需要一個(gè)與平臺(tái)相關(guān)的本地組件為之服務(wù)。Swing組件—輕型(lightweight)組件,不直接使用本地組件。546.3
Swing組件及事件6.3.1
Swing組件關(guān)系概述6.3.2
窗口組件6.3.3文本顯示和編輯組件6.3.4按鈕組件6.3.5列表框和組合框6.3.6JoptionPane對(duì)話框和JColorChooser對(duì)話框6.3.7菜單組件6.3.8表格556.3.1Swing組件關(guān)系概述566.3.2窗口組件(1)內(nèi)容窗格JFrame和JDialog中容納組件的容器時(shí)內(nèi)容窗格,需要調(diào)用以下方法返回內(nèi)容窗格:publicContainergetContentPane()
//返回JFrame/JDialog的內(nèi)容窗格基于Swing組件的圖形用戶界面,采用JFrame框架作為主窗口。JFrame和JDialog的用法類似于Frame和Dialog,主要有以下兩點(diǎn)差別。576.3.2窗口組件JFrame和JDialog組件:publicvoidsetDefaultCloseOperation(intoperation)
//單擊窗口關(guān)閉按鈕時(shí),指定程序處理方式publicinterface
WindowConstants{publicstaticfinalintDO_NOTHING_ON_CLOSE=0;
//什么也不做
publicstaticfinalintHIDE_ON_CLOSE=1;
//隱藏窗口
publicstaticfinalintDISPOSE_ON_CLOSE=2;
//隱藏當(dāng)前窗口,釋放窗口占用的其他資源
publicstaticfinalintEXIT_ON_CLOSE=3;
//結(jié)束程序運(yùn)行}(2)窗口關(guān)閉方式586.3.2窗口組件例如:JFrame和JDialog通常采用不同的窗口關(guān)閉事件的處理方式,調(diào)用語(yǔ)句如下:jframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
//結(jié)束程序運(yùn)行jdialog.setDefaultCloseOperation(HIDE_ON_CLOSE);
//隱藏對(duì)話框而不結(jié)束程序運(yùn)行不需要再寫實(shí)現(xiàn)WindowsListener接口中的windowClosing方法。596.3.3文本顯示和編輯組件JLabel標(biāo)簽是文本顯示組件,與java.awt.Label用法相同,增加的功能是,能容納一個(gè)圖標(biāo)ImageIcon。文本編輯組件主要有3種:
JTextField、JPasswordField和JTextArea。文本行JTextField是單行文本編輯框,用于編輯一行字符串,用法與java.awt.TextField一樣。JPasswordField是JTextField的子類,用于編輯作為密碼的一行字符串,輸入時(shí)不顯示原字符,以”*”代替。文本區(qū)JTextArea是一個(gè)多行文本編輯框,它的基本操作與文本行類似,增加的是滾動(dòng)條的顯示和操作。606.3.3文本顯示和編輯組件JTextField是單行文本編輯框,用法與java.awt.TextField一樣。增加以下方法://設(shè)置水平對(duì)齊方式
publicvoidsetHorizontalAlignment(intalignment)
//alignment指定對(duì)齊方式,取值為JTextField的常量:
LEFT、RIGHT、CENTER.1.
文本行——JTextFieldJPasswordField是JTextField的子類,用于編輯作為密碼的一行字符串,輸入時(shí)不顯示原字符,以”*”代替。616.3.3文本顯示和編輯組件2.
文本區(qū)JTextArea文本區(qū)是一個(gè)顯示純文本的多行文本編輯框?;静僮髋c文本行類似,但增加了接收換行符的多行控制。publicclassJTextAreaextendsponent{publicJTextArea()publicJTextArea(Stringtext)//text指定初始顯示文本publicJTextArea(introws,intcolumns) //rows、columns指定行數(shù)和列數(shù)publicJTextArea(Stringtext,introws,intcolumns)publicvoidappend(Stringstr);//將指定字符串str追加到文本區(qū)publicvoidinsert(Stringstr,intpos);//將字符串str插入到由pos指定的位置}626.3.3文本顯示和編輯組件publicabstractclassponentextendsponentimplementsScrollable,Accessible{publicvoidcut();//剪切publicvoidcopy();//復(fù)制publicvoidpaste();//粘貼}ponent是JTextField和JTextArea的父類。2.
文本區(qū)636.3.3文本顯示和編輯組件publicclassJScrollPaneextendsponentimplementsScrollPaneConstants,Accessible{publicJScrollPane(Componentview)//創(chuàng)建一個(gè)顯示view組件內(nèi)容的JScrollPane}JScrollPane滾動(dòng)窗格是帶有滾動(dòng)條的視圖容器,通常用于為其他組件提供滾動(dòng)條。JScrollPane自動(dòng)管理垂直和水平滾動(dòng)條,只要組件內(nèi)容超過視圖大小就會(huì)自動(dòng)顯示水平或垂直滾動(dòng)條。通過構(gòu)造方法指定滾動(dòng)窗格中的組件。2.
文本區(qū)646.3.3文本顯示和編輯組件3.Swing文本編輯事件(1)文本編輯事件類java.swing.event.CaretEvent
用法:在JTextField、JTextArea中編輯時(shí),將觸發(fā)文本編輯事件CaretEvent,每操作一個(gè)字符,觸發(fā)一次該事件。JTextField和JTextArea組件注冊(cè)文本編輯事件監(jiān)聽器的方法是:publicvoidaddCaretListener(CaretListenerl)
//注冊(cè)文本編輯事件監(jiān)聽器
文本編輯事件監(jiān)聽器接口CaretListener中只有一個(gè)方法
caretUpdate(CaretEvente)。656.3.3文本顯示和編輯組件(2)單擊事件類ActionEvent
在文本行JTextField中,由于只允許輸入一行內(nèi)容,當(dāng)用戶按Enter鍵時(shí),將會(huì)觸發(fā)ActionEvent單擊事件。在文本區(qū)JTextArea中,由于允許輸入多行內(nèi)容,當(dāng)用戶按Enter鍵時(shí),表示將輸入下一行,所以不會(huì)觸發(fā)單擊事件。如果要在文本區(qū)輸入完成后對(duì)內(nèi)容進(jìn)行處理,可添加按鈕,
通過按鈕的單擊事件進(jìn)行處理。3.Swing文本編輯事件666.3.3文本顯示和編輯組件【例6.3】金額的中文大寫形式?!菔疽粋€(gè)圖形用戶界面的完整應(yīng)用程序,包括輸入數(shù)據(jù)、顯示結(jié)果、響應(yīng)事件以及異常處理。輸入一個(gè)實(shí)數(shù)表示金額,每次輸入時(shí)顯示該金額的中文大寫形式。①文本行響應(yīng)文本編輯事件。②處理輸入錯(cuò)誤。③使用對(duì)話框。676.3.3文本顯示和編輯組件4.JSpinner組件及事件javax.swing.JSpinner組件是一種文本行編輯框,它在文本行基礎(chǔ)上提供一對(duì)向上向下的箭頭按鈕,用于微調(diào)輸入值。publicclassJSpinnerextendsponentimplementsAccessible{publicJSpinner()publicObjectgetValue()//獲得值publicvoidsetValue(Objectvalue)//設(shè)置值publicvoidaddChangeListener(ChangeListenerI)publicvoidremoveChangeListener(ChangeListener)}686.3.3文本顯示和編輯組件4.JSpinner組件及事件JSpinner響應(yīng)javax.swing.event.ChangeEvent事件,在JSpinner文本行中輸入后按Enter鍵,或單擊向上向下箭頭按鈕,均觸發(fā)ChangeEvent事件,相應(yīng)的事件監(jiān)聽器接口聲明如下:publicinterfaceChangeListenerextendsjava.util.EventListener{publicvoidstateChanged(ChangeEvente);}696.3.4按鈕組件javax.swing.AbstractButton
抽象按鈕類javax.swing.JButton
按鈕類javax.swing.JCheckBox
復(fù)選框類javax.swing.JRadioButton
單選按鈕類JButton是普通按鈕組件,它不是繼承java.awt.Button類,與Button用法一樣,但JButton按鈕表面可以帶圖標(biāo),而
Button按鈕不可以。706.3.4按鈕組件單項(xiàng)選擇:一組數(shù)據(jù)項(xiàng)中的各個(gè)數(shù)據(jù)項(xiàng)之間有聯(lián)系,任何時(shí)刻最多只有一個(gè)數(shù)據(jù)項(xiàng)被“選中”。一旦重新選擇了一個(gè)數(shù)據(jù)項(xiàng),則先前被選中的數(shù)據(jù)項(xiàng)隨機(jī)自動(dòng)變?yōu)?/p>
“不選中”狀態(tài)。多項(xiàng)選擇:一組數(shù)據(jù)項(xiàng)中的各個(gè)數(shù)據(jù)項(xiàng)之間沒有聯(lián)系,一個(gè)數(shù)據(jù)項(xiàng)的選中與否的狀態(tài)不會(huì)影響到其他數(shù)據(jù)項(xiàng)的選擇狀態(tài)。Swing組件使用復(fù)選框JCheckBox實(shí)現(xiàn)多項(xiàng)選擇;使用單選按鈕JRadioButton與按鈕組類ButtonGroup共同
實(shí)現(xiàn)單項(xiàng)選擇。716.3.4按鈕組件1.
復(fù)選框(JCheckBox)——一個(gè)帶標(biāo)簽的方框□,方框中打勾表示選中,不打代表沒有選中,單擊可以改變狀態(tài)。publicclassJCheckBoxextendsJToggleButtonimplementsAccessible{publicJCheckBox()
publicJCheckBox(Stringtext)
//text指定標(biāo)簽publicJCheckBox(Stringtext,booleanselected)
//selected指定初始狀態(tài)}selected取值為true時(shí),為選中狀態(tài);取值為false時(shí),則為不選中狀態(tài),默認(rèn)值為false。726.3.4按鈕組件1.
復(fù)選框(JCheckBox)JCheckbox復(fù)選框?qū)崿F(xiàn)多項(xiàng)選擇,即一組數(shù)據(jù)項(xiàng)中的各項(xiàng)之間沒有聯(lián)系,一個(gè)數(shù)據(jù)項(xiàng)選中與否的狀態(tài)不會(huì)影響到其他數(shù)據(jù)項(xiàng)的狀態(tài)。一個(gè)容器能夠容納多個(gè)復(fù)選框,多個(gè)復(fù)選框同時(shí)被選中,每個(gè)復(fù)選框選中與否的狀態(tài)改變,不影響其他復(fù)選框的狀態(tài)。736.3.4按鈕組件publicclassJRadioButtonextendsJToggleButtonimplementsAccessible{
publicJRadioButton()publicJRadioButton(Stringtext)publicJRadioButton(Stringtext,booleanselected)
}
2.
單選按鈕(JRadioButton)JRadioButton單選按鈕表現(xiàn)為一個(gè)帶標(biāo)簽的圓框○,
⊙表示選中,○表示沒選中,單擊可改變狀態(tài)。746.3.4按鈕組件2.
單選按鈕(JRadioButton)JRadioButton用來(lái)實(shí)現(xiàn)單項(xiàng)選擇,即一組數(shù)據(jù)項(xiàng)中的各項(xiàng)之間有聯(lián)系,任何時(shí)刻最多只有一個(gè)數(shù)據(jù)項(xiàng)被選中。一旦重新選擇了一個(gè)數(shù)據(jù)項(xiàng),則先前被選中的數(shù)據(jù)項(xiàng)隨即自動(dòng)變?yōu)椤安贿x中”狀態(tài)。判斷多個(gè)單選按鈕是否同組的依據(jù)是:是否被包含在同一個(gè)邏輯意義的按鈕組中,只有在同一個(gè)按鈕組中的多個(gè)單選按鈕的選中狀態(tài)才是互斥的。單項(xiàng)選擇需要由JRadioButton單選按鈕類和ButtonGroup按鈕組類共同實(shí)現(xiàn),多個(gè)單選按鈕不僅要添加到同一個(gè)容器中,還要包含在同一個(gè)ButtonGroup按鈕組中。756.3.4按鈕組件publicclassButtonGroupextendsObjectimplementsSerializable
//按鈕組類{
publicButtonGroup()
publicvoidadd(AbstractButtonb)
//添加按鈕
publicvoidremove(AbstractButtonb)}ButtonGroup是javax.swing包中的類,不是組件類,調(diào)用add()方法可以將一個(gè)按鈕添加到當(dāng)前按鈕組中。2.
單選按鈕(JRadioButton)766.3.4按鈕組件3.
抽象按鈕類AbstractButtonpublicabstractclassAbstractButtonextendsponentimplementsItemSelectable,SwingConstants{publicStringgetText()//獲得按鈕標(biāo)題publicvoidsetText(Stringtext)//獲得按鈕標(biāo)題publicbooleanisSelected()//返回是否選中狀態(tài)publicvoidsetSelected(booleanb)//設(shè)置是否選中狀態(tài)publicvoidsetEnabled(booleanb)//設(shè)置是否有效狀態(tài)publicObject[]getSelectedObjects()//返回選中對(duì)象數(shù)組776.3.4按鈕組件
publicvoidaddActionListener(ActionListenerl)
//注冊(cè)單擊事件監(jiān)聽器
publicvoidremoveActionListener(ActionListenerl)
//取消單擊事件監(jiān)聽器}3.
抽象按鈕類AbstractButtonAbstractButton的3種按
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保設(shè)施消防系統(tǒng)升級(jí)合同
- 二零二五年海鮮餐廳餐飲承包管理合同3篇
- 研學(xué)旅游市場(chǎng)潛力分析-洞察分析
- 玉米病蟲害生物源農(nóng)藥開發(fā)-洞察分析
- 羽絨制品阻燃助劑研究-洞察分析
- 委托代理招聘協(xié)議書范文
- 股權(quán)融資合作協(xié)議
- 20KW并網(wǎng)光伏發(fā)電系統(tǒng)逆變器技術(shù)規(guī)范
- 機(jī)械設(shè)計(jì)師工作總結(jié)設(shè)計(jì)創(chuàng)新機(jī)械產(chǎn)品提升生產(chǎn)效率
- 瑜伽與冥想行業(yè)供應(yīng)鏈管理-洞察分析
- 洞悉現(xiàn)狀 明確方向-初三上期末家長(zhǎng)會(huì)
- 質(zhì)控護(hù)理管理制度內(nèi)容
- 幼兒園幼教集團(tuán)2025學(xué)年第二學(xué)期工作計(jì)劃
- 2024年考研管理類綜合能力(199)真題及解析完整版
- 六年級(jí)下冊(cè)【默寫表】(牛津上海版、深圳版)(英譯漢)
- 寵物入住酒店免責(zé)協(xié)議
- 2022年滬教版(全國(guó))九年級(jí)化學(xué)下冊(cè)第6章溶解現(xiàn)象章節(jié)測(cè)試試卷(精選含答案)
- 河南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 醫(yī)院患者滿意度調(diào)查分析報(bào)告
- 九年級(jí)上期末考試語(yǔ)文質(zhì)量分析報(bào)告
- 五年級(jí)英語(yǔ)名詞冠詞人稱代詞和物主代詞練習(xí)題
評(píng)論
0/150
提交評(píng)論