我不明白的是我自己无法实例化 ActionListener 类,但它可以作为方法调用中的参数?
当你这样做
new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
你实际上是在创建一个匿名子类的实例ActionListener
。
它在语义上等同于做
class AnonymousActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
btnNewButton.addActionListener(new AnonymousActionListener());
(还有 tada,作为奖励,您刚刚了解到您可以在 Java 中拥有方法本地类;-)
以下是一些常见的替代方案:
使用单独的普通类:
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
class YourClass {
public void yourMethod() {
...
btnNewButton.addActionListener(new MyActionListener());
}
}
(仅当其他类可以访问所需的变量时才有可能。)
与上面相同,但具有内部(非静态)类:
class YourClass {
public void yourMethod() {
...
btnNewButton.addActionListener(new MyActionListener());
}
// Inner class
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
}
(这里lblNylabel
可能是内部类的范围。)
让封闭类本身实现ActionListener
并this
用作参数addActionListener
:
class YourClass implements ActionListener {
public void yourMethod() {
...
btnNewButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}