一、事件处理机制

(1)事件源:事件源回答事件是由谁发生的,也就是事件发生的场所或者来源,通常是组件的对象,例如按钮JButton、下拉框JComboBox、列表框JList、树JTree等。

(2)事件对象:事件对象主要回答发生了什么事情。事件对象本身封装了包含所发生的各种事件的有效信息,包括事件源对象以及处理该事件所需要的其它各种信息(如鼠标点击时的坐标等),这些有效信息被封装在类AWTEvent或其子类的实例对象中。

所有事件类均在java.awt.event包中,常用的事件类包括ActionEvent、AdjustmentEvent、FocusEvent、InputEvent、KeyEvent、MouseEvent、WindowEvent、ItemEvent、TextEvent等,继承于java.awt.AWTEvent类。

(3)事件监听器:事件监听器主要回答当某个事件发生由谁处理以及怎么处理。一旦注册完成一个事件监听器,它将能接受事件对象并进行处理。

二、监听器接口

要处理某个事件,必须实现某个监听器接口。这类似于交通事故是一种事件对象,而成立交通部门并完善处理制度相当于成立了事件监听器(实现了某个监听器接口),而对外发布公文规定:凡是交通事故即交给该交通部门进行处理,这个过程相当于注册完成事件监听器。

每种类型的事件,都定义了相应的事件处理(监听器)接口,其命名规则是XXXEvent事件对应的事件处理(监听器)接口通常命名为XXXListener。 这相当于整个java体系对每种类型的事件规定了必须成立什么部门进行处理,但如何处理则交给程序员去设计,即编写事件处理程序去覆盖对应接口中的所有方法。

三、编写一个完整的事件处理程序过程

(1)引入系统事件类包:import java.awt.event.*

(2)自定义事件处理类,即加上implements XXXListener,如:

public class MyFrame implements ActionListener {

}

(3)注册事件源对象的监听者,即告诉程序一旦发生相应的事件后,由谁处理,如:

public class MyFrame extends JFrame implements ActionListener{

MyFrame(String sTitle){

super(sTitle);

JButton btn=new JButton("确定");

btn.addActionListener (this);

}

}

这个例子中,btn.addActionListener(this)即注册监听者,它相当于宣布一旦发生点击事件(ActionEvent,对应的事件监听器接口为ActionListener,而MyFrame已经implements了该接口)由this处理,this即为MyFrame。

(4)注册了监听者还不能响应相应的事件,还需要实现监听器接口中的所有方法。例如,在上例中,需加入如下代码:

//实现ActionListener接口中的方法

public void actionPerformed(ActionEvent e) {

...//响应某个动作的代码...

}

四、几个完整的事件处理程序实例

(1)窗体单击按钮事件处理程序

import java.awt.event.* ;//第①步,引入事件包
import java.awt.*;
import javax.swing.*;
//第②步,即声明implements某个监听器接口
public class TestJButtonClick implements ActionListener {//事件监听者与事件源属于同一个类public TestJButtonClick() {JFrame f = new JFrame("单击按钮事件");Container c = f.getContentPane();JButton b = new JButton("Press Me!");b.addActionListener(this);//第③步,注册监听者c.add(b, "Center");f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(200, 100);f.setVisible(true);}public void actionPerformed(ActionEvent e) {//第④步,监听者如何监听
//e.getActionCommand()方法返回事件源的名称JOptionPane.showMessageDialog(null,"你点击了按钮\"" + e.getActionCommand() + "\"","提示",JOptionPane.INFORMATION_MESSAGE);}public static void main(String args[]) {new TestJButtonClick();}
}

(2)鼠标事件处理程序

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MousePanel extends JPanel{int x_pos,y_pos;MousePanel(){
//注册鼠标事件监听器,并用匿名类来实现事件处理程序
//注意,必须实现(覆盖)接口中的全部方法,哪怕实现代码一句也没有addMouseListener(new MouseListener(){public void mouseClicked(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mousePressed(MouseEvent e){x_pos=e.getX();y_pos=e.getY();repaint();//本方法会自动触发paintComponent方法的运行}});
//注册鼠标移动事件监听器,并用匿名类来实现事件处理程序addMouseMotionListener(new MouseMotionListener(){public void mouseDragged(MouseEvent e){}public void mouseMoved(MouseEvent e){x_pos=e.getX();y_pos=e.getY();repaint();//本方法会自动触发paintComponent方法的运行}});}//覆盖父类的paintComponent方法以绘制当前鼠标的坐标protected void paintComponent(Graphics g){super.paintComponent(g);g.drawString( "当前位置:[" + x_pos + ", " + y_pos + "]",x_pos, y_pos);}
}
public class TestMouseListener extends JFrame{TestMouseListener(){super("鼠标位置");setContentPane(new MousePanel());}public static void main(String args[ ]){TestMouseListener f = new TestMouseListener();f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(300, 180);f.setVisible(true);}
}

(3)键盘事件处理程序

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class TestKeyListener extends JFrame{TestKeyListener(String sTitle){super(sTitle);Container c = getContentPane();c.setLayout(new GridLayout(4,1,2,2));
//选择角色JPanel panel1=new JPanel();panel1.setLayout(new FlowLayout(FlowLayout.LEFT));panel1.add(new JLabel("选择角色:"));JComboBox jcb=new JComboBox();jcb.addItem("教师");jcb.addItem("学生");jcb.setSelectedIndex(1);panel1.add(jcb);c.add(panel1);
//输入学号JPanel panel2=new JPanel();panel2.setLayout(new FlowLayout(FlowLayout.LEFT));panel2.add(new JLabel("输入学号:"));FgTextField txtNum=new FgTextField("", 15, true);panel2.add(txtNum);c.add(panel2);
//输入密码JPanel panel3=new JPanel();panel3.setLayout(new FlowLayout(FlowLayout.LEFT));panel3.add(new JLabel("输入密码:"));panel3.add(new JPasswordField("", 15));c.add(panel3);
//登录按钮JPanel panel4=new JPanel();panel4.setLayout(new FlowLayout(FlowLayout.RIGHT));panel4.add(new JButton("登录"));panel4.add(new JButton("取消"));c.add(panel4);}public static void main(String args[ ]){TestKeyListener f = new TestKeyListener("键盘事件");f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.pack();f.setVisible(true);}
}
//自定义单行文本框,从JTextField继承过来
class FgTextField extends JTextField{boolean m_bOnlyInteger;//用于指示是否只允许输入整数FgTextField(String sText, int columns, boolean bOnlyInteger){super(sText,columns);m_bOnlyInteger=bOnlyInteger;addKeyListener(new KeyAdapter(){public void keyTyped(KeyEvent e){if(m_bOnlyInteger){char c=e.getKeyChar();if(c<'0' | c>'9')e.consume(); //取消输入}}});}
}

java事件处理入门相关推荐

  1. java从入门到精通第四版明日科技书籍简介及下载

    Java从入门到精通(第4版)(附光盘) 平装 – 2016年10月20日 <Java从入门到精通(第4版)(附光盘)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用 ...

  2. java从入门到精通教程_Java从入门到精通小白教程

    Java从入门到精通小白教程,是小编为大家找到的一套非常不错的java编程学习实战资料,是专业版的学习工具书,它的主要作用是帮助用户进行全面基础学习和进阶准备,是十分靠谱的教程!希望大家好好学习,一起 ...

  3. Java从入门到精通 第4版 PDF下载

    <Java从入门到精通(第4版)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识.全书分为28章,包括初识Java,熟悉Ecli ...

  4. java事件处理模型_从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  5. java从入门到精通_想要开始学java?你要的java从入门到精通布列如下!

    java从入门到精通,让我来告诉你! 毫无疑问,java是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握java看似是一件十分困难的事.其实,只要掌握了科学的学习方法 ...

  6. C功底挑战Java菜鸟入门概念干货(一)

    一.认识Java 1.Java 程序比较特殊,它必须先经过编译,然后再利用解释的方式来运行.  2.Byte-codes 最大的好处是--可越平台运行,可让"一次编写,处处运行"成 ...

  7. java基础入门传智播客 源码_Java-_2020年版Java零基础视频教程(Java 0基础,Java初学入门)魔鬼讲师老杜出品...

    不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源 还记得那年带你Java入门的一声"吼"吗? B站目前播放量已经快到450多万播放量的Java零基础教程的创作者& ...

  8. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  9. java基础入门课后习题_《Java基础入门》课后习题及答案

    <Java基础入门>课后习题及答案Java基础入门,课后习题,答案 博学谷--让IT教学更简单,让IT学习更有效 <Java基础入门>课后习题 第1章Java开发入门 一.填空 ...

最新文章

  1. CMD 一条命令 执行 多条命令
  2. 互联网1分钟 | 0307 阿里巴巴与NBA升级中国合作伙伴关系;小米成立AIoT战略委员会...
  3. Sphinx的介绍和原理探索
  4. 模式8--WorkerThread
  5. Java基础学习笔记二十四 MySQL安装图解
  6. 电子取证技术--概述
  7. JavaScript:九九乘法表
  8. linux vim命令翻页,详解Vim编辑器翻页控制命令
  9. python的第三方Pandas的简介(1)
  10. Java静态类的使用
  11. c语言 1累乘至100,C语言1乘到100怎么编写
  12. 应届毕业生的月薪11K,了解一下(学员感言)
  13. ITE Super IO - Environment Controller
  14. 【锐捷交换】接入交换机安全配置
  15. 34所985计算机考研难度,考研:34所自主划线985大学考研难度也分为5个档次!你考的第几档...
  16. TypeMonkey for Mac(AE文字排列效果脚本插件)
  17. COJN 0486 800401反质数 呵呵呵呵呵
  18. 量子计算机是伪科学,科学网-量子力学一门无人理解也没用处的“伪科学”?-张林的博文...
  19. VxWorks学习记录
  20. 一个8*8的方格子,A点在左下角,B点在右上角,求A点到B点的最短路径有多少条

热门文章

  1. Win10系统U盘重装恢复出厂设置的方法
  2. 国资委79号文解读:国央企OA办公系统信创替代落地实践与标杆案例
  3. foobar的cue生成插件
  4. Flash 游戏制作一些资源
  5. JAVA父类强转子类
  6. eclipse位数、jdk位数和电脑位数要一样
  7. Java实现 蓝桥杯油漆问题
  8. Linux 文件内容查看
  9. 仿花生日记官网源码+前后端分离/独立后台
  10. 安装和配置 苹果CMS v10 的记录 搭建教程