在处理过程中,如果要注册鼠标事件侦听器,只需定义一个名称为“ mousepressed”,“ mousereleased”等的函数,它们就“神奇地”成为事件侦听器。我正在使用的controlP5库也会发生这种情况,其中以控件小部件命名的所有函数“神奇地”成为其事件处理程序。我想知道Java如何处理这种魔术?在哪里可以看到有关此模式的一些源代码或主题。我想知道它的机制,因为我无法在主小程序中定义侦听器。
最佳答案
处理可能会在某些方面使用反射,但是对于mousePressed()函数而言,这是一个简单的继承问题。
处理包含一个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来确切地说明您在说什么。