动态绑定事件(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接收器)方法来删除各种类型的接收器。

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索button
, new
, awt
, 事件
, addactionlistener
, actionlistener
public
jquery动态绑定事件、jq动态绑定事件、动态生成元素绑定事件、angular 动态绑定事件、vue 动态绑定事件,以便于您获取更多的相关知识。

时间: 2024-09-11 04:49:15

动态绑定事件(java AWT)的相关文章

Java.awt.Robot类控制鼠标和键盘

Java.awt.Robot类用于控制鼠标和键盘.一旦你得到这种控制,你能够通过你的Java代码做与鼠标和键盘任何类型的操作.这个类通常用于自动化测试.下面的代码样例将向您展示Robot类如何处理键盘事件.如果你运行此代码,并打开notepad,您将在notepad中看到HI CAOER.赶快试一试吧. import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; public class

窗口-java awt 图形组件 弹出框

问题描述 java awt 图形组件 弹出框 多次点击同一按钮,会出现如图情况,然后我在add组件前加了一个判定条件,但是组件的内容无法更新,第一次点了什么按钮,对应的组件就一直在,怎么解决呢?图片 解决方案 应该是你的监听事件出问题了吧,当然这只是我个人觉得,不对莫怪. 解决方案二: 组件的内容是什么?每次不都是显示用户名和密码框等待输入么

java*AWT 为什么给多行文本域编写右键菜单,出现的不是我编写的菜单

问题描述 java*AWT 为什么给多行文本域编写右键菜单,出现的不是我编写的菜单 为什么给多行文本域编写右键菜单,出现的不是我编写的菜单 原码贴上: import java.awt.BorderLayout; import java.awt.CheckboxMenuItem; import java.awt.Dimension; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuItem; import java.

事件-java中的键盘监听器失效问题

问题描述 java中的键盘监听器失效问题 package com.tarena.swing; import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent; import javax.swing.JFrame;import javax.swing.JPanel; public class Test

java.awt.TextArea 中多行文本 设置鼠标右击的监听 确定是第几行 被右击

问题描述 我的TextArea是通过setText()把文本放进去,而文本是通过n进行换行的,现在我是想把某一行的文本 设置右击监听进行删除 对应行的文本,但是不知道如何确定是右击的哪一行. 请指点,谢谢. 解决方案 可以这样做:TextArea ta = new TextArea("Hello", 5, 40);//对TextArea增加鼠标事件监听ta.addMouseListener(new MouseListener(){public void mouseClicked(Mou

通过java.awt.Robot的createScreenCapture截取屏幕

通过java.awt.Robot的createScreenCapture截屏. public static void captureScreen(String fileName) throws Exception { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle screenRectangle = new Rectangle(screenSize); Robot robot = new

在eclipse里如何导入java.awt包呢

问题描述 在eclipse里如何导入java.awt包呢 java.awt的包到底在哪里可以下载,并且我的eclipse汉化也汉化不了. 解决方案 import java.awt.*;

java awt 组件 窗口 的问题

问题描述 java awt 组件 窗口 的问题 多次点击同一按钮,会出现如图情况,然后我在add组件前加了一个判定条件,但是组件的内容无法更新,第一次点了什么按钮,对应的组件就一直在,怎么解决呢? 解决方案 JAVA中的AWT组件关于java中window以及子组件的窗口居中问题黑马程序员_王康 用java AWT编写类似百度搜索的窗口. 解决方案二: 你的代码具体是怎么处理的呢?如果用户没有手动关闭,也应该由程序自动关闭相应的窗体的.

java awt 布局 下面panel 尺寸已经设定好了,为什么不按照流式布局添加 而是尺寸变了

问题描述 java awt 布局 下面panel 尺寸已经设定好了,为什么不按照流式布局添加 而是尺寸变了 package huatu; import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.BoxLayout; public class num1 { private Frame f=new Frame("绘图"); private Panel p=new Panel(); private