java課程總結(jié)第11章圖形用戶界面設(shè)計_第1頁
java課程總結(jié)第11章圖形用戶界面設(shè)計_第2頁
java課程總結(jié)第11章圖形用戶界面設(shè)計_第3頁
java課程總結(jié)第11章圖形用戶界面設(shè)計_第4頁
java課程總結(jié)第11章圖形用戶界面設(shè)計_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第十一章

圖形用戶界面設(shè)計

圖形用戶界面設(shè)計

Mll.lAWT組件概述

a11.2布局管理

a11.3事件處理

11.1AWT組件概述

早期的JDK版本中提供了Java抽象窗

口工具集(AbstractWindowToolkit,AWT),

其目的是為程序員創(chuàng)建圖形用戶界面提供

支持。AWT組件定義在java.awt包中,包

括組件類、組件布局類等。

Java.awt的繼承關(guān)系

1.組件

組件(component)是構(gòu)成圖形用戶

界面的基本成分和核心元素。組件類

(Component)是一個抽象類,是AWT組

件類層次結(jié)構(gòu)的根類,實際使用的組件都

是Component類的子類。Component類提

供對組件操作的通用方法,包括設(shè)置組件

位置、設(shè)置組件大小、設(shè)置組件字體、響

應(yīng)鼠標或鍵盤事件、組件重繪等。

2.容器

容器(container)是一種特殊組件,

它能容納其他組件。它在可視區(qū)域內(nèi)顯示

其它組件。容器是組件,在容器之中還可

以放置其它容器,可以使用多層容器構(gòu)成

富于變化的界面。

3.窗口與面板

容器有2種:窗口(window)和面板

(panel)。

窗口可獨立存在,可被移動,也可被最大化

和最小化,有標題欄、邊框,可添加菜單欄。

面板不能獨立存在,必須包含在另一個容器中。

面板沒有標題,沒有邊框,不可添加菜單欄。

一個窗口可以包含多個面板,一個面板也可以包

含另一個面板,但面板不能包含窗口。

窗口類Window和面板類Panel都是容器類

Container的子類。

4.框架與對話框

窗口類Window主要有2個子類:框架

類(Frame)和對話框類(Dialog)。

框架(Frame)

?框架(frame)是一種帶標題欄并且可

以改變大小的窗口。

?應(yīng)用程序中,使用框架作為容器,在框

架中放置組件。

?框架類在實例化時默認是最小化的、不

可見的,必須通過setSize()方法設(shè)置框

架大小,通過setVisible(true)方法使框

架可見。

Frame的構(gòu)造方法

Frame類的構(gòu)造方法主要功能

Frame()創(chuàng)建沒有標題的窗口

Frame(Stringtitle)創(chuàng)建以title為標題的窗口

Frame的成員方法

Frame類的成員方法主要功能

intgetState()獲得Frame窗口的狀態(tài)(Frame.Normal表才一,

般狀態(tài),F(xiàn)rame.ICONIFIED表示最小化狀

態(tài))

voidsetState(intstate)設(shè)置Frame囪口的狀態(tài)(Frame.Normal表示一■

般狀態(tài),F(xiàn)rame.ICONIFIED表示最小化狀

態(tài))

StringgetTit!e()獲得Frame窗口的標題

voidsetTitle(Stringtitle)設(shè)置Frame窗口的標題

booleanisResizab!e()測試Frame窗口是否可以改變大小

voidsetResizable(booleanr)設(shè)置Frame窗口是否可.以改變大小

Imagegetlconlmage()返回窗口的最小化圖標

voidsetlconlmage(lmageimg)設(shè)置窗口的最小化圖標為img

對話框(dialog)

?對話框(dialog)也是一種可移動的窗

口,它比框架簡單,沒有太多的控制元

素,如最大化按鈕、狀態(tài)欄等。

?對話框不能作為應(yīng)用程序的主窗口,它

依賴于一個框架窗口而存在,當框架窗

口關(guān)閉時,對話框也關(guān)閉。

?對話框類Dialog的構(gòu)造方法必須聲明對

話框所依賴的框架窗口。

例-創(chuàng)建窗口

importjava.awt.*;

classFrmApp

(

staticFramefra=newFrame("FrmApp");

publicstaticvoidmain(Stringargs[])

(

fra.setSize(250,l50);

fra.setLocation(l00,200);

fra.setVisible(true);

System.out.println(HState:n+fra.getState());

System.out.println(nTitle:n+fra.getTitle());

System.out.println(nVisible:n+fra.isVisible());

}

程序運行時,出現(xiàn)如圖

所示的窗口,并在屏幕

上顯示如下所示的文本

信息:

State:0FrmAp業(yè)區(qū)

Title:FrmApp

Visible:true

5.標簽

標簽類(Label)組件用于顯示一行文

本信息。標簽只能顯示信息,不能用于輸

入。

Label的構(gòu)造方法

Label類的構(gòu)造方法主要功能

Label()創(chuàng)建1個沒有標題的標簽

Label(Stringstr)創(chuàng)建1個以str為標題的標簽

Label(Stringstr,int創(chuàng)建1個以str為標題的標簽,并以

align)align為對齊方式,其中

LabeLLEFT>LabeLCENTER>

LabeLRIGHT分別為居左、居中

和居右

Label的成員方法

Label類的成員方法主要功能

intgetAlignment()返回標簽標題的對齊方式

VoidsetAlignment(intalign)設(shè)置標簽標題的對齊方式

StringgetText()獲得標簽標題

VoidsetText(Stringtext)設(shè)置標簽標題為text

例-在窗口中建立1個標簽

importjava.awt.*;

classLabApp

(

publicstaticvoidmain(Stringargs[])

(

Framefra=newFrame(nLabAppn);

Labellab=newLabel();〃創(chuàng)建1個空標簽

fra.setSize(250,150);

lab.setText(nThisisalabel");〃為標簽添加標題

lab.setAlignment(Label.CENTER);

lab.setBackground(Color.white);〃引用Component類的方法設(shè)置標

簽背景顏色

lab.setForeground(Color.black);〃引用Component類的方

法設(shè)置標簽標題顏色

Fontfht=newFont(nSerief\Font.ITALIC+Font.BOLD,22);

lab.setFont(fht);

fra.add(lab);

fra.setVisible(true);

程序運行時,出現(xiàn)如圖所示的窗口。

展LabApp-|n|x|

Thisisalabel

6.按鈕

按鈕是最常見的一種組件,用來控制

程序運行的方向。用戶單擊按鈕時,計算

機將執(zhí)行一系列命令,完成一定的功能。

按鈕通過java.awt包的Button類創(chuàng)建。

Button的構(gòu)造方法

Button類的構(gòu)造方法主要功能

Button()創(chuàng)建一個沒有標題的按鈕

Button(Stringstr)創(chuàng)建一個以str為標題的按鈕

java.awtButton的方法

Button類的成員方法主要功能

StringgetLabel()獲得按鈕的標題

VoidsetLabel(Stringstr)設(shè)置按鈕的標題為str

例-在窗口中建立一個按鈕

importjava.awt.*;

classButtapp

(

publicstaticvoidmain(Stringargs[])

(

Framefra=newFrame(nButtAppn);

fra.setSize(250,170);

fra.setLayout(null);〃關(guān)閉頁面設(shè)置

Buttonbutt=newButton("clickn);

butt.setSize(100,50);

butt.setLocation(75,60);

fra.add(butt);

fra.setVisible(true);}

程序運行時,出現(xiàn)如圖所示的窗口。

AButtAppJnlxl

7.文本編輯組件

文本編輯組件有文本行和文本區(qū)。

文本行是一個單行文本編輯框,用于

輸入一行文字。文本行由java.awt包中的

TextField類來創(chuàng)建。

TextField的構(gòu)造方法

TextField類的構(gòu)造方法主要功能

TextField()創(chuàng)建空的文本行

TextField(intcolumns)創(chuàng)建空的文本行,具有指定列數(shù)

TextField(Stringtext)創(chuàng)建文本為text的文本行

TextField(Stringtext,intculumns)創(chuàng)建具有指定列數(shù)、文本為text的文本行

TextField的成員方法

TextField類的成員方法主要功能

StringgetText()獲得文本行的文本

intgetColumns()獲得文本行的列數(shù)

voidsetText(Stringtext)設(shè)置文本行的文本為text

voidsetColumns(intcolumns)設(shè)置文本行的列數(shù)

例—創(chuàng)建文本行

importjava.awt.*;

classTextApp

(

publicstaticvoidmain(Stringargs[])

(

Framefra=newFrame("文本框程序”);

TextFieldtxtl=newTextField(50);

TextFieldtxt2=newTextField,TextField1',50);

fra.setBounds(0,0,300,200);

fra.setLayout(null);

txtl.setBounds(50,50,130,20);〃設(shè)置文本框的大小

txt2.setBounds(50,100,130,30);

fra.add(txtl);fra.add(txt2);

fra.setVisible(true);}

程序運行時,出現(xiàn)如圖所示的窗口。

&文本框程序

P

llextField

1L2布局管理

Java提供了多種風格和特點的布局管

理器,每一種布局管理器指定一種組件相

對位置和大小布局。布局管理器是容器類

所具有的特性,每種容器都有一種默認的

布局管理器。

11.2布局管理

在java.awt包中共提供了5個布局管理器類:

>FlowLayout

>BorderLayout

>CardLayout

>GridLayout

>GridBagLayout

每個類都是java.lang.Object類的子類。

11.2.1BorderLayout類

BorderLayout(邊布局)的布局策略

是把容器內(nèi)的空間劃分為東、西、南、北、

中5個區(qū)域,這5個區(qū)域分別用英義的East、

West、South、North、Center表示。向容

器中加入每個組件都要指明它放在容器的

哪個區(qū)域。如果某個區(qū)域沒有分配組件,

則其他組件可以占據(jù)它的空間。

BorderLayout類的構(gòu)造方法

BorderLayout類的構(gòu)造方法功能說明

BorderLayout()創(chuàng)建新的

BorderLayout布局

BorderLayout(inthgap,intvgap)創(chuàng)建組件之間水平和

垂直間距分別為

hgap和vgap的

BorderLayout布局

例--應(yīng)用BorderLayout布局

在窗口中加入5個按鈕,采用BorderLayout布局。

importjava.awt.*;

classBorLay

(

publicstaticvoidmain(Stringargs[])

(

Framefrm=newFrame,BorderLayout");

BorderLayoutlayout=newBorderLayout(5,7);

frm.setBounds(0,0,300,200);

frm.setLayout(layout);

ButtonbutN,butS,butW,butE,butC;

butN=newButton(nnorthbutton*1);

butS=newButton("southbutton");

butW=newButton(nwestbutton");

butE=newButton,eastbutton");

butC=newButton(ncenterbutton");

frm.add(butN,BorderLayout.NORTH);

frm.add(butS,BorderLayout.SOUTH);

frm.add(butW,BorderLayout.WEST);

frm.add(butE,BorderLayout.EAST);

frm.add(butC,BorderLayout.CENTER);

frm.setVisible(true);

程序運行結(jié)果如圖所示。

11.2.2FlowLayout

FlowLayout(流式布局)的布局策略

提供按行布局組件方式,將組件按照加入

的先后順序從左向右排列,當一行排滿之

后轉(zhuǎn)到下一行繼續(xù)按照從左向右的順序排

列。組件保持自己的尺寸,一行能容納的

組件的數(shù)目隨容器的寬度變化。

FlowLayout類的構(gòu)造方法

FlowLayout類的構(gòu)造方法功能說明

FlowLayout()創(chuàng)建FlowLayout布局,組件使用缺省的居中對

齊方式,各組件的垂直與水平間距都是5個

像素。

FlowLayout(intalign)創(chuàng)建FlowLayout布局,組件使用align指定的對

齊方式,各組件的垂直與水平間距都是5個

像素。align的取值可以是

FlowLayout.LEFT、FlowLayout.CENTER

和FlowLayout.RIGHT,分別代表罪左、居

中和靠右對齊。

FlowLayout(intalign,int創(chuàng)建FlowLayout布局,組件使用align指定的對

hgap,intvgap)齊方式,各組件的垂直與水平間距分別為

hgap和vgap。

例--使用FlowLayoutW局

importjava.awt.*;

importjavax.swing.*;

publicclassFlowLay

(

publicstaticvoidmain(Stringargs[])

(

Framefrm=newFrame(MBorderLayoutn);

FlowLayoutlayout=newFlowLayout();

frm.setBounds(0,0,200,200);

frm.setLayout(layout);

Buttonbutl,but2;

TextFieldtxtl,txt2;

butl=newButton(Mbutton1");

but2=newButton(nbutton2n);

txtl=newTextField(ntextlM,10);

txt2=newTextField,text2”,10);

frm.add(butl);

frm.add(but2);

frm.add(txtl);

frm.add(txt2);

firm,setVisible(true);

運行程序出現(xiàn)如圖所示的界面:

&BorderLayoutJnJx]

[button1^1button2textItext2

%a?a■?*???■??(???*?????i^?|

初始界面增大窗口寬度后的界面

11.2.3GridLayout

GridLayout(網(wǎng)格布局)管理器將容

器劃分為大小相等的若干行乘若干列的網(wǎng)

格,組件按照從左到右、從上到下的的順

序依此放入各網(wǎng)格中。每個組件占滿1格。

組件大小隨網(wǎng)格大小變化。如果組件數(shù)比

網(wǎng)格數(shù)多,系統(tǒng)將自動增加網(wǎng)格數(shù);如果

組件數(shù)比網(wǎng)格數(shù)少,未用的網(wǎng)格區(qū)空閑。

GridLayout類的構(gòu)造方法

GridLayout類構(gòu)造方法功能說明

GridLayout()創(chuàng)建具有1行1歹U的GridLayout布局。

GridLayout(introws,intcols)創(chuàng)建具有rows行和cols列的

GridLayout布局。

GridLayout(introws,intcols,創(chuàng)建具有rows行和cols列的

inthgap,intvgap)GridLayout(GridLayout)布局,

組件的行間距和列間距分別是

hgap和vgap像素。

例-使用GridLayout布局

importjava.awt.*;

publicclassGridLay

(

publicstaticvoidmain(Stringargs[])

(

Framefrm=newFrame(nGridLayouf*);

GridLayoutlayout=newGridLayout(2,2);〃定義2行2歹U的GridLayout

frm.setBounds(0,0,200,200);

frm.setLayout(layout);

Stringnames[]={nbutt1M,nbutt2M,nbutt3n,Mbutt4n);

fdr(inti=0;i<names.length;i++)

(

frm.add(newButton(names[i]));

)

frm.setVisible(true);

運行程序出現(xiàn)如圖所示的界面。

11.3事件處理

11.3.1委托事件模型

JDK1.1之后采用委托事件模型

(delegationeventmodel)。

1.事件

事件(event)是指一個狀態(tài)的改變,

或者一個動作的發(fā)生。例如,單擊一個按

鈕,將產(chǎn)生單擊事件;單擊窗口關(guān)閉按鈕,

產(chǎn)生窗口關(guān)閉事件。

2.事件類

在Java中,用不同的類處理不同的事

件。在java.awt.event包中定義了許多事件

類,如單擊事件類(ActionEvent)和窗口

事件類(WindowEvent)。

3.事件源

事件由用戶操作組件產(chǎn)生,被操作的

組件稱為事件源。

例如,用戶單擊一個按鈕,產(chǎn)生單擊

事件,按鈕則是事件源;用戶單擊窗口關(guān)

閉按鈕,產(chǎn)生窗口關(guān)閉事件,窗口組件是

事件源。

4.事件監(jiān)聽器

在圖形界面程序中,不僅需要創(chuàng)建組

件,而且還需指定組件所能響應(yīng)的事件,

以及該事件發(fā)生時需要執(zhí)行的動作(語句

序列)。

4.事件監(jiān)聽器

一個組件能響應(yīng)哪些事件,響應(yīng)事

件后需執(zhí)行的語句序列存放在什么位置,

這些功能由事件監(jiān)聽器負責。為了實現(xiàn)

此功能,在開發(fā)程序時,用戶需要做以

下2件事:

>向事件源注冊事件監(jiān)聽器

>實現(xiàn)事件處理方法

5.事件運作流程

按照委托事件模型,事件運作流程如下:

?在程序中,實現(xiàn)事件監(jiān)聽器接口(實現(xiàn)接口

中聲明的所有抽象方法),向事件源注冊事

件監(jiān)聽器;

?型手運行k程中,用戶在事件源上引發(fā)某種

事件(執(zhí)行某種操作)時,Java產(chǎn)生事件對

象;

?事在源將事件對象傳遞給事件監(jiān)聽器;

事件監(jiān)聽器根據(jù)事件對象的種類,調(diào)用相應(yīng)

的事件處理方法進行事件處理。

6.確定事件監(jiān)聽器

在編寫事件處理的程序代碼時,首先

必須確定事件源與事件監(jiān)聽器。事件源的

選擇通常比較容易。事件監(jiān)聽器必須是實

現(xiàn)事件監(jiān)聽器接口的類對象。

7.編寫事件處理程序代碼

在事件處理程序中,必須實現(xiàn)事件監(jiān)

聽器接口中聲明的事件處理方法。事件處

理方法以事件對象作為參數(shù)。當事件源上

發(fā)生事件時,產(chǎn)生的事件對象將以參數(shù)形

式傳遞給事件處理方法。在事件處理方法

中,可以訪問事件對象的成員。

例-處理按鈕單擊事件

創(chuàng)建一個窗口程序類,當用戶單擊窗口中的按鈕時,將窗口的背景設(shè)

置為紅色。

importjava.awt.*;

importjava.awt.event.*;

classButtEventAppextendsFrameimplementsActionListener

{

staticButtEventAppfrm=newButtEventAppQ;

publicstaticvoidmain(Stringargs[])

frm.setTitle(MButtEventAppn);

frm.setSize(300,l60);

frm.setLayout(null);

Buttonbtn;

btn=newButton(npushn);

btn.setBounds(120,80,60,30);

btn.addActionListener(frm);

firm.add(btn,BorderLayout.CENTER);

frm.setVisible(true);

)

publicvoidactionPerfbrmed(ActionEvente)

frm.setBackground(Color.red);

例-利用內(nèi)部類處理按鈕單擊事件

內(nèi)部類是在其它類的內(nèi)部聲明的類,包含內(nèi)部類的類稱為外部類,

此時內(nèi)部類成為外部類的成員,內(nèi)部類具有成員的4種訪問權(quán)限,也

可以聲明為static。

本例程序的功能與上例相同,程序代碼不同之處是采用內(nèi)部類對

象作為事件監(jiān)聽器。

importjava.awt.*;

importjava.awt.event.*;

classInnClassEvent

staticFramefrm=newFrameQ;

publicstaticvoidmain(Stringargs[])

frm.setTitle(nButtEventAppn);

frm.setSize(300,l60);

frm.setLayout(null);

Buttonbtn;

btn=newButton(npushn);

btn.setBounds(l20,80,60,30);

btn.addActionListener(newInnCla());

frm.add(btn,BorderLayout.CENTER);

frm.setVisible(true);

staticclassInnClaimplementsActionListener

publicvoidactionPerfbrmed(ActionEvente)

frm.setBackground(Color.red);

11.3.2事件類和監(jiān)聽器接口

1.事件類

Java定義的多數(shù)事件類在

java.awt.event包中。AWTEvent類是所有

事件類的祖先類,它又繼承了

java.util.EventObject類,而EventObject類

又繼承了java.lang.Object類

Java.awt.event的繼承關(guān)系圖

2.事件監(jiān)聽器接口

Java中的每個事件類都有一個監(jiān)聽器

接口,接口中聲明了一個或多個抽象的事

件處理方法。如果一個類實現(xiàn)事件監(jiān)聽器

接口,其對象就可以作為對應(yīng)事件的監(jiān)聽

器,具備監(jiān)視和處理事件的能力。

事件監(jiān)聽器接口和事件監(jiān)聽器接口中的方法

事件類監(jiān)聽器接口監(jiān)聽器接口所提供的事件處理方法

ActionEventActionListeneractionPerformed(ActionEvente)

AdjustmentEventAdjustmentListeneradjustmentValueChange(AdjustmentEvente)

ItemEventItemListeneritemStateChange(ItemEvente)

KeyEventKeyListenerkeyTyped(KeyEvente)

keyPresscd(KeyEvente)

keyReleased(KeyEvente)

MouseEventMouseListenermouseClicked(MouseEvente)

mouseEntered(MouseEvente)

mouseExited(MouseEvente)

mousePressed(MouseEvente)

mouseReleased(MouseEvente)

mouseDragged(MouseEvente)

mouseMoved(MouseEvente)

TextEventTextListenertextValueChange(TextEvente)

WindovvEventWindowListenerwindowActivated(WindowEvente)

windowClosed(WindowEvente)

windowCIosing(WindowEvente)

windovvDeactivated(WindowEvente)

windowDeiconifieded(WindowEvente)

windowIconfied(WindowEvente)

windowOpened(WindowEvente)

AWT中組件和可觸發(fā)的事件類

組件類產(chǎn)生的事件類

ButtonActionEvent

CheckBoxActionEvent>Itemevent

ComponentComponentEvent>FocusEvent>KeyEvent、

MouseEvent

MenuitemActionEvent

ScrollbarAdjustmentEvent

TextAreaActionEvent

TextFieldActionEvent

WindowWindowEvent

3.事件適配器類

?Java提供了一種簡便辦法,為包含多個

事件處理方法的每個事件監(jiān)聽器接口提

供了一個抽象類,稱為適配器(adapt)

類,類名帶有Adapter標記。

?每個適配器類實現(xiàn)一個事件監(jiān)聽器接口,

用空方法體實現(xiàn)該接口中的每個抽象方

法。

例如,WindowAdapter類實現(xiàn)

WindowListener接口,而空方法體實現(xiàn)

WindowListener接口中聲響的以下方法:

windowClosing(WindowEvente)

windowClosed(WindowEvente)

windowOpened(WindowEvente)

windowActivated(WindowEvente)

windowDeactivated(WindowEvente)

windowIconified(WindowEvente)

windowDeiconified(WindowEvente)

監(jiān)聽器接口與對應(yīng)的適配器類

監(jiān)聽器接口適配器類

ComponemtListenerComponentAdapter

ContainerListenerContainerAdapter

FocusListenerFocusAdapter

KeyListenerKeyAdapter

MouseListenerMouseAdapter

MouseMotionListenerMouseMotionAdapter

WindowListenerWindowAdapter

4.注冊事件監(jiān)聽器的方法

組件類注冊撤消事件監(jiān)聽器的方法

ButtonpublicvoidaddActionListener(ActionListener1)

publicvoidremoveActionListener(ActionListener1)

ComponentpublicvoidaddKeyListener(KeyListenerI)

publicvoidremoveKeyListener(KeyListener1)

publicvoidaddMouseListener(MouseListener1)

publicvoidremoveMouseListener(MouseListener1)

publicvoidaddMouseMotionListener(MouseMotionListener1)

publicvoidremoveMouseMotionListener(MouseMotionListener1)

MenuitempublicvoidaddActionListener(ActionListener1)

publicvoidremoveActionListener(ActionListener1)

TextAreapublicvoidaddActionListener(ActionListener1)

publicvoidremoveActionListener(ActionListener1)

TextFieldpublicvoidaddActionListener(ActionListener1)

publicvoidremoveActionListener(ActionListener1)

WindowpublicvoidaddWindowListener(WindowListener1)

11.3.3處理ActionEvent事件

當用戶單擊按鈕(Button)>選擇列

表框(List)選項、選擇菜單項

(Menuitem),或是在文本行(TextField)

輸入文字并按下Enter鍵,便觸發(fā)動作事件

(ActionEvent),觸發(fā)事件的組件將

ActionEvent類的對象傳遞給事件監(jiān)聽器,

事件監(jiān)聽器負責執(zhí)行actionPerformed。方

法進行相應(yīng)的事件處理。

11.3.3處理ActionEvent事件

ActionEvent類繼承了EventObject類

的一個常用的方法getSource(),其功能是

返回事件源(對象)名。ActionEvent類本

身還定義了一些成員,如

getActionCommand(),其功能是返回事件

源的字符串信息。

例--處理ActionEvent事件

編程實現(xiàn):窗口中有標題為buttonl和button2的2個

按鈕和1個標簽,當單擊任一按鈕時,標簽顯示該

按鈕的標題。

importjava.awt.*;

importjava.awt.event.*;

classActEventextendsFrameimplementsActionListener

staticActEventfrm=newActEvent();

staticButtonbtnl,btn2;

staticLabelIbl;

publicstaticvoidmain(Stringargs[])

frm.setTitle(nActionEventn);

frm.setSize(240,160);

frm.setLayout(newFlowLayoutQ);

btnl=newButton(Mbutton1n);

btn2=newButton,button2");

lbl=newLabel,noclicking");

btnl.addActionListener(frm);

btn2.addActionListener(frm);

frm.add(btnl);

frm.add(btn2);

frm.add(lbl);

frm.setVisible(true);

publicvoidactionPerformed(ActionEvente)

if(e.getSource()==btn1)

lbl.setText("button1clicked");

else

lbl.setText("button2clicked");

運行程序,出現(xiàn)如圖所示的界面。

式ActionEven-la|x|&ActionEvenJn]xjaActionEventJnJxJ

e*?????*??????>?????????????<I

:button1Hbutton2jbutton1:button2button2H

H???..,“..??.?,"?.????““???I

noclickingbutton1clickedbutton2clicked

(a)初始界面(b)單擊第1個按鈕后的界面(c)單擊第2個按鈕后的界面

11.3.4處理ItemEvent事件

當窗口中的選項組件Checkbox(選擇框)和

List(列表框)等被選擇時,發(fā)生選項事件

(itemevent)。

Java用ItemEvent類處理選項事件。

ItemEvent類事件的監(jiān)聽器必須實現(xiàn)ItemListener

接口,實現(xiàn)其中聲明的itemStsteChanged。方法:

publicvoiditemStateChanged(ItemEvente)

程序運行過程中,當用戶選擇選項組件時,

該方法被執(zhí)行。

例--處理ItemEvent事件

編程實現(xiàn):窗口中有標題為green和yellow的2個單

選按鈕和1個文本行,當選擇任一單選按鈕時,文

本行中顯示該單選按鈕的標題。

importjava.awt.*;

importjava.awt.event.

classIteEventextendsFrameimplementsItemListener

(

staticIteEventfrm=newIteEvent();

staticCheckboxchbl,chb2;

staticTextFieldtxtl;

publicstaticvoidmain(Stringargs[])

(

frm.setTitle("ItemEventn);

frm.setSize(240,l60);

firm.setLayout(newFlowLayoutQ);

CheckboxGroupgrp=newCheckboxGroupQ;

chbl=newCheckbox(ngreenn);

chb2=newCheckbox(nyellown);

txtl=newTextField(nNoneisselected");

chb1.setCheckboxGroup(grp);

chb2.setCheckboxGroup(grp);

chb1.addltemListener(frm);

chb2.addltemListener(frm);

frm.add(chbl);frm.add(chb2);

frm.add(txtl);frm.setVisible(true);

publicvoiditemStateChanged(ItemEvente)

(

if(e.getSource()=chb1)

txt1.setText(ngreenisselected");

else

if(e.getSource()=chb2)

txtl.setText(nyellowisselected");

運行程序,出現(xiàn)如圖所示的界面。

ItemEven1-|n|x|ItemEven二Jnl兇&ItemEven-|g|x|

rjgreen^「yellowjgreem廠yellow「green[yellow^

Noneisselectedgreenisselectedyellowisselected

(a)初始界面(b)單擊green后的界面⑹單擊yellow后的界面

11.3.5處理TextEvent事件

當TextField或TextArea組件中的文本改變時,

觸發(fā)文本事件(TextEvent),Java^TextEvent

類處理該事件。

TextEvent類事件的監(jiān)聽器必須實現(xiàn)

TextListener接口,實現(xiàn)其中聲明的

textValueChanged。方法:

publicvoidtextValueChanged(TextEvente)

程序運行過程中,當TextField或TextArea

組件中文本改變時,該方法被執(zhí)行。

例一處理TextEvent事件

編程實現(xiàn):窗口中有2個文本行,當向上面的

文本行輸入文本時,下面文本行中同時顯示

所輸入的文本。

importjava.awt.*;

importjava.awt.event.*;

classTexEventextendsFrameimplementsTextListener

(

staticTexEventfrm=newTexEvent();

staticTextFieldtxtl,txt2;

publicstaticvoidmain(Stringargs[])

{firm.setTitle(nTextEventn);

frm.setSize(240,l60);

frm.setLayout(newFlowLayoutQ);

txtl=newTextField(20);

txt2=newTextField(20);

txt1.addTextListener(firm);

frm.add(txtl);

txt2.setEditable(false);

frm.add(txtl);

frm.add(txt2);

frm.setVisible(true);

publicvoidtextValueChanged(TextEvente)

(

txt2.setText(txtl.getTextQ);

諄運行程序,出現(xiàn)如圖所示的界面。

(a)初始界面(b)在第1個文本行輸入文本時的界面

11.3.6處理KeyEvent事件

當按下鍵盤中的任一鍵時,將觸發(fā)鍵

盤事件(keyevent),Java用KeyEvent類

處理該事件。

KeyEvent類的成員方法

成員方法功能

chargetChar()返回按下的字符

chargetCharCode()返回按下字符的代碼

publicboolean判別按下的鍵是否是Action

isActionKeyOKeyoActionKey包括方向

鍵、PgUp、PgDn、

Fl?F12等鍵。

KeyListener接口的成員方法

KeyListener接口的功能

成員方法

voidkeyPressed()對應(yīng)鍵被按下事件,鍵被按下時調(diào)

用該方法

voidkeyReleased()對應(yīng)鍵被釋放事件,鍵被釋放時調(diào)

用該方法

voidkeyTypedQ對應(yīng)鍵入字符事件,鍵入字符時調(diào)

用該方法。按下并釋放一個字符

鍵時調(diào)用該方法,但鍵入Action

Key時,不調(diào)用該方法。

例一處理TextEvent事件

編程實現(xiàn):窗口中有1個文本行和1個文本區(qū),當按下某字符時,

在文本行中顯示該字符;當鍵被按下事件發(fā)生時,在文本區(qū)顯示被

按下的字符;當鍵被釋放事件發(fā)生時,在文本區(qū)顯示被釋放的字符;

當鍵入字符事件發(fā)生時,在文本區(qū)顯示被輸入的字符。

importjava.awt.*;

importjava.awt.event.*;

publicclassKeysEventextendsFrameimplementsKeyListener

{staticKeysEventfrm=newKeysEvent();

staticTextFieldtxf;

staticTextAreatxa;

publicstaticvoidmain(Stringargs[])

frm.setTitle(nKeyEventn);frm.setSize(240,200);

frm.setLayout(newFlowLayout());

txf=newTextField(20);txa=newTextArea(6,20);

txa.setEditable(false);

txf.addKeyListener(frm);

firm.add(txf);firm.add(txa);

frm.setVisible(true);

publicvoidkeyPressed(KeyEvente)

{txa.setText(nn);

txa.append(e.getKeyChar()+nispressed!\nn);

)

publicvoidkeyReleased(KeyEvente)

{txa.append(e.getKeyChar()+nisreleased!\nn);

publicvoidkeyTyped(KeyEvente)

{txa.append(e.getKeyChar()+nistyped!\nn);}

運行程序,出現(xiàn)如圖所示的界面:

-1□!x|

F

rispressedl

ristyped!"3

risreleasedl

zJ

(a)初始界面(b)在文本行輸入字符r時的界面

例--利用KeyAdapter類處理TextEvent事件

編程實現(xiàn):窗口中有2個文本行,當鍵入某字符時,在第

1個文本行中顯示該字符,并利用KeyAdapter類處理鍵入

字符事件,在第1個文本行中顯示“xi§entered”,其中x表

示被鍵入的字符。

importjava.awt.*;

importjava.awt.event.*;

publicclassKeysEvent2extendsFrame

staticKeysEvent2frm=newKeysEvent2();

staticTextFieldtxtl,txt2;

publicstaticvoidmain(Stringargs[])

(

frm.setTitle(nKeyEventn);

frm.setSize(240,130);

frm.setLayout(newFlowLayout());

txtl=newTextField(20);txt2=newTextField(20);

txt2.setEditable(false);

txtl.addKeyListener(newKeysAdapter());

frm.add(txtl);

frm.add(txt2);

frm.setVisible(true);

staticclassKeysAdapterextendsKeyAdapter

(

publicvoidkeyTyped(KeyEvente)

(

txt2.setText(e.getKeyChar()+nisentered!");

H運行程序,出現(xiàn)如圖所示的界面。

及KeyEvent-|n|x|

tisentered!

(a)初始界面(b)在第1個文本行輸入字符t時的界面

11.3.7處理MouseEvent事件

當按下鼠標鍵、鼠標指針進入或離開

某二區(qū)域,或者移動、拖動鼠標時,觸發(fā)

鼠標事件(mouseevent)。Java用

MouseEvent類處理該事件。

MouseEvent類中成員方法

MouseEvent類的成員方法功能說明

intgetX()返回鼠標事件發(fā)生點的X坐標

intget¥()返回鼠標事件發(fā)生點的Y坐標

PointgetPoint()返回鼠標事件發(fā)生點的坐標

PointgetClickCount()返回鼠標的點擊次數(shù)

Java提供了MouseListener和

MouseMotionListener接口,用來處理

MouseEvent事件。MouseListener接口用來處理

以下事件:

>鼠標指針進入某一區(qū)域

?按下鼠標鍵

A釋放鼠標鍵

>鼠標單擊(按下和釋放鼠標鍵的整個過程)

>鼠標指針離開某一區(qū)域

MouseListener接口的成員方法

MouseListener接口的成員方法功能說明

voidmoveClicked(MouseEvente)對應(yīng)鼠標單擊事件

voidmoveEntered(MouseEvente)對應(yīng)鼠標進入事件

voidmoveExited(MouseEvente)對應(yīng)鼠標離開事件

voidmovePressed(MouseEvente)對應(yīng)按下鼠標鍵事件

voidmoveReleased(MouseEvente)對應(yīng)釋放鼠標鍵事件

MouseMotionListener接口用來處理以下2

個事件:

>鼠標在某一區(qū)域移動

A鼠標在某一區(qū)域拖動(按下鼠標鍵不放移

動鼠標)

處理這2個事件的監(jiān)聽器必須實現(xiàn)

MouseMotionListener接口

MouseMotionListener接口的成員方法

MouseMotionListener接口的功能說明

成員方法

moveDragged(MouseEvente)對應(yīng)鼠標拖動事件

moveMoved(MouseEvente)對應(yīng)鼠標移動事件

例一利用MouseListener接口處理MouseEvent事件

編程實現(xiàn):窗口中有2個文本區(qū),當鼠標指針進入和離開

第1個文本區(qū)時,在第2個文本區(qū)顯示相應(yīng)信息;當在第1個

文本區(qū)單擊鼠標、按下和釋放鼠標鍵時,分別顯示其事件及

發(fā)生的位置信息。

importjava.awt.*;

importjava.awt.event.*;

publicclassMouEventextendsFrameimplementsMouseListener

staticMouEventfrm=newMouEventQ;

staticTextAreatxal,txa2;

publicstaticvoidmain(Stringargs[])

(

frm.setTitle(nMouEventn);frm.setSize(240,300);

frm.setLayout(newFlowLayout());

txa1=newTextArea(5,30);

txa2=newTextArea(8,30);

txa2.setEditable(false);

txal.addMouseListener(frm);

frm.add(txa1);frm.add(txa2);

frm.setVisible(true);

publicvoidmouseEntered(MouseEvente)〃鼠標進入事件處理

(

txa2.setText(nMouseenterstxal\nn);

}_

publicvoidmouseClicked(MouseEvente)〃鼠標單擊事件處理

(

txa2.append(nMouseis

diskedat[n+e.getX()+n,n+e.get¥()+n]\nn);

}

publicvoidmousePressed(MouseEvente)〃鼠標按鍵事件處理

txa2.append(nMouseispressedat[n+e.getX()+n,n+e.getY()+n]\nn);

publicvoidmouseReleased(MouseEvente)〃鼠標鍵釋放事件處理

(

txa2.append(nMouseisreleasedat[n+e.getX()+n,n+e.getY()+n]\nn);

}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論