【问题标题】:Action listener and action event [closed]动作监听器和动作事件[关闭]
【发布时间】:2014-07-14 18:09:18
【问题描述】:

谁能解释一下为什么我们要通过对象将item123passwordField 传递给另一个类(处理程序)? getsource 是什么?并得到命令?为什么我们要在这里创建一个字符串?

thehandler handler =new thehandler();

item1.addActionListener(handler);
item2.addActionListener(handler);
item3.addActionListener(handler);
passwordField.addActionListener(handler);

处理程序

private class thehandler implements ActionListener{
    public void actionPerformed(ActionEvent event){
        String string="";

    if(event.getSource()==item1)
        string=String.format("field 1: %s",event.getActionCommand());
    else if(event.getSource()==item2)
        string=String.format("field 2: %s",event.getActionCommand());
    else if(event.getSource()==item3)
        string=String.format("field 3: %s",event.getActionCommand());
    else if (event.getSource()==passwordField)
        string=String.format("passwordField: %s",event.getActionCommand());
    JOptionPane.showMessageDialog(null,string);
    }
}

【问题讨论】:

标签: java swing events awt action


【解决方案1】:

谁能帮我解释一下为什么我们通过一个对象将 item1,2,3 和 passwrodFiled 传递给另一个类(处理程序)

这是相当模糊的,但基本上,这允许您做的是可以处理上下文需求的插件功能。也就是说,您不需要扩展和覆盖这些类的方法来改变它们的行为,您可以简单地提供一个可以使用的回调。

什么是getsource和get命令,为什么要在这里创建一个字符串?

getSource 方法返回创建此事件的 Object 引用,这很有用,如您的示例所示,您期望事件触发器的源更多。

getActionCommand 方法返回一个关联的String,它代表一个可能的“命令”。这样做的核心原因是,您可能没有对创建事件的原始对象的引用和/或您可能有多个不同的对象正在创建 ActionEvent,但希望触发相同的逻辑流。

您示例中的actionPerformed 方法正在创建一个String 消息,该消息由JOptionPane 显示

【讨论】:

  • 首先感谢您的回答,
  • 第二个你的意思是 Object 是从 B 类到 A 类的回调,这样我们就可以在 A 处使用 B 类中的所有方法?我们必须始终创建名称为 actionPerformed 的方法,否则由我决定,最后什么是 (ActionEvent event) 是 Obhject ?要不然是啥 ?垃圾邮件很抱歉
  • Java 中的所有类都从 Object 扩展而来。 ActionEvent 扩展自 EventObject 哪些事件来自 Object。 A 通知 B(例如,A 是文本字段,B 是处理程序),但您可以通过 ActionListener 的 getSource 方法访问 A
猜你喜欢
  • 1970-01-01
  • 2012-01-30
  • 2021-07-02
  • 2014-10-08
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
相关资源
最近更新 更多