Java – Paso a paso Tema 11

Written by lopezatienza on 06/09/2009 – 12:30 -

TEMA11. Aplicaciones con Java

En esta unidad el alumno aprenderá a utilizar las clases necesarias para realizar aplicaciones gráficas con Java, desarrollará también applets en Java para insertarlos en páginas web. El alumno será capaz de conectar aplicaciones Java con bases de
datos y conocerá una serie de conceptos básicos para poder realizar programación para móviles con Java.

1. Aplicaciones gráficas con Java
2. Applets en Java
3. Programación de Base de Datos con Java
4. Programación de Móviles

1. Aplicaciones gráficas con Java

INTRODUCCIÓN

La Java Foundation Classes se trata de un conjunto de clases para mejorar el soporte al desarrollo de GUIs.

Se creó como una extensión de la AWT añadiendo las siguientes características:

- Componentes Swing.
- Soporte de Look & Feel (Aspecto o estilo que presentan las ventanas)
- Java 2D API
- Soporte de Drag & Drop (Permite implementar las acciones de arrastrar y soltar con el ratón).

¿Qué diferencias nos encontramos entre Swing y AWT?

Swing es el conjunto de nuevos componentes visuales. Habitualmente también se usa como término genérico para referirse a las JFC.

Su diferencia más importante con la AWT es que los componentes son “lightweight”, esto quiere decir que no se usan componentes dependientes del sistema operativo, aparte Swing está totalmente escrito en Java. Todo esto aporta una mayor funcionalidad en manos del programador, y en la posibilidad de mejorar en gran medida los interfaces gráficos de usuario.

Para diferenciar los componentes Swing de los AWT, sus nombres están precedidos por una ‘J’.

Todas las clases Swing se encuentran en el paquete javax.swing.*;

Nunca debemos mezclar componentes Swing con componentes AWT en una misma aplicación.

Son muchas las ventajas que ofrece el uso de Swing. Por ejemplo, la navegación con el teclado es automática, cualquier aplicación Swing se puede utilizar sin ratón, o sin tener que escribir una línea de código adicional.

Empezaremos viendo los componentes AWT, para luego migrar todos esos componentes a sus respectivas formas en Swing, y estudiar las nuevas características que nos aporta, dado que considero conveniente que el alumno entienda primero el AWT, para luego ver como el Swing mejora este AWT.

1.1 EL PAQUETE AWT

Es una librería de clases Java para el desarrollo de interfaces de usuario gráficas (GUI). Por tratarse de código Java, las aplicaciones serán independientes de plataforma. No así su apariencia visual. Es la librería básica. Sobre ella se construyó a posteriori otra más flexible y potente: JFC/Swing. La AWT se encuentra en el paquete: java.awt.*

Dispone de la mayoría de controles visuales estándar: Button, Canvas, Frame, Dialog, Label, List, Choice, ScrollBar, ScrollPane, TextField, TextArea, Menu.

Los elementos básicos que componen esta librería son:

- Los componentes (java.awt.Component) como Buttons, Labels, TextFields, etc…
- Los contenedores (java.awt.Container) como los Frames, los Panels, etc… que pueden contener componentes.
- Los gestores de posición (java.awt.LayoutManager) que gestionan la disposición de los componentes dentro de los contenedores.
- Los eventos (java.awt.AWTEvent) que avisan de las acciones del usuario.

JavaPasoAPaso1101.JPG

JavaPasoAPaso1102.JPG

 

java.awt.Component

Se trata de una clase abstracta que implementa toda la funcionalidad básica de las clases visuales, disponiendo de métodos para mostrar y esconder, habilitar, deshabilitar y atributos como el color del foreground y background, tamaño y posición.

java.awt.Container

Se trata de una clase que implementa la funcionalidad de contener a otros componentes: Window, Dialog, FileDialog, Frame, Panel.

java.awt.LayoutManager

Los contenedores sirven para agrupar componentes visuales. Pero, ¿cómo se distribuyen dichos componentes en su interior? Para ello, se utilizan implementaciones del interface java.awt.LayoutManager.

Cada contenedor tiene asociado un LayoutManager que distribuye los componentes en el interior del contenedor. Por ejemplo, un Panel tiene asociado por defecto una instancia de java.awt.FlowLayout.

Coordenadas y posicionamiento

La posición de los componentes visuales es relativa al contenedor en el que se encuentra. La coordenada 0,0 es la esquina superior izquierda del contenedor. La clase java.awt.Component implementa varios métodos para la gestión del tamaño y
posicionamiento como por ejemplo:

Rectangle getBounds( ); Dimension getSize( ); void setLocation(int x, int y);
void setSize(Dimension d); Point getLocation( ); Container getParent( );
void setBounds(int x, int y, int width, int height);

La clase java.awt.Container posee varios métodos para acceder a los componentes que
contienen como por ejemplo:

add(Component c) Inserta el componente c en el contenedor que utiliza el método.
remove(Component c) Elimina el componente c en el contenedor que utiliza el método.
Component[] getComponents( ) Devuelve un array con los componentes del contenedor

Pasos a seguir

- Crear el componente Button b=new Button( );
- Añadir el componente al contenedor unContenedor.add(b);
- Invocar métodos sobre el componente y manejar sus eventos. b.setText(“Ok”);

Ejemplos de componentes

JavaPasoAPaso1103.JPG

JavaPasoAPaso1104.JPG

JavaPasoAPaso1105.JPG

JavaPasoAPaso1106.JPG

JavaPasoAPaso1107.JPG

JavaPasoAPaso1108.JPG

JavaPasoAPaso1109.JPG

JavaPasoAPaso1110.JPG

JavaPasoAPaso1111.JPG

JavaPasoAPaso1112.JPG

JavaPasoAPaso1113.JPG

JavaPasoAPaso1114.JPG

JavaPasoAPaso1115.JPG

JavaPasoAPaso1116.JPG

Layout Managers

Todos los contenedores AWT tienen asociado un LayoutManager para coordinar el tamaño y la situación de sus componentes (Panel->FlowLayout, Frame->BorderLayout)

Cada Layout se caracteriza por el estilo que emplea para situar los componentes en su interior: Alineación de izquierda a derecha, Alineación en rejilla, Alineación del frente a atrás.

¿Por qué usar Layout Managers?

Determinan el tamaño y la posición de los componentes en un contenedor. Tiene un API que permite al contenedor y al LayoutManager gestionar el cambio de tamaño de contenedor de manera transparente. Consiguen que la aplicación sea independiente de la resolución de las máquinas donde se ejecuta. Implementan el interface java.awt.LayoutManager.

FlowLayout: sitúa los componentes de izquierda a derecha. Les modifica la posición pero no les modifica el tamaño.
BorderLayout: se basa en los puntos cardinales. Modifica tanto la posición como el tamaño de los componentes.
CardLayout: permite al desarrollador intercambiar distintas vistas como si se tratase de una baraja. Modifica tanto la posición como el tamaño de los componentes.
GridLayout: usa una matriz en la que sitúa cada uno de los componentes. El tamaño de todas las celdas es igual.
GridBagLayout: similar al anterior, pero no fuerza a que todos los componentes tengan el mismo tamaño.

JavaPasoAPaso1117.JPG

JavaPasoAPaso1118.JPG

JavaPasoAPaso1119.JPG

JavaPasoAPaso1120.JPG

JavaPasoAPaso1121.JPG

JavaPasoAPaso1122.JPG

EVENTOS

Un evento es una encapsulación de una información que puede ser enviada a la aplicación de manera asíncrona. Pueden corresponder a acciones físicas (ratón y teclado) y a acciones lógicas. java.util.EventObject es la clase padre de todos los
eventos. Su subclase java.awt.AWTEvent es la clase padre de todos los eventos AWT.

Los eventos contienen un id (int que describe el tipo de evento). También contiene información sobre el origen del evento (getSource( );).

El manejo de eventos se consigue mediante el uso de interfaces definidos en el paquete java.awt.event: ActionListener, WindowListener, KeyListener, MouseListener,…

Tipos de eventos:

- Físicos:

o ComponentEvent: Esconder, mover, redimensionar, mostrar.
o ContainerEvent: Añadir o eliminar un componente.
o FocusEvent: Obtener o perder foco.
o KeyEvent: Pulsar, liberar o teclear una tecla.
o MouseEvent: Entrar, salir, pulsar, soltar, clicar.

- Semánticos:

o ActionEvent: Una acción se ha ejecutado.
o AdjustmentEvent: Un valor se ha ajustado.
o ItemEvent: Un estado ha cambiado.
o TextEvent: Un texto ha cambiado.

JavaPasoAPaso1123.JPG

JavaPasoAPaso1124.JPG

JavaPasoAPaso1125.JPG

JavaPasoAPaso1126.JPG

JavaPasoAPaso1127.JPG

ADAPTERS

Son clases que tienen definidos todos los métodos de un interface concreto.

La implementación de dichos métodos está vacía.

Heredando de un Adapter, y sobrescribiendo los métodos necesarios conseguimos el mismo interface.

Problema: en Java no existe la herencia múltiple, por ello se suelen usar con las Clases Anónimas.

Ejemplo con Adapters

JavaPasoAPaso1128.JPG

Registro a la notificación de eventos

Cuando invocamos el método addWindowListener, estamos estableciendo un ‘callback’.

Como parámetro se manda un escuchador, el cual debe implementar el interfaz correspondiente.

Cuando se genera un WindowEvent como consecuencia de pulsar el botón con la X, el método windowClosing( ) del escuchador es invocado.

Se pueden añadir varios escuchadores a un mismo notificador de eventos.

EJEMPLO

import java.awt.*;
import java.awt.event.*;
public class EjemploBotonEvento implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{
if(((Button)ev.getSource()).getLabel().equals("Aceptar"))
System.out.println("Has pulsado Aceptar");
else
System.out.println("Has pulsado Cancelar");
}
public EjemploBotonEvento()
{
Frame f=new Frame();
f.setTitle("Ejemplo de Evento de Boton");
f.setSize(200,150);
f.setLayout(new FlowLayout());
Button b1=new Button("Aceptar");
b1.addActionListener(this);
f.add(b1);
Button b2=new Button("Cancelar");
b2.addActionListener(this);
f.add(b2);
f.setVisible(true);
}
public static void main(String[] args)
{
EjemploBotonEvento b=new EjemploBotonEvento();
}
}

OTRAS CLASES

java.awt.Color

Implementa un color descrito según en RGB, que es un sistema de definición de colores, donde se especifica el nivel de saturación de cada uno de esos tres colores mediante valores entre 0 y 255.

Se puede construir mediante un valor RGB: Color amarillo= new Color(255,255,0);

O utilizar colores predefinidos mediante constantes: Color amarillo= Color.YELLOW;

java.awt.Font

Implementa la representación gráfica de una letra.

Se define mediante:

- Familia: nombre del tipo de letra.
- Estilo: normal o negrita y/o cursiva.
- Tamaño: píxels del punto utilizado para pintar la letra.

Existen dos clases de nombres de familia:

- Lógico: Serif, SansSerif, Monospaced, Dialog y DialogInput.
- Físico: Cualquier familia instalada en el sistema.

Para definir el estilo se utilizan estas constantes:

Font.PLAIN: normal, Font.BOLD: negrita, Font.ITALIC: cursiva.

Para combinar varios estilos se utiliza el OR lógico a nivel de bit: |

java.awt.Cursor

Implementa la representación gráfica del cursor.

Existen varios predefinidos, que se pueden usar mediante el uso de constantes. Algunos cursores:

Cruz: Cursor.CROSSHAIR_CURSOR
Mano: Cursor.HAND_CURSOR
Mover: Cursor.MOVE_CURSOR
Texto: Cursor.TEXT_CURSOR
Espera: Cursor.WAIT_CURSOR

La clase java.awt.Component tiene el método: public void setCursor(Cursor cursor)
java.awt.Graphics

Sirve para dibujar. Todos los componentes AWT son dibujados en pantalla a través del método de la clase java.awt.Component: public void paint(Graphics g);

Permite: trabajar con primitivas gráficas: figuras, colores, textos; o trabajar con

imágenes: GIF y TPEG.

Un componente puede pedir que sea repintado mediante el método:

public void repaint( );

JavaPasoAPaso1129.JPG

También permite trabajar con imágenes, representadas por la clase java.awt.Image.

Soporta los formatos: GIF y JPEG.

Para cargar una imagen se utiliza la clase java.awt.Toolkit:

Toolkit.getDefaultToolkit( ).getImage(…);

Para pintar una imagen: drawImage( );

JavaPasoAPaso1130.JPG

1.2 EL PAQUETE SWING

JavaPasoAPaso1131.JPG

JavaPasoAPaso1132.JPG

JavaPasoAPaso1133.JPG

JavaPasoAPaso1134.JPG

javax.swing.JComponent

Hereda de la clase java.awt.Container. Se trata de una clase abstracta que implementa toda la funcionalidad básica de las clases visuales: Ayudas emergentes, bordes, gestión del Look & Feel, gestión de la accesibilidad, gestión de teclas asociadas, soporte de Drag & Drop.

Migrando de AWT a Swing

Se eliminan todos los import de paquetes java.awt.*. Se importa el paquete javax.swing.*. Se cambia cada componente AWT por el Swing más parecido.

Frame->JFrame, Button->JButton

NOTA: No se pueden añadir componentes o establecer LayoutManagers directamente sobre JWindow, JFrame, JDialog o JApplet. Esto hay que hacerlo sobre el Container que devuelve el método: public Container getContentPane( ).

JavaPasoAPaso1135.JPG

JavaPasoAPaso1136.JPG

javax.swing.JFrame

JavaPasoAPaso1137.JPG

JavaPasoAPaso1138.JPG

JavaPasoAPaso1139.JPG

JavaPasoAPaso1140.JPG

JavaPasoAPaso1141.JPG

JavaPasoAPaso1142.JPG

JavaPasoAPaso1143.JPG

JavaPasoAPaso1144.JPG

JavaPasoAPaso1145.JPG

JavaPasoAPaso1146.JPG

JavaPasoAPaso1147.JPG

JavaPasoAPaso1148.JPG

JavaPasoAPaso1149.JPG

JavaPasoAPaso1150.JPG

JavaPasoAPaso1151.JPG

JavaPasoAPaso1152.JPG

JavaPasoAPaso1153.JPG

JavaPasoAPaso1154.JPG

JavaPasoAPaso1155.JPG

JavaPasoAPaso1156.JPG

JavaPasoAPaso1157.JPG

JavaPasoAPaso1158.JPG

JavaPasoAPaso1159.JPG

JavaPasoAPaso1160.JPG

JavaPasoAPaso1161.JPG

JavaPasoAPaso1162.JPG

JavaPasoAPaso1163.JPG

JavaPasoAPaso1164.JPG

Layout Managers

Todos los contenedores Swing tienen asociado un LayoutManager para coordinar el tamaño y la situación de sus componentes. JPanel->FlowLayout, JFrame->BorderLayout.

Cada Layout se caracteriza por el estilo que emplea para situar los componentes en su interior:

- Alineación de izquierda a derecha.
- Alineación en rejilla.
- Alineación del frente a atrás.

Aparte de los que vimos para awt, existen nuevos Layout Managers:

- BoxLayout: sitúa los componentes en línea vertical u horizontal, respetando sus tamaños. La clase javax.swing.Box tiene métodos para crear zonas con espacio como createVerticalStrut(int) y zonas que absorban los espacios como
createVerticalGlue(int).
- SpringLayout: permite definir la relación (distancia) entre los límites de los distintos controles.
- ScrollPaneLayout, ViewportLayout: utilizados internamente por Swing para algunos de los componentes como el ScrollPane.

JavaPasoAPaso1165.JPG

JavaPasoAPaso1166.JPG

EVENTOS

JavaPasoAPaso1168.JPG

 

JavaPasoAPaso1169.JPG

JavaPasoAPaso1170.JPG

JavaPasoAPaso1171.JPG

JavaPasoAPaso1172.JPG

JavaPasoAPaso1173.JPG

JavaPasoAPaso1174.JPG

JavaPasoAPaso1175.JPG

JavaPasoAPaso1176.JPG

JavaPasoAPaso1177.JPG

JavaPasoAPaso1178.JPG

JavaPasoAPaso1179.JPG

JavaPasoAPaso1180.JPG

JavaPasoAPaso1181.JPG

 

LOOK & FEEL

Existen distintas alternativas para seleccionar el Look & Feel de una aplicación Java:

- Por línea de comando:
o Java –Dswing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel MiApp
- Mediante el fichero swing.properties (localizado en el directorio \lib del JRE)
- Por código de forma estática (al inicio del programa)
o try{
UIManager.setLookAndFeel(“javax.swing.plaf.metal.MetalLookAndFeel”);
}
catch(Exception ex){}

<< Volver al tema anterior 

 

Referencias:

 

http://www.jmordax.com/

 


Autor: Antonio Lopez Atienza


Tags:
Posted in Java | 4 Comments »

4 Comments to “Java – Paso a paso Tema 11”

  1. Nullpointerexception Says:

    Java Look and Feel…

    Tu post es interesante.. he agregado un Trackback de tu post en mi blog :)…

  2. lopezatienza Says:

    Me parece perfecto 🙂

    Un saludo!

  3. lopezatienza Says:

    Me alegro que te sirviera de ayuda 😉

Leave a Comment

 

RSS
MCC D5E