方法一:
当有多个事件源时,最好使用这种方式。
//使用动作监听实现焦点转移
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~~~~~");
}
}