import java.awt.*;
import java.awt.event.*;

public class MultiListenerTest implements ActionListener, MouseListener,MouseMotionListener,WindowListener{
   
    Frame f = new Frame("MultiListenerTest");
    Button b = new Button("退出");
    Label l = new Label("请按下鼠标左键并拖动");
    TextField tf = new TextField(40);
   
    //创建一个方法
    public void Start(){
        b.addActionListener(this); //给按钮添加监听事件
        f.add(l,BorderLayout.NORTH);//添加组件并进行布
        f.add(tf,BorderLayout.SOUTH);//添加组件并进行布
        f.add(b,BorderLayout.EAST);//添加组件并进行布局
        f.setBackground(Color.CYAN);//设置frame的颜色
        f.addMouseListener(this); // 给frame添加MouseListener事件
        f.addMouseMotionListener(this);//给frame添加MouseMotionListener事件
        f.addWindowListener(this);//给frame添加 WindowListener 事件
        f.setLocationByPlatform(true);
        f.setSize(400,300);
        f.setVisible(true);               
    }
   
    //重写ActionListener中的actionPerformed(ActionEvent e) 方法
    public void actionPerformed(ActionEvent e){
        System.exit(1);//退出窗口,关闭窗口
    }
    //重写MouseMotionListener中mouseDragged(MouseEvent e)方法
    public void mouseDragged(MouseEvent e){
        String str = "鼠标位置为: X="+e.getX() + ", Y="+e.getY();
        tf.setText(str);
    }
    //重写MouseListener中的mouseEntered(MouseEvent e)方法
    public void mouseEntered(MouseEvent e){
        String str = "鼠标进入窗体X="+e.getX()+", Y="+e.getY();
        tf.setText(str);
    }
    //重写MouseListener中的mouseExited(MouseEvent e)
    public void mouseExited(MouseEvent e){
        String str = "鼠标退出窗体";
        tf.setText(str);
    }
    //重写MouseListener中的mouseMoved(MouseEvente e)方法
    public void mouseMoved(MouseEvent e){
        String str = "鼠标进入窗体X="+e.getX()+", Y="+e.getY();
        tf.setText(str);
    }
    //重写MouseListener中的 mousePressed(MouseEvente e)方法
    public void mousePressed(MouseEvent e){
    }
    //重写MouseListener中的 mouseClicked(MouseEvente e)方法
    public void mouseClicked(MouseEvent e){
    }
    //重写MouseListener中的 mouseReleased(MouseEvente e)方法
    public void mouseReleased(MouseEvent e){
    }
   
    //下面的是重写WindowListener中的所有的抽象方法
    public void windowActivated(WindowEvent e){
    }
    public void windowClosed(WindowEvent e){
    }
    public void windowClosing(WindowEvent e){
        System.exit(0);//关闭窗口
    }
    public void windowDeactivated(WindowEvent e){
    }
    public void windowDeiconified(WindowEvent e){
    }
    public void windowIconified(WindowEvent e){
    }
    public void windowOpened(WindowEvent e){
    }
   
    // 创建main方法,
    public static void main(String[] args){
        new MultiListenerTest().Start();
    }
}
// 由于监听器的类型是接口类型,
//所以在使用监听器的时候要重写监听器所有的抽象方法