Java tutorial
import java.awt.Component; import java.awt.Graphics; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTabbedPane; public class ProxyTester { public static void main(String[] args) { JTabbedPane tabbedPane = new JTabbedPane(); for (String name : imageNames) { JLabel label = new JLabel(new ImageProxy(name)); tabbedPane.add(name, label); } JFrame frame = new JFrame(); frame.add(tabbedPane); frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } private static final String[] imageNames = { "A.gif", "B.gif", "C.gif", "D.gif", "E.gif" }; private static final int FRAME_WIDTH = 500; private static final int FRAME_HEIGHT = 300; } class ImageProxy implements Icon { public ImageProxy(String name) { this.name = name; image = null; } public void paintIcon(Component c, Graphics g, int x, int y) { ensureImageLoaded(); image.paintIcon(c, g, x, y); } public int getIconWidth() { ensureImageLoaded(); return image.getIconWidth(); } public int getIconHeight() { ensureImageLoaded(); return image.getIconHeight(); } private void ensureImageLoaded() { if (image == null) { System.out.println("Loading " + name); image = new ImageIcon(name); } } private String name; private ImageIcon image; }