事件源(组件)

事件(Event)

监听器(Listener)

事件处理(引发事件后处理方式)

事件监听机制流程图

务必记牢:

确定事件源(容器或组件)

通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

一般用匿名内部类来表示。

在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

事件源:就是awt包或者swing包中的那些图形界面组件。

事件:每一个事件源都有自己特有的对应事件和共性事件。

监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。

以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。

我们要做的事情是,就是对产生的动作进行处理。

Eg:

package june610;

import java.awt.Button;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

class MyWin extends WindowAdapter{

public void windowClosing(WindowEvent e){

System.out.println("hahahha");

System.exit(0);

}

}

public class FrameDemo {//如果写成内部类的形式那么前面必须加上public static,因为主方法是静态的,不能调用动态类或者方法

public static void main(String[] args) {

//设置窗体

Frame f = new Frame("窗体");

f.setSize(400, 300);

f.setLocation(500, 300);//距离左侧,距离上面

/**可以用这个方法一次性设置

* setBounds(int x, int y, int
width, int height) 移动组件并调整其大小。

*/

Button b = new Button("按钮");

Button b2 = new Button("按钮2");

TextField tf = new TextField(20);

f.add(b);//把按钮添加到窗体上

f.add(b2);//把按钮添加到窗体上

f.add(tf);//在窗体上的的顺序按照添加的顺序

f.setLayout(new FlowLayout());//设置容器的布局管理器

//f.addWindowListener(new
MyWin());

b.addActionListener(new ActionListener(){//通过匿名内部类,方便      添加动作监听器

public void actionPerformed(ActionEvent e) {

System.out.println("按钮把界面关闭了");

//System.exit(0);

}

});

//鼠标

b.addMouseListener(new MouseAdapter() {//鼠标动作监听器

int count = 1;

public void mouseEntered(MouseEvent e){

System.out.println("鼠标进入"+(count++)+"次!");

}

});

b.addMouseListener(new MouseAdapter(){//和上面的一样,可以写在一起

int clickCount = 1;

public void mouseClicked(MouseEvent e){

if(e.getClickCount() == 2){

System.out.println("双击动作"+clickCount++);

}

}

});

/*

f.addWindowListener(new
WindowAdapter()//匿名内部类的写法

{

public void windowClosing(WindowEvent e)

{

System.out.println("我关");

System.exit(0);

}

public void windowActivated(WindowEvent e)

{

System.out.println("我活了。");

}

public void windowOpened(WindowEvent e)

{

System.out.println("我被打开了,hahahhahah");

}

});*/

//键盘:

b2.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e)

{

System.out.println("键盘的作用");//用鼠标按没反应,

System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//f---70等、

if(e.getKeyCode() == 27){//按住esc键退出

System.out.println("ESC键把我关闭了!");

System.exit(0);

}

//组合键去关闭
CTRL + ENTER

if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER){

System.out.println("CTRL + ENTER组合键把我关闭了!");

System.exit(0);

}

}

});

//文本框

tf.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e){

if(!(e.getKeyCode()>=KeyEvent.VK_0 &&
e.getKeyCode()<=KeyEvent.VK_9)){

System.out.println(e.getKeyChar()+"不符合是数字!");

}

}

});

f.setVisible(true);//设置可见性

}

}

Eg://列出文件夹内全部的文件

package june610;

import java.awt.Button;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.TextArea;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.File;

class MyFrame {

private
Frame f;

private
Button b;

private
TextField tf;

private
TextArea ta;

MyFrame()
{

init();

}

void
init() {

f = new Frame("我的电脑");

f.setBounds(300, 100, 600, 500);

f.setLayout(new FlowLayout());

b = new Button("转到");

tf = new TextField(60);

ta = new TextArea(25, 70);

f.add(tf);

f.add(b);

f.add(ta);

f.setVisible(true);

action();

}

//窗体上的操作

void
action() {

f.addWindowListener(new WindowAdapter() {

public
void windowClosing(WindowEvent e) {

System.exit(0);

}

});

buttonAction();

keyAction();

}

void
keyAction(){

//设置键盘监听器,当输入enter键的时候实现和点击鼠标同样的功能!

b.addKeyListener(new KeyAdapter() {

public
void keyPressed(KeyEvent e){

//if(e.getKeyCode() == 10){

//buttonAction();

//}

String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

File file = new File(dirPath);// 获取文件

if (file.exists() &&
file.isDirectory()) {// 判断,存在否以及是否是文件夹

ta.setText("");//
如果符合条件的话,清空以前的数据;

String[]
names = file.list();

for
(String name : names) {

ta.append(name + "\r\n");

}

System.out.println("=======");

} else {

ta.setText("");

ta.append("对不起,请确认您输入的是路径!");

}

System.out.println(e.getKeyCode());

}

});

tf.addActionListener(new ActionListener() {

public
void actionPerformed(ActionEvent e) {

String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

File file = new File(dirPath);// 获取文件

if (file.exists() &&
file.isDirectory()) {// 判断,存在否以及是否是文件夹

ta.setText("");//
如果符合条件的话,清空以前的数据;

String[]
names = file.list();

for
(String name : names) {

ta.append(name + "\r\n");

}

System.out.println("=======");

} else {

ta.setText("");

ta.append("对不起,请确认您输入的是路径!");

}

}

});

}

void
buttonAction() {

b.addActionListener(new ActionListener() {

public
void actionPerformed(ActionEvent e) {

String dirPath = tf.getText();// 获取文本(我们想验证的是路径),接下来获取文件

File file = new File(dirPath);// 获取文件

if (file.exists() &&
file.isDirectory()) {// 判断,存在否以及是否是文件夹

ta.setText("");//
如果符合条件的话,清空以前的数据;

String[]
names = file.list();

for
(String name : names) {

ta.append(name + "\r\n");

}

System.out.println("=======");

} else {

ta.setText("");

ta.append("对不起,请确认您输入的是路径!");

}

}

});

}

}

public class FrameDemo3 {

public
static void main(String[] args) {

new MyFrame();

}

}

java 事件监听机制组成的更多相关文章

  1. java事件监听机制

    1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...

  2. java事件监听机制2

    今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...

  3. JAVA事件监听机制的实现

    今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...

  4. Java事件监听机制与观察者设计模式

    一. Java事件监听机制 1. 事件监听三要素: 事件源,事件对象,事件监听器 2. 三要素之间的关系:事件源注册事件监听器后,当事件源上发生某个动作时,事件源就会调用事件监听的一个方法,并将事件对 ...

  5. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  6. JAVA事件监听机制与实现

    事件监听机制的实现:参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回调函数) 事件有许 ...

  7. java事件监听机制(自定义事件)

    java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...

  8. 【转】java事件监听机制

    java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中作为参数,一般存在与listerner的方法之中 2.event source ...

  9. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

随机推荐

  1. 制作ACK集群自定义节点镜像的正确姿势

    随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...

  2. Sublime Text 2 快捷键用法大全

    Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑) Ctrl+G 跳转到相应的行 Ctrl+J 合并行(已选择需要合并的多行时) Ctrl+L 选择整行(按住-继续 ...

  3. 【JZOJ3875】【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)

    fg 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个星 ...

  4. git reset三种模式

    reset三种模式区别和使用场景 区别: --hard:重置位置的同时,直接将 working Tree工作目录. index 暂存区及 repository 都重置成目标Reset节点的內容,所以效 ...

  5. cloud-music

    非常感谢那些无私开源的程序员,希望我也能够有能力像你们那样,开源很多很有意思的东西~~ //index.html <!DOCTYPE html> <html> <head ...

  6. Ubuntu 16.04下OLSR协议安装教程

    OLSR是根据MANET的要求,在传统的LS(Link state)协议的基础上优化的. OLSR中的关键概念是多点转播(MPRs),MPRs是在广播洪泛的过程中挑选的转发广播的节点.传统的链路状态协 ...

  7. nodeJs学习-13 router

    const express=require('express'); var server=express(); //目录1:/user/ var routeUser=express.Router(); ...

  8. 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...

  9. Java练习 SDUT-1188_各位数字之和排序

    C语言实验--各位数字之和排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定n个正整数,根据各位数字之和从小到大 ...

  10. qt 中创建一个工作线程(例子)

    当一个事件需要很长的处理时间,就创建一个工作线程,防止主界面卡死. 1.新建一个QT的gui项目,里面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow ...