Я создаю простую Java-игру, которая будет иметь отдельные JPanels для каждого игрового состояния. В приведенном ниже коде они скрываются под AbstractPanel
. Но у меня есть слушатели клавиш / мыши на верхней панели (Game
).
К сожалению, когда я пытаюсь использовать координаты мыши из Game
на currentPanel
подпанели, компоненты на подпанели тоже выделяютсярано, например, JButton, расположенный на 100,100, выделяется, когда курсор мыши находится на 90,90. Есть ли способ перевести координаты из родительской панели в дочернюю?
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();
}