- 浏览: 260157 次
- 性别:
- 来自: 海南海口
文章分类
最新评论
-
风尘之驿:
junbin007 写道61行。。莫非这是一种神奇的语法 是那 ...
PHP中批量更新数据表中多条记录 -
junbin007:
61行。。莫非这是一种神奇的语法
PHP中批量更新数据表中多条记录 -
junbin007:
39行,你懂的
PHP中批量更新数据表中多条记录 -
风尘之驿:
String line[] = new String[file ...
开启一个文本文件,一次读取其内的一行文本 -
whumartine:
String line[] = new String[file ...
开启一个文本文件,一次读取其内的一行文本
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中使用多线程、curl及代理IP模拟post提交和get访问
2014-09-26 08:44 5938Java中使用多线程、curl及代理IP模拟post提交和 ... -
java中实现两个字符串交换
2012-07-19 16:58 2class Sunflower { public s ... -
java中的compareto方法的详细介绍
2012-07-19 10:38 5500java中的compareto方法,返回参与比较的前后两个字符 ... -
java中关于synchronized同步的详解
2012-07-17 16:03 734记下来,很重要。 Java语言的关键字,当它用来修饰一个方法 ... -
详谈java中System.exit(0)和System.exit(1)的本质区别
2012-07-12 17:33 21891.解析 查看java.lang.System的源代码 ... -
详细讲解java中equals和==的本质区别
2012-07-12 15:54 994值类型是存储在内存中的堆栈(以后简称栈),而引用类型 ... -
Java中关键字final和static使用的经验之谈
2012-06-20 10:17 796一、final 根据程序上下文环境,Java关键字final ... -
JAVA中的charAt()和toCharArray()的用法
2012-06-05 14:55 83231、charAt()功能类似于数组,可以把字符串看作是c ... -
java教程:解析java的多线程机制(二)
2011-12-02 21:35 933四、线程间的同步 Java应用程序的多个线程共享同一进程的数 ... -
java的socket编程总结大全
2011-12-02 21:28 901一,网络编程中两个主 ... -
jdbc学习笔记-----jdbc性能优化
2011-12-02 21:27 798这里说的是如何正确使用jdbc编程接口,以获得更好的性能. ... -
java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
2011-12-02 21:20 1590Java数据库连接(JDBC)由一组用 Java 编程语言编写 ... -
java之socket编程之谈
2011-12-02 21:17 649一篇不错的介绍Java Sock ... -
java入门教程:网络通信例子(二)
2011-12-01 23:22 476java网络通信基础入门教程 文件Sample9_2 ... -
java入门教程:网络通信例子(一)
2011-12-01 23:20 799java网络通信例基础入门教程一 文件Exte ... -
将输入的阿拉伯数字转换的汉字的大写输出
2011-07-25 08:13 1652//题目:将输入的阿拉伯数字转换的汉字的大写输出 pac ... -
开启一个文本文件,一次读取其内的一行文本
2011-07-25 08:12 1933/*题目:编写一个Java程序要求:开启一个文本文件,一次读取 ... -
开启一个文本文件,并将该文档内字符以相反次序输出到另一个文档中
2011-07-25 08:10 1149/*题目:编写一个Java程序要求:开启一个文本文件, * ... -
Java中Character类的使用方法
2011-07-25 08:08 2556Character类的使用方法 Character: ...
相关推荐
JAVA教程 第五讲 AWT图形用户界面设计,awt的入门学习。很不错的讲解。
抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户...
JAVA+AWT图形用户界面设计,生成Pdf了,好资料!
1.熟悉Java图形用户界面的设计原理和程序结构; 2.能设计符合问题要求的图形用户界面程序; 3.熟悉Java AWT、swing组件的功能; 4.掌握常用组件的事件接口; 5.会应用AWT、swing组件进行应用程序设计。 二、实验内容...
java第章AWT图形用户界面设计完美版资料.ppt
AWT图形用户界面设计
JAVA教程_第五讲_AWT图形用户界面设计
语言程序设计资料:JAVA教程_第五讲_AWT图形用户界面设计.doc
java(swing,awt)图形用户界面编程100多个案例,里面的例子好好学学
应用AWT组件开发图形用户界面程序 Java事件处理 图形用户界面AWT组件学习 应用Swing组件开发图形用户界面 Applet应用程序与图形用户界面介绍
详细介绍Java图形用户界面设计方法,主要内容有:图形用户界面设计概述、AWT 事件处理模型、Swing组件等。
第9章java入门教程Applet和图形用户界面.ppt
JAVA 图形用户界面 设计教程 Swing and AWT
AWT中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面的类,这些类被称为组件。Java Swing是Java...
应用AWT组件开发图形用户界面程序 Java事件处理 图形用户界面AWT组件学习 应用Swing组件开发图形用户界面 Applet应用程序与图形用户界面介绍
用AWT来生成图形化用户界面时,组件和容器的概念非常重要。组件是各种各样的类,封装了图形系统的许多最小单位,例如按钮、窗口等等;而容器也是组件,它的最主要的作用是装载其它组件,但是象Panel这样的容器也经常...
JAVA 面向对象程序设计教程 第9章Java Swing图形用户界面 第9章Java-Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社全文共27页,当前为第1页。 第9章Java Swing图形用户界面 第9章Java-...