在处理中如果要注册鼠标事件监听器,只需要定义一个名为“mousepressed”,“mousereleased”等的函数,它们“神奇地”成为事件监听器。这也发生在我正在使用的controlP5库中,其中以控制小部件命名的所有函数“神奇地”成为其事件处理程序。我想知道Java如何处理这种魔法?我在哪里可以看到有关此模式的一些源代码或主题。我想知道它的机制,因为我无法在主applet中定义监听器。
答案 0 :(得分: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/events/
这个mousePressed(MouseEvent)方法调用no-arg mousePressed()函数,该函数在第3084行是一个空函数。
当您编写处理草图时,您秘密地扩展 PApplet。在草图中编写mousePressed()函数时,覆盖 PApplet类的空mousePressed()函数。现在,当PApplet类从其MouseListener获取MouseEvent时,它会调用您的 mousePressed函数。这就是继承的作用。
如果您要问更具体的问题,请提供MCVE,以准确说明您所说的内容。