// // another example of the Java AWT, showing loading and display of // an image. // see class definition for details. // import java.awt.* ; import java.io.* ; import java.awt.image.* ; import java.awt.event.* ; import java.net.* ; // // a ShowImageWithObserver object is a DrawingFrame that displays an // image loaded from a URL (GIF and JPEG formats are supported). // the initial size of the display is just big enough to // contain the image; if the window is resized, the image is // scaled to fit. in additional, the object has an ImageObserver // that reports on progress in loading/scaling the image. // class ShowImageWithObserver extends DrawingFrame implements ImageObserver { private Image frameImage ; private boolean initialSizesSet = false ; ShowImageWithObserver(URL imageURL) { super("ShowImageWithObserver") ; // start loading image. frameImage = getToolkit().getImage(imageURL) ; // set initial size of frame and display setDrawingSize(new Dimension(200, 100)) ; show() ; } // creates onscreen image by scaling image from file. public void paint(Graphics g) { System.out.println("paint called") ; if (!initialSizesSet) { int w = frameImage.getWidth(this) ; int h = frameImage.getHeight(this) ; if ((w > 0) && (h > 0)) { setDrawingSize( new Dimension(w, h)) ; initialSizesSet = true ; System.out.println("in paint: " + "setting initial size = " + w + " by " + h) ; } } if (frameImage == null) { System.out.println("in paint: null image") ; } else { // position origin to avoid frame borders. translateDrawingArea(g) ; // get size of frame, minus borders. Dimension d = getDrawingSize() ; System.out.println("in paint: " + "scaling to size = " + d.width + " by " + d.height) ; // draw scaled version of image. g.drawImage(frameImage, 0, 0, d.width, d.height, this) ; } } // updates onscreen image (no need to clear first, just paint). public void update(Graphics g) { System.out.println("update called") ; paint(g) ; } // called as image is loaded, etc. public boolean imageUpdate(Image img, int flags, int x, int y, int width, int height) { System.out.println("imageUpdate called") ; if ((flags & HEIGHT) != 0) { System.out.println("imageUpdate called; " + "HEIGHT flag set, height = " + height) ; } if ((flags & WIDTH) != 0) { System.out.println("imageUpdate called; " + "WIDTH flag set, width = " + width) ; } if ((flags & PROPERTIES) != 0) System.out.println("imageUpdate called; " + "PROPERTIES flag set") ; if ((flags & SOMEBITS) != 0) System.out.println("imageUpdate called; " + "SOMEBITS flag set") ; if ((flags & ALLBITS) != 0) System.out.println("imageUpdate called; " + "ALLBITS flag set") ; if ((flags & ERROR) != 0) System.out.println("imageUpdate called; " + "ERROR flag set") ; if ((flags & ABORT) != 0) System.out.println("imageUpdate called; " + "ABORT flag set") ; if (((flags & ALLBITS)==0) && ((flags & ABORT)==0)) { System.out.println( "imageUpdate returning true") ; return true ; } else { System.out.println( "imageUpdate returning false") ; repaint() ; return false ; } } // // ---- main --------------------------------------------------- // // command-line argument: file from which to load image. // public static void main(String[] args) { if (args.length < 1) { System.out.println("Argument is URL") ; System.exit(-1) ; } URL u = null; try { u = new URL(args[0]) ; } catch (MalformedURLException e) { System.out.println("Bad URL " + args[0]) ; System.out.println("Exception = " + e) ; System.exit(-1) ; } ShowImageWithObserver s = new ShowImageWithObserver(u) ; } }