日期:2014-05-20  浏览次数:20718 次

简单包装事件处理代码之-自定义事件
环境: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源码看看

楼主写的也不错,顶一个