package awt02_transmitir;

import java.applet.Applet;
import java.awt.Panel;
import java.awt.Label;
import java.awt.TextField;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.net.URL;
import java.awt.image.ImageProducer;

import java.net.MalformedURLException;
import java.security.AccessControlException;
import java.io.IOException;
import java.net.URLConnection;


/**************************************************************
 * Applet receptor de mensajes
 * Recibe mensajes por medio de la función recibir_mensaje()
 *************************************************************/
public class receptor extends Applet {
    Panel panel_sup = new Panel();
    panel_dibujo panel_inf;
    Label etiq = new Label();
    TextField texto_recibido = new TextField();

    /************** Inicializar el applet *********************/
    public void init() {
	try {
	    jbInit();
	}
	catch(Exception e) {
	    e.printStackTrace();
	}
    }

    /****************** Inicialización de componentes **********/
    private void jbInit() throws Exception {
	Image buho = cargar_imagen();
	panel_inf =  new panel_dibujo( buho );

	this.setLayout( new BorderLayout() );

	/**** Configuro panel superior ***/
	etiq.setBackground(Color.orange);
	etiq.setFont(new java.awt.Font("Dialog", 1, 14));
	etiq.setForeground(Color.blue);
	etiq.setText("Applet receptor de mensajes de otro applet");
	panel_sup.add(etiq, null);

	/**** Configuro panel inferior ***/
	panel_inf.setLayout( new BorderLayout() );
	texto_recibido.setBackground(Color.cyan);
	texto_recibido.setText("Campo para recibir texto");
	panel_inf.add(texto_recibido, BorderLayout.SOUTH );

	this.add(panel_sup, BorderLayout.NORTH);
	this.add(panel_inf, BorderLayout.CENTER);
    }

    /******* Carga y devuelve la imagen **************/
    Image cargar_imagen() {
	try {
	    /*** Cargo la imagen y se la paso al panel inferior ****/
	    URL url = new URL(getCodeBase(), "awt02_transmitir/imagen/buho.GIF");
	    Image buho = Toolkit.getDefaultToolkit().getImage(url);
	    return buho;
	}
	catch (MalformedURLException mue) {
	    System.out.print("URL inadecuada. cargar_imagen. ");
	    System.out.println(mue.getMessage() );
	    return null;
	}
	catch (IOException ioe) {
	    System.out.print( "IOEXception. cargar_imagen. ");
	    System.out.println(ioe.getMessage());
	    return null;
	}
	catch (SecurityException ace) {
	    System.out.print("Security Exception. cargar_imagen. ");
	    System.out.println(ace.getMessage() );
	    return null;
	}
	catch (NullPointerException e) {
	    System.out.print( "Null Pointer. cargar_imagen. ");
	    System.out.println(e.getMessage() );
	    e.printStackTrace();
	    return null;
	}
    }

    /*********** Recibir mensajes de otro applet ********/
    void recibir_mensaje( String mensaje ) {
	texto_recibido.setText( mensaje );
    }
}

/**********************************************************************
 * Clase del tipo panel
 * Para el applet receptor.class
 * Pinta una imagen centrada con respecto al panel
 **********************************************************************/
class panel_dibujo extends Panel {
    Image im;
    /******* Constructor.Recibe la imagen que mostrará ******/
    panel_dibujo(Image im) {
	this.im = im;
    }

    /*** Pinto la imagen centrada ***/
    public void paint(Graphics g) {
	Rectangle rec = g.getClipBounds();
	int ancho_imagen = im.getWidth( this );
	int alto_imagen = im.getHeight( this );
	g.drawImage( im, rec.width/2 - ancho_imagen/2, rec.height/2 - alto_imagen/2, this );

    }
}
