当前位置: 代码迷 >> J2SE >> 简单包装事件处理代码之-自定义事件解决方案
  详细解决方案

简单包装事件处理代码之-自定义事件解决方案

热度:154   发布时间:2016-04-24 01:45:38.0
简单包装事件处理代码之-自定义事件
环境: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源码看看

楼主写的也不错,顶一个
  相关解决方案