监听器
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
我们是写监听器去监听其他对象,那么我们如果想设计一个对象,让这个对象可以被别的对象监听又该怎么做呢,可以按照严格的事件处理模型来设计一个对象,这个对象就可以被别的对象监听,事件处理模型涉及到三个组件:事件源、事件对象、事件监听器。
我们设计一个 Button作为事件源他可以被单击和双击 设计一个监听器监听单击和双击事件,如果button被单击则弹出一个对话框显示button被单击的次数
如果button被双击则弹出对话框显示button被双击的次数。
新建Button
public class Button {
private ButtonListener listener;//button监听器
public int countclick=0;//记录按钮被单击的次数
public int countdoubleclick=0;//记录按钮被双击的次数
public void click()
{
System.out.println("*****按钮被单击*****");
if(listener!=null)
{
listener.doclick(new Event(this));
}
}
public void doubleclick()
{
System.out.println("*****按钮被双击******");
if(listener!=null)
{
listener.dodoubleclick(new Event(this));
}
}
//注册监听器
public void registerListener(ButtonListener listener)
{
this.listener = listener;
}
}
监听器接口
public interface ButtonListener {
//触发单击事件
void doclick(Event e);
//触发双击事件
void dodoubleclick(Event e);
}
事件对象
public class Event {
private Button source;
public Event(Button source)
{
this.source = source;
}
public Button getSource()
{
return source;
}
public void setSource(Button source)
{
this.source = source;
}
}
测试类
public class test {
public static void main(String[] args) {
Button btn = new Button();
//注册监听器
btn.registerListener(new ButtonListener() {
//触发单击事件
@Override
public void doclick(Event e) {
Button btn = e.getSource();
btn.countclick++;
System.out.println("弹出对话框按钮被单击了"+btn.countclick+"次");//模拟弹出对话框
}
//触发双击事件
@Override
public void dodoubleclick(Event e) {
Button btn = e.getSource();
btn.countdoubleclick++;
System.out.println("弹出对话框按钮被双击了"+btn.countdoubleclick+"次");//模拟弹出对话框
}
});
//模拟按钮被单击
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++)
{
btn.click();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printstacktrace();
}
}
}
});
//模拟按钮被双击击
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++)
{
btn.doubleclick();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t1.start();
t2.start();
}
}
运行test得到
参考资料:监听器介绍
相关阅读
监听器 一. 监听器接口和注册 监听器接口分类: ServletContext HttpSession ServletRequest 监听器接口主要在javax.servlet
package swing;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ja