1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
import java.awt.*;
import java.net.*;
import javax.swing.*;
//for simplicity, I'm assuming the image data
//is loaded in memory (so getWidth() != -1)
public class ImagePanel extends JPanel
{ public ImagePanel()
{
}
public ImagePanel(Image image)
{ this.image = image;
}
public Image getImage()
{ return image;
}
public void setImage(Image image)
{ this.image = image;
revalidate();
}
public Dimension getPreferredSize()
{ getInsets(insets);
int w = insets.left + insets.right;
int h = insets.top + insets.bottom;
if (image != null)
{ w += image.getWidth(null);
h += image.getHeight(null);
}
Dimension sz = new Dimension(w,h);
//System.out.println(sz);
return sz;
}
public Dimension getMinimumSize()
{ return getPreferredSize();
}
public void paintComponent(Graphics g)
{ super.paintComponent(g);
if (image == null)
return;
getInsets(insets);
int w = this.getWidth() - insets.left
- insets.right;
int h = this.getHeight() - insets.top
- insets.bottom;
//clip in case image exceeds wxh
Graphics g2 = (Graphics) g.create
(insets.left, insets.top, w, h);
int x = (w-image.getWidth(null))/2;
int y = (h-image.getHeight(null))/2;
g2.drawImage(image, x, y, this); //this for ani gif
g2.dispose();
}
private Image image;
private Insets insets = new Insets(0,0,0,0);
//sample main
/*public static void main(String[] argv)
{ JFrame f = new JFrame("ImagePanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
URL url = ImagePanel.class.getResource("Image.gif");
Image image = new ImageIcon(url).getImage();
Container cp = f.getContentPane();
cp.add(new ImagePanel(image), BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}*/
} |