gpt4 book ai didi

java - repaint() 不会调用paintComponent()

转载 作者:行者123 更新时间:2023-12-01 08:07:21 27 4
gpt4 key购买 nike

我正在尝试用 Java 制作乒乓球游戏,但它不起作用。我已经做了一些测试,似乎变量正在更新,但是当我这样做时计时器中的 repaint(); actionPerformed(ActionEvent e) 不会调用 paintComponent() 方法

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PongGame extends JComponent implements ActionListener, MouseMotionListener{

public int state = 1;
public int paddleX;
public String buttonColor = "blue";
public int mouseX, mouseY;
private int ballX = 400;
private int ballY = 150;

public static void main(String[] args){

JFrame window = new JFrame("Pong");
PongGame game = new PongGame();
window.add(new PongGame());
window.pack();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLocationRelativeTo(null);
window.setResizable(false);
window.setVisible(true);

Timer t = new Timer(20, game);
t.start();
}

public Dimension getPreferredSize(){
return new Dimension(800, 600);
}

public void paintComponent(Graphics g){
paddleX = mouseX;

g.setColor(Color.WHITE);
g.fillRect(0,0, 800, 600);

g.setColor(Color.BLACK);

g.fillRect(paddleX, 550, 150, 15);
g.fillOval(ballX, ballY, 30, 30);
}

@Override
public void actionPerformed(ActionEvent e) {
ballX = ballX + 10;
ballY = ballY + 10;
System.out.println(ballX + " " + ballY);

}

@Override
public void mouseDragged(MouseEvent e) {

}

@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
repaint();
}
}

最佳答案

  • 您尚未将已实现的 MouseMotionListener 注册到任何组件:

    game.addMouseMotionListener(game);
  • 您没有将第一个创建的 PongGame 实例添加到框架中,而是添加了一个产生错误的新实例:

     PongGame game = new PongGame();
    window.add(new PongGame()); // <<--- why creating the new instance ?
    // it should be window.add(game);
  • 作为一种良好的编程实践:尝试将添加监听器代码放入组件自己的创建上下文中,即放入其构造函数中,以使代码更具可读性。

关于java - repaint() 不会调用paintComponent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573257/

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