import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.net.URL; public class RightSizer extends ApplicationFrame { private Image mImage; public static void main(String[] args) throws Exception { String url = "http://java.oreilly.com/" + "news/knudsen/graphics/bite-size_banner.gif"; if (args.length > 0) url = args[0]; new RightSizer(new URL(url)); } public RightSizer(URL url) { super("RightSizer v1.0"); mImage = Toolkit.getDefaultToolkit().getImage(url); rightSize(); } private void rightSize() { int width = mImage.getWidth(this); int height = mImage.getHeight(this); if (width == -1 || height == -1) return; addNotify(); Insets insets = getInsets(); setSize(width + insets.left + insets.right, height + insets.top + insets.bottom); center(); setVisible(true); } public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { if ((infoflags & ImageObserver.ERROR) != 0) { System.out.println("Error loading image!"); System.exit(-1); } if ((infoflags & ImageObserver.WIDTH) != 0 && (infoflags & ImageObserver.HEIGHT) != 0) rightSize(); if ((infoflags & ImageObserver.SOMEBITS) != 0) repaint(); if ((infoflags & ImageObserver.ALLBITS) != 0) { rightSize(); repaint(); return false; } return true; } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { Insets insets = getInsets(); g.drawImage(mImage, insets.left, insets.top, this); } }