Java事件处理机制深入理解

栏目: Java · 发布时间: 7年前

内容简介:Java事件处理机制深入理解

本文是关于 Java 事件处理机制的梳理,以及有重点的介绍一些注意点,至于基础的概念啥的不多赘述。

一、Java事件处理机制初步介绍(看图理解)

根据下图,结合生活实际,可以得知监护人可以有多个,坏人对小孩的操作可以是打,也可以是爱。

得出结论:

一个事件源并不代表只有一个事件监听者,它可以有多个事件监听者。

Java事件处理机制深入理解

有过一些基础的都知道,这里会涉及一些接口和类啊,自己查,不赘述。最下面会有代码演示和注释详解,感兴趣的可以拿来练手。

二、Java事件处理机制深入理解

1.事件编程步骤:

①编写事件处理类(事件监听者)

②根据需求给事件处理类实现监听接口

③在事件处理类中重写(实现),其事件处理函数

④在事件源类中指定该事件的监听器(响应者)是谁,即注册监听

2.代码实例(以一个简单的Java 图形界面为例)

package

com.linuxidc;

// 功能:事件处理机制 演示1.2
import java.awt.*

;

import javax.swing.*

;

import

java.awt.event.ActionEvent;

import

java.awt.event.ActionListener;

import

java.awt.event.KeyEvent;

import

java.awt.event.KeyListener;

import

java.awt.event.MouseEvent;

import

java.awt.event.MouseListener;

import

java.awt.event.WindowEvent;

import java.awt.event.WindowListener; public class Demo1_3 extends

JFrame {

= null

;

public static void

main(String[] args) {

// TODO Auto-generated method stub
new

Demo1_3();

}

public

Demo1_3() {

// 这里经常忘记
mp1 = new

Mypanl1_3();

this

.add(mp1);

// 注册监听
this

.addKeyListener(mp1);

this

.addMouseListener(mp1);

this

.addWindowListener(mp1);

this

.addMouseMotionListener(mp1);

// this.addActionListener(mp1); // 按钮用这个,this.addActionListener(mp1);
this .setSize(300, 400

);

this

.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this .setVisible( true

);

}

}

// 这个经常用,java.awt.event.MouseMotionListener 鼠标移动和拖拽
class Mypanl1_3 extends JPanel implements

java.awt.event.MouseMotionListener,

KeyListener, MouseListener, WindowListener {

public void

paint(Graphics g) {

super

.paint(g);

}

@Override

public void

windowOpened(WindowEvent e) {

// TODO Auto-generated method stub
System.out.print("开启窗口被调用" +

e.getClass());

}

@Override

public void

windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

}

@Override

public void

windowClosed(WindowEvent e) {

// TODO Auto-generated method stub
System.out.println("窗口关闭了"

);

}

@Override

public void

windowIconified(WindowEvent e) {

// TODO Auto-generated method stub

}

@Override

public void

windowDeiconified(WindowEvent e) {

// TODO Auto-generated method stub

}

@Override

// 窗口激活
public void

windowActivated(WindowEvent e) {

// TODO Auto-generated method stub
System.out.println("窗口激活"

);

}

@Override

// 窗口不激活
public void

windowDeactivated(WindowEvent e) {

// TODO Auto-generated method stub
System.out.println("窗口不激活"

);

}

@Override

// 1.鼠标点击
public void

mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

System.out

"当前鼠标点击的横坐标是" + e.getX() + "当前鼠标点击de纵坐标是" +

e.getY());

}

@Override

// 2.鼠标按压,没松开
public void

mousePressed(MouseEvent e) {

// TODO Auto-generated method stub
System.out.println("鼠标按压,没松开"

);

}

@Override

// 3.鼠标松开
public void

mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub
System.out.println("鼠标松开"

);

}

@Override

// 4.鼠标���动到MyPanel
public void

mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub
System.out.println("鼠标移动到面板"

);

}

@Override

// 5.鼠标离开
public void

mouseExited(MouseEvent e) {

// TODO Auto-generated method stub
System.out.println("鼠标离开"

);

}

@Override

// 1.键输入 (与 keyPressed的不同是,外围一圈的键都不会有反应)
public void

keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

//

2.键按下(我测试过了:

// 字母和少数键没反应,其他键盘最外一圈F1-F12,Delete等控制台之类都有反应)
public void

keyPressed(KeyEvent e) {

//

TODO Auto-generated method stub

// 注意:这里切换到美式键盘下演示。我在搜狗输入法下演示了,结果总出不来
System.out.println(e.getKeyChar() + "键按下"

);

}

@Override

// 键松开
public void

keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

// 重要:鼠标拖拽
public void

mouseDragged(MouseEvent e) {

// TODO Auto-generated method stub
System.out.println("鼠标拖拽了"

);

}

@Override

// 重要:鼠标移动
public void

mouseMoved(MouseEvent e) {

//

TODO Auto-generated method stub

// System.out.println("鼠标移动了");

System.out.println("当前移动移动横坐标是" + e.getX() + "当前移动纵坐标是" +

e.getY());

}

}

Java事件处理机制深入理解

3.注意事项:

①Java采用委托机制处理事件

②Java中的事件是分类的(eg.鼠标事件、窗体事件、键盘事件等)

③Java中一个类要监听某个事件,则必须实现相应的事件监听接口(有没有想到Java是"单继承多实现"的特性)

④在实现监听接口类中,要重写处理函数(说到接口有这特性,你也不应该陌生吧)

⑤事件源中需要注册事件监听类,否则事件监听类接收不到事件源发生的事件(就像上图,想要享受保护,就需要把监护小孩的权限给监护人一样)

本文永久更新链接地址http://www.linuxidc.com/Linux/2018-01/150684.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP and MySQL Web Development (3rd Edition) (Developer's Library

PHP and MySQL Web Development (3rd Edition) (Developer's Library

Luke Welling、Laura Thomson / Sams / 2004-09-29 / USD 49.99

We've taken the best and made it even better. The third edition of the best-selling PHP and MySQL Web Development has been updated to include material and code on MySQL 5, PHP 5 and on PHPs object mod......一起来看看 《PHP and MySQL Web Development (3rd Edition) (Developer's Library》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具