AWT事件模型的介绍

使一个组件具有事件处理能力大致可以分为如下三步:

1、public class MyClass implements ActionListener {}
2、someComponent.addActionListener(instanceOfMyClass);
3、public void actionPerformed(ActionEvent e) {
       ...//事件执行代码
   }

先是一个简单的例子(还真是简单,但偏偏又来了个Applet,SUN真变态)

import java.applet.Applet;

import java.awt.Button;

import java.awt.Toolkit;

import java.awt.BorderLayout;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

 

public class Beeper extends Applet implements ActionListener {

    Button button;

 

    public void init() {

        setLayout(new BorderLayout());

        button = new Button("Click Me");

        add("Center", button);

 

        button.addActionListener(this);

    }

 

    public void actionPerformed(ActionEvent e) {

        Toolkit.getDefaultToolkit().beep();

    }

}

这里的Beeper首先实现了ActionListener,在方法 actionPerformed 中它进行响铃。 所以它能注册成为button的ActionListener。

接下来是一个复杂点的例子了。

import java.applet.Applet;

import java.awt.*;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

 

public class MultiListener extends Applet implements ActionListener {

 

    TextArea topTextArea;

    TextArea bottomTextArea;

    Button button1, button2;

 

    public void init() {

       Label l = null;

        GridBagLayout gridbag = new GridBagLayout();

        GridBagConstraints c = new GridBagConstraints();

        setLayout(gridbag);

 

        c.fill = GridBagConstraints.BOTH;

        c.gridwidth = GridBagConstraints.REMAINDER;

       l = new Label("What MultiListener hears:");

        gridbag.setConstraints(l, c);

        add(l);

 

        c.weighty = 1.0;

        topTextArea = new TextArea(5, 20);

        topTextArea.setEditable(false);

        gridbag.setConstraints(topTextArea, c);

        add(topTextArea);

 

        c.weightx = 0.0;

        c.weighty = 0.0;

       l = new Label("What Eavesdropper hears:");

        gridbag.setConstraints(l, c);

        add(l);

 

        c.weighty = 1.0;

        bottomTextArea = new TextArea(5, 20);

        bottomTextArea.setEditable(false);

        gridbag.setConstraints(bottomTextArea, c);

        add(bottomTextArea);

 

        c.weightx = 1.0;

        c.weighty = 0.0;

        c.gridwidth = 1;

        c.insets = new Insets(10, 10, 0, 10);

        button1 = new Button("Blah blah blah");

        gridbag.setConstraints(button1, c);

        add(button1);

 

        c.gridwidth = GridBagConstraints.REMAINDER;

        button2 = new Button("You don't say!");

        gridbag.setConstraints(button2, c);

        add(button2);

 

        button1.addActionListener(this);

        button2.addActionListener(this);

 

        button2.addActionListener(new Eavesdropper(bottomTextArea));

    }

 

    public void actionPerformed(ActionEvent e) {

        topTextArea.append(e.getActionCommand() + "/n");

    }

}

 

class Eavesdropper implements ActionListener {

    TextArea myTextArea;

    public Eavesdropper(TextArea ta) {

        myTextArea = ta;

    }

 

    public void actionPerformed(ActionEvent e) {

        myTextArea.append(e.getActionCommand() + "/n");

    }

}


在这里先是使用了一个复杂的布局管理器,真BT,把简单问题复杂化。然后给 button1 和 button2 分别加上了实现 ActionListener 的自身。并且动过 e.getActionCommand() 来获取命令文本,这里当然就是按钮上的文本了。并把该文本赋给了位于顶层的 TextArea ,然后又给 button2 注册了一个实现 ActionListener 接口的 Eavesdropper,并给他的构造函数传递了一个保存了下边的 TextArea 对象,并使用该对象来获取事件源的文本。总体来说这个例子还是可以的,就是开始复杂了些。

最后是一个鼠标事件的例子,比较简单,不罗嗦。^_^

import java.awt.*;

 

public class BlankArea extends Canvas {

    Dimension minSize = new Dimension(100, 100);

 

    public BlankArea(Color color) {

        setBackground(color);

    }

 

    public Dimension getMinimumSize() {

        return minSize;

    }

 

    public Dimension getPreferredSize() {

        return minSize;

    }

 

    public void paint(Graphics g) {

        Dimension size = getSize();

        g.drawRect(0, 0, size.width - 1, size.height - 1);

    }

}




import java.applet.Applet;

import java.awt.*;

import java.awt.event.MouseListener;

import java.awt.event.MouseEvent;

 

public class MouseEventDemo extends Applet implements MouseListener {

    BlankArea blankArea;

    TextArea textArea;

    static final int maxInt = java.lang.Integer.MAX_VALUE;

    String newline;

 

    public void init() {

        GridBagLayout gridbag = new GridBagLayout();

        GridBagConstraints c = new GridBagConstraints();

        setLayout(gridbag);

 

        c.fill = GridBagConstraints.BOTH;

        c.gridwidth = GridBagConstraints.REMAINDER;

        c.weightx = 1.0;

        c.weighty = 1.0;

 

        c.insets = new Insets(1, 1, 1, 1);

        blankArea = new BlankArea(new Color(0.98f, 0.97f, 0.85f));

        gridbag.setConstraints(blankArea, c);

        add(blankArea);

 

        c.insets = new Insets(0, 0, 0, 0);

        textArea = new TextArea(5, 20);

        textArea.setEditable(false);

        gridbag.setConstraints(textArea, c);

        add(textArea);

 

        //Register for mouse events on blankArea and applet (panel).

        blankArea.addMouseListener(this);

        addMouseListener(this);

 

        newline = System.getProperty("line.separator");

    }

 

    public void mousePressed(MouseEvent e) {

        saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e);

    }

 

    public void mouseReleased(MouseEvent e) {

        saySomething("Mouse released; # of clicks: " + e.getClickCount(), e);

    }

 

    public void mouseEntered(MouseEvent e) {

        saySomething("Mouse entered", e);

    }

 

    public void mouseExited(MouseEvent e) {

        saySomething("Mouse exited", e);

    }

 

    public void mouseClicked(MouseEvent e) {

        saySomething("Mouse clicked (# of clicks: " + e.getClickCount() + ")", e);

    }

 

    void saySomething(String eventDescription, MouseEvent e) {

        textArea.append(

           eventDescription

               + " detected on "

               + e.getComponent().getClass().getName()

               + newline);

        textArea.setCaretPosition(maxInt); //hack to scroll to bottom

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值