环境:myeclipse10 windowsXP jdk1.7 jre7
.net程序员初学java,.net里简单直观的事件处理在java里变得复杂许多。今天自己简单包装了一下自定义事件处理代码,共三个类。
首先是事件参数类:
- Java code
package fEvent;import java.util.*;public class FEventArgs extends java.util.EventObject{ protected Object source; protected String[] strings; protected double[] numbers; public Object _GetSource(){ return source; } public double[] _GetNumbers(){ return numbers; } public String[] _GetStrings(){ return strings; } public FEventArgs(Object source,String[] s,double[] d) { super(source); this.source = source; strings = s; numbers = d; }}
这里的重点是事件参数的选择,一个事件发送对象:source,一个字符串数组,一个双精度数组(可以兼做整形用)。这样的配置我想可以满足绝大多数事件参数传递需求了。
第二个类:事件监听类
- Java code
public class FEventListener implements java.util.EventListener{ //这里是当事件发生后的响应过程 public void EventActivated(FEventArgs args) { } }
不直接使用FEventListener类,而是从它派生一个新类并重写EventActivated,在里面添加自己的事件处理代码。
第三个类:事件类
- Java code
import java.util.*;public class FEvent { private Vector Listeners = new Vector(); public synchronized void Add(FEventListener l){ Listeners.addElement(l); } public synchronized void Remove(FEventListener l){ Listeners.removeElement(l); } public void Start(Object sender,String[] s,double[] d){ Vector tempVector = null; FEventArgs e = new FEventArgs(sender,s,d); synchronized(this) { tempVector = (Vector)Listeners.clone(); for(int i=0;i<tempVector.size();i++) { FEventListener l=(FEventListener)tempVector.elementAt(i); l.EventActivated(e); } } }}
使用方法(代码片段):
- Java code
FEvent fe1;//定义事件 //...... //定义事件处理类 class FL1 extends FEventListener{ public void EventActivated(FEventArgs args){ JOptionPane.showMessageDialog(null, args._GetStrings()[0]); } } //...... //添加事件 fe1 = new FEvent(); fe1.Add(new FL1()); //....... //触发事件 fe1.Start(bt_save,new String[]{"hello java!"}, null);
征求下大家看法
------解决方案--------------------
不错。。。
事件机制其实java也是有的, gui 里蛮多的。
楼主可以参考java源码看看
楼主写的也不错,顶一个