Está en la página 1de 39

6

ANÁLISIS Y PROGRAMACIÓN EN JAVA

Aplicaciones basadas en
entorno gráfico
ÍNDICE
6 6.1 6.2 6.3 6.4

Paquetes para la Creación de Gestión de Applets


construcción de ventanas y eventos
interfaces gráficas: componentes
AWT y swing
6.1 Paquetes para la
construcción de
interfaces
gráficas: AWT y
swing
C O M E N Z A R
Paquetes para la construcción de interfaces gráficas: AWT y swing

Introducción a AWT
Dentro de la plataforma estándar J2SE podemos encontrar un paquete Java (AWT. Abstract Window Toolkit) que comprende un conjunto
de clases para el desarrollo de aplicaciones con interfaz gráfica de usuario, denominado java.awt,
De manera resumida la jerarquía de clases de este paquete es:

Component

Container Button TextArea

Panel Window

Como podemos ver en el


gráfico, todos los elementos
Dialog Frame
gráficos para la programación de
interfaces heredan de la clase
Component, la cual, a su vez,
hereda de Object.
Paquetes para la construcción de interfaces gráficas: AWT y swing

En Java, estos elementos gráficos se denominan componentes, pueden ser:

Botones (Button)

Áreas de texto
(TextArea)

Listas desplegables
(Choice)

Paneles ( Panel)

Diálogos (Dialog)
Paquetes para la construcción de interfaces gráficas: AWT y swing

Component es la superclase de todos los componentes visuales en Java e incluye métodos que
son comunes a todos ellos como el tratamiento de eventos, manejo de imágenes, colores, texto,
etc.

Vemos que hay dos subjerarquías de clases que heredan de Component: Container y el resto.
Esto nos indica que hay dos tipos diferentes de componentes visuales: los componentes básicos,
que heredan directamente de Component y los contenedores, que heredan de Container.

Mientras que los contenedores son elementos visuales que pueden contener otros componentes
(incluidos otros contenedores), los elementos básicos deben estar contenidos dentro de
contenedores.

Los paneles, diálogos o frames son ejemplos de contenedores y pueden contener otros
contenedores (un diálogo puede contener a un panel) o a otros elementos básicos como botones
o áreas de texto.
Paquetes para la construcción de interfaces gráficas: AWT y swing

La clase Container tiene


dos subclases principales:

Panel, que ofrece un fondo donde poder


organizar componentes visuales en su interior.
Dialog se utiliza para crear pequeñas ventanas
que se utilizan generalmente para mostrar un
Window proporciona la definición de una mensaje de aviso, error o información. Suelen ir
ventana genérica de una aplicación, la cual se acompañadas de uno o dos botones: “Aceptar”
puede especificar más por medio de las clases y/o “Cancelar”.
Dialog y Frame.
La clase Frame se utiliza para crear la ventana
principal de una aplicación, que permita la
inclusión de barras de menús y herramientas
típicas de cualquier aplicación gráfica actual.
Paquetes para la construcción de interfaces gráficas: AWT y swing

Ejemplo

En este ejemplo podemos ver una aplicación Java con una


interfaz gráfica de usuario formada por un contenedor de la
clase Frame para albergar los botones “Calcular” y “Borrar
Pantalla”, una lista desplegable para seleccionar si se desea
calcular los divisores o múltiplos de un número que el
usuario puede teclear en el campo de texto situado a la
derecha, y un área de texto central que muestra los
resultados.
Paquetes para la construcción de interfaces gráficas: AWT y swing

Implementación
de Interfaces gráficas
Cuando queremos implementar una aplicación con interfaz gráfica de usuario con AWT, es necesario
definir la ventana principal, que suele ser un objeto de la clase Frame.
Los frames son objetos visuales contenedores, que permiten situar dentro de ellos todos los
componentes necesarios para ofrecer al usuario de la aplicación la información y funcionalidad
requerida.
La clase a la que pertenecen los frames hereda de la clase Window, por lo que se presentan en
pantalla con el aspecto de una ventana, dividida en dos partes:

Una parte superior que contiene el título de la ventana y tres botones


para minimizar, maximizar y cerrar la ventana.

Una parte inferior donde se sitúan el resto de componentes visuales


que conforman la interfaz de la aplicación.
Paquetes para la construcción de interfaces gráficas: AWT y swing

Las características que hacen más específico a un


objeto Frame que a una ventana son que un frame
permite incluir una barra de menús, una barra de
herramientas con iconos y una franja inferior para
proporcionar información al usuario de la
aplicación.
Paquetes para la construcción de interfaces gráficas: AWT y swing

Cuando hemos decidido el tipo de contenedor que vamos a utilizar para el diseño de la vista
principal de una aplicación existen dos alternativas para implementar la aplicación:

Para aplicaciones con una única ventana. Se implementa una clase que hereda del
1
contendor elegido como vista principal. Esta es la opción que elegimos en el ejemplo
anterior de la aplicación “Divisores y Múltiplos”. Ejemplo:

import java.awt.*; Es necesario importar el


paquete java.awt para
public class DivisoresMultiplos extends Frame { poder utilizar la clase Frame.

Para aplicaciones que contienen múltiples ventanas. Creamos una clase que contenga
2 a esas ventanas como atributos de la misma. Vamos a ver un ejemplo de un fragmento
de código de una clase con tres frames:

import java.awt.*;
public class EjemploMultiplesVentanas {
private Frame ventana1, ventana 2, ventana3;
Paquetes para la construcción de interfaces gráficas: AWT y swing

Crear una instancia del contene dor

Para ello, se puede llamar al constructor por defecto:


public Frame ();

o bien al constructor de conversión que recibe como parámetro un objeto de la clase


String para indicar el título de la ventana:
public Frame (String title);

Invocar los métodos encargados de configurar los aspectos generales del contene dor

Por ejemplo setSize, que establece el tamaño del contenedor mediante dos
parámetros de tipo entero que determinan, respectivamente, la anchura y altura
medidos en píxeles. La signatura sería:
public void setSize (int width, int height);
Paquetes para la construcción de interfaces gráficas: AWT y swing

Crear una clase con un método main

Encargado de instanciar la clase que contiene el contenedor o contenedores.


Vamos a ver un ejemplo de una parte del código de esta clase para el
ejemplo de la aplicación de divisores y múltiplos:
public class AplicacionDivisoresMultiplos {
public static void main (String args[]){
DivisoresMultiplos app = new DivisoresMultiplos ();

Mostrar el contene dor creado y configurado en los pasos anteriores

Para ello utilizamos, el método setVisible dentro de main, que muestra u oculta el
contenedor en función de si se recibe como parámetro el valor booleano true o
false respectivamente. La signatura sería:
public void setVisible (boolean b);

En el momento que queramos destruir la ventana, se puede invocar el método dispose

public void dispose ();


Paquetes para la construcción de interfaces gráficas: AWT y swing

Código completo de la clase Código completo de la clase


“DivisoresMultiplos” “AplicacionDivisoresMultiplos”
import java.awt.*;
public class AplicacionDivisoresMultiplos {
public class DivisoresMultiplos extends Frame {
public static void main(String[] args) {
public DivisoresMultiplos () {
DivisoresMultiplos app = new
super ("Divisores y Múltiplos");
DivisoresMultiplos();
setSize (400,400);
app.setVisible (true); } // END main } //
}
END Clase
}

El resultado de la ejecución del


método main será el siguiente:
6.2 Creación de
ventanas y
componentes
C O M E N Z A R
Creación de ventanas y componentes

Componentes básicos
de AWT

Los componentes básicos de AWT AWT proporciona gran cantidad de


son los elementos visuales que no componentes visuales, de este modo
heredan de la clase Container, los programadores cuentan con
por lo que no pueden contener suficientes herramientas para
otros componentes, sino que desarrollar aplicaciones con una
deben situarse dentro de interfaz de usuario sencilla, que
contenedores como la clase permite acceder a todas las
Frame. funcionalidades que se desean en
una aplicación.
Creación de ventanas y componentes

BOTONES

Son objetos que pertenecen a la clase Button, que


hereda de la clase Component.

Volviendo a nuestro ejemplo de la aplicación “Divisores


y Múltiplos”, podemos ver que esta interfaz tiene dos
botones, “Calcular”, y “Borrar Pantalla”.

La signatura de los dos constructores sería:

Para crear un botón sin etiqueta:


public void Button ();

Para crear un botón con la etiqueta que se pasa como parámetro:


public void Button (String label);
Creación de ventanas y componentes

Vamos a ver un ejemplo de un código que muestra la clase Tablas con la declaración y creación
de dos objetos de la clase Button con las etiquetas “Calcular” y “Borrar Pantalla”.

import java.awt.*;

public class DivisoresMultiplos extends Frame {

public DivisoresMultiplos () {

super ("Divisores y Múltiplos");

Button botonCalcular = new Button ("Calcular");

Button botonBotonBorrar = new Button ("Borrar Pantalla");

setSize (new Dimension (400,400));

// Añadir los botones al frame Una vez ubicados estos botones en el


} contenedor frame, lo cual no aparece en el
código presentado, el aspecto de la
}
interfaz gráfica de la aplicación “Divisores
y Múltiplos” es el mostrado en la imagen.
Creación de ventanas y componentes

L I STA S D E S P L E G A B L E S
Otros métodos importantes para el
manejo de listas desplegables son:
Son objetos que pertenecen a la clase Choice. Las listas
desplegables permiten presentar una serie de opciones.
De todas estas opciones que la lista desplegable permite Para insertar un nuevo elemento en la
seleccionar, sólo una es visible, y esta se corresponde con lista desplegable:
la elección por omisión que es la que se usa normalmente. public void addItem (String item);

La clase Choice posee un único constructor sin


parámetros: Para proporcionar la posición del
elemento seleccionado por el
public void Choice ();
usuario.
public int getSelectedItem ();

Para proporcionar el texto del


elemento seleccionado por el
usuario.
public String getSelectedItem ();
Creación de ventanas y componentes

Vamos a ver un código que muestra la clase DivisoresMultiplos donde se ha añadido la lista
desplegable incluida en la interfaz de usuario de la aplicación “Divisores y Múltiplos”.

import java.awt.*;
public class DivisoresMultiplos extends Frame {
public DivisoresMultiplos () {
super ("Divisores y Múltiplos");
Button botonCalcular = new Button ("Calcular");
Button botonBorrar = new Button ("Borrar");
Choice listaOperacion = new Choice () ;
listaOperacion.add ("Divisores");
listaOperacion.add ("Multiplos");
setSize (new Dimension (400,400));

// Añadir los botones y la lista desplegable al frame
}
}
Creación de ventanas y componentes

La aplicación de nuestro
ejemplo presenta una lista
desplegable para poder elegir
cuál de las dos operaciones se
desea llevar a cabo.
Creación de ventanas y componentes
La clase Label tiene tres constructores que se emplean de
forma habitual:
E T I Q U E TA S
• Para crear una etiqueta vacía justificada a la izquierda.
public void Label ();
En AWT las etiquetas se representan por la clase • Para crear una etiqueta con el texto pasado como parámetro.
Label. public void Label (String t);

Las etiquetas son uno de los componentes más • Para crear una etiqueta con el texto indicado por el parámetro t
y justificada según el parámetro al, especificado mediante las
simples. Se utilizan para mostrar una línea de
constantes LEFT (izquierda), RIGHT (derecha) o CENTER
texto en un contenedor, normalmente (centrado) de la clase Label.
aclaratorio. public void Lablel (String t, int al);.

Esta clase ofrece también dos métodos que pueden resultar de


utilidad:

• Para devolver el texto de la etiqueta.

public String getText();

• Para establecer el texto de la etiqueta.

public void setText (String t);.


Creación de ventanas y componentes

CAMPOS DE TEXTO

Si queremos solicitar por teclado información con una


longitud no muy extensa y que se puede establecer de
forma aproximada los campos de texto son uno de los
elementos más útiles.

Un ejemplo típico puede ser cuando se solicitan datos


personales, números de tarjeta, claves de acceso,
teléfonos, etc. La API AWT permite opciones como rellenar el
campo de texto con asteriscos cuando el usuario
lo complete con una clave o impedir que se
introduzcan datos en un campo de texto si no se
cumplen las condiciones que el desarrollador
marque.
Creación de ventanas y componentes

Los campos de texto se implementan en la clase TextField


de AWT, que tiene los siguientes constructores:

Para crear un campo de texto vacío de 0 caracteres de longitud.


public TextField ();

Para crear un campo de texto con la longitud especificada en el parámetro.


public TextField (int width);

Para crear un campo de texto donde aparece la cadena de caracteres pasada


como parámetro.
public TextField (String text);

Para crear un campo de texto de la longitud especificada en el parámetro entero


donde aparece el texto que se indique en el parámetro de la clase String.
public TextField (String text, int width);
Creación de ventanas y componentes

import java.awt.*;
Ejemplo
public class Formulario extends Frame {

Vamos a ver un ejemplo donde se muestra la public Formulario () {


programación de una interfaz donde el usuario
super ("Ventana de Acceso");
debe introducir un nombre y una contraseña.
Label usuario = new Label ("Usuario: ");

Label passwd = new Label ("Contraseña: ");


Tiene dos etiquetas que contienen la
leyenda “Usuario:” y “Contraseña:” y los TextField campoUsuario = new TextField (10);
campos de texto a la derecha.
TextField campoPasswd = new TextField (10);
No se muestran las líneas de código
campoPasswd.setEchoChar('*');
correspondientes a la colocación de los
componentes visuales en el frame. Button aceptar = new Button ("Aceptar");

Button cancelar = new Button ("Cancelar");

// Colocación de los componentes visuales en el frame

}
Creación de ventanas y componentes

ÁREAS DE TEXTO

Mientras que los campos de texto permiten introducir información


en una única línea y limitan bastante la longitud de la misma, las
áreas de texto permiten introducir gran cantidad de texto con
múltiples líneas y en formato libre como pueden ser resúmenes,
comentarios, biografías, etc.

Debido a esto, las áreas de texto se utilizan también para mostrar


al usuario información multilínea, como por ejemplo listados
que se obtengan como consecuencia de ejecutar una lógica.

Si el texto introducido ocupa más espacio, las áreas de texto


incluyen automáticamente barras de desplazamiento horizontal y
vertical (o scroll).
Creación de ventanas y componentes

En AWT las áreas de texto se implementan dentro de la


clase TextArea, que incluye los siguientes constructores:

Para crear un área de texto vacía:

public TextArea();

Para crear un área de texto con el número de filas y columnas indicadas


en los respectivos parámetros:

public TextArea (int rows, int columns);

Para crear un área de texto con el contenido enviado


como parámetro:

public TextArea (String text);


Creación de ventanas y componentes

Hay 3 métodos incluidos en la clase TextArea


que se usan normalmente:
Para que se devuelva el texto incluido en el área de texto:

public String getText ();

Para sustituir el contenido del área de texto por la cadena de


caracteres incluida en el parámetro:

public void setText (String text);

Para borrar el contenido del área de texto se invoca el método:

areaTexto.setText(“”)

Para añadir el texto enviado como parámetro al contenido actual del área de texto:

public void append (String text);


Creación de ventanas y componentes
import java.awt.*;

public class DivisoresMultiplos extends Frame {

public DivisoresMultiplos () {
El código completo para
super ("Divisores y Múltiplos");
configurar todos los
Button botonCalcular = new Button ("Calcular");
componentes de nuestro
ejemplo es el siguiente Button botonBorrar = new Button ("Borrar");

Choice listaOperacion = new Choice () ;

listaOperacion.add ("Divisores");

listaOperacion.add ("Multiplos");

TextField campoTextoNumero = new TextField ("10",5);

TextArea areaTexto = new TextArea();

setSize (new Dimension (400,400));

// Añadir los cinco componentes visuales al frame

}
6.3 Gestión de
eventos
C O M E N Z A R
Gestión de eventos

El modelo de eventos de Java se ha


modificado significativamente desde su
inicio hasta la versión actual.

Anteriormente era necesario pasar el evento a todos los


componentes que hubieran podido provocarlo, sin
embargo actualmente los eventos se distribuyen sólo
entre aquellos componentes que hayan mostrado un
interés explícito por algún determinado tipo de
eventos, sin necesidad de preguntar a todos los
componentes de la aplicación.
Gestión de eventos

En el modelo de eventos actual intervienen tres elementos:

1 Los componentes gráficos que heredan de la clase Component.


Generan eventos en función de las acciones que el usuario o la aplicación
realice sobre ellos: por ejemplo, hacer clic con el ratón en un botón.

2 Los eventos en Java son objetos que pertenecen a alguna subclase de AWTEvent.
Se general por los componentes visuales.

3 Los escuchadores (listeners).


Son clases que ejecutan las acciones pertinentes por la aplicación como consecuencia del
evento producido. Se implementan en un método denominado manejador del evento.
Gestión de eventos

Cada tipo de evento se corresponde con una interfaz listener


definida en el paquete AWT java.awt.event:

Interfaz ActionListener para los eventos relacionados con el botón izquierdo del ratón.

Interfaz MouseListener para el resto de eventos relacionados con el ratón.

Interfaz KeyListener para los eventos de teclado.

Interfaz WindowListener para los eventos sobre las ventanas (maximizar, minimizar…)

Interfaz FocusListener para los eventos relacionados con el foco (el componente
activo en un momento dado).

Para implementar una interfaz gráfica con tratamiento de eventos la clase donde se sitúan
todos los componentes visuales y que, a su vez, hereda del contenedor, debe heredar de
todas aquellas interfaces relacionadas con los eventos que se desean tratar.
Gestión de eventos

Si queremos, por ejemplo, atender a los eventos relacionados con


el botón izquierdo del ratón, debemos seguir los siguientes pasos:

1 Los componentes gráficos que heredan de la clase Component.


Implementamos la interfaz ActionListener.

2 Los eventos en Java son objetos que pertenecen a alguna subclase de AWTEvent.
Registramos el objeto que contiene los componentes visuales (listener) en aquellos
componentes visuales sobre los que queremos atender los eventos que les ocurran.

3 Los escuchadores (listeners).


Implementamos los manejadores de los eventos sobreescribiendo los métodos
definidos en las interfaces de las que se ha heredado.
LECTURA

Ejemplo de gestión de eventos


TIEMPO ESTIMADO
20 min
TIEMPO ESTIMADO DE LECTURA
10 min

https://drive.google.com/file/d/1725YKeWujG4TQyTmRHHWEZDOA9PiGMoG/preview
6.4 Applets
C O M E N Z A R
Applets

1 4
Para ello los navegadores
Los applets Java son ofrecían soporte y actuaban Esto se ha debido al fin del soporte NPAPI
componentes software 2 como contenedores de (Netscape Plugin Application Programming
que se incrustan en applets, lo que se conoce Interface) por parte de los navegadores
documentos HTML como soporte NPAPI. modernos y, una de las principales causas
(páginas WEB) que de que esto haya ocurrido así, han sido los
contienen funcionalidades graves problemas de seguridad que
Los applets han venido
para ejecutar clases Java generaba la implementación de applets en
cayendo en desuso por
del lado de servidor pero páginas web así como los cambios de
3 diferentes circunstancias, hasta
en la parte cliente, en el paradigma y la propia evolución del
el punto de ir poco a poco
navegador web en este desarrollo web. Causas estas que han
desapareciendo en las últimas
caso. llevado, tal y como se ha indicado
versiones de Java.
anteriormente, a la práctica desaparición
de estos componentes del panorama del
desarrollo de software actual.
hemos
terminado
¡EXCELENTE TRABAJO!

También podría gustarte