我很困惑 MouseMotionListener 在幕后是如何使用的
- 它是java awt内部的一个接口(interface)
- 但这里我们没有调用它定义的方法,而是实现它并描述我们自己的定义
例如,这就是我认为接口(interface)所做的
Interface A {
method work();
}
class ConcreteA {
method work(){ //implementation goes here }
}
然后客户端代码可以调用任何实现A接口(interface)的类并调用其工作方法
classImplementingA.work()
但是这里我们实现了 MouseMotionListener 并将我们自己的定义添加到它公开的 MouseDragged、mouseMoved 方法中。
所以我想知道
java内部是否调用这个接口(interface)方法,依次调用我们定义的方法或其他方法
即java内部工作就像这个接口(interface)的客户端代码,我们定义了幕后实现。
所以请有人向我展示 java 如何处理鼠标移动并使该界面以简单的方式使用它。
最佳答案
监听器通常基于可观察/观察者模式。
让我们举一个更简单的例子:ActionListener
。您想要“观察”一个按钮。因此,您是观察者,而按钮是可观察的。您创建 ActionListener
的实例,从而重写其 actionPerformed
方法。然后将此监听器添加到按钮。现在,每次单击该按钮时,都会通过调用其 actionPerformed
方法来回调(通知)监听器。
MouseMotionListener
使用相同的原理:创建 MouseMotionListener
的实例并将其添加到 Swing 组件中。然后,每次鼠标在此组件内移动时,该组件都会通过调用其方法之一(mouseDragged
或 mouseMoved
,具体取决于是否鼠标按钮是否按下)。
所以,是的,你是对的。在这种情况下,界面的客户端不是您自己的代码,而是 Swing 组件。他们是您定义的接口(interface)实现的调用者。
关于java - java中的MouseMotionListener如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23542599/