eli*_*ias 16 java swing actionlistener
实现java.awt.event.ActionListener界面的最佳方法是什么?
让您的类实现ActionListener并将其添加为ActionListener:
class Foo implements ActionListener{
public Foo() {
JButton button = new JButton();
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
}
}
Run Code Online (Sandbox Code Playgroud)
或者添加匿名ActionListener类的对象:
class Foo{
public Foo() {
JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Hov*_*els 30
一些人(jeanette/kleopatra)说几乎从不使用ActionListener,而是使用诸如AbstractAction之类的Action.让你的GUI类实现你的监听器几乎总是一个坏的理想,因为这会破坏单一责任原则并使你的代码更难以维护和扩展,所以我强烈建议你不要这样做.
例如,一个内部类:
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
class Foo {
public Foo() {
JButton button = new JButton(new ButtonAction("Action", KeyEvent.VK_A));
}
private class ButtonAction extends AbstractAction {
public ButtonAction(String name, Integer mnemonic) {
super(name);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button pressed");
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二个选项(匿名类)肯定更好,另一个选择是在其中有一个嵌套类Foo.
我不会选择第一个选项有两个原因:
Foo不必知道它实现了ActionListener.