在java开发中,事件的处理非常重要。比如在swing编程里,若要实现当点击按钮、文本框、移动鼠标、按下键盘就执行相应的操作,就要用到事件与监听器。这个过程可以分解为事件源产生某个获某些事件,添加在这个事件源的监听器会自动根据产生的事件做出响应,如下图:事件源
即产生事件的主体,例如,在点击按钮时事件源是按钮,在面板上进行鼠标移动时这个面板就是事件源。事件
事件可以理解为对事件源进行的操作,当执行这个操作的时候,事件源产生相应的事件,对事件源执行不同的操作会产生不同的事件,而监听器会根据不同的事件做出相应的处理。监听器
监听器实际上是实现了特定接口的类。在java中提供了许多对不同的事件处理的接口的,而我们在使用监听器时,就是要根据要监听的事件去实现相应的接口类,对接口的事件处理方法进行重写。在应用时要将监听器对象添加到事件源,一个事件源可以添加多个监听器。在事件产生时,事件源对象会将事件反馈给监听器,调用监听器中重写的方法。
常用的监听器实例:ActionListener(动作监听器)
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
类中只有一个actionPerformed方法,当点击按钮、文本框输入回车时会执行这个方法。
例:
//画一个窗口,同时在本类中实现监听器接口,重写事件处理方法public class test implements ActionListener{
private JFrame jf;
private JButton jbu1,jbu2;
public test(){
jf = new JFrame();
jf.setSize(300, 200);
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
FlowLayout f=new FlowLayout();
jf.setLayout(f);//设置流式布局 jbu1 = new JButton("按钮1");
jbu2 = new JButton("按钮2");
jbu1.addActionListener(this); //给按钮添加(注册)监听器 jbu2.addActionListener(this); //给按钮添加(注册)监听器 jf.add(jbu1);
jf.add(jbu2);
jf.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jbu1) System.out.println("按下按钮1");
if(e.getSource()==jbu2) System.out.println("按下按钮2");
}
public static void main(String[] args) {
new test();
}
}MouseListener(鼠标监听器)
//实现监听器,重写监听器方法
public class myMouseListener implements MouseListener {
public void mouseClicked(MouseEvent e){
System.out.println("点击");
}
public void mousePressed(MouseEvent e){
System.out.println("按下");
}
public void mouseReleased(MouseEvent e){
System.out.println("释放");
}
public void mouseEntered(MouseEvent e){
System.out.println("进入");
}
public void mouseExited(MouseEvent e){
System.out.println("离开");
}
}
//事件源与监听器不在同一类中
public class test {
public test(){
JFrame frame=new JFrame();
frame.setSize(600,600);
frame.setDefaultCloseOperation(3);//设置关闭
frame.setLocationRelativeTo(null);//设置居中
FlowLayout f=new FlowLayout();
frame.setLayout(f);//设置流式布局
myMouseListener mml = new myMouseListener();
frame.addMouseListener(mml);
frame.setVisible(true);//设置窗体可见
}
public static void main(String[] args) {
new test();
}
}