简单的定制绘画错误

1 java swing awt double-buffering

我刚刚开始编码,我想我忘记了如何加倍缓冲.这是我现在的代码,我不确定我缺少什么.当我开始它只有一个白色的屏幕,没有椭圆形.

渲染中的错误是什么?

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JFrame;

public class Graphs extends JFrame {

private Image dbImage;
private Graphics dbg;

public static void main(String[] args) {
    new Graphs();
}

public Graphs() {
    setSize(1000, 600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setTitle("Graphs");
    setLocationRelativeTo(null);
    setVisible(true);
}

public void paint(Graphics g) {
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    dbg.drawImage(dbImage, 0, 0, this);
}

public void paintComponent(Graphics g) {
    g.drawOval(200, 200, 200, 200);
    repaint();
}
}
Run Code Online (Sandbox Code Playgroud)

更新:编译错误 @Override

The method  paintComponent(Graphics) of type Graphs must override or implement a supertype method.

1 quick fix available:
-> Remove '@Override' annotation
Run Code Online (Sandbox Code Playgroud)

Rei*_*eus 5

您没有看到椭圆形的原因是您正在将图像绘制到自己的Graphics对象上.更换:

dbg.drawImage(dbImage, 0, 0, this);
Run Code Online (Sandbox Code Playgroud)

g.drawImage(dbImage, 0, 0, this);
Run Code Online (Sandbox Code Playgroud)

最好不要paint在顶级容器中覆盖paintComponent,而是在子类中覆盖JComponent.还记得打电话

super.paintComponent(g);
Run Code Online (Sandbox Code Playgroud)