Proxy pattern in Java : Proxy Pattern : Design Pattern : Java examples (example source code) Organized by topic

Java
C++
PHP


Java  »  Design Pattern   » [  Proxy Pattern  ]  Screenshots 
 



Proxy pattern in Java



/*
The Design Patterns Java Companion

Copyright (C) 1998, by James W. Cooper

IBM Thomas J. Watson Research Center

*/

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class ProxyDisplay extends JFrame {
  public ProxyDisplay() {
    super("Display proxied image");
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    JPanel p = new JPanel();
    getContentPane().add(p);
    p.setLayout(new BorderLayout());
    ImageProxy image = new ImageProxy("elliott.jpg"321271);
    p.add("Center", image);
    p.add("North"new Label("    "));
    p.add("West"new Label("  "));
    setSize(370350);
    setVisible(true);
  }

  
  static public void main(String[] argv) {
    new ProxyDisplay();
  }
}
//==================================

class ImageProxy extends JPanel implements Runnable {
  int height, width;

  MediaTracker tracker;

  Image img;

  JFrame frame;

  Thread imageCheck; //to monitor loading
  

  public ImageProxy(String filename, int w, int h) {
    height = h;
    width = w;

    tracker = new MediaTracker(this);
    img = Toolkit.getDefaultToolkit().getImage(filename);
    tracker.addImage(img, 0)//watch for image loading

    imageCheck = new Thread(this);
    imageCheck.start()//start 2nd thread monitor

    //this begins actual image loading
    try {
      tracker.waitForID(01);
    catch (InterruptedException e) {
    }
  }

  
  public void paint(Graphics g) {
    if (tracker.checkID(0)) {
      height = img.getHeight(frame)//get height
      width = img.getWidth(frame)//and width

      g.setColor(Color.lightGray)//erase box
      g.fillRect(00, width, height);
      g.drawImage(img, 00this)//draw loaded image
    else {
      //draw box outlining image if not loaded yet
      g.setColor(Color.black);
      g.drawRect(11, width - 2, height - 2);
    }
  }

  
  public Dimension getPreferredSize() {
    return new Dimension(width, height);
  }

  //public int getWidth() {return width;}
  //public int getHeight(){return height;}
  
  public void run() {
    //this thread monitors image loading
    //and repaints when done
    //the 1000 msec is artifically long
    //to allow demo to display with delay
    try {
      Thread.sleep(1000);
      while (!tracker.checkID(0))
        Thread.sleep(1000);
    catch (Exception e) {
    }
    repaint();
  }
}

           
       
Related examples in the same category
1.  Another Proxy Pattern
2.  Proxy Pattern 2 Proxy Pattern 2
























Home| Contact Us
Copyright 2003 - 04 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.