java事件监听总结

方法一:

当有多个事件源时,最好使用这种方式。

//使用动作监听实现焦点转移
package za;

import java.applet.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Text extends Applet implements ActionListener {
	
	private static final long serialVersionUID = 1L;
	TextField userText, passText;
	Button loginButton;
	public void init() 
	{
		userText = new TextField(10);
		passText = new TextField(10);
		loginButton = new Button("   login   ");
		add(userText);
		add(passText);
		add(loginButton);
		passText.requestFocus();         //开始passText获得焦点
		userText.addActionListener(this);//一定不要忘了注册监听
		passText.addActionListener(this);
		loginButton.addActionListener(this);
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==userText) //如果userText文本框状态改变(按"Enter"),则触发动作监听,
			passText.requestFocus(); //passText获得焦点,即焦点从userText转移到passText     
		else if(e.getSource()==passText) //如果passText状态改变,则loginButton获得焦点
			loginButton.requestFocus();
		else if(e.getSource()==loginButton) //如果按钮(loginButton)状态改变(按钮被点击)
			userText.requestFocus();        //userText获得焦点
	}
}
方法二:

使用匿名内部类

//使用动作监听实现焦点转移
package za;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Text extends JFrame{
	
	private static final long serialVersionUID = 1L;
	public Text()
	{
		this.setSize(150, 80);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JTextField text=new JTextField();
		JButton btn=new JButton("宝藏");
		this.getContentPane().add(text,BorderLayout.NORTH);
		this.getContentPane().add(btn);
		this.pack();
		btn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				text.setText("此地无银三百两");
			}			
		});
		this.setVisible(true);
	}
	public static void main(String args[])
	{
		new Text();
	}	
}

方法三:

实现自己的监听类

//使用动作监听实现焦点转移
package za;

import javax.swing.*;
import java.awt.event.*;
  
public class Demo extends JFrame{      
    
	private static final long serialVersionUID = 1L;
	MyListener mp=null;
      
    public static void main(String[] args)
    {
        new Demo();
    }
      
    public Demo()
    {
        //=== 创建MyPanel对象 ===
        mp=new MyListener();
        
        //=== 注册监听 ===
        this.addMouseListener(mp);
        this.addKeyListener(mp);
        this.addMouseMotionListener(mp);
        this.addWindowListener(mp);
          
        //=== MyPanel初始化设置 ===
        this.setSize(400,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}  
//实现自己的监听类
class MyListener implements MouseListener,KeyListener,MouseMotionListener,WindowListener
{
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标点击了 x="+e.getX()+"  y="+e.getY());
    }
  
    //2. 鼠标移动到MyPanel
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标进入MyPanel!");
    }
  
    //3. 鼠标离开MyPanel
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标离开MyPanel!");
    }
  
    //4. 鼠标按下但未松开
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标按下但是未松开!");
    }
  
    //5. 鼠标释放了
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标按键被释放了!");
    }
  
    /*
     *  KeyListener
     */
    //1. 键按下但未松开
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println(e.getKeyChar()+"键被按下了!");
    }
  
    //2. 键释放
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
          
    }
  
    //3. 键输入值
    // 没有字符的按键是不会被触发的
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
          
    }
      
    /*
     * (non-Javadoc)
     * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口被拖拽啦 ~~~~");
    }
  
    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标当前坐标:x="+e.getX()+"  y="+e.getY());
    }
      
    /*
     *  WindowListener
     */
    @Override
    public void windowActivated(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 windowClosing(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 windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
          
    }
  
    @Override
    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub
          
    }
  
    @Override
    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("~~~~~WindowsOpened~~~~~");
    }
}
方法四:

监听类和面板同时实现

package za;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
  
public class Demo extends JFrame{
      
  
	private static final long serialVersionUID = 1L;
	MyPanel mp=null;
      
    public static void main(String[] args) {
        new Demo();
    }
      
    public Demo()
    {
        //=== 创建MyPanel对象 ===
        mp=new MyPanel();
          
        //=== 注册监听 ===
        this.addMouseListener(mp);
        this.addKeyListener(mp);
        this.addMouseMotionListener(mp);
        this.addWindowListener(mp);
          
        //=== MyPanel初始化设置 ===
        this.add(mp);
        this.setSize(400,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}
  
// 1. 让MyPanel 知道鼠标按下的消息并知道点击坐标(x,y)
// 2. 让MyPanel 知道哪个键按下了
// 3. 让MyPanel 知道移动、拖拽
// 4. 让MyPanel 知道窗口的变化(关闭、最小化、最大化等)
class MyPanel extends JPanel implements MouseListener,KeyListener,MouseMotionListener,WindowListener
{   
	private static final long serialVersionUID = 1L;

	public void paint(Graphics g)
    {
        super.paint(g);
    }
  
    /*
     *   MouseListener
     */
    //1. 鼠标点击
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标点击了 x="+e.getX()+"  y="+e.getY());
    }
  
    //2. 鼠标移动到MyPanel
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标进入MyPanel!");
    }
  
    //3. 鼠标离开MyPanel
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标离开MyPanel!");
    }
  
    //4. 鼠标按下但未松开
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标按下但是未松开!");
    }
  
    //5. 鼠标释放了
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标按键被释放了!");
    }
  
    /*
     *  KeyListener
     */
    //1. 键按下但未松开
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println(e.getKeyChar()+"键被按下了!");
    }
  
    //2. 键释放
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
          
    }
  
    //3. 键输入值
    // 没有字符的按键是不会被触发的
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
          
    }
      
    /*
     * (non-Javadoc)
     * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口被拖拽啦 ~~~~");
    }
  
    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠标当前坐标:x="+e.getX()+"  y="+e.getY());
    }
      
    /*
     *  WindowListener
     */
    @Override
    public void windowActivated(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 windowClosing(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 windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
          
    }
  
    @Override
    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub
          
    }
  
    @Override
    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("~~~~~WindowsOpened~~~~~");
    }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值