java事件模型

ContractedBlock.gifExpandedBlockStart.gifCode
 1import java.util.*;
 2import java.awt.event.*;
 3
 4ExpandedBlockStart.gifContractedBlock.gifpublic class EventModelTest {
 5ExpandedSubBlockStart.gifContractedSubBlock.gif    public static void main(String[] args) {
 6        // 开始测试事件
 7        Demobean testbean = new Demobean();
 8
 9        testbean.addClickListener(testbean);
10
11        // 模拟一个事件(想像成在一个对象点了一下);
12        testbean.Click();
13        testbean.Click();
14    }

15}

16
17// 事件对象,保存事件源和事件状态的信息。通常要继承EventObject,并以Event做后缀名。
18ExpandedBlockStart.gifContractedBlock.gifclass ClickEvent extends EventObject {
19    public Demobean source; // 事件来源
20    public int clickCount; // 事件状态
21
22ExpandedSubBlockStart.gifContractedSubBlock.gif    public ClickEvent(Demobean source) {
23        // 初始化对象
24        super(source);
25        this.source = source;
26        clickCount = 0;
27    }

28}

29
30// 事件监听器,通常继承自EventListener,并以Listener做后缀名。
31ExpandedBlockStart.gifContractedBlock.gifinterface ClickListener extends EventListener {
32    // 当事件发生时要执行的方法,可有多个。
33    void Click(ClickEvent event);
34}

35
36// 事件源,也就是要挷定事件的对象(可以是Swing组件哪JButton,也可以是自定义的类型)
37ExpandedBlockStart.gifContractedBlock.gifclass Demobean implements ClickListener {
38    private Vector clicks = new Vector();// 存储一或多个事件监听器
39
40    private ClickEvent event = new ClickEvent(this);// 事件对象
41
42    // 增加/订阅一个事件监听器
43ExpandedSubBlockStart.gifContractedSubBlock.gif    public synchronized void addClickListener(ClickListener listener) {
44        clicks.add(listener);
45    }

46
47    // 移除/取消一个事件监听器
48ExpandedSubBlockStart.gifContractedSubBlock.gif    public synchronized void removeClickListener(ClickListener listener) {
49        clicks.remove(listener);
50    }

51
52    // 处理事件程序,执行所有已经订阅的监听器中的click方法.
53ExpandedSubBlockStart.gifContractedSubBlock.gif    protected void doClickEvent() {
54ExpandedSubBlockStart.gifContractedSubBlock.gif        synchronized (this{
55
56ExpandedSubBlockStart.gifContractedSubBlock.gif            for (int i = 0; i < clicks.size(); i++{
57                ClickListener listener = (ClickListener) clicks.get(i);
58                event.clickCount++;
59                listener.Click(event);
60            }

61        }

62    }

63
64    // 模拟一个事件(想像成在一个对象点了一下);
65ExpandedSubBlockStart.gifContractedSubBlock.gif    public void Click() {
66        doClickEvent();
67    }

68
69ExpandedSubBlockStart.gifContractedSubBlock.gif    public void Click(ClickEvent event) {
70        // TODO Auto-generated method stub
71        System.out.print("fd");
72        
73    }

74}

原文链接:http://hi.baidu.com/rockniu/blog/item/9387753e64cca93d71cf6c31.html

转载于:https://www.cnblogs.com/panggj/archive/2009/09/28/1575805.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值