[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