Load Images in Multi-Class Application

*Note: This is a stand-alone GUI application

I am programming a "Load" button in my application to load a GIF image onto a canvas.  The Load event looks like:
(Note that eScreen is the name of the Screen container canvas class I created so I can draw on an image)

      else if ("Load".equals(o)){
        FileDialog fd = new FileDialog(this, "Load Image", FileDialog.LOAD);
        fd.setDirectory(".");
        fd.show();
       
        filename = fd.getFile();
        eScreen.image = Toolkit.getDefaultToolkit().getImage(filename);

        eScreen.imageUpdate(eScreen.image, ALLBITS , 0, 0, 256, 256);
      }
The following is in the ScreenContainer class.  
I've followed an image loading example from Core Java by Sunsoft Press, but it does not
paint my image when loaded.  The relevant code is as follows:

  Image image = null;
  int buffer_width = 0;
  int buffer_height = 0;
  int image_width = 0;
  int image_height = 0;
  Image buffered_image;


  public void paint(Graphics g){
    if(image != null){
      if (image_width <=0 || image_height <= 0){
        buffered_image = createImage(1,1);
        Graphics bg = buffered_image.getGraphics();
        bg.drawImage(image, 0, 0, this);
        bg.dispose();
        return;
      }
     
      Dimension d = size();
      Insets in = insets();
     
      int client_width = d.width - in.right - in.left;
      int client_height = d.height - in.bottom - in.top;
     
      if(client_width > buffer_width || client_height > buffer_height){
        //size has increased
        buffer_width = client_width;
        buffer_height = client_height;
       
        buffered_image = createImage(buffer_width, buffer_height);
        Graphics bg = buffered_image.getGraphics();
        bg.drawImage(image, 0, 0, null);
        for (int i=0; i< buffer_width/image_width; i++){
          for (int j=0; j< buffer_height/image_height; j++){
            if(i + j > 0) bg.copyArea(0, 0, image_width, image_height,
i*image_width,
                                      j*image_height);
          }
        }
        bg.dispose();
      }
     
      g.drawImage(buffered_image, 0, 0, this);

    }
    else{
      g.drawRect(0,0,255,255);
      g.setColor(Color.orange);
      g.fillRect(0,0,255,255);
    }
  }
 
  public void update(Graphics g)
  { //overrides the update function so just paints image --Don't use it though!
    paint(g);
  }

  public boolean imageUpdate(Image img, int infoflags, int x, int y, int width,
                             int height){
    if((infoflags & ImageObserver.ALLBITS) != 0){    //image is complete
      image_width = image.getWidth(null);
      image_height = image.getHeight(null);
      repaint();
      return false;
    }
    return true;  //want more info
  }

  public Insets insets(){
    return new Insets(10,10,10,10);
  }
}


Thanks for any help,
Linda
       

wawaAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jpk041897Commented:
Are you writting this on an Applet or an aplication?
0
wawaAuthor Commented:
This is a stand-alone application.
0
wawaAuthor Commented:
Edited text of question
0
jpk041897Commented:
From the title of your question I assume that the File dialog call is in one class and the display in another.

If this is the case, then the problem you are having stems from the fact that you do not have a common context for the image you read in and the image you want to display. I.e.: Java does not allow global variables, so the Image beeing loaded is local to the class that loads it and not available to the class that wants to display it.

Any particular reason for this (Simple yes/no will do)?

Is calling the dialog from within the class that displays it acceptable? If thats the case, you could simply move the code that reads the file into the class that displays it.

If not, have you considered defining a class that contains a static Image and instantiating it in both classes so that you have a common memory address?

Such a class would simulate global memory.

Example:

public void imageXfer(){
   static Image Img;

    imageXfr(){
    // Do nothing just instantiate
    }
}

And then instantiate and use in your classes, as in

...
   imageXfr MyImg = new(imageXfr);
...
   MyImg = eScreen.Image;

and using a similar technique in the display section yo could do:


...

imageXfr MyImg = new(imageXfr); // the Image contained is static so it will remain unchanged in both classes

image = imageXfr.image;


0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.