写一下自己对java事件机制到理解。
java的事件处理机制很简单,事件的发起着先注册一个监听器用来监听事件的触发,一般在监听器中实现事件的处理,当事件发起着触发某种条件的时候,对事件进行处理,这个过程叫回调(不知到我的理解有没有问题)。
网上看了几个小例子,感觉怪怪的,自己就写了一个,没什么注释,一运行就看懂了。相当于是个警察审问犯人的小例子。
1,有main方法的Main 类
package first.lintener; import java.util.Scanner; public class Main { public static void main(String args[]){ System.out.println("简单到事件监听程序/n" + "警察审问,名字叫a就判断是个好人,否则就不是好人/n" + "Main类为主类,测试整个程序/n" + "Ask类为事件源,发出询问(相当于警察,可以记录犯人姓名,在条件触发的时候做出相应判断)/n" + "AskEvent为事件/n" + "Listener为监听接口,对监听的方法进行处理/n" + "输入print触发事件,显示事件的处理/n" + "输入exit结束/n"); System.out.println("START"); Scanner scan = new Scanner(System.in); Ask ask = new Ask(); ask.addListener(new Listener(){ public void listen(AskEvent ae) { if(ae.getName().equals("a")) System.out.println(ae.getName() + "你是个好人!"); else System.out.println(ae.getName() + "你不是好人!"); } }); while(true){ System.out.print("input name:"); final String name = scan.nextLine(); if(name.equals("exit")) break; if(name.equals("print")) { ask.setFlag(true); continue; } ask.addName(name); } System.out.println("OVER"); } }
2,监听器Listener
package first.lintener; import java.util.EventListener; public interface Listener extends EventListener { public void listen(AskEvent ae); }
3,事件发起者Ask(相当于警察)
package first.lintener; import java.util.ArrayList; import java.util.List; public class Ask { private Listener l ; private List<String> names = new ArrayList<String>(); public void addListener(Listener l){ this.l = l; } public void addName(String name){ names.add(name); } public void setFlag(boolean flag){ if(flag){ if(names.size()==0) System.out.println("请先输入姓名!!!"); for(int i = 0;i<names.size();i++){ l.listen(new AskEvent(this,names.get(i))); } names.clear(); } } }
4,事件类AskEvent
package first.lintener; import java.util.EventObject; public class AskEvent extends EventObject { /** * */ private static final long serialVersionUID = 1L; private Object Evnetsource; private String name; public AskEvent(Object source,String name) { super(source); Evnetsource = source; this.name = name; } public Object getEvnetSource(){ return Evnetsource; } public String getName() { return name; } }
ok,大功告成,队长,别开枪,我是好人!!
^_^