java中的MouseMotionListener如何工作?

时间:2014-05-08 13:04:55

标签: java api oop interface

我对如何在幕后使用MouseMotionListener感到困惑

  • 这是java awt中的接口
  • 但是我们不是在调用它定义的方法,而是实现它并描述我们自己的定义

例如,这就是我认为界面的作用

Interface A {
    method work();
}
  

class ConcreteA {

method work(){
//implementation goes here
 }
     

}

然后客户端代码可以调用任何实现A接口的类并调用其工作方法

classImplementingA.work()

但是在这里我们实现MouseMotionListener并将它们自己的定义添加到它暴露MouseDragged,mouseMoved的方法。

所以我想知道

内部java是否调用此接口方法依次调用我们定义的方法或其他东西

即java internal就像这个接口的客户端代码一样,我们定义了场景实现的背后。

所以有人告诉我java是如何处理鼠标移动并使这个界面以简单的方式使用它。

1 个答案:

答案 0 :(得分:3)

一般来说,监听器基于可观察/观察者模式。

让我们举一个更简单的例子:ActionListener。你想"观察"一个按钮。因此,您是观察者,按钮是可观察的。您创建ActionListener的实例,从而覆盖其actionPerformed方法。然后,将此侦听器添加到按钮。现在,按钮每次单击时,都会通过调用其actionPerformed方法回叫(通知)收听者。

MouseMotionListener使用相同的原则:您创建MouseMotionListener的实例并将其添加到Swing组件。然后,每次在此组件内移动鼠标时,组件通过调用其方法之一(mouseDraggedmouseMoved来回调(通知)侦听器,具体取决于是否按下了鼠标按钮)。

所以,是的,你是对的。在这种情况下,接口的客户端不是您自己的代码,而是Swing组件。它们是您定义的接口实现的调用者。