像java内置提供一事件(如MouseEvent)那样,在系统开发过程也会遇到这样的需求,需要为系统自定义一些特殊的事件.在某个条件下激发.
在JAVA中这种功能如何实现?

解决方案 »

  1.   

    楼上的兄弟,是否可以举个例子?
    interface PointChangeListener extends java.util.EventListener{
        public void Changed(PointChangeEvent e);
    }class PointChangeEvent extends java.util.EventObject{
         private Point x;     PointChangeEvent(Point x){
             super(x);
             this.x = x;
         }    public Object getSource() {
            return x;
        }    public Point getPoint(){
             return this.x;
        }
    }
     class Point implements PointChangeListener{
         private int x,y;
         Point(int x,int y){
             this.x = x;
             this.y = y;
         }     public void setX(int x){
             this.x = x;
             this.Changed(new PointChangeEvent(this));
         }
         public void setY(int y){
             this.y = y;
             this.Changed(new PointChangeEvent(this));
         }     public void Changed(PointChangeEvent e){
             System.out.println(e.getPoint().x);
             System.out.println(e.getPoint().y);
         }}class EventUsed{
        public static void main(String[] args){
            Point p = new Point(1,2);
            p.setX(3);
        }
    }我感觉上面的程序并没有实际让事件处理方法与激发事件的方法分离,这样的话我就不太理解了。
      

  2.   

    这个不是可以达到目的么?Listener 本应该 是外挂的, Point 本身并不知道谁将处理事件, 它只管在属性改变时广播事件( 不管哪个听众注册到 Point 上,都通知他.) ,上面的例子中事件的广播和处理都被 Point 一个人干了,所以作为初学讲解材料不太适当.最好分开来, 事件的听众也可以用集合来表示,这样更好表达出事件发生时 ,  被监听对象 Point 并不知道多少关注它,这样你就很自觉得分离事件处理功能.
      

  3.   

    你这个例子可以达到目的,只是 把 事件广播和处理都 Point 一个人干了, 如果分离出来能更好的说明问题,
    如果什么都一个类自己做而且做的都还是直接关系自己的属性的话 ,
    用监视器至少在这个例子中是多此一举.一般听众可以用集合来表示,更好地表达出 Point 并不知道有多少人关注它, 在属性改变时它只管
    广播事件( 对注册了的监视器都逐一通知 ), 以便更好地分离出事件监视器的职责.