将鼠标坐标转换为子面板

Translate mouse coordinates to child panel

我正在创建简单的 Java 游戏,每个游戏状态都有单独的 JPanel。在下面的代码中,它们隐藏在 AbstractPanel 下。但是我在顶部面板 ( Game ) 上有 key/mouse 个听众。

不幸的是,当我尝试在 currentPanel 子面板上使用来自 Game 的鼠标坐标时,子面板上的组件过早突出显示,例如当鼠标光标位于 90,90 时,位于 100,100 的 JButton 会突出显示。有没有办法将坐标从父面板转换为子面板?

public class Game extends JPanel implements KeyListener, MouseListener, MouseMotionListener {

    private static final int WIDTH = 1024;
    private static final int HEIGHT = 768;

    private AbstractPanel currentPanel = null;

    public Game() {

        Dimension gameSize = new Dimension( WIDTH, HEIGHT );
        menuPanel.setSize( gameSize );
        menuPanel.setPreferredSize( gameSize );
    }

    public static void main( String[] args ) {

        Game game = new Game();
        game.setLayout( new BorderLayout() );
        Dimension gameSize = new Dimension( WIDTH, HEIGHT );

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
        frame.getContentPane().setLayout( new BorderLayout() );
        frame.getContentPane().add( game, BorderLayout.CENTER );
        frame.setSize( gameSize );
        frame.setPreferredSize( gameSize );
        frame.setLocationRelativeTo( null );
        frame.addKeyListener( game );
        frame.addMouseListener( game );
        frame.addMouseMotionListener( game );
        frame.setVisible( true );
    }

    public void mouseClicked( MouseEvent e ) {

        currentPanel.mousePressed( e );
        repaint();
    }

以防其他人需要答案,这是我的更新:main class 中的鼠标方法正在像这样传递父 JFrame

    public void mouseClicked( MouseEvent e ) {

        currentPanel.mousePressed( frame, e );
        repaint();
    }

在子面板中,这些听众从转换开始:

    @Override
    public void mousePressed( Container source, MouseEvent e ) {

        String newItem = null;
        Point clickPoint = SwingUtilities.convertPoint( source, e.getX(), e.getY(), this );
        // some code here
        if( bounds.contains( clickPoint ) ) {
        // some more code here

感谢上面评论中的 Carlos Heuberger