我正在尝试将图片设置为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);
}
}
答案 0 :(得分:0)
尝试使用JApplet而不是旧的Applet。 JApplet应该已经有了双缓冲,这可以减少闪烁。
答案 1 :(得分:0)
你看到这个的原因是因为大多数顶级容器都不是双缓冲的(事实上,如果我没记错的话,AWT组件根本不是双缓冲的。)
这意味着如果您在任何顶级容器上覆盖paint
,您将看到此问题。
更好的解决方案是创建一个自定义组件,从JPanel
扩展,覆盖其paintComponent
方法并在那里绘制图像。
您还应该确保调用super.paintXxx
以确保正确准备Graphics
上下文以进行绘画。
您可以根据需要将此组件添加到JApplet
或JFrame