我对如何在幕后使用MouseMotionListener感到困惑
例如,这就是我认为界面的作用
Interface A {
method work();
}
class ConcreteA {
method work(){ //implementation goes here }
}
然后客户端代码可以调用任何实现A接口的类并调用其工作方法
classImplementingA.work()
但是在这里我们实现MouseMotionListener并将它们自己的定义添加到它暴露MouseDragged,mouseMoved的方法。
所以我想知道
内部java是否调用此接口方法依次调用我们定义的方法或其他东西
即java internal就像这个接口的客户端代码一样,我们定义了场景实现的背后。
所以有人告诉我java是如何处理鼠标移动并使这个界面以简单的方式使用它。
答案 0 :(得分:3)
一般来说,监听器基于可观察/观察者模式。
让我们举一个更简单的例子:ActionListener
。你想"观察"一个按钮。因此,您是观察者,按钮是可观察的。您创建ActionListener
的实例,从而覆盖其actionPerformed
方法。然后,将此侦听器添加到按钮。现在,按钮每次单击时,都会通过调用其actionPerformed
方法回叫(通知)收听者。
MouseMotionListener
使用相同的原则:您创建MouseMotionListener
的实例并将其添加到Swing组件。然后,每次在此组件内移动鼠标时,组件通过调用其方法之一(mouseDragged
或mouseMoved
来回调(通知)侦听器,具体取决于是否按下了鼠标按钮)。
所以,是的,你是对的。在这种情况下,接口的客户端不是您自己的代码,而是Swing组件。它们是您定义的接口实现的调用者。