【发布时间】:2016-06-13 12:09:21
【问题描述】:
我正在尝试在JPanel 上绘制一些东西,但我似乎遇到了paint 和paintComponent 方法的问题。可能与双缓冲有关,但我不确定。 public void paintComponent(Graphics g) 方法由于某种原因没有被调用,知道为什么吗?
这是我的代码:
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g); //To change body of generated methods, choose Tools | Templates.
System.out.println("paintComponents!");
snakeHead.DrawSphere(g);
if(foodShoulBeRedrawn){
foodShoulBeRedrawn = false;
spawnFood();
}
if(shouldSpawnBodyPart){
shouldSpawnBodyPart = false;
snake.get(snake.size() - 1).DrawSphere(g);
}
//spawnSnake();
paintCalled = true;
repaint();
}
/*
@Override
public void paint(Graphics g) {
super.paint(g);
snakeHead.DrawSphere(g);
if(foodShoulBeRedrawn){
foodShoulBeRedrawn = false;
spawnFood();
}
if(shouldSpawnBodyPart){
shouldSpawnBodyPart = false;
snake.get(snake.size() - 1).DrawSphere(g);
}
//spawnSnake();
paintCalled = true;
repaint();
}
*/
【问题讨论】:
-
"paint-Components()" 不,它是 singular -
paintComponent(Graphics).. -
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
我就懒得理了,你知道这些函数是什么,反正我把整个代码贴出来了。
-
"发布了整个代码" 1) 不要转储你的整个代码。如果您不介意制作 MCVE,那么许多人也不会介意尝试提供帮助。 2) 在任何情况下,它都不是完整的代码。没有
main(String[])方法来启动它,没有导入,没有像Sphere3D这样的类的定义.. “我只是没有打扰” ..它显示了。 -
调用repaint()会导致组件调用它的paint方法,包括paintComponent,所以从paint方法调用repaint会创建一个无限循环。不要从任何paint方法调用repaint。
标签: java swing paint paintcomponent