处理:"魔术"功能如何工作

Xun*_*ang 1 java processing event-handling control-p5

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

Kev*_*man 5

处理可能会对某些东西使用反射,但对于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 /事件/

此mousePressed(MouseEvent)方法调用no-arg mousePressed()函数,该函数是第3084行的空函数.

当您编写Processing sketch时,您将秘密扩展 PApplet.在草图中编写mousePressed()函数时,将覆盖 PApplet类的空mousePressed()函数.现在,当PApplet类从它的MouseListener得到的MouseEvent,它要求的mousePressed功能.这就是继承的工作原理.

如果您要问一个更具体的问题,请提供一个MCVE,准确演示您正在谈论的内容.