gpt4 book ai didi

java - 在java中重新绘制不工作

转载 作者:行者123 更新时间:2023-12-02 04:34:01 25 4
gpt4 key购买 nike

我正在尝试绘制一个矩形,其位置每秒更新一次,因为我有一个扩展 JPanel 的类,并且在其中我重写了paint(或paintComponent)函数_我已经尝试了两个_但显然这个函数是仅调用一次,如下面的代码所示,当我尝试使用重绘函数在无限循环中调用它时,它不会被调用,有什么想法我可以做什么吗?

public class Board extends JPanel implements KeyListener{
public void setUpBoard(){
JFrame frame = new JFrame();
Board board = new Board();
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setLocation(350, 80);
frame.add(board);
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.fillRect(food.getX(),200,20,20);
}
}

上面的代码是图形部分,下面是main函数,它被放在另一个类中:

 public static void main(String[] args) throws InterruptedException {
Board board = new Board();
FoodGenerator food = new FoodGenerator();
board.setUpBoard();
while(true){
board.repaint();
food.adder();
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


}

上面的代码 food.adder 是矩形位置更新的地方,我已经检查过了,没有任何问题。

最佳答案

问题是您正在 setUpBoard 中创建一个新的 Board 对象并将添加到您的 JFrame:

Board board = new Board();
// ...
frame.add(board);

因此,当您使用 repaint() 时,您将重新绘制在 main 方法中创建的 Board 实例,而不是您在 setUpBoard 中创建的实例,即您添加到框架中的实例。

这可以通过在 setUpBoard 中使用 Board board = this; 轻松解决,或者,在我看来更简单,只需使用 frame.add(this )。随后对 repaint 的调用将为您在 main 方法中创建的同一个 Board 对象安排对 paint 的调用。

另外,由于您使用的是 Swing,所以不要使用 paint,而是使用 paintComponent,确保 super.paintComponent(g) 是方法主体中的第一条语句。

关于java - 在java中重新绘制不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062352/

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