1. Programación
de Sistemas
de Tiempo Real
Java: repaso
http://arcos.inf.uc3m.es/~ii_pstr
AWT
• Introducción.
• Ejemplo.
• Estructura: visión estática
– partes + composición + ejemplo.
• Interacción: visión dinámica
– partes + composición + ejemplo.
• Canvas
1
2. AWT
• AWT = Abstract Windows Toolkit
Conjunto de clases de Java orientado a la
construcción de interfaces de usuario simples.
• AWT => java.awt.*
Paquete de Java que contiene las distintas
clases.
Ejemplo
import java. awt.*;
public class AWT2 {
public static void main(String args[]) {
Frame f1 = new Frame("AWT2");
Button b1 = new Button("ok");
f1.add("Center", b1);
f1.setSize(100,100);
f1.show();
}
}
2
3. Estructura: partes
• Elementos(component):
Elementos visuales (o no) como botones, etiquetas, listas,
menús, etc.
• Contenedores (container):
Son también elementos, pero representan un espacio para
posicionar otros elementos, incluidos otros contenedores.
• Ordenación (Layout):
Disposición que adopta los elementos sobre su contenedor.
• Utilidades:
Clases de apoyo para diferentes elementos.
Partes: Elementos
• Checkbox: una caja a seleccionar.
• Label: una etiqueta de texto.
• List: una lista de objetos a seleccionar.
• Scrollbar: una barra para desplazarse por un
documento.
• TextField: un campo de edición de texto de una
línea.
• TextArea: como un TextField pero para múltiples
líneas.
• Canvas: espacio para dibujar gráficos.
• ...
3
4. Partes: Contenedores
• panel: un contenedor básico.
– applet: ventana empotrada.
• windows: ventana sin título ni sin bordes.
– dialog: cuadro de diálogo.
• fileDialog: cuadro de diálogo para
seleccionar fichero.
– frame: ventana con título y bordes .
Partes: Ordenación
• BorderLayout:
Dispuestos de acuerdo a puntos orientativos.
• GridLayout:
Dispuestos en una maya.
• GridBagLayout :
En una maya donde los elementos pueden ser de diferentes
tamaños.
• CardLayout:
Disposición basada en tarjetas que pueden alternarse.
• FlowLayout:
Disposición que ordena los componentes de izquierda a
derecha.
4
5. Partes: Utilidades
• Color
• Cursor
• Dimension
• Font
• Graphics
• ...
Estructura: composición
1. Crear el contenedor de trabajo raíz:
Frame f1 = new Frame();
2. Crear los elementos del contenedor:
Button f1_b1 = new Button();
Panel f1_p1 = new Panel();
3. Añadir los elementos:
f1.add(f1_b1);
f1.add(f1_p1);
4. Si hay subcontenedores, repetir los pasos
2, 3 y 4 con cada uno de estos.
5
6. Estructura: Ejemplo
import java.awt.*;
public class AWT3 {
public static void main(String args[]) {
Frame f1 = new Frame("AWT1");
f1.setLayout(new GridLayout(3,2));
f1.add(new Canvas());
f1.add(new Button("1"));
f1.add(new Button("2"));
f1.add(new Button("3"));
f1.add(new Button("4"));
f1.add(new Button("5"));
f1.setSize(150,150);
f1.show();
}
}
Interacción: partes
• Eventos (Event):
Suceso asíncrono generado por el usuario (o el
sistema) al interaccionar con algún componente.
• Fuente de eventos:
Componentes que generan eventos.
• Destino de los eventos:
Objetos que reciben y procesan los eventos.
– Implementar Listeners
– Extender Adapters
6
7. partes: destinatarios
java.awt.event.*
• Escuchadores (Listeners):
Interfaces que describe como ser avisados cuando
se produce una clase de eventos.
• Adaptadores (Adapters):
Clases abstractas que implementan los
escuchadores con las acciones por defecto.
Interacción: composición
Evento F Escuchador F
Adaptador F
Fuente F
... ...
...
registrarse extender
MyAdaptador
...
7
8. Interacción: composición (2)
•¿Qué eventos puede generar?
•¿Qué escuchador/adaptador los procesa?
• Conocer la fuente de los eventos:
Button b1 = new Button();
• Crear el escuchador/adaptador:
public class MyListener implements ActionListener {
… // gestión de eventos
}
• Añadir el escuchador/adaptador:
b1.addActionListener( MyListener);
Interacción: Ejemplo 1
import java.awt.*; import java.awt.event.*;
public class AWT4 {
static class MyAdapter extends WindowAdapter {
public void windowClosing(WindowEvent e) { System.exit(0); }
}
public static void main(String args[]) {
Frame f1 = new Frame("AWT4");
f1.setLayout(new GridLayout(2,1));
f1.add(new Canvas());
f1.add(new Button("ok"));
f1.setSize(100,100);
f1.show();
f1.addWindowListener(new MyAdapter());
}
}
8
9. Interacción: Ejemplo 2
public static void main (String args[]) {
Canvas c1 = new Canvas() ;
c1.setBackground(Color.blue);
Button b1 = new Button("ok");
b1.addActionListener(new MyBtnEvn(c1));
Frame f = new Frame("AWT5") ;
f.addWindowListener(new MyWinEvn());
f.setLayout(new GridLayout(2,1));
f.add(c1); f.add(b1); f.setSize(100,100);
f.pack(); f.show();
}
} // public class AWT5
Interacción: Ejemplo 2
import java.awt.*; import java.awt.event.*; import java.awt.Color.*;
public class AWT5 {
static public class MyWinEvn extends WindowAdapter {
public void windowClosing(WindowEvent e) { System.exit(0); }
}
static public class MyBtnEvn implements ActionListener {
Canvas c ;
public MyBtnEvn ( Canvas canvas ) { c = canvas; }
public void actionPerformed ( ActionEvent e ) {
String ac = e.getActionCommand();
if (“ok”.equals(ac)) {
Color color = c.getBackground();
color = (color == Color.blue) ? Color.red : Color.blue ;
c.setBackground(color);
}
}
}
9
10. import java.lang.*; Canvas
import java.awt.*;
public class AWT6 {
static public class MyCanvas extends Canvas {.......}
static public void main ( String args[] ) {
Frame f = new Frame();
Canvas c1 = new MyCanvas();
f.add("Center",c1);f.setSize(300,300); f.show();
}
} public void paint(Graphics g) {
g.drawString("MyCanvas",50,200);
for (int i=0; i<150; i++) {
g.setColor(java.awt.Color.red);
g.drawLine(0+i, 0, 150-i, 150);
g.drawRect(150, 0, i, 150);
try { Thread.sleep(2); } catch (Exception e) {}
}
}
10