当前位置:  技术问答>java相关

怎么编写自己的listener呢?

    来源: 互联网  发布时间:2015-03-28

    本文导语:    当一个变量改变的时候 某个过程自己就启动    就象mouseAdapter一样    | 自己定义一个Listener 类extends EventListener, 在implement这个listener的类中 定义add,remove,fire这个事件的方法 在变量改...

  当一个变量改变的时候 某个过程自己就启动 
  就象mouseAdapter一样
  

|
自己定义一个Listener 类extends EventListener,
在implement这个listener的类中
定义add,remove,fire这个事件的方法
在变量改变时调用fire方法

|
There is already an "Observer Patterns" for this purpose.
http://developer.java.sun.com/developer/technicalArticles/Programming/KeepObjectsInSync/
import java.awt.*;
import java.applet.Applet;
import java.util.Observer;
import java.util.Observable;


/** This class extends the Observable class by making
  two methods public.  This is necessary in order to 
  delegate observable behavior in the counter class */
class MyObservable extends Observable {
  
  public void clearChanged() {
    super.clearChanged();
  }

  public void setChanged() {
    super.setChanged();
  }

}

/** This is a counter class that delegates observable behavior
  to a containted MyObservable object.  A method is provided
  to access this obect. The counter object has a private integer
  variable to hold the counter value, a text field to display it,
  and a button to increment the value.  Note that since this Counter
  is a GUI widget, it inherits it's behavor from the AWT class Panel.
  Since we also want it to be observable, that behavior must be provided
  through delegation. */
class Counter extends Panel {
  Label countField;
  Button incButton;
  private int _count = 0;
  MyObservable _observable;

  public Counter() {
    setLayout(new BorderLayout());
    add("Center",countField = new Label("Count: 0"));
    add("South",incButton = new Button("Increment"));
    _observable = new MyObservable();
  }

  public int value() {
    return _count;
  }

  public Observable observable() {
    return _observable;
  }

  public boolean action(Event evt, Object arg) {
    if(evt.target == incButton) {
      _count++;
      countField.setText("Count: "+ _count);
      _observable.setChanged();
      _observable.notifyObservers(this);
      return true;
    }
    return false;
  }
  
}

/** This class provides a textual view of the counter,
   and is an observer of the counter */
class TextView extends TextField implements Observer {
  
  public TextView(Counter c) {
    super(10);
    setEditable(false);
    setText(String.valueOf(c.value()));
  }

  public void update(Observable o, Object counter) {
    setText(String.valueOf(((Counter)counter).value()));
  }

}

/** This class provides a scroll bar view of the counter value */
class ScrollView extends Scrollbar implements Observer {

  public ScrollView(Counter c) {
    super(Scrollbar.HORIZONTAL,0,1,0,10);
    setValue(c.value());
  }

  public void update(Observable o, Object counter) {
    setValue(((Counter)counter).value());
  }

}

/** A simple applet to show the Counter and its two
  Observers, a TextView and a ScrollView */
public class ObserverTest extends Applet {
  Counter c;
  TextView tv;
  ScrollView sv;

  public ObserverTest() {
    setLayout(new BorderLayout());
    add("North",c = new Counter());
    add("Center",tv = new TextView(c));
    add("South",sv = new ScrollView(c));
    c.observable().addObserver(tv);
    c.observable().addObserver(sv);

  }

}


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 编写 linux shell 有什么好的编写工具呢?
  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 用Qt3.1.4编写的程序,如何加入自己编写的另外一个动态库呀?诚恳指教!!
  • 如图 scsi <---> scsi controller <---> pci <---> cpu 如果我想对scsi编写驱动我该对哪个部分编写?
  • 用什么工具编写JSP,可以象用InterDev编写ASP一样方便快捷?
  • 编写程序如编写人生,有人和我的意见相同吗?
  • 请问用jsp编写程序,非要编写代码么?有没有什么象fontpage2000那样的工具,能够生成一些固定模板的工具?就是说不用全部都写的工具。望
  • 用jsp编写web程序到底和java serverlet编写web程序有和区别
  • socket中,从client端(用java编写的)传到server端(用c编写的)的字符串为何总多一个ASCII码为10的字符呀?
  • 如何用java编写一个NT平台下的标准服务?
  • 关于用vj编写sniffer一问。
  • Linux下如何编写脚本文件
  • java能不能编写单独运行的程序?
  • Linux有没有类似bat文件,如何编写。
  • 用JAVA编写COM组件
  • 关于版本和bug管理的rule(规则)的编写
  • 在windows下可以用Code::Blocks编写linux程序吗?
  • 函数互相调用时Makefile编写
  • linux下用java编写邮箱客户端程序与在windows下有什么不同??
  • AIX下如何编写批处理命令和计划任务


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3