Swing组件听自己vs内部类
我刚刚对uni项目得到了一些不好的反馈,需要一些公正的澄清;Swing组件听自己vs内部类
任何人都可以解释什么时候应该使用(匿名)内部监听器类与听自己的组件? (A对B)
一)
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
}
}
谢谢你们, 米奇
对于您有不同的行为多个按钮的情况下,更方便为每个按钮分配一个单独的匿名类,您仍然可以在您的类中实现ActionListener并根据源处理事件:
void actionPerformed(ActionEvent e) {
if (e.getSrouce() == button1)
{ ... }
else if (e.getSource() == button2)
{ ... }
// ...
}
与问题无关,但我似乎在追求:-)这是程序风格,所以不要。 – kleopatra 2011-05-02 10:46:21
我同意。正如我写的,它是更方便地使用匿名/分班授课,这种情况下,我只是指出了一个类实现ActionListener的所有按钮的含义。并感谢您的评论。 – MByD 2011-05-02 12:38:03
我觉得OP试图问一个问题到这就是答案,但我强烈同意[@ AndrewThompson的答案](http://*.com/a/5856145/253468)。 – TWiStErRob 2014-10-16 20:12:40
我认为这可能是个人偏好。无论如何,我总是会选择内部课程作为区分责任和组织代码的一种方式。
特别是,它们是使用Adapter类的唯一方法(空类已经实现了一些特定的Listener接口,因此您只需要覆盖所需的方法,而不需要提供这些方法的空实现你不需要)。
C)
JButton myButton = new JButton();
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// handling code...
}
});
的一点是,当你宣布你myButton
类来实现ActionListener
,可以增加其可见的API(即增加一个新的公共actionPerformed()
方法,通过持有一个参考的任何代码可*赎回到myButton
)。
既然你可能不希望“actionPerformed
”是myButton
API的一部分,你应该使用一个内部类,将保留的myButton
公共API。
请注意,Swing类充满了类似于公共方法明确注释为“实现细节,不直接调用”的糟糕示例,实际上这是非常糟糕的设计决策。
为什么扩展'JButton'? – 2011-05-02 10:36:07
请学习Java命名约定,并坚持他们 – kleopatra 2011-05-02 10:42:33
好老师,假设他/她拒绝了这两项:-) – kleopatra 2011-05-02 10:47:42