在java applet中调用paint时如何避免重绘图像?

时间:2013-11-13 20:25:25

标签: java applet awt

我正在尝试将图片设置为applet的背景。每当调用paint方法时,它都会重新绘制图像;这会导致闪烁。如何才能将图像仅绘制一次?

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Main extends Applet  {

    Image background;

    @Override
    public void init() {
        setSize(800, 600);

        try {
            System.out.println(getCodeBase());
            background = ImageIO.read(new File("1.jpg"));
        } catch (IOException ex) {
            System.out.println("Error reading the image");
        }
    }



    @Override
    public void paint(Graphics g) {

        g.drawImage(background, 0, 0, this);


    }
}

2 个答案:

答案 0 :(得分:0)

尝试使用JApplet而不是旧的Applet。 JApplet应该已经有了双缓冲,这可以减少闪烁。

答案 1 :(得分:0)

你看到这个的原因是因为大多数顶级容器都不是双缓冲的(事实上,如果我没记错的话,AWT组件根本不是双缓冲的。)

这意味着如果您在任何顶级容器上覆盖paint,您将看到此问题。

更好的解决方案是创建一个自定义组件,从JPanel扩展,覆盖其paintComponent方法并在那里绘制图像。

您还应该确保调用super.paintXxx以确保正确准备Graphics上下文以进行绘画。

您可以根据需要将此组件添加到JAppletJFrame