Está en la página 1de 6

6.

- Interfaz grfica y applets

1.- Introduccin
Applet: aplicacin diseada para ejecutarse en el contexto de ejecucin de un navegador. El Applet se responsabiliza de la gestin de la parte del documento web que el navegador le asigna.

1. Introduccin. 2. Grficos. 3. Componentes de la interfaz de usuario. 4. Contenedores y gestores de ubicacin. 5. Programacin dirigida por eventos.

Se abandona la entrada/salida orientada a consola: interfaz grfica. Desde el punto de vista del programador, los programas diseados con una interfaz grfica presentan cambios importantes respecto a los programas orientados a consola: Se rompe la nocin de secuencialidad: programacin dirigida por eventos. Se necesita un conjunto de primitivas grficas: Graphics. Se requieren bibliotecas que implementen los componentes de la interfaz (botones, mens, reas de texto, ): AWT, Swing.
1 2

1.- Introduccin
Todo Applet se implementa como una extensin de la clase java.applet.Applet si se trabaja con AWT o de javax.swing.JApplet si se trabaja con Swing. La respuesta de un Applet ante los eventos de usuario, por defecto, es no hacer nada. La tarea del programador consiste en extender la clase Applet o JApplet e implementar la respuesta a los distintos eventos que puedan producirse.
MENSAJE init

1.- Introduccin
Ciclo de vida de un Applet
EVENTO DEL NAVEGADOR Carga documento HTML con marca <APPLET> y la clase principal Tras init y cada vez que se vuelva a visitar el applet con el navegador. Cada vez que se abandona un applet Termina el applet (se descarta el documento o se abandona el navegador) Cada vez que se detecta la necesidad de pintar el rea de pantalla del applet COMPORTAMIENTO Cdigo de inicializacin (inicializar campos, aadir componentes de interaccin, etc.) Iniciar animaciones y otras tareas. Suspender animaciones y otras tareas Limpieza de los recursos del sistema

start stop destroy

paint

Redibujar lo necesario en el rea de interaccin

Para que nuestro applet responda a los eventos del navegador, ser necesario sobreescribir el mtodo correspondiente (init, start, stop, destroy, paint).
3 4

1.- Introduccin
Ejemplo HolaMundo.java
import java.awt.Graphics; import javax.swing.JApplet; public class HolaMundo extends JApplet { public void paint (Graphics g) { g.drawString("Hola", 20, 20); } }

2.- Grficos
El mtodo paint recibe un objeto de tipo Graphics que representa el contexto grfico asignado al applet. La clase Graphics dispone de mtodos con primitivas grficas:
Accin Dibujar lnea Dibujar rectngulo Dibujar rectngulo relleno Borrar rectngulo Mtodo drawLine(x1, y1, x2, y2) drawRect(x, y, ancho, alto) fillRect(x, y, ancho, alto) clearRect(x, y, ancho, alto) drawOval(x, y, ancho, alto) fillOval(x, y, ancho, alto) drawArc(x, y, ancho, alto, angIni, angArc) fillArc(x, y, ancho, alto, angIni, angArc) drawPolygon(p)
6

Ejemplo HolaMundo.html
<HTML> <BODY> <APPLET CODE="HolaMundo.class" WIDTH="100" HEIGHT="50"></APPLET> </BODY> </HTML>
5

Dibujar valo Dibujar valo relleno Dibujar arco Dibujar arco relleno Dibujar polgono

3.- Componentes de la interfaz de usuario


Tanto Swing como AWT proporcionan distintos componentes de interfaz que permiten la interaccin entre usuario y applet.
Nombre Etiqueta Campo de texto rea de texto Lista desplegable Lista Casilla de seleccin Grupo de seleccin Botn Deslizador Clase (swing) JLabel JTextField JTextArea JComboBox JList JCheckBox, JRadioButton ButtonGroup JButton JSlider getValue
7

3.- Componentes de la interfaz de usuario


Para aadir componentes a un applet: Sobreescribir mtodo init() Crear componente: MiComponente c=new MiComponente() Aadir componente al applet: add(c)

Mtodos principales

setText, getText setText, getText getSelectedIndex, getSelectedItem getSelectedIndex, getSelectedValue isSelected, setSelected add, getSelection

import java.awt.*; import javax.swing.*; public class AppletConBotones extends JApplet { public void init () { JButton b1 = new JButton(Aceptar); JButton b2 = new JButton(Cancelar); add(b1); add(b2); } }
8

4.- Contenedores y gestores de ubicacin


Los contenedores son objetos que pueden albergar componentes. Un Applet es un contenedor, pero hay otros: JPanel, JWindow, JDialog, El contenedor se encargan de distribuir los componentes, en funcin del Layout especificado. Los contenedores son, a su vez, componentes, por lo que un contenedor puede albergar otros contenedores. Implementan el mtodo add para aadir componentes: contenedor.add(componente) Tambin es posible dibujar grficos en un contenedor, de modo similar a como se dibujan en un applet. En este caso debe sobreescribirse el mtodo paintComponent.

4.- Contenedores y gestores de ubicacin


Los gestores de ubicacin (layouts) determinan el modo en que los componentes se distribuyen en un contenedor. Cada contenedor tiene asociado un gestor de ubicacin. Es posible establecer el gestor de ubicacin mediante el mtodo setLayout. contenedor.setLayout(gestor_ubicacion) Java dispone de distintos gestores de ubicacin: FlowLayout, BorderLayout, GridLayout,

10

4.- Contenedores y gestores de ubicacin


FlowLayout
Ubica los componentes de izquierda a derecha. Cuando no queda espacio pasa a la siguiente lnea.
import java.awt.*; import javax.swing.*; public class Flow extends JApplet { public void init () { setLayout( new FlowLayout() ); add(new JButton(Ok); add( new JButton(Cancel); } }

4.- Contenedores y gestores de ubicacin


BorderLayout
Ubica los componentes en cinco posibles lugares: Norte, Sur, Este, Oeste y Centro. No es necesario cubrir todas las ubicaciones. Los componentes se redimensionan para ocupar todo el espacio del panel.
public class Border extends JApplet { public void init () { setLayout( new BorderLayout() ); add("North", new Label("Por ejemplo una cabecera")); add("South", new TextField("aqui escribimos un mensaje")); add("West", new Button("SALIR")); add("East", new Button("AYUDA")); add("Center", new TextArea("ejemplo de \n texto en + \nla parte central")); } }
11 12

4.- Contenedores y gestores de ubicacin


BorderLayout

4.- Contenedores y gestores de ubicacin


GridLayout
Ubica los componentes en una matriz de filas y columnas. Se rellena por filas.
import java.awt.*; import javax.swing.*; public class Grid extends JApplet { public void init () { setLayout(new GridLayout(3,2)); for (int i=1; i<7; i++) add(new Button(""+i)); } }

13

14

4.- Contenedores y gestores de ubicacin


Es posible combinar distintos gestores de ubicacin mediante el uso de contenedores.
public class LayoutsCombinados extends JApplet public void init () { JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); setLayout(new BorderLayout()); // p1.setLayout( new GridLayout(3,3) ); // p2.setLayout( new FlowLayout() ); //
// Aado componentes a p1

5.- Programacin dirigida por eventos


El navegador puede generar eventos: init, destroy, start, stop, paint La respuesta a estos eventos consiste en ejecutar en el applet el mtodo correspondiente: public void init() { . . .} public paint(Graphics g) { . . . } etc. Es responsabilidad del programador sobreescribir estos mtodos para llevar a cabo la accin deseada. Los componentes y contenedores de la interfaz de usuario tambin generan eventos. En este caso el mecanismo es algo difertente.
15 16

Layout del applet Layout del panel 1 Layout del panel 2

for (int i=1; i<9; i++) p1.add(new Button(""+i));


// Aado componentes a p2

p2.add( new Button(OK) ); p2.add( new Button(Cancel));


// Aado ms componentes y paneles al applet

add(North, new JTextField()); add(Center, p1); add(South, p2); } }

Principales eventos generados por componentes

5.- Programacin dirigida por eventos


Arquitectura Fuente-Oyente

Componente
JButton JTextField

Eventos
ActionEvent ActionEvent TextEvent

Accin
Botn pulsado El texto ha terminado de ser editado. El texto ha cambiado Item seleccionado/deselec. Item seleccionado/deselec. Item seleccionado/deselec. Item seleccionado/deselec. Desplazamiento del deslizador El componente ha ganado/perdido el foco Pulsacin de tecla Movimiento, arrastre o pulsacin de ratn 18

Evento Fuente
Generador de eventos

Oyente
Manejador de eventos

JList JComboBox JCheckBox

ItemEvent ItemEvent ItemEvent ActionEvent ChangeEvent FocusEvent KeyEvent MouseEvent

Los componentes y contenedores de la interfaz de usuario (botones, listas, paneles, ) son generadores de eventos. Si la fuente no tiene un oyente asociado, el evento se pierde. El programador debe preocuparse de crear el manejador correspondiente y registrarlo con la fuente. fuente.addXListener(oyente);
17

JRadioButton JSlider JComponent

Principales eventos e interfaces de oyentes

5.- Programacin dirigida por eventos


1. Crear un oyente (listener) que sea capaz de manejar los eventos producidos por una fuente determinada. 2. Asociar (registrar) el oyente a la fuente: fuente.addXListener(oyente); donde X puede ser: Action, Item, Text, Mouse, Por ejemplo: miBoton.addActionListener(oyente1); miLista.addItemListener(oyente2); miPanel.addMouseListener(oyente3); Cuando la fuente genera un evento, se ejecuta cierto mtodo en el oyente asociado. Para asegurarnos que el oyente es capaz de atender los eventos, deber implementar cierta interface que defina los mtodos requeridos.
19

Tipo de evento Interfaz


ActionEvent TextEvent ItemEvent ChangeEvent FocusEvent KeyEvent ActionListener TextListener ItemListener ChangeListener FocusListener KeyListener

Mtodos
actionPerformed textValueChanged itemStateChanged stateChanged. focusGained focusLost keyPressed keyReleased keyTyped mouseClicked mouseEntered mouseExited mousePressed mouseReleased mouseDragged mouseMoved
20

MouseEvent

MouseListener

MouseMotionListener

5.- Programacin dirigida por eventos


En la mayora de ocasiones es suficiente con saber que se ha generado cierto evento. Si necesito informacin extra, posiblemente el propio objeto de tipo Event sepa drmela. Por ejemplo: En qu coordenadas se encontraba el ratn en el momento de producirse el evento? public void mouseClicked( MouseEvent e ) { int x = e.getX(); int y = e.getY(); He registrado un mismo oyente con distintas fuentes. Cuando se produce el evento, cmo se qu fuente lo gener? public void actionPerformed( ActionEvent e ) { if( e.getSource() == boton1 )

5.- Programacin dirigida por eventos

Ejemplos:
http://users.dsic.upv.es/~rllobet/pa/03_Programas/Tema6

Deber consultarse el API de Java para conocer qu tipo de informacin puede proporcionarme cada tipo de evento.

21

22

También podría gustarte