JPanel does not generate MouseEvents when cursor is on child components

This is a little strange for me, but JPanel does not generate MouseEvents when the cursor is on the child components: JTextField and JToolBar, but it generates MouseEvents when the cursor is in JLabel. Can someone explain to me why? Is there a way to get JPanel to generate events, even if the mouse is on child components?

+3
source share
3 answers

The event manager passes mouse events to listeners registered in the component that is returned by getMouseEventTargetthe package-level method at Container. This will be called on yours JFrame, and as the JavaDoc points out, it:

Selects the topmost (deepest) lightest component that is interested in receiving mouse events.

(, JTextField) . , , Swing. MouseEvents, , , mouseEntered, mouseDragged mouseMoved, MouseListener MouseMotionListener, . , , , .

, , JTextField JButton .., - , . - (.. mouseEntered/mouseExited), MouseListener , .

JPanel MouseListener , .

+3

, (JTextField, JToolBar ..) jpanel / .

+2

- , ?

Componentmouse events are processed processMouseEvent()which says

Mouse events are triggered when one of the following events occurs:

  • The MouseListener object is registered through addMouseListener.
  • Mouse events are fired using enableEvents.

You can use getMouseListeners()to see the difference.

+1
source

Source: https://habr.com/ru/post/1751071/


All Articles