import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener{
JPanel jp=null;
JButton jb1=null;
JButton jb2=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test tt=new Test();
}
public Test()
{
jp=new JPanel();
jb1=new JButton("黑色");
jb2=new JButton("红色");
this.add(jb1,BorderLayout.NORTH);
//jp.setBackground(Color.black);
this.add(jp);
this.add(jb2,BorderLayout.SOUTH);
Cat mycat=new Cat();
//注册监听事件
jb1.addActionListener(this);//事件源对象是jb1,事件监听对象mycat和this
jb1.addActionListener(mycat);
jb1.setActionCommand("黑色");//指定Action命令
jb2.addActionListener(this);
jb2.addActionListener(mycat);
jb2.setActionCommand("红色");//指定Action命令
this.setSize(500,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
//对事件处理的方法
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//判断是那个按钮被点击
if(e.getActionCommand().equals("黑色"))
{
System.out.println("你点击黑色按钮");
jp.setBackground(Color.black);
}
else if(e.getActionCommand().equals("红色"))
{
System.out.println("你点击红色按钮");
jp.setBackground(Color.red);
}
else
{
System.out.println("不知道");
}
}
}
//任何一个类只要实现它相应的接口 就可以去监听某个事件源
class Cat implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("黑色"))
{
System.out.println("猫按下黑色按钮");
}
else if(e.getActionCommand().equals("红色"))
{
System.out.println("猫按下红色按钮");
}
}
}
* a先写一个类要实现监听的步骤
* b实现相应的接口【ActionListener,keyListener,mouseListener,windowListener】
* c把接口的处理方法根据需要重新编写override
* d在事件源组测监听
* e事件传递是靠事件对象
事件源-----------------------事件(对象)--------------------------》事件监听者(事件处理方法)
几个现实中的例子:
小偷打了小孩------------------(小孩)-------------------》小孩告诉给妈妈(妈妈来处理)
事件源:是一个产生(或触发)事件的对象,当这个事件对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件),如果某个组件(对象)希望的到事件源产生的事件,就需要在这个事件源上注册。
事件:就是承载事件源状态改变时的信息对象,或者说事件是事件源向事件监听传输事件源状态信息的载体,在用户与GUI组件进行交互时就会生产事件,比如当鼠标在面板中移动,就会生成一个鼠标移动事件的对象,而这个对象保存着当鼠标在面部中位置的信息。
事件监听器接口:事件源产生一个事件,可以传送给事件监听者处理,实际上事件监听者就是一个类,应该实现了某个事件监听器接口,在它实现了接口,就可以作为一个事件监听者,对接收到的事件进行处理。
重点总结:不同事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame{
Mypanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Test tt=new Test();
}
public Test()
{
mp=new Mypanel();
//组册监听
this.addMouseListener(mp);
this.addWindowListener(mp);
this.addMouseMotionListener(mp);
this.add(mp);
this.setSize(500,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class Mypanel extends JPanel implements MouseListener,WindowListener,MouseMotionListener
{
public void paint(Graphics g)
{
super.paint(g);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("mouseClicked");
}
@Override
//鼠标点击的位置
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("x="+e.getX()+"Y="+e.getY());
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("mouseReleased");
}
@Override
//鼠标进入
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标进入");
}
@Override
//鼠标离开
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标离开");
}
@Override
//窗口被打开
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口被打开");
}
@Override
//窗口真正关闭
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口真正关闭");
}
@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
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("当前坐标:"+e.getX()+"."+e.getY());
}
}