[java] 事件及事件监听器

事件及事件监听器

  • 事件(Event)
    鼠标,键盘,布局改变等等操作
  • 事件监听器(Event Listener) 对这些事件做出响应的程序, 是一个接口
ActionListener al = new MyListener();
btn.addActionListener(al);

class MyListener implements ActionListener{
  @Override
  public void actionPerformed(ActionEvent e){
    System.out.println("a button has been pressed");
  }
}

Event包含的信息

  • 事件源(即产生事件的组件)
    getSource()
    得到的Object可以强制类型转换成相应的类型
  • 事件的具体情况
    如MouseEvent的getX(), getY()方法得到鼠标的坐标
    KeyEvent的getKeyChar()得到当前的字符等

事件适配器(Adapter)

  • 简化实现Listener
    在适配器类中,实现了相应监听器接口中所有的方法,但不做任何事情
    在extends事件适配器时,只需要Override自己所需要的方法即可

注册事件监听器

  • 事件的注册 addxxxxListener
  • 监听器的实现有两种方法
    implements xxxListener //具体写其中的每个方法
    extends xxxAdapter //其中Adapter是Listener的默认实现,每个方法的方法体都为空,Adapter可以指Override其中重要的方法

Java中implements一个接口一定要重写其中所有方法吗?

答:不一定,如果是一个抽象类去实现一个接口,就可以不重写其中所有方法,而在其子类中实现。

事件与线程

  • 线程中,如果要更新界面,要放到the event dispatching thread
  • 也就是要调用SwingUtilities.invokeLater()方法
btn.addActionListener(e->{
  new Thread(()->{
    for(int i = 10; i >= 0; i --){
      final int j = i;
      SwingUtilities.invokeLater(()->{
        lbl.setText(""+j);
      });
      try{Thread.sleep(200);}
      catch(Exception ex){}
    }
  }).start();
});
Written on December 21, 2022