我对uni项目得到了一些不好的反馈,需要一些公正的澄清;
任何人都可以解释我何时应该使用(匿名)内部监听器类与听取自己的组件? (a vs b)
A)
public class myButton extends JButton {
public myButton() {
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// handling code...
}
});
}
}
b)中
public class myButton extends JButton implements ActionListener {
public myButton() {
addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
// handle the event
}
}
谢谢你们, 米奇
答案 0 :(得分:4)
c)
JButton myButton = new JButton();
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// handling code...
}
});
答案 1 :(得分:3)
如果你有多个具有不同行为的按钮,为每个按钮分配一个单独的匿名类会更方便,你仍然可以在你的类中实现ActionListener并根据来源处理事件:
void actionPerformed(ActionEvent e) {
if (e.getSrouce() == button1)
{ ... }
else if (e.getSource() == button2)
{ ... }
// ...
}
答案 2 :(得分:1)
我认为这可能是个人偏好。无论如何,我总是将内部课程作为分离责任和组织代码的一种方式。
特别是,它们是使用Adapter类的唯一方法(已经实现某些特定Listener接口的空类,所以你只需要覆盖你需要的方法,你不需要提供那些那些的空实现。你不需要)。
答案 3 :(得分:1)
关键是,当您声明myButton
类要实现ActionListener
时,您会增加其可见API(即添加新的公共actionPerformed()
方法,可以通过任何代码自由调用对myButton
)的引用。
由于您可能不希望“actionPerformed
”成为myButton
API的一部分,因此您应该使用内部类,这将保留myButton
的公共API。< / p>
请注意,Swing类充满了不好的例子,例如公共方法被明确注释为“实现细节,不直接调用”,实际上是非常糟糕的设计决策。