当按下按钮时,ActionEvent如何工作以及如何创建对象以执行任务?

时间:2016-07-27 08:05:02

标签: java swing awt

任何人都可以让我理解这个逻辑的流程,当按下按钮b1然后发生一些动作(执行一些语句),但是为什么我们给出了如下语法,ActionEvent object {{1是否已创建以及它是如何工作的? 如果我不使用内部课程那么我还有其他任何代表吗?

ae

2 个答案:

答案 0 :(得分:0)

您可以添加此类动作事件。

JButton b1 = new JButton();
b1.addActionListener(this);

然后你必须创建这个类

public void actionPerfomed(ActionEvent ae){
   if(ae.getSource()==b1){
      //your commands here
     }
}

注意:请务必执行ActionListener

答案 1 :(得分:0)

所有ActionListeners都实现了这个功能:

public void actionPerformed(ActionEvent e) { 
    ...//code that reacts to the action... 
}

此代码创建一个新的匿名类,它实现ActionListener并将actionPerformed函数覆盖到您想要的任何内容。具有此功能的新对象将添加到foo的ActionListeners内部列表中:

foo.addActionListener( new ActionListener() {
    @Override public void actionPerformed(ActionEvent e) {
        ...//code that reacts to the action...
    }
});

这方面的简写是使用lambda表达式,因为ActionListener只有一个要覆盖的函数,所以编译器知道你的意思(参见lambda的文档以获取更多信息):

foo.addActionListener( 
    (e) -> { 
        ...\code that reacts to the action...
    } 
);

当一个动作发生时,foo将通过它列出的ActionListener对象运行,并在每个对象上调用actionPerformed()。每个对象的函数版本的代码依次运行。

顺便提一下,在actionPerformed()中不要做太多的工作,因为它在Swing线程中执行,而这里的性能降低意味着用户界面没有响应。如果您需要运行耗时的操作以响应操作,请考虑在此函数中启动新线程或仅设置要由现有线程检测到的标志。