下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

详解java中的AWT动态绑定事件

作者:课课家教育     来源: http://www.kokojia.com点击数:740发布时间: 2016-02-29 20:03:13

标签: java接收器java编程java开发

大神带你学编程,欢迎选课

  新AWT事件模型给我们带来的一个好处就是灵活性。在老的模型中我们被迫为我们的程序动作艰难地编写代码。但新的模型我们可以用单一方法调用增加和删除事件动作。下面的例子证明了这一点:

详解java中的AWT动态绑定事件_java接收器_java编程_课课家

  //: 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接收器)方法来删除各种类型的接收器。

  这种灵活性为我们的编程提供了更强大的能力。

  我们注意到事件接收器不能保证在命令他们被增加时可被调用(虽然事实上大部分的执行工作都是用这种方法完成的)。

赞(11)
踩(4)
分享到:
华为认证网络工程师 HCIE直播课视频教程