Диспетчер событий будет пересылать события мыши слушателям, зарегистрированным для компонента, который возвращается методом getMouseEventTarget
уровня пакета в Container
.Это будет вызвано на вашем JFrame
, и, как указывает JavaDoc, оно:
Извлекает самый верхний (самый глубокий) легкий компонент, который заинтересован в получении событий мыши.
Диспетчер событий затем берет этот самый верхний компонент (например, JTextField
) и отправляет события только всем его слушателям.Они делают это, чтобы избежать необходимости передавать эти события всем компонентам, которые могут быть наслоены в контейнере Swing.MouseEvents, как вы можете себе представить, очень разговорчивы, что со всеми событиями mouseEntered
, mouseDragged
и mouseMoved
, которые отправляются для всех реализаций MouseListener
и MouseMotionListener
, которые потенциально могут существовать.Обработка для нахождения всех слушателей, а затем запуска событий для всех них в иерархии будет занимать много времени.
Предполагается также, что для таких классов, как JTextField
, JButton
и т. Д., Мышь по умолчаниюобработка - это все, что нужно.Если вы хотите обрабатывать действия мыши по-разному (т. Е. Менять цвет на mouseEntered
/ mouseExited
), вы можете добавить MouseListener
к этим виджетам по мере необходимости.
Для вашей обработки я бы предложил просто добавить JPanel
как MouseListener
к компонентам верхнего уровня, если вам нужно обработать эти события.