未调用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