JAVA教程 第五讲 AWT图形用户界面设计(二)
5.2.1 事件类
与AWT有关的所有事件类都由java.awt.AWTEvent类派生,它也是EventObject类的子类。AWT事件共有10类,可以归为两大类:低级事件和高级事件。
java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。AWT的相关事件继承于java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件,低级事件是指基于组件和容器的事件,当一个组件上发生事件,如:鼠标的进入,点击,拖放等,或组件的窗口开关等,触发了组件事件。高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,或是选中项目列表的某一条就会触发ItemEvent事件。
◇ 低级事件
ComponentEvent( 组件事件:组件尺寸的变化,移动)
ContainerEvent( 容器事件:组件增加,移动)
WindowEvent( 窗口事件:关闭窗口,窗口闭合,图标化)
FocusEvent( 焦点事件:焦点的获得和丢失)
KeyEvent( 键盘事件:键按下、释放)
MouseEvent( 鼠标事件:鼠标单击,移动)
◇ 高级事件(语义事件)
ActionEvent(动作事件:按钮按下,TextField中按Enter键)
AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)
ItemEvent(项目事件:选择项目,不选择"项目改变")
TextEvent(文本事件,文本对象改变)
5.2.2 事件监听器
每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。
例如,与键盘事件KeyEvent相对应的接口是:
public interface KeyListener extends EventListener {
public void keyPressed(KeyEvent ev);
public void keyReleased(KeyEvent ev);
public void keyTyped(KeyEvent ev);
}
注意到在本接口中有三个方法,那么java运行时系统何时调用哪个方法?其实根据这三个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。当键盘刚按下去时,将调用keyPressed( )方法执行,当键盘抬起来时,将调用keyReleased( )方法执行,当键盘敲击一次时,将调用keyTyped( )方法执行。
又例如窗口事件接口:
public interface WindowListener extends EventListener{
public void windowClosing(WindowEvent e);
//把退出窗口的语句写在本方法中
public void windowOpened(WindowEvent e);
//窗口打开时调用
public void windowIconified(WindowEvent e);
//窗口图标化时调用
public void windowDeiconified(WindowEvent e);
//窗口非图标化时调用
public void windowClosed(WindowEvent e);
//窗口关闭时调用
public void windowActivated(WindowEvent e);
//窗口激活时调用
public void windowDeactivated(WindowEvent e);
//窗口非激活时调用
}
AWT的组件类中提供注册和注销监听器的方法:
◇ 注册监听器:
public void add ( listener);
◇ 注销监听器:
public void remove ( listener);
例如Button类:(查API)
public class Button extends Component {
……
public synchronized void addActionListener(ActionListener l);
public synchronized void removeActionListener(ActionListener l);
……}
5.2.3 AWT事件及其相应的监听器接口(1)
表5.1列出了所有AWT事件及其相应的监听器接口,一共10类事件,11个接口。下面这张表应能牢牢记住。
表5.1
事件类别
描述信息
接口名
方法
ActionEvent激活组件 ActionListener actionPerformed(ActionEvent) ItemEvent选择了某些项目 ItemListener itemStateChanged(ItemEvent) MouseEvent鼠标移动 MouseMotionListener mouseDragged(MouseEvent)
mouseMoved(MouseEvent)鼠标点击等 MouseListener mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseClicked(MouseEvent) KeyEvent键盘输入 KeyListener keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent) FocusEvent组件收到或失去焦点 FocusListener focusGained(FocusEvent)
focusLost(FocusEvent) AdjustmentEvent移动了滚动条等组件 AdjustmentListener adjustmentValueChanged(AdjustmentEvent) ComponentEvent对象移动缩放显示隐藏等 ComponentListener componentMoved(ComponentEvent)
componentHidden(ComponentEvent)
componentResized(ComponentEvent)
componentShown(ComponentEvent) WindowEvent窗口收到窗口级事件 WindowListener windowClosing(WindowEvent)
windowOpened(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
windowClosed(WindowEvent)
windowActivated(WindowEvent)
windowDeactivated(WindowEvent) ContainerEvent容器中增加删除了组件 ContainerListener componentAdded(ContainerEvent)
componentRemoved(ContainerEvent) TextEvent文本字段或文本区发生改变 TextListener textValueChanged(TextEvent)
5.2.3 AWT事件及其相应的监听器接口(2)
例5.10说明事件处理模型的应用。
例5.10
import java.awt.*;
import java.awt.event.*;
public class ThreeListener implements MouseMotionListener,MouseListener,WindowListener {
//实现了三个接口
private Frame f;
private TextField tf;
public static void main(String args[])
{
ThreeListener two = new ThreeListener();
two.go(); }
public void go() {
f = new Frame("Three listeners example");
f.add(new Label("Click and drag the mouse"),"North");
tf = new TextField(30);
f.add(tf,"South"); //使用缺省的布局管理器
f.addMouseMotionListener(this); //注册监听器MouseMotionListener
f.addMouseListener(this); //注册监听器MouseListener
f.addWindowListener(this); //注册监听器WindowListener
f.setSize(300,200);
f.setVisible(true);
}
public void mouseDragged (MouseEvent e) {
//实现mouseDragged方法
String s = "Mouse dragging : X="+e.getX()+"Y = "+e.getY();
tf.setText(s);
}
public void mouseMoved(MouseEvent e){}
//对其不感兴趣的方法可以方法体为空
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){
String s = "The mouse entered";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s = "The mouse has left the building";
tf.setText(s);
}
public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){ }
public void windowClosing(WindowEvent e) {
//为了使窗口能正常关闭,程序正常退出,需要实现windowClosing方法
System.exit(1);
}
public void windowOpened(WindowEvent e) {}
//对其不感兴趣的方法可以方法体为空
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowActivated(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) {}
}
上例中有如下几个特点:
1.可以声明多个接口,接口之间用逗号隔开。
……implements MouseMotionListener, MouseListener, WindowListener;
2.可以由同一个对象监听一个事件源上发生的多种事件:
f.addMouseMotionListener(this);
f.addMouseListener(this);
f.addWindowListener(this);
则对象f 上发生的多个事件都将被同一个监听器接收和处理。
3.事件处理者和事件源处在同一个类中。本例中事件源是Frame f,事件处理者是类ThreeListener,其中事件源Frame f是类ThreeListener的成员变量。
4.可以通过事件对象获得详细资料,比如本例中就通过事件对象获得了鼠标发生时的坐标值。
public void mouseDragged(MouseEvent e) {
String s="Mouse dragging :X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
Java语言类的层次非常分明,因而只支持单继承,为了实现多重继承的能力,Java用接口来实现,一个类可以实现多个接口,这种机制比多重继承具有更简单、灵活、更强的功能。在AWT中就经常用到声明和实现多个接口。记住无论实现了几个接口,接口中已定义的方法必须一一实现,如果对某事件不感兴趣,可以不具体实现其方法,而用空的方法体来代替。但却必须所有方法都要写上。
5.2.4 事件适配器
Java语言为一些Listener接口提供了适配器(Adapter)类。可以通过继承事件所对应的Adapter类,重写需要方法,无关方法不用实现。事件适配器为我们提供了一种简单的实现监听器的手段, 可以缩短程序代码。但是,由于java的单一继承机制,当需要多种监听器或此类已有父类时,就无法采用事件适配器了。
1.事件适配器--EventAdapter
下例中采用了鼠标适配器:
import java.awt.*;
import java.awt.event.*;
public class MouseClickHandler extends MouseAdaper{
public void mouseClicked(MouseEvent e) //只实现需要的方法
{ ……}
}
java.awt.event包中定义的事件适配器类包括以下几个:
1.ComponentAdapter( 组件适配器)
2.ContainerAdapter( 容器适配器)
3.FocusAdapter( 焦点适配器)
4.KeyAdapter( 键盘适配器)
5.MouseAdapter( 鼠标适配器)
6.MouseMotionAdapter( 鼠标运动适配器)
7.WindowAdapter( 窗口适配器)
2. 用内部类实现事件处理
内部类(inner class)是被定义于另一个类中的类,使用内部类的主要原因是由于:
◇ 一个内部类的对象可访问外部类的成员方法和变量,包括私有的成员。
◇ 实现事件监听器时,采用内部类、匿名类编程非常容易实现其功能。
◇ 编写事件驱动程序,内部类很方便。
因此内部类所能够应用的地方往往是在AWT的事件处理机制中。
例5.11
import java.awt.* ;
import java.awt.event.*;
public class InnerClass{
private Frame f;
private TextField tf;public InnerClass(){
f=new Frame("Inner classes example");
tf=new TextField(30);
}
public voidi launchFrame(){
Label label=new Label("Click and drag the mouse");
f.add(label,BorderLayout.NORTH);
f.add(tf,BorderLayout.SOUTH);
f.addMouseMotionListener(new MyMouseMotionListener());/*参数为内部类对象*/
f.setSize(300,200);
f.setVisible(true);
}
class MyMouseMotionListener extends MouseMotionAdapter{ /*内部类开始*/
public void mouseDragged(MouseEvent e) {
String s="Mouse dragging: x="+e.getX()+"Y="+e.getY();
tf.setText(s); }
} ;
public static void main(String args[]) {
InnerClass obj=new InnerClass();
obj.launchFrame();
}
}//内部类结束
}
分享到:
相关推荐
JAVA教程 第五讲 AWT图形用户界面设计,awt的入门学习。很不错的讲解。
### JAVA+AWT图形用户界面设计深度解析 #### 引言 在计算机科学领域,图形用户界面(GUI)是人机交互的重要组成部分,它通过视觉元素简化了软件操作过程,提高了用户体验。Java作为一种广泛使用的编程语言,提供了...
《Java第章AWT图形用户界面设计》 在Java编程中,AWT(Abstract Window Toolkit)是构建图形用户界面(GUI)的基础。AWT是Java基础类(JFC)的核心部分,由JDK提供,用于创建基本的界面组件,如窗口、按钮、菜单等...
在本实验报告中,主题是“Java实验报告之图形用户界面程序设计与AWT/Swing组件”,主要目标是让学生熟悉Java GUI设计原理、程序结构,掌握AWT和Swing组件的功能,以及学会应用这些组件来设计应用程序,特别是实现一...
### AWT图形用户界面设计知识点详解 #### 一、AWT简介 抽象窗口工具包(Abstract Window Toolkit,简称AWT)是Java平台提供的一套用于创建图形用户界面(GUI)的基础类库。AWT允许开发者在Java应用程序...
在Java中,构建图形用户界面(GUI)的主要方法之一是使用抽象窗口工具包(Abstract Window Toolkit,简称AWT)。AWT是一个用于创建Java应用程序和Applet的GUI组件集合。本章节将详细介绍AWT的基本概念、组件和容器,...
"java 图形用户界面设计" Java 图形用户界面设计是 Java 编程语言中的一种重要组件,用于创建图形用户界面(GUI)。在 Java 中,有多种方式来设计 GUI,包括使用 AWT、Swing 和 SWT/JFace 等开发工具集。下面将...
《JAVA图形用户界面设计与实例》是陈家兴等作者在2004年出版的一本关于Java GUI设计的书籍。该书很可能涉及到使用Java编程语言开发图形用户界面(Graphical User Interface,简称GUI)的知识点,以及通过实例来加深...
【Java图形用户界面设计教程】 Java图形用户界面(GUI)设计是软件开发的重要组成部分,它构建了用户与软件之间的交互界面。本教程聚焦于Java GUI的设计,主要涉及AWT(Abstract Window Toolkit)和Swing两个核心包...
【JAVA教程_第五讲_AWT图形用户界面设计】 在Java编程中,创建图形用户界面(GUI)是一项重要的任务,而AWT(Abstract Window Toolkit)是Java API提供的一个基础框架,用于构建GUI。AWT适用于Java应用程序和applet...
【JAVA AWT图形用户界面设计】\n\nJava的AWT(Abstract Window Toolkit)是用于构建图形用户界面GUI的关键工具包,它适用于Java应用程序和applet。AWT提供了丰富的功能,包括用户界面组件、事件处理机制、图形和图像...
Java Swing和AWT是Java平台上的两种主要的图形用户界面(GUI)工具包,用于创建桌面应用程序。这两个库提供了丰富的组件、布局管理器以及事件处理机制,使得开发者能够构建功能丰富的交互式用户界面。 首先,AWT...
Java图形用户界面(GUI,Graphical User Interface)是Java编程中的一个重要组成部分,它允许开发者创建交互式的、具有丰富视觉效果的应用程序。在Java中,有三个主要的GUI工具包:AWT(Abstract Window Toolkit),...
应用AWT组件开发图形用户界面程序 Java事件处理 图形用户界面AWT组件学习 应用Swing组件开发图形用户界面 Applet应用程序与图形用户界面介绍
Java图形用户界面(GUI)设计是开发交互式应用程序的关键部分,它允许用户通过可视化的组件与软件进行互动。在Java中,我们可以利用多种库和工具来创建GUI,其中最常见的是Java AWT(Abstract Window Toolkit)和...
`java.awt`包是Java早期为图形用户界面设计提供的基础类库。该包中的类和接口支持基本的GUI组件和功能,如图形绘制、字体设置、颜色管理以及事件处理等。例如: - **类**:`java.awt.Component` 是所有GUI组件的...
该计算器源代码 awt+swing 图形界面展示了 Java 语言的图形用户界面设计和实现,涵盖了 AWT 和 Swing 库的使用、事件处理、文本字段和缓冲区的应用、数学运算和剪贴板和记忆功能的实现等知识点。
Java图形用户界面设计是开发桌面应用程序的关键部分,它允许用户通过视觉交互与程序进行沟通。在Java中,GUI设计主要依赖于两种包:`java.awt`和`javax.swing`。 首先,我们来看图形用户界面设计概述。GUI的发展...