Обработка: как работают "волшебные" функции
При обработке, если вы хотите зарегистрировать прослушиватель событий мыши, вам просто нужно определить функцию с именами "mousepressed", "mousereleased" и т. Д., И они "волшебным образом" станут прослушивателями событий. Это также происходит с библиотекой controlP5, которую я использую, где все функции, названные в честь виджета элемента управления "волшебным образом", становятся его обработчиком событий. Мне интересно, как Java справляется с такой магией? Где я могу увидеть некоторый исходный код или тему, касающуюся этого шаблона. Я хотел бы знать его механизм, так как я не могу определить слушателей в основном апплете.
1 ответ
Обработка может использовать отражение для некоторых вещей, но в случае функций mousePressed() это простой вопрос наследования.
Обработка содержит класс PApplet, источник которого вы можете просмотреть здесь: https://github.com/processing/processing/blob/master/core/src/processing/core/PApplet.java
Во время этого ответа строка 3087 класса PApplet представляет собой функцию mousePressed(MouseEvent), которая вызывается через обработчик событий, о котором вы можете прочитать здесь: http://docs.oracle.com/javase/tutorial/uiswing/events/
Этот метод mousePressed(MouseEvent) вызывает функцию no-arg mousePressed(), которая является пустой функцией в строке 3084.
Когда вы пишете эскиз обработки, вы тайно расширяете PApplet. Когда вы пишете функцию mousePressed() в своем эскизе, вы переопределяете пустую функцию mousePressed() класса PApplet. Теперь, когда класс PApplet получает MouseEvent от MouseListener, он вызывает вашу функцию mousePressed. Вот как работает наследование.
Если вы задаете более конкретный вопрос, предоставьте MCVE, который точно показывает, о чем вы говорите.