gpt4 book ai didi

java - 将鼠标坐标转换为子面板

转载 作者:行者123 更新时间:2023-12-01 22:11:26 24 4
gpt4 key购买 nike

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

不幸的是,当我尝试在 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();
}

最佳答案

如果其他人需要答案,这是我的更新:主类中的鼠标方法正在传递父 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在上面的评论中。

关于java - 将鼠标坐标转换为子面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58659084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com