Está en la página 1de 6

Las AWT y SWING proveen componentes básicos para una GUI (Graphics User

Interface -
Interface Gráfica de Usuario) y son utilizados en las aplicaciones y los applets de
Java. Una de
las ventajas de usar AWT es que la interface es independiente de la plataforma o
interface gráfica
de la máquina. Esto nos asegura que lo que se vea en una computadora
aparecerá igual en otra
computadora.
Una estrategia para estudiar las AWT es dividirlas en :
 Componentes
 Contenedores
 Layouts ( Administradores de diseño )
 Eventos
Componentes. Son clases o interfaces que permiten crear los objetos gráficos que
componen una GUI
tales como;botones, listas desplegables, cuadros de texto, casillas de verificación,
botones de opción,
campos de texto, etiquetas, menús, etc.
Contenedores. Son clases o interfaces que permiten crear objetos gráficos para
contener a los
componentes, tales como; paneles, cuadros de diálogo, marcos, ventanas, etc.
Layouts. Son clases o interfaces que permiten crear objetos de que administren el
diseño, la
distribución y colocación de los objetos componentes dentro de los objetos
contenedores. Por
ejemplo el FlowLayout distribuye los componentes de izquierda a derecha y de
arriba a abajo, el
BorderLayout los distribuye en cinco áreas geográficas; norte, sur, este, oeste y
centro, etc.
Eventos. Son las clases o interfaces que permiten crear objetos que capturen y
manejen los
eventos. Un evento es una acción sobre algún componente, por ejemplo, clic a un
botón, pulsar la
tecla de enter en un botón, mover un elemento con las teclas de navegación,
eventos especiales
como los programados por tiempo, etc. Sin los eventos las GUI serían interfaces
gráficas sin vida,
y por lo tanto no serían muy útiles que digamos.
Cuando se empieza a utilizar SWING, se observa que Sun ha dado un paso
importante adelante
respecto al AWT. Ahora los componentes de la interface gráfica son Beans y
utilizan el nuevo
modelo de Delegación de Eventos de Java. Swing proporciona un conjunto
completo de
componentes, todos ellos lightweight, es decir, ya no se usan componentes peer
dependientes del
sistema operativo, ademas, SWING está totalmente escrito en Java. Todo esto
conlleva una
mayor funcionalidad en manos del programador, y en la posibilidad de mejorar en
gran médida la
apariencia cosmética de las interfaces gráficas de usuario.
Elaboró: Oscarsin necesidad dedepender de la instalación local del laboratorio ni de
tener que introducir la configuración
personal al comienzo de cada clase.
Guía básica de MacOS
Dado que durante todo el máster trabajaremos sobre el sistema MacOS, vamos a
repasar
los fundamentos básicos del uso de este sistema operativo.
Barra de menú
En MacOS la barra de menú siempre está fija en la parte superior de la pantalla, a
diferencia de Windows que incorpora dicha barra en cada ventana.
El primer elemento de la barra es el icono de la "manzana", pulsando sobre el cual
desplegaremos un menú con opciones importantes como las siguientes:
Preferencias del Sistema ...
Inicio del sistema desde un disco
Forzar salida ...

externo en
Mac
Con el máster se proporciona un disco externo con el sistema MacOS Yosemite con
todo el
software que utilizaremos durante el curso preinstalado.
Se trata de discos de arranque externos, que sólo podrán ser utilizados desde
ordenadores Mac. Para iniciar el sistema desde estos discos deberemos seguir los
siguientes pasos:
1. Conectar el disco externo a un puerto USB
2. Encender el ordenador y mantener pulsada la tecla alt
3. Cuando aparezca la pantalla de selección de disco de arranque, seleccionar el
disco
Master Móviles
Es importante destacar que los discos están preparados para funcionar en los
ordenadores
iMac del laboratorio. Puede que no funcionen en todos los ordenadores
Mac.Juntando todo hasta aquí Reiniciar ...
Apagar equipo ...
Con Preferencias del Sistema ... abriremos el panel que nos da acceso a todos los
elementos de configuración del sistema.
Guía de Laboratorio
4
Si en algún momento alguna aplicación queda bloqueada, podemos matarla con
Forzar
salida ....
Uso del ratón
En MacOS es habitual tener un único botón del ratón, teniéndose que pulsar la
combinación
ctrl+click para obtener el efecto del click secundario.
Si estamos acostumbrados al funcionamiento del ratón en Windows o Linux podemos
configurar el sistema de forma similar. Para hacer esto entraremos en Preferencias
del
sistema ..., y dentro de este panel en Ratón. Aquí podremos especificar que pulsando
sobre
el lado derecho del ratón se produzca el efecto de click secundario.
Acceso a ficheros
Podemos navegar por el sistema de ficheros mediante la aplicación Finder.
Bueno, ahora vamos a reunir las piezas que tenemos hasta ahora agregando estos métodos a nuestra clase
Ventana8 para ver cómo queda la ventana completa:super.handleEvent se encarga de otros eventos
dirigidos al panel, como la entrada de datos por teclado al
campo de texto por ejemplo.En caso de alguna acción sobre uno de los botones, el método setText (de la
clase TextField) pone en el
campo de texto elDia el valor del día actual o el siguiente.
Notar que sólo hemos considerado que haya algún evento y no un tipo de evento en particular; en realidad el
método va a actuar por ejemplo tanto al presionar el mouse sobre el botón como al soltarlo. Pero esto no nos
molesta.public boolean handleEvent (Event e) {
if (e.target == hoy)
elDia.setText(GetHoy());
if (e.target == diasiguiente)
elDia.setText(GetManana());
return super.handleEvent(e);
}El método getDescription es público y se usa para acceder a la fecha que se ha ingresado desde las demás
clases; simplemente devuelve el contenido del campo elDia, de clase TextField.
Aquí hemos desarrollado también el método handleEvent:Otra manera sería armar un array con los días de
cada mes, corregir los días de febrero para los años
bisiestos, y comparar contra este array en lugar de usar un switch. La idea siempre es la misma: devolver un
String con la fecha del día siguiente.
Notar algo interesante: como estas clases se cargan y ejecutan en la máquina cliente, la fecha que aparece es
la del cliente y no la del servidor (que puede ser diferente depende la hora y el lugar del mundo en que estén
ambas máquinas).El constructor crea un panel con cuatro campos en forma de grilla vertical, donde mostrará
el texto "Día
salida: ", el campo de entrada de texto elDia y los botones hoy y diasiguiente.
El método privado getHoy usa los métodos getDate, getMonth y getYear de la clase date para armar un
String con la fecha actual. El método privado getManana hace lo mismo para leer la fecha actual, y le suma
1 al día para tener el día siguiente. El switch siguiente verifica que si pasó de fin de mes tome el primer día y
el mes siguiente (o el primer día del año siguiente si es en diciembre). Notar que no se consideraron los años
bisiestos en febrero para no complicar el método, pero no es difícil de corregir.
Este es un poco más largo pero no más complejo. Vamos por parte:
DiaPartida() {
setLayout (new GridLayout (4,1));
elDia = new TextField();
elDia.setText(GetHoy());
hoy = new Button ("Hoy");
diasiguiente = new Button ("Mañana");
add (new Label ("Día salida: "));
add (elDia);
add (hoy);
add (diasiguiente);
}
case (4):
case (6):
case (9):
case (11): if (dia>30) {
dia = 1;
mes++;
}
break;
default: if (dia>28) { // ojo, hay que corregir para bisiestos!
dia = 1;
mes++;
}
}
return dia+"/"+mes+"/"+ano;
}
public String getDescription() {
return elDia.getText();
}
public boolean handleEvent (Event e) {
if (e.target == hoy)
elDia.setText(GetHoy());
if (e.target == diasiguiente)
elDia.setText(GetManana());
return super.
listaPueblos.addItem("Buenos Aires");
listaPueblos.addItem("La Plata");
listaPueblos.addItem("Azul");
listaPueblos.addItem("Rosario");
listaPueblos.addItem("Cordoba");
listaPueblos.addItem("Bahía Blanca");
add("South", listaPueblos);
}
public String getDescription() {
return listaPueblos.getSelectedItem();
}
}
No hay mucho para analizar aquí, creo. La variable listaPueblos es privada, pero puede consultarse cuál es la
ciudad seleccionada mediante getDescription (que es public). Este método llama al método
getSelectedItem de la lista, que devuelve el texto seleccionado.
En el constructor, armamos el texto del título como un StringBuffer. Los objetos StringBuffer son similares
a
los de clase String pero pueden ser modificados. En cambio los objetos String, una vez creados, no pueden
ser modificados directamente: sus métodos (concat, toLowerCase, etc.) simplemente crean un nuevo String
con el nuevo valor.
Esto lo hicimos para introducir esta nueva clase; por supuesto hubiera sido más fácil poner, como pueden
comprobar, con el mismo resultado:
String tit = "Seleccione ciudad de "+salidaOllegada+": ";
add("North", new Label(tit));
Por otra parte, creamos el objeto listaPueblos como new List(4, false), que indica que la lista va a tener 4
renglones y sólo se puede seleccionar un ítem por vez. Agregamos luego 6 ítems mediante addItem y la
agregamos al panel.
Ahora ya podemos agregar las listas a nuestra ventana y poner un par de variables para guardarlas:
class Ventana8 extends Frame { // hija de Frame
SelecPueblo cs; // ciudad de salida
SelecPueblo cl; // ciudad de llegada
button ok; // también el botón de compra de pasajes
boolean enApplet; // y otra para indicar si es un applet o no
Ventana8 (String titulo, boolean enApplet) { // un constructor
super(titulo); // llama al de Frame
this.enApplet = enApplet; // guardamos esto
cs = new SelecPueblo("SALIDA"); // CIUDAD DE SALIDA
add ("Center", cs);
cl = new SelecPueblo("LLEGADA"); // CIUDAD DE LLEGADA
add ("East", cl);
ok = new Button("Viaje: de ? a ? el ?/?/?");
add("South",ok);
pack(); // dimensionamos la ventana
show(); // y la mostramos!
}
...........................
Ya pueden ir probando cómo queda, aunque por ahora mucha funcionalidad no tenemos...
http://www.librosgratis.org
Página 38
Agregando fechas
Otro panel más nos servirá para seleccionar o entrar la fecha:
import java.util.*;
import java.awt.*;
class DiaPartida extends Panel {
private TextField elDia;
private Button hoy;
private Button diasiguiente;
DiaPartida() {
setLayout (new GridLayout (4,1));
elDia = new TextField();
elDia.setText(GetHoy());
hoy = new Button ("Hoy");
diasiguiente = new Button ("Mañana");
add (new Label ("Día salida: "));
add (elDia);
add (hoy);
add (diasiguiente);
}
private String GetHoy() {
Date d = new Date();
int dia = d.getDate();
int mes = d.getMonth();
int ano = d.getYear();
return dia+"/"+mes+"/"+ano;
}
private String GetManana() {
Date d = new Date();
int dia = d.getDate();
int mes = d.getMonth();
int ano = d.getYear();
dia = dia++;
switch (mes) {
case (1):
case (3):
case (5):
case (7):
case (8):
case (10): if (dia>31) {
dia = 1;
mes++;
}
break;
case (12): if (dia>31) {
dia = 1;
mes = 1;
ano++;

También podría gustarte