任何人都可以让我理解这个逻辑的流程,当按下按钮b1然后发生一些动作(执行一些语句),但是为什么我们给出了如下语法,ActionEvent
object {{1是否已创建以及它是如何工作的?
如果我不使用内部课程那么我还有其他任何代表吗?
ae
答案 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线程中执行,而这里的性能降低意味着用户界面没有响应。如果您需要运行耗时的操作以响应操作,请考虑在此函数中启动新线程或仅设置要由现有线程检测到的标志。