实现ActionListener的哪种方式更正确?是否有任何重大的性能差异?
在类中实现ActionListener:
public class MainFrame implements ActionListener {
JButton exampleButton1 = new JButton();
JButton exampleButton2 = new JButton();
JButton exampleButton3 = new JButton();
public MainFrame(){
exampleButton1.addActionListener(this);
exampleButton2.addActionListener(this);
exampleButton3.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if(src.equals(exampleButton1)){
//Do something
}else if(src.equals(exampleButton2)){
//Do something
}else if(src.equals(exampleButton3)){
//Do something
}
}
}
将ActionListeners添加到每个JButton:
public class MainFrame {
JButton exampleButton1 = new JButton();
JButton exampleButton2 = new JButton();
JButton exampleButton3 = new JButton();
public MainFrame(){
exampleButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Do something
}
});
exampleButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Do something
}
});
exampleButton3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Do something
}
});
}
}
或者甚至使用Lambdas ..?
我更喜欢使用单独的Action
作为按钮的监听器。 Action
是一个稍高级的侦听器,可以在任何可以使用ActionListener的地方使用。
它提供了额外的功能,例如:
有关此概念的更多信息和示例,请参阅How to Use Actions上的Swing教程。
你可以发现,对于单个ActionListener
方法,每个单独的if
测试有三个分支,按下按钮。什么也没做,所以没有真正的动作,只是测试按下了哪个按钮。
branch coverage
这样的指标。首先,如果你选择单一的ActionListener
方法,你的每个if
都会创建两个分支。所以你必须提出6个测试来测试你的ActionListener
的基本想法是否正常工作,以便找出按下了哪个按钮以及使用了正确的部分。这是一些开销的努力。ActionListener
正在处理三件事。ActionListener
的重复使用非常有限,并且高度依赖于按钮。ActionListener
方法Manual written Object Orientation
,因为这将是一种方法,如果没有面向对象,你必须切换或if / else调用不同的方法,如exampleButton1Pressed()
,exampleButton2Pressed()
等。但是,这可以通过三个专用的ActionListener
s实现。所以去专注的ActionListener
s。