gpt4 book ai didi

Java:绘画不调用重绘

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

老实说,我真的不知道自己在做什么。我刚刚从 python 迁移到 Java,并且仍在努力适应所有的类和类型。

我决定放弃 Java 概念教程并开始亲自动手。根据我的理解,我正在使用 swing 在屏幕上绘制一个球并使其移动。

我尝试设计一个球对象来处理球的位置和屏幕碰撞,但球根本没有移动。当我打开调试时,我注意到 Paint() 函数仅在创建时被调用,但不会通过 repaint() 被调用。

我有一种感觉,我正在使用一个糟糕的教程来做这些事情,看起来有更好的方法来做到这一点。

无论如何,我很高兴听到你们的想法。

编辑:在看到你的评论后,我注意到当我将sysout放在那里时,paint实际上被调用了。在我将 sysout 放入 Paint() 之前,调试器似乎不会跳转到那里。我的猜测是我并没有真正改变球的位置。

@SuppressWarnings("serial")
public class Tennis extends JPanel {
Ball ball = new Ball(50,50);

@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
int[] position = ball.getPosition();
g2d.fillOval(position[0],position[1], 30, 30);
}

public static void main(String[] args) {

JFrame frame = new JFrame("Mini Tennis");

Tennis game = new Tennis();
frame.add(game);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

while (true) {
// just change the position and check for bump
game.ball.move(game.getHeight(), game.getWidth());
game.repaint();

try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}

最佳答案

将paint()更改为paintComponent(),有关其中差异的解释,请参阅this .

@Override
public void paintComponent(Graphics g){ //CHANGE HERE
super.paintComponent(g); //AND HERE
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
int[] position = ball.getPosition();
g2d.fillOval(position[0],position[1], 30, 30);
}

关于Java:绘画不调用重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438628/

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