您可以简单地使用覆盖方法g.drawImage(...)
将它们绘制到面板上。paintComponent
那将是最简单的方法。
因为您的问题提到ImageIcon
了 ,所以如果您的 gif 是动画的,则使用它是正确的。否则,BufferedImage
通常是首选。如果您决定坚持ImageIcon
使用 ,则应使用paintIcon(Component c, Graphics g, int x, int y)
代替g.drawImage(...)
。
如果要动态添加图像,请考虑将它们存储在数组或ArrayList
中,然后简单地遍历paintComponent
.
例如:
JPanel panel = new JPanel(){
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
if(yourCondition){
g.drawImage(img, x, y, this); // for example.
}
}
};
另一种选择是创建一个扩展 JPanel 的私有类。例如:
public class OuterClass{
// fields, constructors, methods etc..
private class MyPanel extends JPanel{
// fields, constructors, methods etc..
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
if(yourCondition){
g.drawImage(img, x, y, this); // for example.
}
}
}
}
旁注:您需要使用 GIF 的任何特殊原因?PNG通常更好。
编辑:(根据安德鲁汤普森的想法)
为了拍摄背景中包含的所有图像的快照......
以下想法的变体:
BufferedImage background;
public void captureBackground(){
BufferedImage img = GraphicsConfiguration.createCompatibleImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
for(ImageIcon i : imageIconArray){ // could be for(BufferedImage i : imageArray){
i.paintIcon(this, g, 0, 0); // g.drawImage(i, 0, 0, null);
}
g.dispose();
background = img;
// either paint 'background' or add it to your background panel here.
}