0

我正在尝试将图像设置为小程序的背景。每当调用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);


    }
}
4

2 回答 2

0

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

于 2013-11-13T20:41:09.140 回答
0

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

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

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

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

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

于 2013-11-13T20:50:45.590 回答