动态绑定事件(java AWT)
当前位置:以往代写 > JAVA 教程 >动态绑定事件(java AWT)
2019-06-14

动态绑定事件(java AWT)

动态绑定事件(java AWT)

新AWT事件模子给我们带来的一个长处就是机动性。在老的模子中我们被迫为我们的措施行动艰巨地编写代码。但新的模子我们可以用单一要领挪用增加和删除事件行动。下面的例子证明白这一点:
 

//: DynamicEvents.java
// The new Java 1.1 event model allows you to
// change event behavior dynamically. Also
// demonstrates multiple actions for an event.
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class DynamicEvents extends Frame {
  Vector v = new Vector();
  int i = 0;
  Button 
    b1 = new Button("Button 1"), 
    b2 = new Button("Button 2");
  public DynamicEvents() {
    setLayout(new FlowLayout());
    b1.addActionListener(new B());
    b1.addActionListener(new B1());
    b2.addActionListener(new B());
    b2.addActionListener(new B2());
    add(b1);
    add(b2);
  }
  class B implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.out.println("A button was pressed");
    }
  }
  class CountListener implements ActionListener {
    int index;
    public CountListener(int i) { index = i; }
    public void actionPerformed(ActionEvent e) {
      System.out.println(
        "Counted Listener " + index);
    }
  }    
  class B1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.out.println("Button 1 pressed");
      ActionListener a = new CountListener(i++);
      v.addElement(a);
      b2.addActionListener(a);
    }
  }
  class B2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.out.println("Button 2 pressed");
      int end = v.size() -1;
      if(end >= 0) {
        b2.removeActionListener(
          (ActionListener)v.elementAt(end));
        v.removeElementAt(end);
      }
    }
  }
  public static void main(String[] args) {
    Frame f = new DynamicEvents();
    f.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e){
          System.exit(0);
        }
      });
    f.setSize(300,200);
    f.show();
  }
} ///:~

这个例子采纳的新手法包罗:
(1) 在每个按钮上附着不少于一个的吸收器。凡是,组件把事件作为多造型处理惩罚,这意味着我们可觉得单个事件注册很多吸收器。当在非凡的组件中一个事件作为单一造型被处理惩罚时,我们会获得TooManyListenersException(即太多吸收器异常)。
(2) 措施执行期间,吸收器动态地被从按钮B2中增加和删除。增加用我们前面见到过的要领完成,但每个组件同样有一个removeXXXListener()(删除XXX吸收器)要领来删除各类范例的吸收器。

这种机动性为我们的编程提供了更强大的本领。
我们留意到事件吸收器不能担保在呼吁他们被增加时可被挪用(固然事实上大部门的执行事情都是用这种要领完成的)。

    关键字:

在线提交作业