import java.awt.*; import javax.swing.*; import java.awt.image.*; import java.awt.event.*; import java.net.URL; import java.net.MalformedURLException; public class ResizableApplet extends JApplet { public ResizablePanel p; private MediaTracker tracker=null; public void init() { Image combatImg = loadImageCompletely("combat.gif"); p = new ResizablePanel(combatImg); this.getContentPane().add(p); } private Image loadImageCompletely(String imgName) { //load image using URL. wait for load using MediaTracker Image img; if (tracker==null) { tracker = new MediaTracker(this); } try { img = Toolkit.getDefaultToolkit().getImage(new URL(this.getDocumentBase(),imgName)); tracker.addImage(img,0); try { tracker.waitForID(0); } catch (InterruptedException e) { System.out.println("Cannot load image "+ img); System.out.println(e); } return img; } catch (MalformedURLException e) { System.out.println(e); } return null; } } class ResizablePanel extends JPanel implements ComponentListener { private Image bImg=null; private Image bScaledImg=null; public ResizablePanel( Image bImg) { this.bImg = bImg; addComponentListener(this); } public void paintComponent(Graphics g) { super.paintComponent(g); if (bScaledImg==null) { resizeTerrainImage(); } g.drawImage(bScaledImg,0,0,this); } public void componentHidden(ComponentEvent e) {} public void componentMoved(ComponentEvent e) {} public void componentShown(ComponentEvent e) {} public void componentResized(ComponentEvent e) { resizeTerrainImage(); } private void resizeTerrainImage() { bScaledImg = bImg.getScaledInstance(this.getSize().width, this.getSize().height,Image.SCALE_DEFAULT); } }