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)
@OverrideThe 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)
您没有看到椭圆形的原因是您正在将图像绘制到自己的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)