Java PaintComponents 没有被调用

标签 java swing paint paintcomponent

我正在尝试在 JPanel 上绘制一些内容,但似乎我遇到了 paintpaintComponent 方法的问题。可能与双缓冲有关,但我不确定。 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();
}
*/

最佳答案

你正在超越Container#paintComponents() ,它由您的 JFrame 继承。您不需要扩展 JFrame,而是需要扩展 JPanel因此您可以重写其 paintComponent()getPreferredSize()。然后您可以将面板add()添加到JFrame中,就像它们显示的here一样。和 here .

关于Java PaintComponents 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789496/

相关文章:

Java Applet 未在浏览器中运行

java - 将 ScrollPane 添加到 JTextArea

java - 安卓刮刮卡应用

java - Maven 通过 systemPath/system 添加 jars 但未添加到 war 或其他任何地方

java - String 类和其他包装类的 valueOf() 方法

java - 为什么我不应该在 Web 界面上使用静态文本?

java - 带有 gridlayout 的 jpanel 内部空间太多

java - 调整 JPanel 的大小以准备打印,而无需将其从原始位置移开

Java 绘制速度相对于颜色模型

java - 事件发生后在 JFrame 中绘制某些内容?