Sistemas

Sistemas

martes, 24 de mayo de 2011

JAVA 28. INSTALAR ECLIPSE SQL EXPLORER EN ECLIPSE JAVA

se indicara cómo instalar y configurar Eclipse SQL Explorer. Se trata de un plugin gratuito / free para Eclipse que permite acceder y manipular bases de datos (Oracle, MySQL, SQL Server, etc) desde el propio IDE de Eclipse (perspectiva).

Instalación y configuración de Eclipse SQL Explorer en Eclipse (Java) 

En primer lugar necesitaremos tener instalado Eclipse. se explicara como integrar Eclipse SQL Explorer en el IDE de Eclipse (Perspectiva). Se trata de un plugin de código fuente abierto, disponible en:

http://sourceforge.net/projects/eclipsesql

Que permite la manipulación de bases de datos desde el propio Eclipse (ejecutar consultas SQL de todo tipo mostrando el resultado (SQL Results), estructura de la base de datos (Database structure), detalles de la base de datos (Database Details), historia del SQL ejecutado (SQL History), admite múltiples conexiones a múltiples motores de base de datos (Axion, HSQLDB, IBM DB2, InstantDB, InterClient, Firebird, Microsoft SQL Server, Mimer SQL, MySQL, Oracle, Pointbase, PostgreSQL, Progress OpenEdge, SAPDB, Sunopsis XML, Sybase, ThinkSQL, etc). 

Lo descargaremos desde la web anterior, será un fichero .zip que descomprimiremos en la carpeta de instalación de Eclipse (en nuestro caso C:/eclipse), se descomprimirá la carpeta net.sourceforge.sqlexplorer_3.0.0.20060901 dentro de plugins. Si tenemos abierto Eclipse lo cerraremos y lo volveremos a abrir.

Para poder visualizar la perspectiva de SQL Explorer en Eclipse, abriremos Eclipse y pulsaremos en "Ventana" - "Abrir perspectiva" - "Otros...":


 

En la ventana "Abrir perspectiva" seleccionaremos "SQL Explorer" y pulsaremos "Aceptar": 



El IDE de Eclipse mostrará este aspecto:



Como ejemplo de utilización de Eclipse SQL Explorer utilizaremos una conexión de una base de datos MySQL, para ello descargaremos e instalaremos (con descomprimirlo es suficiente) el Connector/J de MySQL (JDBC), para ello accederemos a:

http://dev.mysql.com/downloads/connector/j/5.1.html 

Descomprimiremos el fichero JDBC descargado anteriormente en cualquier carpeta, en nuestro caso en

C:/eclipse/mysql-connector-java-5.1.0

Para acceder a MySQL desde Eclipse con SQL Explorer y el JDBC abriremos Eclipse, en la ventana "Connections" pulsaremos en el primer botón "Create New Connection Profile": 



En la ventana de "Create New Connection Profile" introduciremos los siguientes datos:
  • Name: el nombre del nuevo perfil de conexión, por ejemplo "pruebaConexionMySQL"
  • Driver: en el desplegable nos aparecerán drivers por defecto, en nuestro caso, vamos a utilizar el JDBC descargado anteriormente, para ello pulsaremos en "New Driver":
Le pondremos un nombre al nuevo driver en "Name", por ejemplo "mMySQL", introduciremos el ejemplo de URL en "Example URL": jdbc:mysql://localhost/test. Pulsaremos en la pestaña / solapa "Extra Class Path" y pulsaremos en el botón "Add" que aparece en la parte derecha de la ventana:

Seleccionaremos la ubicación del driver JDBC descargado anteriormente de la web de MySQL, en concreto el fichero .jar: mysql-connector-java-5.1.0-bin.jar:


Por último en la ventana de "Create New Driver" indicaremos (en el desplegable que aparece en la parte inferior de la ventana) el "Driver Class Name": com.mysql.jdbc.Driver. Pulsaremos "Aceptar" para volver a la ventana "Create New Connection Profile":

 
  • En "Driver" seleccionaremos el anteriormente dado de alta "mMySQL".
  • URL: jdbc:mysql://localhost/test (donde "localhost" será el nombre o la IP del servidor de MySQL, "test" será el nombre de la base de datos (esquema) de MySQL al que nos conectaremos.
  • User Name: nombre de usuario de la base de datos con el que nos conectaremos.
  • Password: contraseña del usuario de la bd.
  • Auto Logon: marcaremos esta opción si hemos introducido usuario y contraseña y queremos que la conexión se realice de forma automática, sin pedir estos datos.
  • Open on Startup: marcaremos este check para conectar directamente con el driver indicado al abrir el entorno Eclipse SQL Explorer.
Tras rellenar todas las opciones pulsaremos en "Aceptar" para crear el nuevo perfil de conexión: 


Para realizar una conexión pulsaremos con el botón derecho del ratón sobre el perfil de conexión creado "pruebaConexionMySQL" y seleccionaremos "Connect":


Indicaremos usuario y contraseña y pulsaremos "Aceptar": 


Mostrará una Eclipse SQL Explorer mostrará una ventana indicando el proceso de la conexión:


Para realizar una prueba añadiremos una consulta SQL para crear la tabla de prueba "clientes". Esto lo haremos añadiendo en la ventana SQL Editor del IDE de Eclipse SQL Explorer la siguiente consulta SQL:
create table clientes 
(
  codigo varchar(5) primary key,
  fecha date,
  nombre varchar(90) not null unique,
  cif varchar(15) not null unique,
  tipo varchar(10) default "Cliente",
  ccc varchar(20)
)

Para ejecutarla pulsaremos sobre el icono "Execute SQL" o con la combinación de teclas "Control + Intro": 



Insertaremos algún registro con la siguiente sentencia SQL:
insert into clientes (codigo, nombre, cif, tipo, ccc) 
values ('00001', 'Fernando Alonso','111222333V',
'Contado','28000550002020202')


 

Podremos ver el contenido de la tabla ejecutando la siguiente consulta SQL :
select * from clientes
Incluso podremos exportar el resultado a .xls (Excel), csv, html): 



Con Eclipse SQL Explorer también podremos ver en forma de árbol todos los esquemas de nuestro servidor MySQL con todas las tablas y sus campos, índices, procedimientos, etc. Utilzando para ello "Database Structure": 




En la ventana "Database detail" podremos ver todos los datos posibles del esquema y tabla seleccionados en "Database Structure": vista previa de todos los registros y campos (Preview), número de registros (Row count), claves primarias (Primary Keys), claves exportadas/foráneas (Exported Keys), índices (Indexes), privilegios (Priviliges), privilegios de columna (Column Priviliges), Row Ids, Versions, etc: 



Con lo cual Eclipse SQL Explorer se convierte en una herramienta sumanente útil para realizar aplicaciones con acceso a base de datos. Permite de una forma rápida ejecutar consultas SQL, mostrar los resultados, ver la estructura de las tablas, etc.

domingo, 22 de mayo de 2011

JAVA 27. EXPORTAR UN PROYECTO ECLIPSE COMO UN JAR EJECUTABLE

Este tutorial muestra cómo exportar una aplicación Java como un archivo .jar ejecutable en Eclipse 3.6 (Helios). Tras la exportación, podremos ejecutar el código java desde la línea de comandos de la siguiente manera:


java -jar aplicacion.jar
 
Una aplicación Java dispone de al menos una clase con el método main. Para poder generar un fichero jar ejecutable, es necesario, por tanto, que exista una clase con un método main. Además, primero deberemos disponer de una configuración de ejecución en Eclipse para esa clase. Las configuraciones de ejecución son las que aparecen al seleccionar el menú Run > Run Configurations... 

Cuando ejecutamos una aplicación Java desde Eclipse, automáticamente se añade una configuración de ejecución para dicha aplicación. Esta configuración indica cuál es la clase con main que queremos ejecutar, además de otra información como parámetros de la aplicación, parámetros de la máquina virtual, etc. 

 

Para exportar una aplicación como un jar ejecutable es necesario disponer de una configuración de ejecución para la aplicación. La forma más sencilla de disponer de esta configuración es simplemente ejecutando la aplicación. Una vez hecho esto, tenemos que seleccionar la opción Export... del menú File. En el cuadro de diálogo que nos aparece seleccionamos Runnable jar file en la categoría Java.



A continuación se nos pide la configuración de ejecución que queremos utilizar. Seleccionamos la apropiada a nuestra aplicación de la lista e indicamos dónde queremos guardar el jar generado. Si nuestra aplicación incluye otras librerías Java (otros jar), seleccionar la opción Extract required libraries into generated jar.





Una vez que pulsemos Finish, Eclipse generará el fichero jar a partir de la información que le hemos proporcionado. Si java está en el path, puedes navegar hasta el directorio donde exportaste el fichero en una consola y escribir:

java -jar fichero.jar


La aplicación se ejecutará.

martes, 17 de mayo de 2011

JAVA 26. MEJORANDO INTERFAZ GRAFICA

COLORES DE FONDO Y DE TEXTO

La clase Component proporciona dos métodos para modificar el color de un Componente. A través de los métodos setBackground() y setForeground(), se pueden indicar los colores del fondo y del texto, respectivamente:

Clase:  import java.awt.color;

 
label1 = new JLabel("Sumar");
text1 = new JTextField("Restar"); 
text1.setBackground( Color.blue );
label1.setForeground( Color.red );
 
 
FUENTE
                               
Cambiemos el font de caracteres a Times Roman de 12 puntos
 
Clase: import java.awt.font;
 
label1.setFont( new Font( "TimesRoman",Font.PLAIN,12 ) );
label1.setFont( new Font( "TimesRoman",Font.BOLD,24 ) );
label1.setFont( new Font("Helvetica",Font.ITALIC,12) );
 

IMAGENES

Atributo: ImageIcon imagen = new ImageIcon("C:/holamu.gif");

   
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;

import java.awt.event.*;
public class Formulario extends JFrame {
      ImageIcon imagen = new ImageIcon("C:/holamu.gif");
         
    private JLabel label1;
    public Formulario() {
        setLayout(null);
        label1=new JLabel(imagen);
        label1.setBounds(10,20,350,350);
        add(label1);
    }
     
        public static void main(String[] ar) {
        Formulario formulario1=new Formulario();
        formulario1.setBounds(0,0,400,500);
        formulario1.setVisible(true);
       
    }
}

 
VENTANAS Y COLABORACION ENTRE VENTANAS

  
importe:
import javax.swing.WindowConstants;

Ejemplo:

import javax.swing.*;
import java.awt.Window;
import java.awt.event.*;
public class Formulario1 extends JFrame implements ActionListener{
    private JButton boton1,boton2,boton3,boton4;
    private JLabel label1,label2,label3;
    public Formulario1() {
        setLayout(null);
        boton1=new JButton("1");
        boton1.setBounds(10,100,90,30);
        add(boton1);
        boton1.addActionListener(this);
        boton2=new JButton("2");
        boton2.setBounds(110,100,90,30);
        add(boton2);
        boton2.addActionListener(this);
        boton3=new JButton("3");
        boton3.setBounds(210,100,90,30);
        add(boton3);
        boton3.addActionListener(this);
        label1=new JLabel("label de la ventana 1");
        label1.setBounds(10,10,200,30);
        label2=new JLabel("label de la ventana 2");
        label2.setBounds(10,10,200,30);
        label3=new JLabel("label de la ventana 3");
        label3.setBounds(10,10,200,30);
        boton4=new JButton("4");
        boton4.setBounds(210,100,90,30);
        boton4.addActionListener(this);
    }
   
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==boton1) {
            setTitle("boton 1");
            JFrame frame1 = new JFrame("Ventana Emergente 1");
            frame1.setLayout (null);
            frame1.add(label1);
            //frame1.pack();
            frame1.setVisible(true);
            frame1.setSize(400,500);
        }
        if (e.getSource()==boton2) {
            setTitle("boton 2");
            JFrame frame2 = new JFrame("Ventana Emergente 2");
            frame2.setLayout (null);
            frame2.add(label2);
            //frame1.pack();
            frame2.setVisible(true);
            frame2.setSize(400,600);
           
        }
        if (e.getSource()==boton3) {
            setTitle("boton 3");
            JFrame frame3 = new JFrame("Ventana Emergente 2");
            frame3.setLayout (null);
            frame3.add(label3);
            //frame1.pack();
            frame3.setVisible(true);
            frame3.setSize(400,700);
            frame3.add(boton4);
       
        }       
        if (e.getSource()==boton4) {
            setTitle("boton 4");
            JFrame frame4 = new JFrame("Ventana Emergente 4");
            frame4.setLayout (null);
           
            //frame1.pack();
            frame4.setVisible(true);
            frame4.setSize(400,700);
           
       
        }       
       
    }
   
      public static void main(String[] ar){
        Formulario1 formulario2=new Formulario1();
        formulario2.setBounds(0,0,350,200);
        formulario2.setVisible(true);
    }
}


CUADROS DE DIALOGO


//título e icono por defecto

JOptionPane.showMessageDialog(null,"Texto del mensaje.");

//título personalizado, icono de aviso

JOptionPane.showMessageDialog(null,
"Texto del mensaje.",
"Título del marco",
JOptionPane.WARNING_MESSAGE);

//título personalizado, icono de error

JOptionPane.showMessageDialog(null,
"Texto del mensaje.",
"Título del marco",
JOptionPane.ERROR_MESSAGE);

//título personalizado, sin icono

JOptionPane.showMessageDialog(null,
"Texto del mensaje.",
"Título del marco",
JOptionPane.PLAIN_MESSAGE);

martes, 10 de mayo de 2011

JAVA 25. APPLETS EN JAVA

Un applet es una pequeña aplicación accesible en un servidor Internet, que se transporta por la red, se instala automáticamente y se ejecuta in situ como parte de un documento web.

Un applet es una mínima aplicación Java diseñada para ejecutarse en un navegador Web. Por tanto, no necesita preocuparse por un método main() ni en dónde se realizan las llamadas. El applet asume que el código se está ejecutando desde dentro de un navegador. El appletviewer se asemeja al mínimo navegador. Espera como argumento el nombre del fichero html que debe cargar, no se le puede pasar directamente un programa Java.

<HTML>
    <APPLET CODE=HolaMundo.class WIDTH=300 HEIGHT=100>
    </APPLET>
</HTML>

CICLO DE VIDA DE UN APPLET

 


Cuando un applet se carga en el appletviewer, comienza su ciclo de vida, que pasaría por las siguientes fases:
  • Se crea una instancia de la clase que controla el applet. En el ejemplo de la figura anterior, sería la clase HolaMundo.
  • El applet se incializa.
  • El applet comienza a ejecutarse.
  • El applet empieza a recibir llamadas. Primero recibe una llamada init (inicializar), seguida de un mensaje start (empezar) y paint (pintar). Estas llamadas pueden ser recibidas asíncronamente.


METODOS DE APPLETVIEWER


Vamos a utilizar como excusa la función asociada al appletviewer de los siguientes métodos para adentrarnos en su presentación,  porque también son los métodos propios de la clase Applet.

init()
El método init() se llama cada vez que el appletviewer carga por primera vez la clase. Si el applet llamado no lo sobrecarga, init() no hace nada. Fundamentalmente en este método se debe fijar el tamaño del applet, aunque en el caso de Netscape el tamaño que vale es el que se indique en la línea del fichero html que cargue el applet. También se deben realizar en este método las cargas de imágenes y sonidos necesarios para la ejecución del applet. Y, por supuesto, la asignación de valores a las variables globales a la clase que se utilicen. En el caso de los applet, este método únicamente es llamado por el sistema al cargar el applet.

start()
start() es la llamada para arrancar el applet cada vez que es visitado. La clase Applet no hace nada en este método. Las clases derivadas deben sobrecargarlo para comenzar la animación, el sonido, etc. Esta función es llamada automáticamente cada vez que la zona de visualización en que está ubicado el applet se expone a la visión, a fin de optimizar en uso de los recursos del sistema y no ejecutar algo que no puede ser apreciado (aunque el programador puede variar este comportamiento y hacer que un applet siga activo aun cuando esté fuera del área de visión). Esto es, imaginemos que cargamos un applet en un navegador minimizado; el sistema llamará al método init(), pero no a start(), que sí será llamado cuando restauremos el navegador a un tamaño que permita ver el applet. Naturalmente, start() se puede ejecutar varias veces: la primera tras init() y las siguientes (porque init() se ejecuta solamente una vez) tras haber aplicado el método stop().

stop()
stop() es la llamada para detener la ejecución del applet. Se llama cuando el applet desaparece de la pantalla. La clase Applet tampoco hace nada en este método, que debería ser sobrecargado por las clases derivadas para detener la animación, el sonido, etc. Esta función es llamada cuando el navegador no incluye en su campo de visión al applet; por ejemplo, cuando abandona la página en que está insertado, de forma que el programador puede paralizar los threads que no resulten necesarios respecto de un applet no visible, y luego recuperar su actividad mediante el método start().
destroy()
El método destroy() se llama cuando ya no se va a utilizar más el applet, cuando se necesita que sean liberados todos los recursos dispuestos por el applet, por ejemplo, cuando se cierra el navegador. La clase Applet no hace nada en este método. Las clases derivadas deberían sobrecargarlo para hacer una limpieza final. Los applet multithread deberían utilizar destroy() para detener los threads que quedasen activos.
El appletviewer también contiene la clase Component (componente), que usa dos métodos para ayudas al applet a escribir en el espacio gráfico que el appletviewer le proporciona para su ejecución.

paint( Graphics g )
Es la función llamada cada vez que el área de dibujo del applet necesita ser refrescada. La clase Applet simplemente dibuja un rectángulo gris en el área, es la clase derivada, obviamente, la que debería sobrecargar este método para representar algo inteligente en la pantalla. Cada vez que la zona del applet es cubierta por otra ventana, se desplaza el applet fuera de la visión o el applet cambia de posición debido a un redimensionamiento del navegador, el sistema llama automáticamente a este método, pasando como argumento un objeto de tipo Graphics que delimita la zona a ser pintada; en realidad se pasa una referencia al contexto gráfico en uso, y que representa la ventana del applet en la página web.

update( Graphics g )
Esta es la función que realmente se llama cuando se necesita una actualización de la pantalla. La clase Applet simplemente limpia el área y llama al método paint(). Esta funcionalidad es suficiente para la mayoría de los casos; aunque, de cualquier forma, las clases derivadas pueden sustituir esta funcionalidad para sus propósitos especiales. Es decir, en las situaciones detalladas anteriormente que dañan la zona de exposición del applet, el sistema llama al método paint(), pero en realidad la llamada se realiza al método update(), cuyo comportamiento establecido en la clase Component es llamar al método paint(), tras haber rellenado la zona del applet con su color de fondo por defecto. Pudiera parecer así que se trata de un método de efecto neutro, pero si la función paint() cambiara el color del fondo, podríamos percibir un flick de cambio de colores nada agradable. Por tanto, habrá que cuidarse por lo común, de eliminar este efecto de limpia primero, sobrecargando el método update(), para que llame únicamente a paint(). Otra solución sería insertar el código de pintado en una sobrecarga del método update() y escribir un método paint() que sólo llame a update(). La última solución pasaría por usar el mismo método setBackground( Color ), en el método init() para así evitar el efecto visual sin tener que sobrecargar el método update(). Estas son las mismas razones que aconsejan usar el método resize() inserto en init(), para evitar el mismo desagradable efecto.

repaint
Llamando a este método se podrá forzar la actualización de un applet, la llamada a update(). Pero hay que tener cierto cuidado, porque AWT posee cierta inteligencia (combinación casi siempre nefasta), de forma que si se llama a update() mediante repaint() con una frecuencia muy corta, AWT ignorará las llamadas a update() que estime oportuno, pues considera a esta función como un bien escaso.

Sinopsis

La llamada a appletviewer es de la forma:
   
 appletviewer [-debug] urls...


El appletviewer toma como parámetro de ejecución, o bien el nombre del un fichero html conteniendo el tag (marca) <APPLET>, o bien un URL hacia un fichero HTML que contenga esa marca.
Si el fichero html no contiene un tag <APPLET> válido, el appletviewer no hará nada. El appletviewer no muestra otras marcas html.
La única opción válida que admite la llamada a appletviewer es -debug, que arranca el applet en el depurador de Java, jdb. Para poder ver el código fuente en el depurador, se tiene que compilar el fichero .java con la opción -g.

Ejemplo de uso

En el ejemplo de llamada al appletviewer siguiente, hacemos que se ejecute el applet básico que crearemos en la sección siguiente y que lanzaremos desde un fichero html del mismo nombre que nuestro fichero de código fuente Java.

%appletviewer HolaMundo.html

Esta llamada lanzaría la ejecución de HolaMundo.class en el appletviewer, abriéndose en pantalla la ventana siguiente:




FUNCIONES DE MENU DE APPLETVIEWER

 

El appletviewer tiene un único menú mostrado en la imagen siguiente y que vamos a explicar en cada una de sus opciones, ya que lo usaremos a menudo cuando vayamos avanzando en nuestros conocimientos de Java.





  • Restart
La función Restart llama al método stop() y seguidamente llama de nuevo a start(), que es el método que ha lanzado inicialmente la ejecución del applet. Se puede utilizar Restart para simular el movimiento entre páginas en un documento html.
  • Reload
La función Reload llama al método stop() y luego al método destroy() en el applet actual. A continuación carga una nueva copia del applet y la arranca llamando al método start().
  • Clone
La función Clone crea una copia del applet actual en una ventana de appletviewer nueva. En realidad es un appletviewer idéntico con el mismo URL.
  • Tag
La función Tag muestra en una ventana hija del appletviewer el código html cargado para su ejecución. Es similar a la función View Source que figura en la mayoría de los navegadores, Netscape, Internet Explorer y HotJava incluidos.
  • Info
La función Info lee los comentarios de documentación contenidos en el fichero html y muestra la información de los parámetros (si la hay).
  • Properties
El appletviewer tiene las funciones básicas de presentación de un navegador y la función Properties (propiedades de la red) permite cambiar o establecer el modo de seguridad o fijar los servidores de proxy o firewall.
  • Close
La función Close llama al método destroy() de la ventana actual del appletviewer, teminando su ejecución.
  • Quit
La función Quit llama al método destroy() de cada una de las copias del appletviewer que se encuentren lanzadas, concluyendo la ejecución de todas ellas y terminando entonces el appletviewer.

UN APPLET BASICO EN JAVA

 

Vamos a comenzar la creación del código fuente del un applet que satisfaga nuestras necesidades. Recordamos que Java utiliza la extensión .java para designar los ficheros fuente.

 

HolaMundo


A continuación está el código fuente del applet HolaMundo, que es la versión applet de la mínima aplicación Java que antes habíamos escrito. Guardar este código en un fichero fuente Java como HolaMundo.java.
     
    //
    // Applet HolaMundo de ejemplo
    //
    import java.awt.Graphics;
    import java.applet.Applet;
    public class HolaMundo extends Applet {
        public void paint( Graphics g ) {
            g.drawString( "Hola Mundo!",25,25 ) ;
            }
        }
 

Componentes Básicos De Un Applet

El lenguaje Java implementa un modelo de Programación Orientada a Objetos. Los objetos sirven de bloques centrales de construcción de los programas Java. De la misma forma que otros lenguajes de programación, Java tiene variables de estado y métodos.
Veamos como se descompone un applet en sus piezas/objetos:
/*
Sección de importaciones
*/
public class NombreDelNuevoApplet extends Applet {
/*
Aquí se declaran las variables de estado (public y private)
*/
    
/*
Los métodos para la interacción con los objetos se 
declaran y definen aquí
*/
public void MetodoUno( parámetros ) {
/* 
Aquí viene para cada método, el código Java que 
desempeña la tarea.
Qué código se use depende del applet
*/
}
}
 
 
Para HolaMundo, se importan las dos clases que necesita. No hay variables de estado, y sólo se tiene que definir un método para que el applet tenga el comportamiento esperado.

El comando import carga otras clases dentro de nuestro código fuente. El importar una clase desde un paquete de Java hace que esa clase importada esté disponible para todo el código incluido en el fichero fuente Java que la importa. Por ejemplo, en el applet HolaMundo se importa la clase java.awt.Graphics, y podremos llamar a los métodos de esta clase desde cualquier método de nuestro programa que se encuentre en el fichero HolaMundo.java. Esta clase define una área gráfica y métodos para poder dibujar dentro de ella. La función paint() declara a g como un objeto de tipo Graphics; luego, paint() usa el método drawString() de la clase Graphics para generar su salida.

Se puede crear una nueva clase, en este caso HolaMundo, extendiendo la clase básica de Java: Applet. De esta forma, se hereda todo lo necesario para crear un applet. Modificando determinados métodos del applet, podemos lograr que lleve a cabo las funciones que deseamos.

    import java.applet.Applet;
    .  .  .
    public class HolaMundo extends Applet {


Métodos de Applet
La parte del applet a modificar es el método paint(). En la clase Applet, se llama al método paint() cada vez que el método arranca o necesita ser refrescado, pero no hace nada. En nuestro caso, lo que hacemos es:

    public void paint( Graphics g ) {
        g.drawString( "Hola Mundo!",25,25 );
        }

De acuerdo a las normas de sobrecarga, se ejecutará este último paint() y no el paint() vacío de la clase Applet. Luego, aquí se ejecuta el método drawString(), que le dice al applet cómo debe aparecer un texto en el  área de dibujo.

Otros métodos básicos para dibujar son:

    drawLine( int x1,int y1,int x2,int y2 )
    drawRect( int x,int y,int ancho,int alto )
    drawOval( int x,int y,int ancho,int alto )

Tanto para drawRect() como para drawOval(), las coordenadas (x,y) son la esquina superior izquierda del rectángulo (para drawOval, el óvalo es encajado en el rectángulo que lo circunscribe).

 

LA MARCA APPLET DE HTML


Dado que los applets están mayormente destinados a ejecutarse en navegadores Web, había que preparar el lenguaje HTML para soportar Java, o mejor, los applets. El esquema de marcas de HTML, y la evolución del estándar marcado por Netscape hicieron fácil la adición de una nueva marca que permitiera, una vez añadido el correspondiente código gestor en los navegadores, la ejecución de programas Java en ellos.
La sintaxis de las etiquetas <APPLET> y <PARAM> es la que se muestra a continuación y que iremos explicando en párrafos posteriores:

<APPLET CODE=  WIDTH=  HEIGTH= [CODEBASE=] [ALT=] 
[NAME=] [ALIGN=] [VSPACE=] [HSPACE=]>
<PARAM NAME=  VALUE= >
</APPLET>

Atributos obligatorios:
CODE : Nombre de la clase principal
WIDTH : Anchura inicial
HEIGHT : Altura inicial

Atributos opcionales:
CODEBASE : URL base del applet
ALT : Texto alternativo
NAME : Nombre de la instancia
ALIGN : Justificación del applet
VSPACE : Espaciado vertical
HSPACE : Espaciado horizontal

Los applets se incluyen en las páginas Web a través de la marca <APPLET>, que para quien conozca html resultará muy similar a la marca <IMG>. Ambas necesitan la referencia a un fichero fuente que no forma parte de la página en que se encuentran embebidos. IMG hace esto a través de SRC=parámetro y APPLET lo hace a través CODE=parámetro. El parámetro de CODE indica al navegador dónde se encuentra el fichero con el código Java compilado .class. Es una localización relativa al documento fuente.
si un applet reside en un directorio diferente del que contiene a la página en que se encuentra localizado, entonces no se indica un URL a esta localización, sino que se apunta al directorio del fichero .class utilizando el parámetro CODEBASE, aunque todavía se puede usar CODE para proporcionar el nombre del fichero .class.

Al igual que IMG, APPLET tiene una serie de parámetros que lo posicionan en la página. WIDTH y HEIGHT especifican el tamaño del rectángulo que contendrá al applet, se indican en pixels. ALIGN funciona igual que con IMG (en los navegadores que lo soportan), definiendo cómo se posiciona el rectángulo del applet con respecto a los otros elementos de la página. Los valores posibles a especificar son: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM y ABSBOTTOM. Y, finalmente, lo mismo que con IMG, se puede especificar un HSPACE y un VSPACE en pixels para indicar la cantidad de espacio vacío que habrá de separación entre el applet y el texto que le rodea.
APPLET tiene una marca ALT. La utilizaría un navegador que entendiese la marca APPLET, pero que por alguna razón, no pudiese ejecutarlo. Por ejemplo, si un applet necesita escribir en el disco duro de nuestro ordenador, pero en las características de seguridad tenemos bloqueada esa posibilidad, entonces el navegador presentaría el texto asociado a ALT.

ALT no es utilizado por los navegadores que no entienden la marca APPLET, por ello se ha definido la marca </APPLET>, que finaliza la descripción del applet. Un navegador con soporte Java ignorará todo el texto que haya entre las dos marcas <APPLET> y </APPLET>, sin embargo, un navegador que no soporte Java ignorará las marcas y presentará el texto que se encuentre entre ellas.


ATRIBUTOS DE APPLET

 

Los atributos que acompañan a la etiqueta <APPLET>, algunos son obligatorios y otros son opcionales. Todos los atributos, siguiendo la sintaxis de html, se especifican de la forma: atributo=valor. Los atributos obligatorios son:

CODE
Indica el fichero de clase ejecutable, que tiene la extensión .class. No se permite un URL absoluto, como ya se ha dicho, aunque sí puede ser relativo al atributo opcional CODEBASE.

WIDTH
Indica la anchura inicial que el navegador debe reservar para el applet en pixels.

HEIGHT
Indica la altura inicial en pixels. Un applet que disponga de una geometría fija no se verá redimensionado por estos atributos. Por ello, si los atributos definen una zona menor que la que el applet utiliza, únicamente se verá parte del mismo, como si se visualiza a través de una ventana, eso sí, sin ningún tipo de desplazamiento.
Los atributos opcionales que pueden acompañar a la marca APPLET comprenden los que se indican a continuación:

CODEBASE
Se emplea para utilizar el URL base del applet. En caso de no especificarse, se utilizará el mismo que tiene el documento.

ALT
Como ya se ha dicho, funciona exactamente igual que el ALT de la marca <IMG>, es decir, muestra un texto alternativo, en este caso al applet, en navegadores en modo texto o que entiendan la etiqueta APPLET pero no implementen una máquina virtual Java.

NAME
Otorga un nombre simbólico a esta instancia del applet en la página que puede ser empleado por otros applets de la misma página para localizarlo. Así, un applet puede ser cargado varias veces en la misma página tomando un nombre simbólico distinto en cada momento.

ALIGN
Se emplea para alinear el applet permitiendo al texto fluir a su alrededor. Puede tomas los siguientes valores: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM y ABSBOTTOM.

VSPACE
Indica el espaciado vertical entre el applet y el texto, en pixels. Sólo funciona cuando se ha indicado ALIGN = LEFT o RIGHT.

HSPACE
Funciona igual que el anterior pero indicando espaciamiento horizontal, en pixels. Sólo funciona cuando se ha indicado ALIGN = LEFT o RIGHT.

Es probable encontrar en algunas distribuciones otras etiquetas para la inclusión de applets, como <APP>. Esto se debe a que estamos ante la tercera revisión de la extensión de HTML para la incrustación de applets y ha sido adoptada como la definitiva. Por ello, cualquier otro medio corresponde a implementaciones obsoletas que han quedado descartadas.

PASO DE PARAMETROS A APPLETS


El espacio que queda entre las marcas de apertura y cierre de la definición de un applet, se utiliza para el paso de parámetros al applet. Para ello se utiliza la marca PARAM en la página HTML para indicar los parámetros y el método getParameter() de la clase java.applet.Applet para leerlos en el código interno del applet. La construcción puede repetirse cuantas veces se quiera, una tras otra.
Los atributos que acompañan a la marca PARAM son los siguientes:

NAME
Nombre del parámetro que se desea pasar al applet.

VALUE
Valor que se desea transmitir en el parámetro que se ha indicado antes.

Texto HTML
Texto HTML que será interpretado por los navegadores que no entienden la marca APPLET en sustitución del applet mismo.

Para mostar esta posibilidad vamos a modificar nuestro applet básico HolaMundo para que pueda saludar a cualquiera. Lo que haremos será pasarle al applet el nombre de la persona a quien queremos saludar. Generamos el código para ello y lo guardamos en el fichero HolaTal.java.

import java.awt.Graphics;
    import java.applet.Applet;
    
    public class HolaTal extends Applet {
      String nombre;
        public void init() {
            nombre = getParameter( "Nombre" );
            }
        public void paint( Graphics g ) {
            g.drawString( "Hola "+nombre+"!",25,25 );
            }
        }

Si compilamos el ejemplo obtendremos el fichero HolaTal.class que incluiremos en nuestra página Web. Vamos a generar el fichero HolaTal.html, en el que incluiremos nuestro applet, y que debería tener el siguiente contenido:

    <HTML>
    <APPLET CODE=HolaTal.class WIDTH=300 HEIGHT=100>
    <PARAM NAME="Nombre" VALUE="Jairo">
    </APPLET>
  </HTML>

Puedes sustituir mi nombre por el tuyo. Este cambio no afectará al código Java, no será necesario recompilarlo para que te salude a ti el applet.

Los parámetros no se limitan a uno solo. Se puede pasar al applet cualquier número de parámetros y siempre hay que indicar un nombre y un valor para cada uno de ellos.

El método getParameter() es fácil de entender. El único argumento que necesita es el nombre del parámetro cuyo valor queremos recuperar. Todos los parámetros se pasan como Strings, en caso de necesitar pasarle al applet un valor entero, se ha de pasar como String, recuperarlo como tal y luego convertirlo al tipo que deseemos. Tanto el argumento de NAME como el de VALUE deben ir colocados entre dobles comillas (") ya que son String.

 

APPLET EJEMPLO



import java.awt.*;
import java.applet.*;

public class GuiExample extends Applet
{

     Button okButton;
     TextField nameField;
     CheckboxGroup radioGroup;
     Checkbox radio1;
     Checkbox radio2;
     Checkbox option;


     public void init()
     {
  // Tell the applet not to use a layout manager.
        setLayout(null);
  // initialze the button and give it a text.
        okButton = new Button("A button");
  // text and length of the field
        nameField = new TextField("A TextField",100);
  // initialize the radio buttons group
          radioGroup = new CheckboxGroup();
  // first radio button. Gives the label text, tells to which
  // group it belongs and sets the default state (unselected)
          radio1 = new Checkbox("Radio1", radioGroup,false);
  // same but selected
          radio2 = new Checkbox("Radio2", radioGroup,true);
  // Label and state of the checkbox
          option = new Checkbox("Option",false);

  // ubicacion y tamaño de los objetos
 
          okButton.setBounds(20,20,100,30);
          nameField.setBounds(20,70,100,40);
          radio1.setBounds(20,120,100,30);
          radio2.setBounds(140,120,100,30);
          option.setBounds(20,170,100,30);

  // adicionar componentes al frame
      add(okButton);
      add(nameField);
      add(radio1);
      add(radio2);
      add(option);
     }

    }