Package draff.awt

Source Code of draff.awt.ImageCanvas

package draff.awt;

import java.net.URL;
import java.awt.Canvas;
import java.awt.Image;
import java.awt.Dimension;
import java.awt.MediaTracker;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;

public class ImageCanvas extends Component {
  private transient Image image;
  private static int imageCanvasThatExist = 0;
  private String imageFileName = null;
  private boolean loadImageImmediatly;
  private static Hashtable imageTable = new Hashtable();
 
  public ImageCanvas() {
    this(null, true);
  }
 
  public ImageCanvas(String imageFileName) {
    this(imageFileName, true);
  }
 
  public ImageCanvas(String newImageFileName, boolean loadImageImmediatly) {
    this.loadImageImmediatly = loadImageImmediatly;
    if (loadImageImmediatly) {
      loadImage();
    }
    setImageFileName(newImageFileName);   
    setName(getClass().getName() + imageCanvasThatExist);
    imageCanvasThatExist++;
  }

  public ImageCanvas(Image image) {
    setImage(image);
    setName(getClass().getName() + imageCanvasThatExist);
  }

  public Image getImage() {
    return image;
  }
 
  public String getImageFileName () {
    return imageFileName;
  }
 
  public void loadImage() {
    try {
      while (!prepareImage(getImage(), this)) {
        try {
          Thread.sleep(250);
        } catch(InterruptedException err) {
        }
      }
    } catch (NullPointerException err) {
      err.printStackTrace();
    }
  }
 
  public Dimension getPreferredSize() {
    if (getImage() != null) {
      return new Dimension(getImage().getWidth(this), getImage().getHeight(this));
    }

    return getMinimumSize();
  }
 
  public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) {
    if ((flags & ImageObserver.ERROR) != 0) {     
      System.out.println("Error loading image from file " + getImageFileName());
      return false;
    }
   
    if (((flags & ImageObserver.ALLBITS) != 0) && ((flags & ImageObserver.WIDTH) != 0) &&
      ((flags & ImageObserver.HEIGHT) != 0)) {
      return false;
    }
   
    return true;
  }
 
  public void paint(Graphics g) {
    g.drawImage(getImage(), 0, 0, getSize().width, getSize().height, this);
  }
 
  public void setImage(Image image) {
    this.image = image;
    prepareImage(getImage(), this)
 

  public void setImageFileName(String newImageFileName) {
    this.imageFileName = newImageFileName;
   
    if (newImageFileName != null) {     
      if (imageTable.containsKey(newImageFileName)) {
        setImage((Image)imageTable.get(newImageFileName));
      } else {
        try {
          setImage(MediaSupplier.getImage(newImageFileName));
        } catch (Exception err) {
          err.printStackTrace();
        }
       
        imageTable.put(newImageFileName, getImage());
      }
    }
  }
 
  /**
   * @param c The component for which the images are being tracked.
   */
  public static void loadAllImages(Component c) {
    Enumeration images = imageTable.elements();
    MediaTracker tracker = new MediaTracker(c);
   
    int id = 0;
    while (images.hasMoreElements()) {
      tracker.addImage((Image)images.nextElement(), id++);
    }
   
    try {
      tracker.waitForAll();
    } catch (InterruptedException interrupted) {}
  }
 
  /**
   * Add the image at the spesified filename to the list that
   * can be loaded when loadAddImages is called.
   */
  public static void registerFileName(String fileName) {
    imageTable.put(fileName, MediaSupplier.getImage(fileName));
  }
 
  private void writeObject(java.io.ObjectOutputStream out)
    throws IOException
  {
    out.defaultWriteObject();
  }
 
  private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException
  {
    in.defaultReadObject();
   
    // 'getImageFileName() != null' must come BEFORE '!getImageFileName().equals("")',
    // otherwise a 'NullPointerException' may occur if getImageFileName() returned 'null'
    if (getImageFileName() != null && !getImageFileName().equals("")) {
      // Although the file name is already set setImageFileName assigns and possibly loads the real image.
      setImageFileName(getImageFileName());
    }
  }
}
TOP

Related Classes of draff.awt.ImageCanvas

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.