我尝试了许多方法,但都没有成功。他们要么没有显示图像,要么他们让背景图像消失......你有什么建议吗?这是我的代码:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame{
int x, y;
Image Dak;
Image Levels;
private Image dbImage;
private Graphics dbg;
public Main(){
setTitle("Help de Pieten");
setSize(2000, 720);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
this.setContentPane(
new JLabel(new ImageIcon(ImageIO.read(new File("Image1.gif")))));
} catch (IOException e) {}
validate();
ImageIcon i = new ImageIcon("Image2.gif");
Levels = i.getImage();
x = 100;
y = 100;
}
public void paint(Graphics g){
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g){
g.drawImage(Levels, x, y, this);
repaint();
}
public static void main(String[] args) {
Main main = new Main();
}
}
那么如何在不使背景消失的情况下在背景前拍摄图像?
答案 0 :(得分:2)
首先,请避免覆盖paint
等顶级容器的JFrame
方法,它们不会被双重缓冲,并且它们具有复杂的组件层次结构,您不必使用它们想参与其中
相反,首先从JPanel
扩展,Swing组件默认是双缓冲的,所以你不必担心自己实现它,并覆盖它{{1方法并在其中执行自定义绘画。
有关详细信息,请查看Performing Custom Painting和Painting in AWT and Swing。
Swing中的Paint遵循"画家画布"范例,也就是说,无论先画的是什么,都会被下面绘的任何东西覆盖,所以为此,请确保先绘制背景,然后按每个图层绘制,以便显示它们。
paintComponent