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.GridLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.SystemColor;
import java.awt.event.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.IOException;
import java.lang.NullPointerException;

/*************************************************************************
 Applet que transmite mensaje al applet receptor
 Escriba el texto que desea enviar y presione el botón "enviar"
 ************************************************************************/
public class transmisor extends Applet {
    Panel panel_sup = new Panel();
    Panel panel_inf = new Panel();

    BorderLayout border = new BorderLayout(8, 8);      // Diseño de panel inferior
    GridLayout grid = new GridLayout(2,2,5,5);         // Diseño de panel inferior

    Label etiq = new Label();                          // De panel superior
    /*** Componentes de panel inferior ****/
    TextField texto = new TextField();
    Button b_enviar = new Button();
    Button b_abrir1 = new Button();
    Button b_abrir2 = new Button();

    public transmisor() {
    }
    /************** Inicializar el applet *********************/
    public void init() {
	try {
	    jbInit();
	}
	catch(Exception e) {
	    e.printStackTrace();
	}
    }

    /****************** Inicialización de componentes **********/
    private void jbInit() throws Exception {
	setLayout( border );

	/**** Configuro panel superior ***/
	etiq.setBackground(Color.orange);
	etiq.setFont(new java.awt.Font("Dialog", 1, 14));
	etiq.setForeground(Color.blue);
	etiq.setText("Applet transmisor de mensajes");
	b_abrir1.addActionListener(new transmisor_b_abrir1_actionAdapter(this));
	b_abrir2.addActionListener(new transmisor_b_abrir2_actionAdapter(this));
	b_enviar.addActionListener(new transmisor_b_enviar_actionAdapter(this));
	panel_sup.add(etiq, null);


	/**** Configuro panel inferior ***/
	panel_inf.setLayout( grid );
	b_enviar.setBackground(Color.cyan);
	b_enviar.setLabel("Enviar mensaje");
	texto.setBackground(Color.cyan);
	texto.setText("texto que desea transmitir");
	b_abrir1.setBackground(SystemColor.inactiveCaption);
	b_abrir1.setLabel("Abrir www.elmundo.es");
	b_abrir2.setBackground(SystemColor.inactiveCaption);
	b_abrir2.setLabel("Abrir www.elpais.es");
	panel_inf.add(b_enviar, null);
	panel_inf.add(texto, BorderLayout.NORTH );
	panel_inf.add(b_abrir1, null);
	panel_inf.add(b_abrir2, null);

	this.add(panel_sup, BorderLayout.NORTH);
	this.add(panel_inf, BorderLayout.CENTER);
    }

    /********* Respuesta a boton  **************/
    void b_abrir1_actionPerformed(ActionEvent e) {
	abrir_url( "http://www.elmundo.es");
    }

    /********* Respuesta a boton  **************/
    void b_abrir2_actionPerformed(ActionEvent e) {
	abrir_url( "http://www.elpais.es");
    }

    /******* Realiza un enlace a la dirección (url) que recibe *****/
    void abrir_url( String cadena_url ) {
	try {
	    URL url = new URL( cadena_url );                 // Abro URL
	    getAppletContext().showDocument( url );          // Enlace a URL
	}
	catch (SecurityException e) {     // Hija de RuntimeException
	    System.out.print( "SecurityException. Funcion cargar_texto(). ");
	    System.out.println(e.getMessage() );
	}
	catch (MalformedURLException mue) {    // Hija de IOException
	    System.out.print( "MalformedURLException. Funcion cargar_texto(). ");
	    System.out.println(mue.getMessage() );
	}
	catch (Exception e ) {
	    System.out.print( "Exception. Funcion cargar_texto(). ");
	    System.out.println(e.getMessage() );
	    e.printStackTrace();
	}
    }

    /*********** Boton para enviar mensaje al otro applet ********/
    void b_enviar_actionPerformed(ActionEvent e) {
	try {
	    String mensaje = texto.getText();
	    receptor receptor = (receptor) getAppletContext().getApplet( "applet_receptor" );
	    receptor.recibir_mensaje( mensaje );
	} catch (NullPointerException npe) {     // Hija de RuntimeException
	    System.out.print( "NullPointerException. Funcion b_enviar_actionPerformed().");
	    System.out.println(npe.getMessage() );

	}
    }
} /////////////////// Fin de clase transmisor

class transmisor_b_abrir1_actionAdapter implements java.awt.event.ActionListener {
    transmisor adaptee;

    transmisor_b_abrir1_actionAdapter(transmisor adaptee) {
	this.adaptee = adaptee;
    }
    public void actionPerformed(ActionEvent e) {
	adaptee.b_abrir1_actionPerformed(e);
    }
}

class transmisor_b_abrir2_actionAdapter implements java.awt.event.ActionListener {
    transmisor adaptee;

    transmisor_b_abrir2_actionAdapter(transmisor adaptee) {
	this.adaptee = adaptee;
    }
    public void actionPerformed(ActionEvent e) {
	adaptee.b_abrir2_actionPerformed(e);
    }
}

class transmisor_b_enviar_actionAdapter implements java.awt.event.ActionListener {
    transmisor adaptee;

    transmisor_b_enviar_actionAdapter(transmisor adaptee) {
	this.adaptee = adaptee;
    }
    public void actionPerformed(ActionEvent e) {
	adaptee.b_enviar_actionPerformed(e);
    }
}
