扩展MouseAdapter并实现ActionListener

时间:2016-03-19 19:45:46

标签: java event-handling actionlistener

你好吗?

我想问你为什么我们写一个事件处理我们写

私有类扩展MouseAdapter实现ActionListener

我的意思是为什么使用MouseAdapter进行扩展并使用ActionListener实现,如果它成为扩展是否重要ActionListener实现了MouseAdapter

谢谢

3 个答案:

答案 0 :(得分:0)

ActionListener只有一个方法。 MouseListener有很多方法。因此,您可以实现MouseListener,但是您需要实现其所有方法,即使您只想处理单个事件类型(例如mouseClicked)。

MouseAdapter是一个实现MouseListener的类,它通过执行什么来实现它的所有方法。因此,扩展MouseAdapter非常方便:它只允许覆盖感兴趣的方法。创建一个ActionAdapter是没有意义的,因为它将包含一个单独的方法,你总是必须覆盖它来做一些有用的事情。

但请注意,单个类处理鼠标事件和动作事件都是一种设计气味。监听器应该关注单个任务:从给定的源处理给定的事件。

答案 1 :(得分:0)

MouseAdapter和ActionListener之间的区别在于,MouseAdapter是一个抽象类,而ActionListener是一个接口。在Java中实现接口,并扩展抽象类。

抽象类和接口可以履行类似的角色,但有一些关键的区别,我建议你查看两者的文档以了解更多信息。

MouseAdapter https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html ActionListener https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html

答案 2 :(得分:0)

你不能写

extends ActionListener implements MouseAdapter

因为ActionListener是一个界面而MouseAdapter不是。{一个更好的问题是作者为什么不写

implements MouseListener, ActionListener

可能的答案是:

MouseAdapter是接口MouseListener的空实现,它定义了几个事件方法。现在,如果您只想在事件方法上实现,例如mouseClicked,然后实现MouseListener强制您为所有其他鼠标方法添加空实现。从MouseAdapter派生允许您仅覆盖特定方法,使您的侦听器类更小。

现在Java 8能够定义默认方法,像MouseListener这样的接口应该有空的默认实现,使MouseAdapter变得多余。