您可以简单地使用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.
}
}
};
Run Code Online (Sandbox Code Playgroud)
另一种方法是创建一个扩展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.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
附注:您需要使用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.
}
Run Code Online (Sandbox Code Playgroud)
是的,这是可能的,有两种正确的方法
1)如果是有那么只有一个图片放的JLabel与图标的玻璃面板
2)使用LayeredPane for <= Java6(不是Java7用户有JLayer)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |