Manual Java II PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 25

AULA

MENTOR
educacion.es
Nipo: 820-11-347-3

Autor:
Pilar Aranzazu Ocaña Diaz-Ufano y José
Miguel Ordax Cassá

Edición y maquetación de contenidos:


Susana Pérez Marín

Diseño gráfico e ilustración de portada:


María Guija Medina
MÓDULO A

UNIDADES DIDÁCTICAS:

1. Paquete AWT

2. Paquete Swing

3. Applets
MÓDULO A

Paquete AWT

Tema 1.1

Índice de la unidad:

1. Introducción

2. Componentes visuales AWT

3. Layout Managers

4. Gestión de eventos

5. Otras clases

6. Editor visual AWT/Swing en Eclipse


Unidad 1.1 Paquete AWT

En las siguientes Unidades, vamos a estudiar la programación visual en Java. Co-


menzaremos en esta Unidad repasando los fundamentos básicos sobre los que se
apoya el funcionamiento de los interfaces gráfico en Java, partiendo del primer
framework que se implementó e incluyó en la JDK: AWT. En la siguiente Unidad ve-
remos otro framework posterior más flexible y potente llamado Swing (que en la
JDK 1.2 se incluyó como parte del lenguaje), pero que se apoya y basa en todo lo
estudiado en la AWT.

1. Introducción

AWT, son las siglas de: Abstract Window Toolkit

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 la plataforma.


No así su apariencia visual, es decir, su Look & Feel, que será el de la plataforma
donde se ejecute.

Es la librería visual básica. Sobre ella se construyó a posteriori otra más flexible y
potente: JFC/Swing que trataremos con profundidad en la siguiente Unidad. Pero
los fundamentos básicos los estableció la AWT.

La AWT se encuentra en el paquete: java.awt.*

Dispone de la mayoría de controles visuales estándar:

 Button (push, radio y check).

 Canvas.

 Frame, Dialog.

 Label.

 List, Choice.

 ScrollBar, ScrollPane.

 TextField, TextArea.

5
MODULO 1 Interfaces Visuales

 Menu.

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

 Los componentes (java.awt.Component) como Buttons, Labels, Text-


Fields, 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 dis-


posición de los componentes dentro de los contenedores.

 Los eventos (java.awt.AWTEvent) que avisan de las acciones del usuario.

Como ya hemos comentado en varias ocasiones, en la Programación Orientada Ob-


jetos, y por tanto en el lenguaje Java, siempre existe un diseño jerárquico de he-
rencia. La AWT no es una excepción:

6
Unidad 1.1 Paquete AWT

java.awt.Component es una clase abstracta que implementa toda la funcionali-


dad básica de las clases visuales.

Tiene métodos para:

 Mostrar y esconder.

 Rendering.

 Habilitar y deshabilitar, etc...

Y atributos como:

 Color del foreground y background.

 Tamaño y posición.

Por su lado, java.awt.Container es una clase que implementa la funcionalidad de


contener a otros componentes. Y si nos fijamos en la jerarquía de clase, los conte-
nedores son a su vez componentes.

Algunos contenedores típicos son:

 Window.

 Dialog y FileDialog.

 Frame.

 Panel: contenedor invisible.

7
MODULO 1 Interfaces Visuales

Luego entonces, los contenedores sirven para agrupar componentes visuales. Pero,
¿cómo se distribuyen dichos componentes en su interior?

Para dicho cometido, se utilizan implementaciones del interface ja-


va.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

La posición de los componentes visuales es relativa al contenedor en el que se en-


cuentra. 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();

 void setLocation(int x, int y);

 Point getLocation();

 void setBounds(int x, int y, int width, int height);

 Dimension getSize();

 void setSize(Dimension d);

 Container getParent();

Por su lado, la clase java.awt.Container posee varios métodos para acceder a los
componentes que contiene, como por ejemplo:

 add(Component c); o add(Component c, Object o); // Inserta el componente


c en el contenedor referenciado.

 remove(Component c); // Elimina el componente c del contenedor referen-


ciado.

 Component[] getComponents(); // Devuelve un array con los componentes


del contenedor referenciado.

8
Unidad 1.1 Paquete AWT

A continuación, listamos los pasos habituales con un ejemplo, para crear un com-
ponente visual y añadirlo a un contenedor:

 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”);

 Ejemplo: Desarrollo de un ejemplo básico de contenedores con componentes:

import java.awt.*;
public class EjemploAWT
{
public static void main(String[] args)
{
Frame frame = new Frame();
frame.setLayout(null);
frame.setBounds(0,0,400,300);
frame.setTitle("Ejemplo AWT");
Panel panel = new Panel();
panel.setLayout(null);
panel.setBounds(50,40,250,220);
panel.setBackground(Color.LIGHT_GRAY);
Button boton = new Button("Aceptar");
boton.setBounds(100,80,100,20);

panel.add(boton);
frame.add(panel);

frame.setVisible(true);
}
}

9
MODULO 1 Interfaces Visuales

Para poder interactuar con los interfaces visuales, es decir, poder reaccionar y eje-
cutar código cuando se pulse un botón, se mueva el ratón, se teclee algo, etc... hay
que gestionar los eventos. Trataremos este tema en un apartado posterior de esta
misma Unidad.

2. Componentes visuales AWT

Ya conocemos lo básico del funcionamiento de la programación visual. Ahora hare-


mos un repaso mediante ejemplos de código de un gran porcentaje de los compo-
nentes visuales existentes en la AWT, mostrando visualmente a que corresponden.
Para profundizar en cada uno de ellos, recomendamos examinar el API.

2.1 java.awt.Frame

import java.awt.Frame;

public class FrameTest


{

10
Unidad 1.1 Paquete AWT

public static void main(String[] args)


{
Frame f = new Frame();
f.setTitle("FrameTest");
f.setSize(200,150);
f.setVisible(true);
}
}

2.2 java.awt.Button

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
public class ButtonTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("ButtonTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
Button b = new Button("Ok");
f.add(b);
f.setVisible(true);
}
}

2.3 java.awt.Checkbox

import java.awt.Checkbox;
import java.awt.FlowLayout;
import java.awt.Frame;
public class CheckboxTest

11
MODULO 1 Interfaces Visuales

{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("CheckboxTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
Checkbox c = new Checkbox("Mayor de 18 años");
f.add(c);
f.setVisible(true);
}
}

2.4 java.awt.CheckboxGroup

import java.awt.*;
public class CheckboxGroupTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("CheckboxGroupTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
CheckboxGroup cbg = new CheckboxGroup();
Checkbox c1 = new Checkbox("Hombre",cbg,true);
Checkbox c2 = new Checkbox("Mujer",cbg,false);
f.add(c1);
f.add(c2);
f.setVisible(true);
}
}

12
Unidad 1.1 Paquete AWT

2.5 java.awt.Choice

import java.awt.*;
public class ChoiceTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("ChoiceTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
Choice cbg = new Choice();
cbg.add("Rojo");
cbg.add("Amarillo");
cbg.add("Blanco");
f.add(cbg);
f.setVisible(true);
}
}

2.6 java.awt.Label

import java.awt.*;
public class LabelTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("LabelTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
Label l1 = new Label("Una etiqueta");
Label l2 = new Label();
l2.setText("Otra etiqueta");
f.add(l1);
f.add(l2);

13
MODULO 1 Interfaces Visuales

f.setVisible(true);
}
}

2.7 java.awt.List

import java.awt.*;
public class ListTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("ListTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
List l = new List(3);
l.add("Primero");
l.add("Segundo");
l.add("Tercero");
l.add("Cuarto");
f.add(l);
f.setVisible(true);
}
}

2.8 java.awt.Scrollbar

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Scrollbar;
public class ScrollbarTest
{
public static void main(String[] args)
{
Frame f = new Frame();

14
Unidad 1.1 Paquete AWT

f.setTitle("ScrollbarTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL,0,5,-100,100);
f.add(sb);
f.setVisible(true);
}
}

2.9 java.awt.TextField

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
public class TextFieldTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("TextFieldTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
TextField tf = new TextField("Escribe aquí...");
f.add(tf);
f.setVisible(true);
}
}

2.10 java.awt.TextArea

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
public class TextAreaTest

15
MODULO 1 Interfaces Visuales

{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("TextAreaTest");
f.setSize(200,150);
f.setLayout(new FlowLayout());
TextArea ta = new TextArea("Escribe aquí...",5,15);
f.add(ta);
f.setVisible(true);
}
}

2.11 java.awt.Menu

import java.awt.*;
public class MenuTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("MenuTest");
MenuBar mb = new MenuBar();
Menu m1 = new Menu("Menu 1");
m1.add(new MenuItem("Opción 1"));
m1.add(new MenuItem("Opción 2"));
Menu m2 = new Menu("Menu 2");
m2.add(new CheckboxMenuItem("Opción 1", true));
m2.add(new CheckboxMenuItem("Opción 2"));
mb.add(m1);
mb.add(m2);
f.setMenuBar(mb);
f.setSize(200,150);
f.setVisible(true);
}
}

16
Unidad 1.1 Paquete AWT

2.12 java.awt.Dialog

import java.awt.Dialog;
import java.awt.Frame;
public class DialogTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("FrameTest");
f.setSize(200,150);
f.setVisible(true);
Dialog d = new Dialog(f);
d.setTitle("DialogTest");
d.setBounds(50,50,70,50);
d.setVisible(true);
}
}

2.13 java.awt.FileDialog

import java.awt.FileDialog;
import java.awt.Frame;
public class DialogTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("FrameTest");
f.setSize(200,150);
f.setVisible(true);
FileDialog d = new FileDialog(f);
d.setTitle("FileDialogTest");
d.setBounds(50,50,70,50);

17
MODULO 1 Interfaces Visuales

d.setVisible(true);
System.out.println(d.getFile());
// Recibir el nombre del fichero seleccionado.
}
}

3. Layout Managers

Todos los contenedores AWT tienen asociado un LayoutManager para coordinar el


tamaño y la situación de sus componentes. Por ejemplo:

 Panel tiene asociado un FlowLayout

 Frame tiene asociado un 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.

18
Unidad 1.1 Paquete AWT

¿Por qué debemos usar los Layout Managers?

Porque 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 del contenedor de manera transparente.

Por último, pero no menos importante, consiguen que la aplicación sea indepen-
diente de la resolución de las máquinas donde se ejecuta.

Todos los layout Managers implementan el interface java.awt.LayoutManager:

3.1 java.awt.FlowLayout

Sitúa los componentes de izquierda a derecha. Les modifica la posición pero


no les modifica el tamaño.

import java.awt.*;
public class FlowLayoutTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("FlowLayoutTest");
f.setSize(300,150);
f.setLayout(new FlowLayout());
Button b1 = new Button("Button 1");
f.add(b1);
Button b2 = new Button("Button 2");
f.add(b2);
Button b3 = new Button("Button 3");
f.add(b3);
f.setVisible(true);
}
}

3.2 java.awt.BorderLayout

19
MODULO 1 Interfaces Visuales

Se basa en los puntos cardinales. Modifica tanto la posición como el tamaño


de los componentes.

import java.awt.*;
public class BorderLayoutTest
{
public static void main(String[]
args)
{
Frame f = new Frame();
f.setTitle("BorderLayoutTest");
f.setLayout(new BorderLayout());
Button b1 = new Button("Button 1 (NORTH)");
f.add(b1,BorderLayout.NORTH);
Button b2 = new Button("Button 2 (WEST)");
f.add(b2,BorderLayout.WEST);
Button b3 = new Button("Button 3 (CENTER)");
f.add(b3,BorderLayout.CENTER);
Button b4 = new Button("Button 4 (EAST)");
f.add(b4,BorderLayout.EAST);
Button b5 = new Button("Button 5 (SOUTH)");
f.add(b5,BorderLayout.SOUTH);
f.pack(); // El método pack, hace que el contenedor pregunte a su
// LayoutManager el tamaño mínimo para que todos sus
// componentes se puedan ver. Y se ajusta a ese tamaño
f.setVisible(true);
}
}

3.3 java.awt.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.

import java.awt.*;
public class CardLayoutTest

20
Unidad 1.1 Paquete AWT

{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("CardLayoutTest");
f.setSize(300,150);
CardLayout cl = new CardLayout();
f.setLayout(cl);
Button b1 = new Button("Button 1");
f.add(b1,"uno");
Button b2 = new Button("Button 2");
f.add(b2,"dos");
Button b3 = new Button("Button 3");
f.add(b3,"tres");
f.setVisible(true);
cl.show(f,"dos"); // Otras posibilidades: cl.first(f), cl.last(f) y cl.next(f);
}
}

3.4 java.awt.GridLayout

Usa una matriz en la que sitúa cada uno de los componentes. El tamaño de
todas las celdas es igual.

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
public class GridLayoutTest
{
public static void main(String[] args)
{
Frame f = new Frame();
f.setTitle("GridLayoutTest");
f.setSize(300,150);
f.setLayout(new GridLayout(2,3,2,2));
f.add(new Button("Button 1"));

21
MODULO 1 Interfaces Visuales

f.add(new Button("Button 2"));


f.add(new Button("Button 3"));
f.add(new Button("Button 4"));
f.add(new Button("Button 5"));
f.setVisible(true);
}
}

3.5 java.awt.GridBagLayout

Similar al anterior, pero no fuerza a que todos los componentes tengan el


mismo tamaño.

import java.awt.*;
public class GridBagLayoutTest
{
public static void main(String[] args)
{
Frame frame = new Frame("GridBagLayoutTest");
frame.setLayout(new GridBagLayout());

Button button = new Button("Button 1");


GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
frame.add(button, c);

button = new Button("Button 2");


c.gridx = 1;
c.gridy = 0;
frame.add(button, c);
button = new Button("Button 3");
c.gridx = 2;
c.gridy = 0;

22
Unidad 1.1 Paquete AWT

frame.add(button, c);
button = new Button("Button 4");
c.ipady = 40;
c.weightx = 0.0;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 1;
frame.add(button, c);
button = new Button("Button 5");
c.ipady = 0;
c.weighty = 1.0;
c.anchor = GridBagConstraints.PAGE_END;
c.insets = new Insets(10,0,0,0);
c.gridx = 1;
c.gridwidth = 2;
c.gridy = 2;
frame.add(button, c);

frame.pack();
frame.setVisible(true);
}
}

3.6 null LayoutManager

Es otra opción también válida, que consiste en prescindir del uso de los Layout
Managers. En tal caso, el desarrollador es responsable de ajustar todas las
posiciones y tamaños de los distintos componentes visuales utilizados en la
aplicación.

import java.awt.Button;
import java.awt.Frame;
public class NullLayoutTest
{
public static void main(String[] args)
{

23
MODULO 1 Interfaces Visuales

Frame f = new Frame();


f.setTitle("NullLayoutTest");
f.setSize(300,150);
f.setLayout(null);
Button b1 = new Button("Button 1");
b1.setBounds(50,25,100,50);
f.add(b1);
Button b2 = new Button("Button 2");
b2.setBounds(125,85,100,50);
f.add(b2);
f.setVisible(true);
}
}

4. Gestión de eventos

Un evento es una encapsulación de una información que puede ser enviada a la


aplicación de manera asíncrona.

Los eventos 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 ja-


va.awt.AWTEvent es la clase padre de todos los eventos AWT.

En el siguiente gráfico, podemos ver reflejado el funcionamiento de la gestión de


eventos en Java:

24
Unidad 1.1 Paquete AWT

Básicamente, contamos con dos piezas fundamentales. Un notificador (Notifier),


que es quién generará los eventos, y un escuchador (Listener) que es quien está
interesado en dichos eventos para reaccionar y actuar en consecuencia.

Para que un escuchador, pueda escuchar los eventos de un notificador, ha de subs-


cribirse a estos. En caso de estar subscrito, el notificador, cuando ocurra el evento,
se lo notificará al escuchador. En Java, esto significa enviar un mensaje concreto al
escuchador (ejecutar un método concreto).

El mecanismo que tenemos en Java de poder garantizar que el escuchador imple-


menta dichos métodos, es forzándole a implementar un interfaz. Y esto lo consigue
mediante el API del método de subscripción, que solo permite recibir parámetros de
un tipo concreto. Luego el escuchador interesado ha de ser de dicho tipo para poder
subscribirse.

Un escuchador, igual que se subscribe, puede de subscribirse.

Los notificadores pasan la información a los escuchadores invocando un método


concreto como ya hemos comentado, pasándole como parámetro un evento que
encapsula toda la información necesaria para conocer lo que ha ocurrido.

25

También podría gustarte