java课程总结第11章图形用户界面设计_第1页
java课程总结第11章图形用户界面设计_第2页
java课程总结第11章图形用户界面设计_第3页
java课程总结第11章图形用户界面设计_第4页
java课程总结第11章图形用户界面设计_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章

图形用户界面设计

图形用户界面设计

Mll.lAWT组件概述

a11.2布局管理

a11.3事件处理

11.1AWT组件概述

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

口工具集(AbstractWindowToolkit,AWT),

其目的是为程序员创建图形用户界面提供

支持。AWT组件定义在java.awt包中,包

括组件类、组件布局类等。

Java.awt的继承关系

1.组件

组件(component)是构成图形用户

界面的基本成分和核心元素。组件类

(Component)是一个抽象类,是AWT组

件类层次结构的根类,实际使用的组件都

是Component类的子类。Component类提

供对组件操作的通用方法,包括设置组件

位置、设置组件大小、设置组件字体、响

应鼠标或键盘事件、组件重绘等。

2.容器

容器(container)是一种特殊组件,

它能容纳其他组件。它在可视区域内显示

其它组件。容器是组件,在容器之中还可

以放置其它容器,可以使用多层容器构成

富于变化的界面。

3.窗口与面板

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

(panel)。

窗口可独立存在,可被移动,也可被最大化

和最小化,有标题栏、边框,可添加菜单栏。

面板不能独立存在,必须包含在另一个容器中。

面板没有标题,没有边框,不可添加菜单栏。

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

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

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

Container的子类。

4.框架与对话框

窗口类Window主要有2个子类:框架

类(Frame)和对话框类(Dialog)。

框架(Frame)

♦框架(frame)是一种带标题栏并且可

以改变大小的窗口。

♦应用程序中,使用框架作为容器,在框

架中放置组件。

♦框架类在实例化时默认是最小化的、不

可见的,必须通过setSize()方法设置框

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

架可见。

Frame的构造方法

Frame类的构造方法主要功能

Frame()创建没有标题的窗口

Frame(Stringtitle)创建以title为标题的窗口

Frame的成员方法

Frame类的成员方法主要功能

intgetState()获得Frame窗口的状态(Frame.Normal表才一,

般状态,Frame.ICONIFIED表示最小化状

态)

voidsetState(intstate)设置Frame囱口的状态(Frame.Normal表示一■

般状态,Frame.ICONIFIED表示最小化状

态)

StringgetTit!e()获得Frame窗口的标题

voidsetTitle(Stringtitle)设置Frame窗口的标题

booleanisResizab!e()测试Frame窗口是否可以改变大小

voidsetResizable(booleanr)设置Frame窗口是否可.以改变大小

Imagegetlconlmage()返回窗口的最小化图标

voidsetlconlmage(lmageimg)设置窗口的最小化图标为img

对话框(dialog)

♦对话框(dialog)也是一种可移动的窗

口,它比框架简单,没有太多的控制元

素,如最大化按钮、状态栏等。

♦对话框不能作为应用程序的主窗口,它

依赖于一个框架窗口而存在,当框架窗

口关闭时,对话框也关闭。

♦对话框类Dialog的构造方法必须声明对

话框所依赖的框架窗口。

例-创建窗口

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());

}

程序运行时,出现如图

所示的窗口,并在屏幕

上显示如下所示的文本

信息:

State:0FrmAp业区

Title:FrmApp

Visible:true

5.标签

标签类(Label)组件用于显示一行文

本信息。标签只能显示信息,不能用于输

入。

Label的构造方法

Label类的构造方法主要功能

Label()创建1个没有标题的标签

Label(Stringstr)创建1个以str为标题的标签

Label(Stringstr,int创建1个以str为标题的标签,并以

align)align为对齐方式,其中

LabeLLEFT>LabeLCENTER>

LabeLRIGHT分别为居左、居中

和居右

Label的成员方法

Label类的成员方法主要功能

intgetAlignment()返回标签标题的对齐方式

VoidsetAlignment(intalign)设置标签标题的对齐方式

StringgetText()获得标签标题

VoidsetText(Stringtext)设置标签标题为text

例-在窗口中建立1个标签

importjava.awt.*;

classLabApp

(

publicstaticvoidmain(Stringargs[])

(

Framefra=newFrame(nLabAppn);

Labellab=newLabel();〃创建1个空标签

fra.setSize(250,150);

lab.setText(nThisisalabel");〃为标签添加标题

lab.setAlignment(Label.CENTER);

lab.setBackground(Color.white);〃引用Component类的方法设置标

签背景颜色

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

法设置标签标题颜色

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

lab.setFont(fht);

fra.add(lab);

fra.setVisible(true);

程序运行时,出现如图所示的窗口。

展LabApp-|n|x|

Thisisalabel

6.按钮

按钮是最常见的一种组件,用来控制

程序运行的方向。用户单击按钮时,计算

机将执行一系列命令,完成一定的功能。

按钮通过java.awt包的Button类创建。

Button的构造方法

Button类的构造方法主要功能

Button()创建一个没有标题的按钮

Button(Stringstr)创建一个以str为标题的按钮

java.awtButton的方法

Button类的成员方法主要功能

StringgetLabel()获得按钮的标题

VoidsetLabel(Stringstr)设置按钮的标题为str

例-在窗口中建立一个按钮

importjava.awt.*;

classButtapp

(

publicstaticvoidmain(Stringargs[])

(

Framefra=newFrame(nButtAppn);

fra.setSize(250,170);

fra.setLayout(null);〃关闭页面设置

Buttonbutt=newButton("clickn);

butt.setSize(100,50);

butt.setLocation(75,60);

fra.add(butt);

fra.setVisible(true);}

程序运行时,出现如图所示的窗口。

AButtAppJnlxl

7.文本编辑组件

文本编辑组件有文本行和文本区。

文本行是一个单行文本编辑框,用于

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

TextField类来创建。

TextField的构造方法

TextField类的构造方法主要功能

TextField()创建空的文本行

TextField(intcolumns)创建空的文本行,具有指定列数

TextField(Stringtext)创建文本为text的文本行

TextField(Stringtext,intculumns)创建具有指定列数、文本为text的文本行

TextField的成员方法

TextField类的成员方法主要功能

StringgetText()获得文本行的文本

intgetColumns()获得文本行的列数

voidsetText(Stringtext)设置文本行的文本为text

voidsetColumns(intcolumns)设置文本行的列数

例—创建文本行

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);〃设置文本框的大小

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

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

fra.setVisible(true);}

程序运行时,出现如图所示的窗口。

&文本框程序

P

llextField

1L2布局管理

Java提供了多种风格和特点的布局管

理器,每一种布局管理器指定一种组件相

对位置和大小布局。布局管理器是容器类

所具有的特性,每种容器都有一种默认的

布局管理器。

11.2布局管理

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

>FlowLayout

>BorderLayout

>CardLayout

>GridLayout

>GridBagLayout

每个类都是java.lang.Object类的子类。

11.2.1BorderLayout类

BorderLayout(边布局)的布局策略

是把容器内的空间划分为东、西、南、北、

中5个区域,这5个区域分别用英义的East、

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

器中加入每个组件都要指明它放在容器的

哪个区域。如果某个区域没有分配组件,

则其他组件可以占据它的空间。

BorderLayout类的构造方法

BorderLayout类的构造方法功能说明

BorderLayout()创建新的

BorderLayout布局

BorderLayout(inthgap,intvgap)创建组件之间水平和

垂直间距分别为

hgap和vgap的

BorderLayout布局

例--应用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);

程序运行结果如图所示。

11.2.2FlowLayout

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

提供按行布局组件方式,将组件按照加入

的先后顺序从左向右排列,当一行排满之

后转到下一行继续按照从左向右的顺序排

列。组件保持自己的尺寸,一行能容纳的

组件的数目随容器的宽度变化。

FlowLayout类的构造方法

FlowLayout类的构造方法功能说明

FlowLayout()创建FlowLayout布局,组件使用缺省的居中对

齐方式,各组件的垂直与水平间距都是5个

像素。

FlowLayout(intalign)创建FlowLayout布局,组件使用align指定的对

齐方式,各组件的垂直与水平间距都是5个

像素。align的取值可以是

FlowLayout.LEFT、FlowLayout.CENTER

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

中和靠右对齐。

FlowLayout(intalign,int创建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);

运行程序出现如图所示的界面:

&BorderLayoutJnJx]

[button1^1button2textItext2

%a«a■»*••«■••(•••*«•••«i^«|

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

11.2.3GridLayout

GridLayout(网格布局)管理器将容

器划分为大小相等的若干行乘若干列的网

格,组件按照从左到右、从上到下的的顺

序依此放入各网格中。每个组件占满1格。

组件大小随网格大小变化。如果组件数比

网格数多,系统将自动增加网格数;如果

组件数比网格数少,未用的网格区空闲。

GridLayout类的构造方法

GridLayout类构造方法功能说明

GridLayout()创建具有1行1歹U的GridLayout布局。

GridLayout(introws,intcols)创建具有rows行和cols列的

GridLayout布局。

GridLayout(introws,intcols,创建具有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);

运行程序出现如图所示的界面。

11.3事件处理

11.3.1委托事件模型

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

(delegationeventmodel)。

1.事件

事件(event)是指一个状态的改变,

或者一个动作的发生。例如,单击一个按

钮,将产生单击事件;单击窗口关闭按钮,

产生窗口关闭事件。

2.事件类

在Java中,用不同的类处理不同的事

件。在java.awt.event包中定义了许多事件

类,如单击事件类(ActionEvent)和窗口

事件类(WindowEvent)。

3.事件源

事件由用户操作组件产生,被操作的

组件称为事件源。

例如,用户单击一个按钮,产生单击

事件,按钮则是事件源;用户单击窗口关

闭按钮,产生窗口关闭事件,窗口组件是

事件源。

4.事件监听器

在图形界面程序中,不仅需要创建组

件,而且还需指定组件所能响应的事件,

以及该事件发生时需要执行的动作(语句

序列)。

4.事件监听器

一个组件能响应哪些事件,响应事

件后需执行的语句序列存放在什么位置,

这些功能由事件监听器负责。为了实现

此功能,在开发程序时,用户需要做以

下2件事:

>向事件源注册事件监听器

>实现事件处理方法

5.事件运作流程

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

♦在程序中,实现事件监听器接口(实现接口

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

件监听器;

♦型手运行k程中,用户在事件源上引发某种

事件(执行某种操作)时,Java产生事件对

象;

♦事在源将事件对象传递给事件监听器;

事件监听器根据事件对象的种类,调用相应

的事件处理方法进行事件处理。

6.确定事件监听器

在编写事件处理的程序代码时,首先

必须确定事件源与事件监听器。事件源的

选择通常比较容易。事件监听器必须是实

现事件监听器接口的类对象。

7.编写事件处理程序代码

在事件处理程序中,必须实现事件监

听器接口中声明的事件处理方法。事件处

理方法以事件对象作为参数。当事件源上

发生事件时,产生的事件对象将以参数形

式传递给事件处理方法。在事件处理方法

中,可以访问事件对象的成员。

例-处理按钮单击事件

创建一个窗口程序类,当用户单击窗口中的按钮时,将窗口的背景设

置为红色。

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);

例-利用内部类处理按钮单击事件

内部类是在其它类的内部声明的类,包含内部类的类称为外部类,

此时内部类成为外部类的成员,内部类具有成员的4种访问权限,也

可以声明为static。

本例程序的功能与上例相同,程序代码不同之处是采用内部类对

象作为事件监听器。

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事件类和监听器接口

1.事件类

Java定义的多数事件类在

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

事件类的祖先类,它又继承了

java.util.EventObject类,而EventObject类

又继承了java.lang.Object类

Java.awt.event的继承关系图

2.事件监听器接口

Java中的每个事件类都有一个监听器

接口,接口中声明了一个或多个抽象的事

件处理方法。如果一个类实现事件监听器

接口,其对象就可以作为对应事件的监听

器,具备监视和处理事件的能力。

事件监听器接口和事件监听器接口中的方法

事件类监听器接口监听器接口所提供的事件处理方法

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中组件和可触发的事件类

组件类产生的事件类

ButtonActionEvent

CheckBoxActionEvent>Itemevent

ComponentComponentEvent>FocusEvent>KeyEvent、

MouseEvent

MenuitemActionEvent

ScrollbarAdjustmentEvent

TextAreaActionEvent

TextFieldActionEvent

WindowWindowEvent

3.事件适配器类

♦Java提供了一种简便办法,为包含多个

事件处理方法的每个事件监听器接口提

供了一个抽象类,称为适配器(adapt)

类,类名带有Adapter标记。

♦每个适配器类实现一个事件监听器接口,

用空方法体实现该接口中的每个抽象方

法。

例如,WindowAdapter类实现

WindowListener接口,而空方法体实现

WindowListener接口中声响的以下方法:

windowClosing(WindowEvente)

windowClosed(WindowEvente)

windowOpened(WindowEvente)

windowActivated(WindowEvente)

windowDeactivated(WindowEvente)

windowIconified(WindowEvente)

windowDeiconified(WindowEvente)

监听器接口与对应的适配器类

监听器接口适配器类

ComponemtListenerComponentAdapter

ContainerListenerContainerAdapter

FocusListenerFocusAdapter

KeyListenerKeyAdapter

MouseListenerMouseAdapter

MouseMotionListenerMouseMotionAdapter

WindowListenerWindowAdapter

4.注册事件监听器的方法

组件类注册撤消事件监听器的方法

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键,便触发动作事件

(ActionEvent),触发事件的组件将

ActionEvent类的对象传递给事件监听器,

事件监听器负责执行actionPerformed。方

法进行相应的事件处理。

11.3.3处理ActionEvent事件

ActionEvent类继承了EventObject类

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

返回事件源(对象)名。ActionEvent类本

身还定义了一些成员,如

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

源的字符串信息。

例--处理ActionEvent事件

编程实现:窗口中有标题为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");

运行程序,出现如图所示的界面。

式ActionEven-la|x|&ActionEvenJn]xjaActionEventJnJxJ

e*•»•«•*••••••>•«•••••••«•«»<I

:button1Hbutton2jbutton1:button2button2H

H••♦..,“..••.♦,"•.♦♦♦♦““♦•♦I

noclickingbutton1clickedbutton2clicked

(a)初始界面(b)单击第1个按钮后的界面(c)单击第2个按钮后的界面

11.3.4处理ItemEvent事件

当窗口中的选项组件Checkbox(选择框)和

List(列表框)等被选择时,发生选项事件

(itemevent)。

Java用ItemEvent类处理选项事件。

ItemEvent类事件的监听器必须实现ItemListener

接口,实现其中声明的itemStsteChanged。方法:

publicvoiditemStateChanged(ItemEvente)

程序运行过程中,当用户选择选项组件时,

该方法被执行。

例--处理ItemEvent事件

编程实现:窗口中有标题为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");

运行程序,出现如图所示的界面。

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

rjgreen^「yellowjgreem厂yellow「green[yellow^

Noneisselectedgreenisselectedyellowisselected

(a)初始界面(b)单击green后的界面⑹单击yellow后的界面

11.3.5处理TextEvent事件

当TextField或TextArea组件中的文本改变时,

触发文本事件(TextEvent),Java^TextEvent

类处理该事件。

TextEvent类事件的监听器必须实现

TextListener接口,实现其中声明的

textValueChanged。方法:

publicvoidtextValueChanged(TextEvente)

程序运行过程中,当TextField或TextArea

组件中文本改变时,该方法被执行。

例一处理TextEvent事件

编程实现:窗口中有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);

谆运行程序,出现如图所示的界面。

(a)初始界面(b)在第1个文本行输入文本时的界面

11.3.6处理KeyEvent事件

当按下键盘中的任一键时,将触发键

盘事件(keyevent),Java用KeyEvent类

处理该事件。

KeyEvent类的成员方法

成员方法功能

chargetChar()返回按下的字符

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

publicboolean判别按下的键是否是Action

isActionKeyOKeyoActionKey包括方向

键、PgUp、PgDn、

Fl〜F12等键。

KeyListener接口的成员方法

KeyListener接口的功能

成员方法

voidkeyPressed()对应键被按下事件,键被按下时调

用该方法

voidkeyReleased()对应键被释放事件,键被释放时调

用该方法

voidkeyTypedQ对应键入字符事件,键入字符时调

用该方法。按下并释放一个字符

键时调用该方法,但键入Action

Key时,不调用该方法。

例一处理TextEvent事件

编程实现:窗口中有1个文本行和1个文本区,当按下某字符时,

在文本行中显示该字符;当键被按下事件发生时,在文本区显示被

按下的字符;当键被释放事件发生时,在文本区显示被释放的字符;

当键入字符事件发生时,在文本区显示被输入的字符。

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);}

运行程序,出现如图所示的界面:

-1□!x|

F

rispressedl

ristyped!"3

risreleasedl

zJ

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

例--利用KeyAdapter类处理TextEvent事件

编程实现:窗口中有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运行程序,出现如图所示的界面。

及KeyEvent-|n|x|

tisentered!

(a)初始界面(b)在第1个文本行输入字符t时的界面

11.3.7处理MouseEvent事件

当按下鼠标键、鼠标指针进入或离开

某二区域,或者移动、拖动鼠标时,触发

鼠标事件(mouseevent)。Java用

MouseEvent类处理该事件。

MouseEvent类中成员方法

MouseEvent类的成员方法功能说明

intgetX()返回鼠标事件发生点的X坐标

intget¥()返回鼠标事件发生点的Y坐标

PointgetPoint()返回鼠标事件发生点的坐标

PointgetClickCount()返回鼠标的点击次数

Java提供了MouseListener和

MouseMotionListener接口,用来处理

MouseEvent事件。MouseListener接口用来处理

以下事件:

>鼠标指针进入某一区域

»按下鼠标键

A释放鼠标键

>鼠标单击(按下和释放鼠标键的整个过程)

>鼠标指针离开某一区域

MouseListener接口的成员方法

MouseListener接口的成员方法功能说明

voidmoveClicked(MouseEvente)对应鼠标单击事件

voidmoveEntered(MouseEvente)对应鼠标进入事件

voidmoveExited(MouseEvente)对应鼠标离开事件

voidmovePressed(MouseEvente)对应按下鼠标键事件

voidmoveReleased(MouseEvente)对应释放鼠标键事件

MouseMotionListener接口用来处理以下2

个事件:

>鼠标在某一区域移动

A鼠标在某一区域拖动(按下鼠标键不放移

动鼠标)

处理这2个事件的监听器必须实现

MouseMotionListener接口

MouseMotionListener接口的成员方法

MouseMotionListener接口的功能说明

成员方法

moveDragged(MouseEvente)对应鼠标拖动事件

moveMoved(MouseEvente)对应鼠标移动事件

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

编程实现:窗口中有2个文本区,当鼠标指针进入和离开

第1个文本区时,在第2个文本区显示相应信息;当在第1个

文本区单击鼠标、按下和释放鼠标键时,分别显示其事件及

发生的位置信息。

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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论