java - 处理: "magic"函数如何工作

标签 java event-handling processing control-p5

在处理中如果要注册一个鼠标事件监听器,只需要定义一个名为“mousepressed”、“mouserreleased”等的函数,它们就“神奇地”变成了事件监听器。这也发生在我正在使用的 controlP5 库中,其中所有以控件小部件命名的函数“神奇地”成为其事件处理程序。我想知道 Java 如何处理这种魔法?我在哪里可以看到有关此模式的一些源代码或主题。我想知道它的机制,因为我无法在主小程序中定义监听器。

最佳答案

处理可能对某些东西使用反射,但在 mousePressed() 函数的情况下,这是一个简单的继承问题。

Processing 包含一个 PApplet 类,您可以在此处查看其源代码:https://github.com/processing/processing/blob/master/core/src/processing/core/PApplet.java

在回答这个问题时,PApplet 类的第 3087 行是通过事件处理程序调用的 mousePressed(MouseEvent) 函数,您可以在此处阅读:http://docs.oracle.com/javase/tutorial/uiswing/events/

此 mousePressed(MouseEvent) 方法调用无参数 mousePressed() 函数,该函数在第 3084 行是一个空函数。

当您编写 Processing sketch 时,您正在 secret 地扩展 PApplet。当您在草图中编写 mousePressed() 函数时,您将覆盖 PApplet 类的空 mousePressed() 函数。现在,当 PApplet 类从其 MouseListener 获取 MouseEvent 时,它会调用您的 mousePressed 函数。这就是继承的工作原理。

如果您要问更具体的问题,请提供 MCVE这恰恰证明了您在说什么。

关于java - 处理: "magic"函数如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385990/

相关文章:

javascript - 如何检测在浏览器中复制链接?

colors - 生成 n 色彩虹调色板

javascript - 在 P5.js 中创建元素对象

java - 找不到媒体类型 = application/json 的 MessageBodyReader - android

Java/Netbeans 找不到库/包

java - 将一个 vector 保存到另一个 vector 中并清除第一个 vector

python - 为什么这个网格不均匀?

java - 没有xml的Spring项目

c# - 从 TableDependency 优雅地处理数万个事件 C#

android - MapView 中的 OnTouch 仅在第一次触发