/**
* 一、初步介绍
* 1.java时间处理是采取“委派事件模型”,指当事件发生时,产生事件的对象(即事件源)会把此“信息”传递给“事件的监听者”处理的一种方式。
* 该“信息”是java.awt.event.*事件类库里某个类所创建的对象,我们称为:事件的对象。
* 为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪个“事件监听者”,我们必须先把“事件监听者”在”产生事件的对象“注册”,
* 这个操作也是告知“产生事件的对象”要把时间传递给他。
*
* 2.重要概念:
* (1)事件源
* 产生或触发事件的对象,如JButton的一个对象jb1,当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件。
* (一个事件源可能会生成多个不同类型的事件。)如果某个组件希望得到事件源产生的事件,就需要在这个事件源上注册。
* (2)事件
* 事件是承载事件源状态改变时的信息对象。或者说,事件是事件源向事件监听器传输事件原状态信息的载体,在用户与GUI组件进行交互时就会生成事件,
* 比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中的位置信息,java.awt.event包和
* javax.swing.event包中定义了各种事件类型。
* (3)事件监听器
* 事件监听器实际上就是一个类,该类实现了某个事件监听器接口、比如前面我们案例中的MyPanel就是一个类,他实现了ActionListener 接口,
* 它就可以作为一个事件监听者,对接收到的事件进行处理。事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,
* 一个类可以实现一个事件监听接口,也可以实现多个监听接口。
* 3.步骤
* (1)编写事件处理类(事件监听者)
* (2)根据需求给事件处理类实现监听器接口。
* (3)在事件处理类中重写(实现)其事件处理的函数。
* (4)在事件源类中制定该事件的监听器(响应者)是谁,即注册监听。
* 4.注意事项
* (1)Java采用委托机制处理事件。
* (2)Java中的事件是分类的,比如对窗体事件,鼠标事件,按键事件,操作事件【按按钮】
* (3)Java中一个类要监听某个事件,则必须实现相应的事件监听接口。
* (4)事件监听接口有多种,程序员应当针对不同的情况,实现不同的监听接口,比如监听鼠标事件就应当实现MouseListener;
* 要监听键盘事件就应当实现KeyListener...
* (5)在实现监听接口的类(事件监听类/者)中,需要重写处理函数,比如实现了ActionListener接口,就应当重写actionPerformed(ActionEvent e)。
* (6)在事件源中需要注册事件监听类,否则事件监听类接收不到事件源发生的事件。
* 一、初步介绍
* 1.java时间处理是采取“委派事件模型”,指当事件发生时,产生事件的对象(即事件源)会把此“信息”传递给“事件的监听者”处理的一种方式。
* 该“信息”是java.awt.event.*事件类库里某个类所创建的对象,我们称为:事件的对象。
* 为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪个“事件监听者”,我们必须先把“事件监听者”在”产生事件的对象“注册”,
* 这个操作也是告知“产生事件的对象”要把时间传递给他。
*
* 2.重要概念:
* (1)事件源
* 产生或触发事件的对象,如JButton的一个对象jb1,当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件。
* (一个事件源可能会生成多个不同类型的事件。)如果某个组件希望得到事件源产生的事件,就需要在这个事件源上注册。
* (2)事件
* 事件是承载事件源状态改变时的信息对象。或者说,事件是事件源向事件监听器传输事件原状态信息的载体,在用户与GUI组件进行交互时就会生成事件,
* 比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中的位置信息,java.awt.event包和
* javax.swing.event包中定义了各种事件类型。
* (3)事件监听器
* 事件监听器实际上就是一个类,该类实现了某个事件监听器接口、比如前面我们案例中的MyPanel就是一个类,他实现了ActionListener 接口,
* 它就可以作为一个事件监听者,对接收到的事件进行处理。事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,
* 一个类可以实现一个事件监听接口,也可以实现多个监听接口。
* 3.步骤
* (1)编写事件处理类(事件监听者)
* (2)根据需求给事件处理类实现监听器接口。
* (3)在事件处理类中重写(实现)其事件处理的函数。
* (4)在事件源类中制定该事件的监听器(响应者)是谁,即注册监听。
* 4.注意事项
* (1)Java采用委托机制处理事件。
* (2)Java中的事件是分类的,比如对窗体事件,鼠标事件,按键事件,操作事件【按按钮】
* (3)Java中一个类要监听某个事件,则必须实现相应的事件监听接口。
* (4)事件监听接口有多种,程序员应当针对不同的情况,实现不同的监听接口,比如监听鼠标事件就应当实现MouseListener;
* 要监听键盘事件就应当实现KeyListener...
* (5)在实现监听接口的类(事件监听类/者)中,需要重写处理函数,比如实现了ActionListener接口,就应当重写actionPerformed(ActionEvent e)。
* (6)在事件源中需要注册事件监听类,否则事件监听类接收不到事件源发生的事件。
*/
package com.shuiyixin1;
import java.awt.*;
import java.awt.event.*;//事件处理机制
import javax.swing.*;
public class learnJ_012shijianchuli extends JFrame implements ActionListener{
/**
* @作者:shuiyixin
* @日期:2018.02.22
* @内容:事件处理机制
*/
MyPanel mp = null;
JButton jb1,jb2;
public static void main(String[] args) {
//
learnJ_012shijianchuli sj = new learnJ_012shijianchuli();
sj.Fun1();
}
public void Fun1(){
//创建按钮
mp = new MyPanel();
jb1 = new JButton("黑色");
jb2 = new JButton("红色");
//设置布局
this.add(jb1,BorderLayout.NORTH);
this.add(mp);
this.add(jb2,BorderLayout.SOUTH);
Cat mycat = new Cat();
//注册监听,如果某个组件希望得到事件源产生的事件,就需要在这个事件源上注册。
jb1.addActionListener(this);
jb1.addActionListener(mycat);//一般来说,jb1为事件源,mycat是事件监听者。在jb1事件源上进行注册。
//指定Action命令
jb1.setActionCommand("bb");
jb2.addActionListener(this);
jb2.setActionCommand("rr");
//窗口设置
this.setSize(300,200);
this.setLocation(350, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//示例1.当按下按钮时,在按钮触发一个事件,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,
//“事件的监听者”根据“事件对象”的类型进行相应的处理。
class MyPanel extends JPanel {
public void paint(Graphics g){
super.paint(g);
}
}
//对事件处理的方法
public void actionPerformed(ActionEvent e) {
//判断哪个按钮被单击
if (e.getActionCommand().equals("bb")) {
mp.setBackground(Color.BLACK);
System.out.println("BLACK");
} else if(e.getActionCommand().equals("rr")){
mp.setBackground(Color.RED);
System.out.println("RED");
}
}
//任何一个类,只要实现相应的接口,就可以作为监听者,监听某个事件源。
class Cat implements ActionListener{
//猫类实现监听
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getActionCommand().equals("bb")) {
System.out.println("The cat know you push the button named BLACK");
} else if (e.getActionCommand().equals("rr")) {
} else {
}
}
}
}
项目实例之小球移动
package com.test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.sun.org.apache.xml.internal.security.keys.content.KeyValue;
public class test003_ballMove extends JFrame {
/**
* @简单游戏之小球移动
*
*/
MyPanel mp ;
public static void main(String[] args) {
// TODO Auto-generated method stub
test003_ballMove tb = new test003_ballMove();
tb.Fun1();
}
public void Fun1(){
mp = new MyPanel();
this.add(mp);
this.addKeyListener(mp);
this.setTitle("小球移动");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400,300);
this.setBackground(Color.BLUE);
this.setVisible(true);
}
class MyPanel extends JPanel implements KeyListener{
int x = 10;
int y = 10;
public void paint(Graphics g){
super.paint(g);
//定义游戏区域
g.setColor(Color.BLUE);
g.fillRect(0, 0, 300, 200);
g.setColor(Color.RED);
g.fillOval(x, y, 10, 10);
}
//键盘被按下
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
//System.out.println(e.getKeyChar() + "键被按下");
if (e.getKeyCode() == KeyEvent.VK_DOWN &&y<190) {
y += 5;
} else if (e.getKeyCode() == KeyEvent.VK_UP &&y>=0) {
y -=5;
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT &&x<=285) {
x +=5;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT &&x>=0) {
x -=5;
}
repaint();
}
//键盘被释放
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
//键盘的一个值被输出
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}