java - java中的MouseMotionListener如何工作?

标签 java api oop interface

我很困惑 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 组件中。然后,每次鼠标在此组件内移动时,该组件都会通过调用其方法之一(mouseDraggedmouseMoved,具体取决于是否鼠标按钮是否按下)。

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

关于java - java中的MouseMotionListener如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23542599/

相关文章:

java - 将一个类的对象传递给另一个类的方法

javascript - 在 HighCharts 上设置图标(图像)时出现问题

swift - BitTrex 时间格式和时区

javascript - PayPal集成中出现“未处理的API错误”

oop - 在 Matlab 中使用抽象类(无属性)

java - 使用 JUnit 4 的预期异常机制导致意外行为的原因?

java - 在 Java 中将字节 [] 写入文件

java - JAX-WS wsimport 不会保留 toString()?

c# - 如何调用所有事件处理程序订阅者并获得他们的结果?

python - 使用类作为其方法中参数的类型提示