import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*
栗子 事件监听了解
*/
class Cat implements ActionListener{
public void actionPerformed(ActionEvent arg0){
if(arg0.getActionCommand().equals("黑色")){
System.out.println("Cat也知道你按下了黑色按钮");
}
else if(arg0.getActionCommand().equals("红色")){
System.out.println("Cat也知道你按下了红色按钮");
}
else{
System.out.println("Cat什么也不知道");
}
}
}
public class Test_Action extends JFrame implements ActionListener {
//定义组件
JPanel mp = null;
JButton jb1,jb2; public Test_Action(){
mp = new JPanel();
jb1 = new JButton("黑色");
jb2 = new JButton("红色");
//设定布局管理器 //加入组件
mp.setBackground(Color.black);
this.add(mp);
this.add(jb1,BorderLayout.NORTH);
this.add(jb2,BorderLayout.SOUTH); //猫类在监听
Cat mycat1 = new Cat();
jb1.addActionListener(mycat1);
jb2.addActionListener(mycat1);
//注册监听
jb1.addActionListener(this);
jb2.addActionListener(this); //指定action命令
jb1.setActionCommand("黑色");
jb2.setActionCommand("红色"); //窗体设置
this.setTitle("事件处理机制");
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //对事件处理的方法
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("黑色")){
System.out.println("点击了黑色按钮");
}else if(e.getActionCommand().equals("红色")){
System.out.println("点击了红色按钮");
}else{
System.out.println("不知道");
}
} public static void main(String[] args){
Test_Action ta = new Test_Action();
} }
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/*
栗子 加深对事件处理机制的理解
1. 通过上下左右键,来控制一个小球的移动
*/ //定义自己的面板
class MyPanels extends JPanel implements KeyListener{
int x = 10,y = 10;
public void paint(Graphics g){
super.paint(g);
g.fillOval(x,y,10,10);
} //按键被按下
public void keyPressed(KeyEvent e){
System.out.println("被按下" + ((char)e.getKeyCode()));
if(e.getKeyCode() == KeyEvent.VK_DOWN){
System.out.println("向下");
y++;
}else if(e.getKeyCode() == KeyEvent.VK_UP){
System.out.println("向上");
y--;
}else if(e.getKeyCode() == KeyEvent.VK_LEFT){
System.out.println("向左");
x--;
}else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
System.out.println("向右");
x++;
} //调用repaint(),重绘界面
this.repaint(); } //按键被弹起
public void keyReleased(KeyEvent e){ } //keyTyped代表具体的值被输出
public void keyTyped(KeyEvent e){ }
}
public class Test_Action extends JFrame {
//定义组件
MyPanels mp = null; public Test_Action(){
mp = new MyPanels(); //监听
this.addKeyListener(mp); //加入组件
this.add(mp);
//设置窗体
this.setTitle("键盘事件监听");
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args){
Test_Action ta = new Test_Action();
} }

按上下左右键可相应的上下左右

Java事件处理机制--深入理解

几个重要的概念:1. 事件源 2. 事件 3. 事件监听器

1. 事件源是一个产生(或触发)事件的对象,比如前面的JButton的一个对象jb1. 当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册。

2.事件就是承载事件源状态改变时的信息对象。Java.awt.event 包和 javax.swing.event包中定义了各种事件类型,常见的事件类有:

ActionEvent        按下按钮,或双击一个列表项或选中某个菜单时

AdjustmentEvent 当操作一个滚动条

ComponentEvent  当一个组件隐藏、移动、改变大小时

ContainerEvent    当一个组件从容器中加入或者删除时

FocusEvent 当一个组件获得或失去焦点的时候

ItemEvent  当一个复选框或是列表项被选中,当一个选择框或选择菜单被选中

KeyEvent  从键盘的按键被按下,松开时发生

MouseEvent  鼠标被拖动、移动、点击、按下....

TextEvent  文本区和文本域的文本发生改变时

WindowEvent  当一个窗口激活、关闭、失效、恢复、最小化...

import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*; /*
栗子 单事件源、多事件监听、多事件处理
*/ //1. 让MyPanel知道鼠标按下的消息,并且知道点击的位置(x,y)
//2. 让MyPanel知道哪个键按下了 class MyPanel extends JPanel implements MouseListener,MouseMotionListener,KeyListener,WindowListener{
public void paint(Graphics g){
super.paint(g);
} //鼠标点击
public void mouseClicked(MouseEvent e){
System.out.println("鼠标点击了x=" + e.getX() + "y=" + e.getY());
} //鼠标移动到MyPanel(mouseEntered)
public void mouseEntered(MouseEvent e){
System.out.println("鼠标移动到MyPanel上了");
} //鼠标离开
public void mouseExited(MouseEvent e){
System.out.println("鼠标离开MyPanel了");
} //鼠标按下去
public void mousePressed(MouseEvent e){
System.out.println("鼠标在MyPanel被按下了");
} //鼠标松开
public void mouseReleased(MouseEvent e){
System.out.println("鼠标在MyPanel被松开了");
} //鼠标拖拽
public void mouseDragged(MouseEvent e){
System.out.println("鼠标拖拽x=" + e.getX() + "y=" + e.getY());
} //鼠标移动
public void mouseMoved(MouseEvent e){
System.out.println("鼠标移动时X=" + e.getX() + "Y=" + e.getY());
} //键输入值,F(1-12)无响应
public void keyTyped(KeyEvent e){
System.out.println("输入了" + e.getKeyChar() + "键");
} //键按下
public void keyPressed(KeyEvent e){
System.out.println("按下了" + e.getKeyChar() + "键");
} //键松开
public void keyReleased(KeyEvent e){
System.out.println("松开了" + e.getKeyChar() + "键");
} //打开窗口
public void windowOpened(WindowEvent e){
System.out.println("打开窗口了");
} //窗口关闭Closing
public void windowClosing(WindowEvent e){
System.out.println("窗口关闭Closing");
} //窗口关闭closed
public void windowClosed(WindowEvent e){
System.out.println("窗口关闭closed");
} //窗口最小化
public void windowIconified(WindowEvent e){
System.out.println("窗口最小化");
} //恢复窗口
public void windowDeiconified(WindowEvent e){
System.out.println("恢复窗口");
} //激活窗口,使用窗口
public void windowActivated(WindowEvent e){
System.out.println("激活窗口");
} //窗口停用,切换窗口
public void windowDeactivated(WindowEvent e){
System.out.println("窗口停用");
} } public class Test_Action extends JFrame {
//定义组件
MyPanel mp = null; public Test_Action(){
mp = new MyPanel(); //注册监听
this.addMouseListener(mp);
this.addMouseMotionListener(mp);
this.addKeyListener(mp);
this.addWindowListener(mp); //加入组件
this.add(mp);
//设置窗体
this.setTitle("事件多监听多处理");
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args){
Test_Action ta = new Test_Action();
} }
												

【Java】【事件处理机制】的更多相关文章

  1. 从零开始理解JAVA事件处理机制(1)

    “事件”这个词已经被滥用了.正因为“事件”的被滥用,很多人在用到事件的时候不求甚解,依样画葫芦,导致学习工作了很多年,还是不清楚什么是事件处理器.什么是事件持有者.所以,如果你对于Event这个词还是 ...

  2. 从零开始理解JAVA事件处理机制(2)

    第一节中的示例过于简单<从零开始理解JAVA事件处理机制(1)>,简单到让大家觉得这样的代码简直毫无用处.但是没办法,我们要继续写这毫无用处的代码,然后引出下一阶段真正有益的代码. 一:事 ...

  3. 从零开始理解JAVA事件处理机制(3)

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

  4. java事件处理机制

    java中的事件机制的参与者有3种角色:   1.event object:就是事件产生时具体的"事件",用于listener的相应的方法之中,作为参数,一般存在与listerne ...

  5. [转]Java事件处理机制- 事件监听器的四种实现方式

    原文来自http://stefan321.iteye.com/blog/345221 自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: ...

  6. Java事件处理机制(深入理解)

    本文是关于Java事件处理机制的梳理,以及有重点的介绍一些注意点,至于基础的概念啥的不多赘述. 一.Java事件处理机制初步介绍(看图理解) 根据下图,结合生活实际,可以得知监护人可以有多个,坏人对小 ...

  7. Java事件处理机制- 事件监听器的四种实现方式

    自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: import javax.swing.*; import java.awt.*; i ...

  8. java 事件处理机制:按下上下左右键控制小球的运动

    /** * 加深对事件处理机制的理解 * 通过上下左右键来控制一个小球的位置 */package com.test3;import java.awt.*;import javax.swing.*;im ...

  9. java事件处理机制(自定义事件)

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

  10. Java事件处理机制1

    实现一个小程序,怎样通过点击不同的按钮,让面板的背景色发生相应的变化,如图: public class Demo2 extends JFrame implements ActionListener{ ...

随机推荐

  1. Python词云分析

    import jieba from matplotlib import pyplot as plt from wordcloud import WordCloud from PIL import Im ...

  2. VI编辑器常用命令

    Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能. ...

  3. UVA 11488 Hyper Prefix Sets (字典树)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. bzoj1594 Pku3764 The xor-longest Path

    题目链接 先求每个点到根的异或和 然后就要找出两个点,使dis[a]^dis[b]最大 注意异或的性质,我们可以用trie树,沿着与当前数字每位的相反方向走 #include<algorithm ...

  5. Python+OpenCV图像处理(十)—— 图像二值化

    简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...

  6. nmap扫描验证多种漏洞

    nmap在Kali Linux中是默认安装的.它不仅可以用来确定目标网络上计算机的存活状态,而且可以扫描各个计算机的操作系统.开放端口.服务,还有可能获得用户的证书. 命令结构: nmap -sS - ...

  7. The Little Prince-12/05

    The Little Prince-12/05 "When a mystery is too overpowering, one dare not disobey. Absurd as it ...

  8. pyenv安装

    petalinux-config出错 以为是pyenv的问题,后发现不是,把pyenv的安装卸载总结如下: 折腾了半天发觉是安装了pyenv导致的python版本混乱,卸载后问题解决了.(卸载过程见h ...

  9. php 网站中文简体繁体转换类

    php 网站中文简体繁体转换类 <?php /* * define zh convert functions * 2017-4-28 use str_replace for speed * zh ...

  10. linux command line send email

    https://www.tecmint.com/send-email-attachment-from-linux-commandline/ https://stackoverflow.com/ques ...