Manual Java II
Manual Java II
MENTOR
educacion.es
Nipo: 820-11-347-3
Autor:
Pilar Aranzazu Ocaa Diaz-Ufano y Jos
Miguel Ordax Cass
Edicin y maquetacin de contenidos:
Susana Prez Marn
MDULO A
UNIDADES DIDCTICAS:
1. Paquete AWT
2. Paquete Swing
3. Applets
MDULO A
Paquete AWT
Tema 1.1
ndice de la unidad:
1. Introduccin
2. Componentes visuales AWT
3. Layout Managers
4. Gestin de eventos
5. Otras clases
6. Editor visual AWT/Swing en Eclipse
En las siguientes Unidades, vamos a estudiar la programacin visual en Java. Comenzaremos en esta Unidad repasando los fundamentos bsicos sobre los que se
apoya el funcionamiento de los interfaces grfico en Java, partiendo del primer
framework que se implement e incluy en la JDK: AWT. En la siguiente Unidad veremos otro framework posterior ms 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. Introduccin
AWT, son las siglas de: Abstract Window Toolkit
Es una librera de clases Java para el desarrollo de interfaces de usuario grficas
(GUI).
Por tratarse de cdigo Java, las aplicaciones sern 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 librera visual bsica. Sobre ella se construy a posteriori otra ms flexible y
potente: JFC/Swing que trataremos con profundidad en la siguiente Unidad. Pero
los fundamentos bsicos los estableci la AWT.
La AWT se encuentra en el paquete: java.awt.*
Dispone de la mayora de controles visuales estndar:
Canvas.
Frame, Dialog.
Label.
List, Choice.
ScrollBar, ScrollPane.
TextField, TextArea.
5
Menu.
Los gestores de posicin (java.awt.LayoutManager) que gestionan la disposicin de los componentes dentro de los contenedores.
Como ya hemos comentado en varias ocasiones, en la Programacin Orientada Objetos, y por tanto en el lenguaje Java, siempre existe un diseo jerrquico de herencia. La AWT no es una excepcin:
java.awt.Component es una clase abstracta que implementa toda la funcionalidad bsica de las clases visuales.
Tiene mtodos para:
Mostrar y esconder.
Rendering.
Y atributos como:
Tamao y posicin.
Window.
Dialog y FileDialog.
Frame.
Luego entonces, los contenedores sirven para agrupar componentes visuales. Pero,
cmo 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 posicin 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 mtodos para la gestin del tamao y posicionamiento como por ejemplo:
Rectangle getBounds();
Point getLocation();
Dimension getSize();
Container getParent();
Por su lado, la clase java.awt.Container posee varios mtodos para acceder a los
componentes que contiene, como por ejemplo:
A continuacin, listamos los pasos habituales con un ejemplo, para crear un componente visual y aadirlo a un contenedor:
Invocar
mtodos
sobre
el
componente
manejar
sus
eventos:
b.setText(Ok);
frame.setVisible(true);
}
}
Para poder interactuar con los interfaces visuales, es decir, poder reaccionar y ejecutar cdigo cuando se pulse un botn, se mueva el ratn, se teclee algo, etc... hay
que gestionar los eventos. Trataremos este tema en un apartado posterior de esta
misma Unidad.
2.1 java.awt.Frame
import java.awt.Frame;
public class FrameTest
{
10
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
{
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 aos");
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
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
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
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
{
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("Opcin 1"));
m1.add(new MenuItem("Opcin 2"));
Menu m2 = new Menu("Menu 2");
m2.add(new CheckboxMenuItem("Opcin 1", true));
m2.add(new CheckboxMenuItem("Opcin 2"));
mb.add(m1);
mb.add(m2);
f.setMenuBar(mb);
f.setSize(200,150);
f.setVisible(true);
}
}
16
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
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
tamao y la situacin de sus componentes. Por ejemplo:
Cada Layout se caracteriza por el estilo que emplea para situar los componentes en
su interior:
18
Alineacin en rejilla.
3.1 java.awt.FlowLayout
Sita los componentes de izquierda a derecha. Les modifica la posicin pero
no les modifica el tamao.
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
3.3 java.awt.CardLayout
Permite al desarrollador intercambiar distintas vistas como si se tratase de
una baraja. Modifica tanto la posicin como el tamao de los componentes.
import java.awt.*;
public class CardLayoutTest
20
{
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");
}
}
3.4 java.awt.GridLayout
Usa una matriz en la que sita cada uno de los componentes. El tamao 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
3.5 java.awt.GridBagLayout
Similar al anterior, pero no fuerza a que todos los componentes tengan el
mismo tamao.
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
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);
}
}
23
4. Gestin de eventos
Un evento es una encapsulacin de una informacin que puede ser enviada a la
aplicacin de manera asncrona.
Los eventos pueden corresponder a acciones fsicas (ratn y teclado) y a acciones
lgicas.
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.
En el siguiente grfico, podemos ver reflejado el funcionamiento de la gestin de
eventos en Java:
24
25