未调用Java组件
我试图在未调用Java组件,java,swing,paint,paintcomponent,Java,Swing,Paint,Paintcomponent,我试图在JPanel上绘制一些东西,但似乎我遇到了paint和paintComponent方法的问题。可能与双缓冲有关,但我不确定public void paintComponent(Graphics g)方法由于某种原因没有被调用,知道为什么吗 这是我的密码: @Override public void paintComponents(Graphics g) { super.paintComponents(g); //To change body of generated met
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();
}
*/
我认为JFrame不是JComponent,所以永远不会调用paintComponent方法。
您应该将所有绘制方法放在JPanel中,并将其包含在JFrame中。我认为JFrame不是JComponent,因此永远不会调用paintComponent方法。
您应该将所有绘制方法放在JPanel中,并将其包含在JFrame中。您正在重写,它是由您的
JFrame继承的。您需要进行扩展,而不是扩展JFrame
,以便覆盖其paintComponent()
和getPreferredSize()
。然后您可以add()
将面板添加到JFrame
,就像它们所显示的那样。您正在覆盖,它是由您的JFrame
继承的。您需要进行扩展,而不是扩展JFrame
,以便覆盖其paintComponent()
和getPreferredSize()
。然后你可以add()
将面板添加到JFrame
,就像它们所显示的那样。“paint-Components()”不。它是单数的-paintComponent(Graphics)
。为了更快地获得更好的帮助,发布一个或。我只是不想麻烦,你知道这些函数是什么,反正我发布了整个代码。“发布了整个代码”1)不要转储整个代码。如果你懒得去做一个MCVE,那么很多人也懒得去帮助你。2) 在任何情况下,它都不是完整的代码。没有main(String[])
方法来启动它,没有导入,没有类的定义,比如Sphere3D
。。“我只是不想麻烦。”它显示了。调用repaint()将导致组件调用其绘制方法,包括paintComponent,因此从绘制方法调用repaint将创建一个无限循环。不要从任何paint方法调用repaint。“paint-Components()”不。它是单数的-paintComponent(Graphics)
。为了更快地获得更好的帮助,请发布or。我只是不想麻烦,你知道这些函数是什么,反正我发布了整个代码。“发布了整个代码”1)不要转储整个代码。如果你懒得去做一个MCVE,那么很多人也懒得去帮助你。2) 在任何情况下,它都不是完整的代码。没有main(String[])
方法来启动它,没有导入,没有类的定义,比如Sphere3D
。。“我只是不想麻烦。”它显示了。调用repaint()将导致组件调用其绘制方法,包括paintComponent,因此从绘制方法调用repaint将创建一个无限循环。不要从任何绘制方法调用“重新绘制”。您是否打算将第二个链接指向?很酷,谢谢!我在JForm的帮助下完成了这一步,所以据我所知,它会自动添加所有内容,NetBeans本身。是的,谢谢你!:)@维格:没有,但我不太清楚。谢谢你说的话。我正试着引导皇帝到JPanel
。你打算让你的第二个链接指向吗?很酷,谢谢!我在JForm的帮助下完成了这一步,所以据我所知,它会自动添加所有内容,NetBeans本身。是的,谢谢你!:)@维格:没有,但我不太清楚。谢谢你说的话。我正试图引导皇帝去JPanel
。