9. AWT (Abstract Window Toolkit)



Documentos relacionados
Componentes Swing. Las clases cuyo nombre comienza por J forman parte de Swing. Todas las demás están incluidas en AWT (Abstract Window Toolkit)

Interfaces gráficas de usuario

Aplicaciones gráficas en Java Librería Swing

Tema 6. Interfaces gráficas de usuario (Parte 1)

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Tema 7. Construcción de Applets en Java

Tipos de programas en Java. Programación basada en eventos. Programación basada en eventos. Creación de una interfaz gráfico de usuario

Interfaces gráficas. Jose Jesus García Rueda

2.1 Elementos gráficos en Java.

Programación Java Curso C Draw

Manejo de eventos AWT

Ejemplo de la Clase Persona

Interfaces gráficas con Swing

Indice. Swing: conceptos. Generalidades. Swing & AWT: diferencias. Interfaz Gráfica de Usuario (GUI)

Universidad Carlos III de Madrid Departamento de Ingeniería Telemática. Swing

Creación de Applets Simples

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

Uso de Java Swing. Noviembre de 2013

Applets y Aplicaciones

Programación de Interfaces Gráficas en Java. Agustín J. González ELO329

INTERFAZ GRÁFICO DE USUARIO

Interfases gráficas. Programación Orientada a Objetos.

2_trabajar con calc I

Estructura de las Aplicaciones Orientadas a Objetos El patrón Modelo-Vista-Controlador (MVC)

5.- Crear páginas web con Nvu

Operación Microsoft Access 97

Programación Orientada a Objetos con Java

PROGRAMACIÓN WEB I SEMANA 7 ESTE DOCUMENTO CONTIENE LA SEMANA 7

Programación interactiva. Oscar Bedoya

3_formato I. NOTA: al pegar unas celdas sobre otras no vacías, se borrará el contenido de estas últimas.

ELABORACIÓN DE TABLEROS DINÁMICOS DE COMUNICACIÓN CON EL PROGRAMA EDITOR TICO

TEMA 2. CARACTERÍSTICAS DEL LENGUAJE VISUAL BASIC

JAVA: Applets. Diseño de aplicaciones web.

Programación Avanzada Ingeniería Civil en Computación

Operación de Microsoft Excel

Guía de Aprendizaje No. 1

d) Mencione dos diferencias y dos semejanzas entre clases abstractas e interfaces.

Microsoft Access proporciona dos métodos para crear una Base de datos.

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

Práctica 4: Java Remote Method Invocation (RMI)

MICROSOFT WORD 2007 AVANZADO. Unidad Didáctica Nº 1

INTERFAZ GRÁFICO DE USUARIO APLICACIONES DE EJEMPLO

Interfaces de usuario [Interfaces de usuario con Java]

Formularios. Formularios Diapositiva 1

1.- MENU DE CONTROL O MENU VENTANA: permite cerrar la ventana cambiarla de tamaño y pasar a otra ventana

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Componentes Swing look and feel pluggable ( mecanismo de double buffering, transparentes.

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

Pontificia Universidad Católica del Ecuador

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:

POWER POINT. Iniciar PowerPoint

A continuación se describen cuáles son los elementos principales de las tablas, cómo crear una y cómo modificarla.

TEMA 2 WINDOWS XP Lección 4 BLOC DE NOTAS

QUERCUS PRESUPUESTOS MANUAL DEL USO

Guadalinex Básico Impress

Centro de Profesorado Luisa Revuelta (Córdoba) TEMA 6 TABLAS Y GRÁFICOS EN IMPRESS

MANUAL DE LA APLICACIÓN DE ENVÍO DE SMS

Para crear una lista como la anterior, primero escribe la información, y después selecciona el texto y aplícale el formato de viñetas.

Trabajando con GUI en Java Componente java.swing

WINDOWS. Iniciando Windows. El mouse

Paso 1 de 13. Paso 2 de 13. Guía de aprendizaje de Flash CS5 Tutorial 3. Creación de un logotipo textual.

Guía N 1: Fundamentos básicos(i)

Java Applets como ejemplo de Frameworks. Agustín J. González ELO-329

Aplicaciones de Escritorio

Práctica 3: Introducción a Word

Race Manager by Master Timing Guía del usuario GUIA RACE MANAGER. Eventronic, SL

F O R M U L A R I O S FORMULARIOS

GENERACIÓN DE TRANSFERENCIAS

ESTÁNDAR DESEMPEÑO BÁSICO Recopila información, la organiza y la procesa de forma adecuada, utilizando herramientas tecnológicas.

Definiciones. Tema 21_Módulos Menú 1

2.2.- Paradigmas de la POO

Manual de NVU Capítulo 5: Las hojas de estilo

1. El entorno de desarrollo Eclipse

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

A25. Informática aplicada a la gestión Curso 2005/2006 Word Tema 3. Formato de sección.

Creación de un Gráfico con OpenOffice.org Calc Presentación de los Datos Asistente para Gráficos

Contenido. cursos.cl / Teléfono:

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa Configuración Internet Explorer para ActiveX...

INTERFAZ GRÁFICO DE USUARIO

Desarrollo de Servicios Web con JBuilder

vbnmqwertyuiopasdfghjklzxcvbnmrty uiopasdfghjklzxcvbnmqwertyuiopasdf ghjklzxcvbnmqwertyuiopasdfghjklzxc

MÓDULO 2: TRATAMIENTO DE DATOS CON HOJA DE CÁLCULO. Tema 1: Gestión de listas de datos y tablas dinámicas. Leire Aldaz, Begoña Eguía y Leire Urcola

Dinos qué tal lo estamos haciendo

Federico Peinado

CURSO: Programación de Aplicaciones en Lenguaje JAVA

JAVA 8 Los fundamentos del lenguaje Java (con ejercicios prácticos corregidos)

Edición de Ofertas Excel Manual de Usuario

Diseño de formularios

CAPÍTULO V. APLICACIÓN WEB PARA EL CONOCIMIENTO Y CONVERSIÓN DE LAS UNIDADES DE MEDIDA

Capítulo 9. Archivos de sintaxis

Páginas multimedia Dashboard

Construcción de GUI en Java. Elementos de Swing. AWT v SWING. Contenedores superiores I. Componentes y contenedores

Interfaces gráficas en Java GUIs Graphical User Interface

Manual hosting acens

Práctica sobre compartición de instancias remotas.

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes:

Transcripción:

9. AWT (Abstract Window Toolkit) Índice 9.0 Introducción 9.1 Contenedores 9.2 Layouts 9.3 Componentes 9.4 Eventos 9.5 Swing 9.6 HowTo Swing 9.7 Ejemplo 9.8 Applets David Contreras Bárcena 185 9. AWT (Abstract Window Toolkit) AWT es el acrónimo del X Window Toolkit para Java. Es una biblioteca de clases Java para el desarrollo de Interfaces de Usuario Gráficas. La versión del AWT que Sun proporcionó con el JDK se desarrolló en sólo dos meses y es la parte más débil de todo lo que representa Java como lenguaje. Por este motivo se ha implementado el entorno gráfico llamado Swing, desarrollado conjuntamente con Netscape. Un entorno muy potente con todas las mejoras visuales que hoy en día se ofrecen. David Contreras Bárcena 186

9. AWT (Abstract Window Toolkit) Proporciona al programador todos los elementos necesarios para desarrollar aplicaciones gráficas, como son ventanas, botones, etc y un sistema de eventos para gestionar las acciones producidas por el usuario con cualquier elemento de la aplicación. David Contreras Bárcena 187 9. AWT java.awt Object Component Cursor Event FlowLayout Button Canvas List Container Label TextComponent JComponent Panel Window ScrollPane TextField TextArea Dialog Frame JWindow FileDialog JDialog JFrame javax.swing David Contreras Bárcena 188

9. AWT Estructura de una aplicación GUI Objetos que debe contener toda aplicación GUI: 9.1 Contenedores (Containers): Elementos que se emplean para colocar componentes en la ventana. La forma en la que se distribuyan estos objetos en el container, dependerá del Layout que se aplique al mismo. Un container que no posea un layout, sólo podrá colocar un componente sobre sí mismo. Tipos de container: Ventanas: Elemento donde se muestra cualquier contenido visual. Paneles: Una ventana podrá contener tantos paneles como le permita el layout. Un panel, a su vez, deberá aplicar un layout para agregar componentes. David Contreras Bárcena 189 9. AWT Estructura de una aplicación GUI 9.2 Layout Manager: Indican la forma de organizar los componentes dentro del container. Determinan el tamaño y posición de los componentes. Pasos a dar: 1. Crear el container. 2. Aplicar el tipo de Layout Manager. 3. Agregar los componentes al container. Tipos de Layout Manager más importantes (todos elllos heredan del interface LayoutManager): FlowLayout BorderLayout GridLayout. BoxLayout CardLayout David Contreras Bárcena 190

9. AWT Estructura de una aplicación GUI 9.3 Componentes (Components): Representan cada uno de los controles que aparecen en toda ventana (botones, cajas de texto, menús,...) David Contreras Bárcena 191 9.1 Contenedores - Ventanas La clase Window permite crear ventanas cualquier tipo. Subclases: Frame: es la típica ventana de aplicación. Dialog: es la ventana que utilizan los cuadros de diálogo. Window: es una ventana sin marco ni barra de título. Utlizada para las ventanas de presentación. Métodos: void setvisible (boolean visible) void pack() void setsize (int width, int height) void settitle (String title) void setmenubar (MenuBar mb) void setresizable (boolean resizable) void setstate (int state) David Contreras Bárcena 192

9.1 Contenedores Cuadros de Diálogo Son ventanas transitorias para mostrar advertencias, errores, información especifica, etc. No tienen barra de menús. Pueden ser de dos tipos: JDialog: proporciona un dialogo general. JFileChooser: dialogo especifico para escoger archivos para guardar o abrir. JOptionPane: manera fácil y rápida de generar diálogo personalizados. David Contreras Bárcena 193 9.1 Contenedores Estructura de una aplicación GUI Ejemplo de creación de una ventana: public class MiFrame extends Frame Button boton; public static void main(string s[]) new MiFrame(); public MiFrame() boton = new Button("Aceptar"); this.setlayout(new FlowLayout()); this.add(boton); this.setsize(250,250); this.setvisible(true); David Contreras Bárcena 194

9.1 Contenedores Estructura de una aplicación GUI Ejemplos: COMPONENTE -> Button CONTAINER > Frame COMPONENTE -> Button DISTRIBUCION > FlowLayout CONTAINER > Frame COMPONENTE -> Button DISTRIBUCION > FlowLayout CONTAINER > Panel en la zona Sur DISTRIBUCION > BorderLayout CONTAINER > Frame David Contreras Bárcena 195 9.1 Contenedores Estructura de una aplicación GUI Ejemplos: public MiFrame() boton = new Button("Aceptar"); this.add(boton); this.setsize(250,250); this.setvisible(true); public MiFrame() boton = new JButton("Aceptar"); this.setlayout(new FlowLayout()); this.add(boton); this.setsize(250,250); this.setvisible(true); public MiFrame() boton = new JButton("Aceptar"); Panel panel= new Panel(new FlowLayout()); panel.add(boton); this.setlayout(new BorderLayout()); this.add(panel,borderlayout.south); this.setsize(250,250); this.setvisible(true); David Contreras Bárcena 196

9.1 Contenedores - Container Métodos importantes definidos en la clase Container: Component add(component comp) void setlayout(layoutmanager mgr) void remove(component comp) void remove(int index) void removeall() void dolayout() David Contreras Bárcena 197 9.2 LayoutManager FlowLayout (java.awt) Permite una distribución lineal de los componentes. Crea nuevas líneas cuando así lo exige el ancho del container. Components Container this.setlayout (new FlowLayout()); this.add(new Button( Aceptar )); this.add(...); this.add(...); this.add(...); this.add(...); David Contreras Bárcena 198

9.2 LayoutManager GridLayout (java.awt) Permite una distribución en regilla o tabla. Los componentes se situan en las celdas de forma secuencial de arriba abajo y de izquierda a derecha. No se puede direccionar la posición de los componentes sobre las celdas. El tamaño de las celdas es idéntico. Container Components this.setlayout(new GridLayout(2,3)); this.add(new Button( Aceptar )); this.add(...); this.add(...); this.add(...); David Contreras Bárcena 199 9.2 LayoutManager BorderLayout (java.awt) Proporciona cinco áreas para situar componentes. La ausencia de una de ellas produce la extensión horizontal o vertical de las contiguas. Container oeste norte centro sur este Components this.setlayout(new BorderLayout()); this.add(new Button( Aceptar ), BorderLayout.NORTH); this.add(..., BorderLayout.EAST); this.add(..., BorderLayout.WEST); this.add(..., BorderLayout.SOUTH); this.add(..., BorderLayout.CENTER); David Contreras Bárcena 200

9.2 LayoutManager CardLayout (java.awt) Permite alternar el contenido de un container entre varios paneles creados anteriormente. El cambio se puede producir en tiempo de ejecución. Cada panel deberá tener un identificador del tipo String. this.setlayout(new CardLayout()); Panel panela = new JPanel (); panela.add(...); Panel panelb = new JPanel (); panelb.add(...); this.add(panela, A ); this.add(panelb, B ); CardLayout cl = (CardLayout)this.getLayout(); cl.show(c, B"); David Contreras Bárcena 201 9.2 LayoutManager BoxLayout (javax.swing) Permite visualizar los componentes alineados vertical u horizontalmente. Container Components this.setlayout(new BoxLayout(this, BoxLayout.Y_AXIS)); Button boton1 = new Button( Aceptar"); boton1.setalignmentx(component.center_alignment); this.add(boton1); this.add(...); this.add(...); this.add(...); David Contreras Bárcena 202

9.3 Componentes (Component) Como superclase de todos los componentes java (AWT y Swing), esta clase generaliza el comportamiento de todos ellos. Todos los componentes AWT heredan de Component, mientras que los desarrollados en Swing lo hacen de JComponent. Component Button List Container Label JComponent David Contreras Bárcena 203 9.3 Componentes (Component) Métodos importantes definidos en la clase Component: void setenabled(boolean b) void setvisible(boolean b) void requestfocus() void setbounds(int x, int y, int width, int height) void setlocation(int x, int y) void setsize(int width, int height) void setcursor(cursor cursor) void setfont(font f) void setbackground(color c) void setforeground(color c) void setname(string name) void updateui() David Contreras Bárcena 204

9.3 Componentes (Component) Dado que las aplicaciones GUI desarrolladas hoy en día se basan en componentes Swing, se verá un ejemplo mínimo de componentes AWT. Algunos de estos componentes se siguen empleando aunque la gran mayoría han sido sustituidos por los nuevos desarrollados en Swing. Button: botones (JButton en Swing) Label: etiquetas (JLabel en Swing) TextField: campos de texto (JTextField en Swing) Canvas: lienzo para dibujar David Contreras Bárcena 205 9.3 Componentes - Button Button(): crea un botón vacio sin etiqueta Button(String): crea un botón con el string como etiqueta String getlabel(): devuelve la etiqueta del botón. void setlabel(string): pone como etiqueta el String del parámetro. David Contreras Bárcena 206

9.3 Componentes - Label Label(): Crea una etiqueta vacía con el texto alineado a la izquierda. Label(String): Crea una etiqueta con la cadena de texto dada, alineada a la izquierda. Label(String, int): Crea una etiqueta con la cadena de texto y la alineación dadas. La alineación disponible se almacena en variables de clase en Label; Label.RIGHT, Label.LEFT, Label.CENTER. String gettext(): Devuelve el texto de la etiqueta. void settext(string): Cambia el texto de la etiqueta. int getalignment(): Devuelve un entero que representa la alineación de la etiqueta:0 es Label.LEFT, 1 es Label.CENTER y 2 es Label.RIGHT. void setalignment(int): Cambia la alineación con la indicada.. David Contreras Bárcena 207 9.3 Componentes - TextField TextField(): Crea una caja de texto de 0 caracteres de amplitud. TextField(int): Crea un campo de texto vacío con la amplitud dada. TextField(String): Crea una caja de texto con la longitud de la cadena como amplitud, inicializado con la cadena dada. TextField (String,int): crea un campo de texto con la amplitud dada y la cadena dada. String gettext(): Devuelve el texto contenido en ese campo de texto. void settext(string): Coloca la cadena dada en el campo de texto. boolean iseditable(): Devuelve true o false basado en si el texto es editable o no. void seteditable(boolean): true (valor predeterminado) permite la edición del texto; false inmoviliza el texto. void setechocar(char): Pone el carácter dado en la entrada para ocultar texto. David Contreras Bárcena 208

9.3 Componentes - Canvas La clase Canvas permite representar elementos gráficos en pantalla. A través de su método paint(graphics g) se realizan todos los dibujos sobre el canvas. Es la ocurrencia de la clase Graphics la que permite realmente pintar elementos gráficos, el canvas es el soporte. Graphics2D hereda de Graphics, aportando una mayor funcionalidad. A través de un downcasting se puede utilizar este objeto más refinado. Graphics2D g2d = (Graphics2D) g ; David Contreras Bárcena 209 9.3 Componentes - Canvas Clase Graphics Métodos: drawstring(string, int, int) drawoval(int, int, int, int) drawrect(int, int, int, int) drawarc(int, int, int, int, int, int) drawimage(image, int, int, ImageObserver) drawline(int, int, int, int) drawpolygon(int[], int[], int) setcolor(color) setfont(font) David Contreras Bárcena 210

9.3 Componentes - Canvas Crear un área de dibujo: class MiCanvas extends Canvas implements MouseListener int x=50;int y=50;int radiox=30;int radioy=30; MiCanvas() this.setbackground(color.white); this.addmouselistener(this); this.setfont(new Font("Courier", Font.BOLD, 24)); this.setcursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); public void paint(graphics g) g.setcolor(color.red); g.drawstring("dibuja Circunferencias",50,20); g.setcolor(color.blue); g.drawline(50,40,340,40); g.setcolor(color.green); g.drawoval(x,y,radiox, radioy); David Contreras Bárcena 211 9.3 Componentes - Canvas public void mousepressed(mouseevent e) x=e.getx(); y=e.gety(); public void mousereleased(mouseevent e) radiox=(e.getx()-x); radioy=(e.gety()-y); this.repaint(); public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mouseclicked(mouseevent e) Posteriormente se podrá añadir una ocurrencia de la clase MiCanvas a cualquier Frame como un componente más. David Contreras Bárcena 212

9.4 Eventos java.awt.event Este paquete proporciona las clases e interfaces necesarias para gestionar los diferentes tipos de eventos de los componentes de AWT. Los eventos más importantes que una aplicación gráfica puede registrar son: Ratón Ratón (Drag & Drop) Acción Teclado Ventana Un evento del tipo acción se produce cuando se acciona algún control David Contreras Bárcena 213 9.4 Eventos java.awt.event Para que los componentes puedan recibir eventos deben registrarse previamente indicando qué clase va a gestionarlos. Esta tarea se realiza a través de la invocación del método addinterfaz(clase a gestionar el evento). Estas clases deben implementar los interfaces que se correspondan con cada tipo de evento e indicar las acciones a ejecutar en el caso que se active el evento. Los interfaces más utilizados son los siguientes: EventListener MouseListener MouseMotionListener ActionListener KeyLIstener WindowListener David Contreras Bárcena 214

9.4 Eventos java.awt.event Estos interfaces definen una serie de métodos que se corresponden con las diferentes acciones asociadas a un tipo de evento determinado. Por ejemplo, en un evento de teclado, el usuario puede presionar o soltar una tecla. Por lo tanto, cuando definamos la clase implementando el interface correspondiente, se tendrán que implementar todos los métodos definidos en él. Existen tres posibilidades para definir una clase que gestione los eventos de un componente: Crear una nueva clase. Utilizar la clase que define la ventana, como clase que además gestionará los eventos. Definir una clase anónima dentro de la clase de ventana. David Contreras Bárcena 215 9.4 Eventos java.awt.event class Ventana extends Frame implements ActionListener Se hereda del interface por parte de la Ventana public interface ActionListener public void actionperformed(actionevent e); Implementación de todos los métodos del interface boton.addactionlistener(this); El botón podrá recibir eventos del tipo acción y serán gestionados por una ocurrencia de la propia clase Aceptar David Contreras Bárcena 216

9.4 Eventos java.awt.event Si se desea obtener información del evento producido, se puede hacer a través del argumento de cada método invocado. Por ejemplo, si se desea saber la tecla que se ha pulsado sobre una caja de texto, deberemos operar de la siguiente manera: Aplicar un listener que gestione los eventos de tipo teclado sobre la caja de texto: cajatexto.addkeylistener(new A()); Implementar el interface KeyListener con todos sus métodos. Identificar el método asociado al evento pulsar una tecla. Trabajar con el objeto que recibe el método en el argumento, ya que es éste quién posee toda la información del evento producido. David Contreras Bárcena 217 9.4 Jerarquía de Interfaces de Eventos Clases que recogen información de los eventos: AWTEvent ActionEvent WindowEvent ComponentEvent InputEvent MouseEvent KeyEvent David Contreras Bárcena 218

9.4 Jerarquía de Interfaces de Eventos Clases que implementan los interfaces: java.awt.event.keyadapter (implements KeyListener) java.awt.event.mouseadapter (implements MouseListener) java.awt.event.mousemotionadapter (implements MouseMotionListener) java.awt.event.windowadapter (implements WindowListener) La ventaja que nos proporcionan las clases del tipo Adapter es que realizan la implementación de todos los métodos del interface. De esta manera, se puede heredar de ella, y sólo se redefinirá el método necesario. David Contreras Bárcena 219 9.4 Eventos de Ventana Definidos en el interface WindowListener: Métodos: public void windowclosed(windowevent event) public void windowdeiconified(windowevent event) public void windowiconified(windowevent event) public void windowactivated(windowevent event) public void windowdeactivated(windowevent event) public void windowopened(windowevent event) public void windowclosing(windowevent event) David Contreras Bárcena 220

9.4 Ejemplo eventos de ventana (I) Ejemplo de implementación del interface. class Ventana extends Frame implements WindowListener Ventana() ; this.addwindowlistener(this); //Hay que implementar todos los métodos public void windowclosed(windowevent event) public void windowdeiconified(windowevent event) public void windowiconified(windowevent event) public void windowactivated(windowevent event) public void windowdeactivated(windowevent event) public void windowopened(windowevent event) public void windowclosing(windowevent event) System.exit(0); David Contreras Bárcena 221 9.4 Ejemplo eventos de ventana (II) Ejemplo sin implementación del interface, a través de la utilización de una clase anónima interna. Implementación del interfaz a través de WindowAdapter. Únicamente se implementa el método deseado. De esta manera, no es nuestra clase la que gestiona el evento, sino la clase anónima creada de dentro de ella. class Ventana extends Frame Ventana() this.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) System.exit(0); ); David Contreras Bárcena 222

9.4 Eventos de Teclado Implementar el interface KeyListener: Métodos: public void keytyped(keyevent e) public void keypressed(keyevent e) public void keyreleased(keyevent e) David Contreras Bárcena 223 9.4 Eventos de Teclado Ejemplo Ejemplo de implementación del interface. public class ClienteWindow extends Applet implements KeyListener textomensaje.addkeylistener(this); public void keytyped(keyevent e) public void keyreleased(keyevent e) public void keypressed(keyevent e) int code = e.getkeycode(); if(keyevent.vk_enter == code) David Contreras Bárcena 224

9.4 Eventos sobre Components Implementar el interface ActionListener: Métodos: public void actionperformed(actionevent e) David Contreras Bárcena 225 9.4 Ejemplo de Eventos sobre componentes (I) Ejemplo de implementación del interface. public class ClienteWindow extends Applet implements ActionListener boton.addactionlistener(this); public void actionperformed(actionevent event) Object source = event.getsource(); if (source == boton) David Contreras Bárcena 226

9.4 Ejemplo de Eventos sobre componentes (II) Ejemplo sin implementación del interface, a través de la utilización de una clase anónima. boton.addactionlistener(new ActionListener() public void actionperformed(actionevent e) ); David Contreras Bárcena 227 9.4 Eventos de Ratón Implementar el interface MouseListener: Métodos: public void mouseclicked(mouseevent e) public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mousepressed(mouseevent e) public void mousereleased(mouseevent e) David Contreras Bárcena 228

9.5 JFC (Java Foundation Classes) Engloba un conjunto de herramientas para el desarrollo de GUI s que contienen las siguientes características: Componentes Swing: Incluye todo tipo de controles gráficos. Soporte Look and Feel Permite modificar el entorno gráfico de una aplicación en cualquier momento. Look & Feel s o entornos disponibles: (Java, Windows y Motif) API para Java 2D Capacidad para realizar aplicaciones gráficos 2D de alta calidad. Soporte Drag and Drop Permite esta acción entre aplicaciones Java y aplicaciones nativas. David Contreras Bárcena 229 9.5 JFC (Java Foundation Classes) La versión de JFC 1.1 se suele llamar la versión Swing. El API de JFC 1.1 se suele llamar también el API Swing. "Swing" fue el nombre del proyecto que desarrolló los nuevos componentes. Aunque no es el nombre oficial, se utiliza para referirse a los nuevos componentes y a la API del JFC 1.1. Actualmente los paquetes de la API Swing comienzan con javax.swing. Swing refina el comportamiento de AWT, y de esta manera, los nuevos componentes Swing que mejoran el comportamiento de los anteriores AWT, heredan de ellos. Los componentes Swing se caracterizan por comenzar por J. Frame JFrame Label JLabel Button JButton http://java.sun.com/products/jfc/ David Contreras Bárcena 230

9.5 Swing vs AWT Se trabaja con paquetes claramente diferenciados: javax.swing vs java.awt La jerarquía de componentes debe tener un container Swing como base de toda la estructura de la aplicación gráfica y sin mezclar clases AWT con Swing. No se pueden añadir componentes directamente sobre un JFrame, JApplet o JDialog. Se deben añadir sobre un container que devuelve el método getcontentpane() de cada uno de estos contenedores. Lo mismo ocurrirá al aplicar el layout al container asociado. Nuevos componentes: JTable, JTree, ventanas MDI, etc... http://java.sun.com/docs/books/tutorial/uiswing/ David Contreras Bárcena 231 9.5 JFC (Java Foundation Classes) javax.swing JComponent JOptionPane JTextComponent JComboBox AbstractButton JPanel JEditorPane JTextArea JTextField JButton JToggleButton JMenuItem JCheckBox JRadioButton David Contreras Bárcena 232

9.5 Swing vs AWT Componentes sin código nativo (lightweight). Imágenes en JLabels y JButtons Bordes Cambiar look & feel Patrón MVC sobre los componentes de estado: JList, JTable, etc. Nuevos eventos (DocumentEvent, TableModelEvent,...) Nuevos layouts http://java.sun.com/docs/books/tutorial/uiswing/ components/components.html David Contreras Bárcena 233 9.5 Paso de AWT a Swing Paso 1: Para la utilización de componentes, importar del paquete javax.swing en lugar de java.awt. Ojo, los eventos y layouts siguen siendo del paquete java.awt. Paso 2: Cambiar todos los Component AWT por los equivalentes Swing. (Los containers Frame o Panel- también son Component) Button btnaceptar=new Button( Aceptar ); //AWT JButton btnaceptar=new JButton( Aceptar ); //Swing Paso 3: Los components no se agregan directamente con add(),se agregan a un container virtual que devuelve el método getcontentpane() del container: this.add(boton1); //AWT this.getcontentpane().add(boton1); //Swing Devuelve una ocurrencia de container David Contreras Bárcena 234

9.5 Paso de AWT a Swing Paso 4: Los layouts no se aplican directamente a los container, se aplican al container virtual que devuelve el método getcontentpane() del container: this.setlayout(new FlowLayout()) //AWT this.getcontentpane().setlayout(new FlowLayout()); //Swing http://java.sun.com/docs/books/tutorial/ uiswing/converting/index.html David Contreras Bárcena 235 9.5 Paso de AWT a Swing David Contreras Bárcena 236

9.5 Paso de AWT a Swing Ejemplo de código Swing import javax.swing.*; import java.awt.*; //El layout utilizado es de AWT public class MiJFrame extends JFrame JButton boton; public static void main(string s[]) new MiJFrame(); public MiJFrame() boton = new JButton("Aceptar"); this.getcontentpane().setlayout(new FlowLayout()); this.getcontentpane().add(boton); this.setsize(250,250); this.setvisible(true); David Contreras Bárcena 237 9.6 HOWTO sobre Swing Con estas transparencias se pretende facilitar el desarrollo de aplicaciones GUI. Ventana Etiquetas Botones, Casillas de Verificación y Botones de Opción Caja de Texto y ComboBox Ventanas de Diálogo Apariencia de Ventana Canvas David Contreras Bárcena 238

9.6 HOWTO sobre Swing - JFrame Crear una ventana: class Ventana extends JFrame Ventana(String titulo) this.settitle(titulo); this.getcontentpane().add(new JButton( Aceptar )); this.setsize(400,400); this.setvisible(true); Gestión de eventos: this.addwindowlistener(new WindowAdapter() public void windowclosing(windowevent e) dispose(); System.exit(0); ); David Contreras Bárcena 239 9.6 HOWTO sobre Swing - JLabel Crear una etiqueta: JLabel etiq=new JLabel("Nombre: "); /* En la siguiente sentencia se asigna un color a la etiqueta utilizando el constructor Color(R,G,B) */ etiq.setforeground(new Color(255,0,0)); //Rojo etiq.setfont(new Font("Times New Roman",Font.BOLD, 12)); David Contreras Bárcena 240

9.6 HOWTO sobre Swing - JButton Crear un botón: JButton botonsalir = new JButton("Aceptar"); Gestión de eventos: botonsalir.addactionlistener(new ActionListener() ); public void actionperformed(actionevent e) dispose(); System.exit(0); David Contreras Bárcena 241 9.6 HOWTO sobre Swing - JText Crear una caja de texto: JTextField textnombre = new JTextField(10); Gestión de eventos: textnombre.addkeylistener(new KeyAdapter() ); public void keytyped(keyevent e) if ((int)e.getkeychar()== KeyEvent.VK_ENTER) System.out.println(textNombre.getText()); David Contreras Bárcena 242

9.6 HOWTO sobre Swing - JComboBox Crear una lista combinada: String datos[] = Uno, Dos, Tres, Cuatro, Cinco ; JComboBox lista = new JComboBox (datos); lista.setborder(borderfactory.createlineborder(color.red, 4)); Gestión de eventos: lista.addactionlistener(new ActionListener() ); public void actionperformed(actionevent e) System.out.println(lista.getSelectedItem()); David Contreras Bárcena 243 9.6 HOWTO sobre Swing - JCheckBox Crear una casilla de verificación: JCheckBox ch=new JCheckBox("Estudiante", new ImageIcon("images/off.gif"), false); ch.setrolloverselectedicon(new ImageIcon("images/over.gif")); ch.setrollovericon(new ImageIcon("images/over.gif")); ch.setselectedicon(new ImageIcon("images/on.gif")); Gestión de eventos: ch.addactionlistener(new ActionListener() public void actionperformed(actionevent e) if(ch.isselected()) mostrarmensaje("check Activado"); ); Componente Estándar Componente personalizado según código superior David Contreras Bárcena 244

9.6 HOWTO sobre Swing JRadioButton Crear una botón de opción: ButtonGroup grupo = new ButtonGroup(); rb1 = new JRadioButton("Hombre"); rb2 = new JRadioButton("Mujer"); rb1.setselected(true); rb1.setmnemonic(keyevent.vk_h); rb2.setmnemonic(keyevent.vk_m); grupo.add(rb1); grupo.add(rb2); Gestión de eventos: rb1.addactionlistener(new ActionListener() public void actionperformed(actionevent e) if(rb1.isselected()) mostrarmensaje("radio Hombre Activado"); ); David Contreras Bárcena 245 9.6 HOWTO sobre Swing - JOptionPane Esta clase se utiliza para crear cualquier tipo de dialogo estándar para mostrar o recoger información. Relación (Tipo de diálogo Método estático): Diálogo de Confirmación (Si/No/Cancelar) showconfirmdialog Diálogo de Entrada - showinputdialog Diálogo de Mensaje - showmessagedialog Dialogo Personalizable - showoptiondialog Ejemplo: String nombre = JOptionPane.showInputDialog(this, "<html>introduzca su <u>nombre</u>, por favor:</html>"); JOptionPane.showMessageDialog(this, "<html><h3>proceso finalizado satisfactoriamente</h3></html>"); David Contreras Bárcena 246

9.6 HOWTO sobre Swing - JFileChooser Permite mostrar los diálogos de Abrir y Guardar como... Relación (Tipo de diálogo Método instancia): Diálogo de Abrir showopendialog Diálogo de Guardar como... showsavedialog Ejemplo: JFileChooser j = new JFileChooser(); int rtn = j.showopendialog(this); if (rtn == JFileChooser.APPROVE_OPTION) System.out.println(j.getSelectedFile().getPath()); David Contreras Bárcena 247 9.6 HOWTO sobre Swing Look & Feel Modifica la apariencia de nuestra ventana. Tipos: Metal (0) Motif (1) Windows (2) Windows Classic (3) Ejemplo: int i=1; //Apariencia Motif UIManager.LookAndFeelInfo looks[]; looks = UIManager.getInstalledLookAndFeels(); try UIManager.setLookAndFeel(looks[i].getClassName()); SwingUtilities.updateComponentTreeUI(this); catch(exception e) David Contreras Bárcena 248

9.5 HOWTO sobre Swing Look & Feel También es posible pasar como parámetro el nombre de la clase del Look & Feel: Metal javax.swing.plaf.metal.metallookandfeel Motif com.sun.java.swing.plaf.motif.motiflookandfeel Windows com.sun.java.swing.plaf.windows.windowslookandfeel Windows Classic com.sun.java.swing.plaf.windows.windowsclassiclookandfeel Ejemplo: try UIManager.setLookAndFeel ( com.sun.java.swing.plaf.windows.windowslookandfeel ); SwingUtilities.updateComponentTreeUI(this); catch(exception e) David Contreras Bárcena 249 9.5 HOWTO sobre Swing Look & Feel (Themes) Un tema contiene los detalles de la apariencia gráfica utilizados para personalizar el Look & Feel. Themes definidos en swing: Steel Ocean (desde J2SE 5.0) Ejemplo: //theme metal MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme()); /* theme ocean MetalLookAndFeel.setCurrentTheme(new OceanTheme()); */ try UIManager.setLookAndFeel(new MetalLookAndFeel()); SwingUtilities.updateComponentTreeUI(this); catch (Exception e) David Contreras Bárcena 250

9.5 HOWTO sobre Swing Look & Feel (Themes) Es posible definir un tema propio, personalizando de esta manera el Look & Feel. La clase que defina el tema debe heredar de DefaultMetalTheme Ejemplo: public class EstiloHalloween extends DefaultMetalTheme public String getname() return "Halloween"; //color del borde externo private final ColorUIResource primary1 = new ColorUIResource(204,102,0); //color del borde interno private final ColorUIResource primary2 = new ColorUIResource(255,0,0); //color de la barra de titulo private final ColorUIResource primary3 = new ColorUIResource(255,204,102); //color de los botones, labels private final ColorUIResource secondary1 = new ColorUIResource(111,111,111); //color de los botones al estar presionados private final ColorUIResource secondary2 = new ColorUIResource(255,204,102); David Contreras Bárcena 251 9.5 HOWTO sobre Swing Look & Feel (Themes) import javax.swing.plaf.*; import javax.swing.plaf.metal.*; import javax.swing.*; public class HalloweenTheme extends DefaultMetalTheme private final ColorUIResource primary1 = new ColorUIResource(204, 102, 0); //borde externo private final ColorUIResource primary2 = new ColorUIResource(255, 0, 0); //borde interno y foco private final ColorUIResource primary3 = new ColorUIResource(255, 204, 102); //barra de título private final ColorUIResource secondary1 = new ColorUIResource( 111, 111, 111); //borde botones private final ColorUIResource secondary2 = new ColorUIResource(255, 204, 102); //botones click private final ColorUIResource secondary3 = new ColorUIResource(204, 102, 0); //fondo botones private final ColorUIResource black = new ColorUIResource(255, 255, 255); //letras cajas texto private final ColorUIResource white = new ColorUIResource(0, 0, 0); //fondo cajas de texto public String getname() return "Halloween"; protected ColorUIResource getprimary1() return primary1; protected ColorUIResource getprimary2() return primary2; protected ColorUIResource getprimary3() return primary3; protected ColorUIResource getsecondary1() return secondary1; protected ColorUIResource getsecondary2() return secondary2; protected ColorUIResource getsecondary3() return secondary3; protected ColorUIResource getblack() return black; protected ColorUIResource getwhite() return white; David Contreras Bárcena 252

9.6 HOWTO sobre Swing Menús Cada ventana puede tener su propia barra de menús. AWT ofrece: JMenuBar: para crear la barra de menús JMenu: para los diferente menús de la barra Elementos del menú: instancias de la clase JMenuItem para elementos normales. instancias de la clase JCheckBoxMenuItem. otros menús. separadores, gracias al método addseparator(). David Contreras Bárcena 253 9.6 HOWTO sobre Swing Menús Ejemplo: class Ventana... public Ventana() JMenuBar mb=new JMenuBar(); JMenu m=new JMenu("Archivo"); m.add(new JMenuItem("Abrir...")); m.add(new JMenuItem("Guardar...")); m.addseparator(); m.add(new JCheckBoxMenuItem ("Guardar Cambios")); mb.add(m ); this.setjmenubar(mb);... David Contreras Bárcena 254

9.6 HOWTO sobre Swing Imágenes Crear una imagen: JLabel imagen = new JLabel(new ImageIcon("imagen.jpg")); Asociar una imagen a un botón: JButton btn1 = new JButton("Mostrar", new ImageIcon("imagenSmall.jpg")); JButton btn2 = new JButton("Ocultar"); btn2.seticon(new ImageIcon("imagenSmall.jpg")); Asociar una imagen al Frame : ImageIcon icono = new ImageIcon("app.jpg") this.seticonimage(icono.getimage()); David Contreras Bárcena 255 9.6 HOWTO sobre Swing MDI Crear aplicaciones MDI (Múltiples ventanas dentro de una principal): JDesktopPane desktop = new JDesktopPane(); JInternalFrame ifr1=new JInternalFrame("Internal 1"); ifr1.setsize(100,100); ifr1.setvisible(true); ifr1.setlocation(new Point(1,1)); JInternalFrame ifr2=new JInternalFrame("Internal 2"); ifr2.setsize(100,100); ifr2.setvisible(true); ifr2.setlocation(new Point(10,10)); ifr2.movetofront(); desktop.add(ifr2); desktop.add(ifr1); this.getcontentpane().add(desktop); David Contreras Bárcena 256

9.6 HOWTO sobre Swing TabbedPane Crear control de pestañas: JTabbedPane tabbedpane = new JTabbedPane(); JPanel panel1 = new JPanel(new BorderLayout()); JLabel etiqueta1=new JLabel("HOLA"); etiqueta1.sethorizontalalignment(jlabel.center); panel1.add(etiqueta1, BorderLayout.NORTH); Crear el contenido de una pestaña JPanel panel2 = new JPanel(new BorderLayout()); JLabel etiqueta2=new JLabel("ADIOS"); etiqueta2.sethorizontalalignment(jlabel.center); panel2.add(etiqueta2, BorderLayout.NORTH); Crear el contenido de la otra pestaña tabbedpane.addtab("pestaña 1", panel1); tabbedpane.addtab("pestaña 2", panel2); tabbedpane.setselectedindex(0); this.getcontentpane().add(tabbedpane); David Contreras Bárcena 257 9.5 HOWTO sobre Swing - JSplitPane Crear el separador: JPanel jsp1 = new JPanel(); JPanel jsp2 = new JPanel(); SplitPane splitpane = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, jsp1, jsp2); splitpane.setonetouchexpandable(true); //otra opción SplitPane splitpane = new JSplitPane (JSplitPane.HORIZONTAL_SPLIT, true, jsp1, jsp2); David Contreras Bárcena 258

9.5 HOWTO sobre Swing - JProgressBar Crear la barra de progreso: JProgressBar progressbar = new JProgressBar(); //para mostrar valores progressbar.setstringpainted(true); //si se desconoce la duración de la tarea: progressbar.setindeterminate(true); progressbar.setvalue(0); //mientras se hace el trabajo: progressbar.setvalue(valor); //al terminar el trabajo progressbar.setindeterminate(false); //si se conoce la duración de la tarea no hay que //utilizar el método setindeterminate. Incluir: progressbar.setmaximum(valor); David Contreras Bárcena 259 9.5 HOWTO sobre Swing - JTree Crear un árbol: //se crean las hojas DefaultMutableTreeNode nivel1 = new DefaultMutableTreeNode ("Nivel 1"); DefaultMutableTreeNode nivel2a = new DefaultMutableTreeNode ("Nivel 2"); DefaultMutableTreeNode nivel2b = new DefaultMutableTreeNode ("Nivel 2"); DefaultMutableTreeNode nivel3 = new DefaultMutableTreeNode ("Nivel 3"); //se anidan los niveles nivel1.add(nivel2a); nivel1.add(nivel2b); nivel2a.add(nivel3); //se crea el árbol con el nodo raíz JTree tree = new JTree(nivel1); David Contreras Bárcena 260

9.5 HOWTO sobre Swing - JTree Gestión de eventos: tree.addtreeselectionlistener(new TreeSelectionListener() public void valuechanged(treeselectionevent e) DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getlastselectedpathcomponent(); if (node!= null) Object nodeinfo = node.getuserobject(); ); David Contreras Bárcena 261 9.5 HOWTO sobre Swing JSlider Crear un deslizador: JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 0); /*se crea con valor inferior 0, superior 30 y valor inicial 0*/ slider.setmajortickspacing(10); slider.setminortickspacing(1); slider.setpaintticks(true); slider.setpaintlabels(true); Gestión de eventos: slider.addchangelistener(new ChangeListener() public void statechanged(changeevent e) int valor = (int) ((JSlider)e.getSource()).getValue(); ); David Contreras Bárcena 262

9.5 HOWTO sobre Swing - JTable Crear una tabla: DefaultTableModel dtm= new DefaultTableModel(); JTable tabla = new JTable(dtm); for(int column = 0; column < 5; column++) dtm.addcolumn("columna " + column); //insertamos columnas Object[] data = new Object[5]; for(int row = 0; row < 10; row++) for(int column = 0; column < 5; column++) data[column] = "Celda " + row + "," + column; //contenido dtm.addrow(data); Gestión de eventos: tabla.addmouselistener(new MouseAdapter() public void mouseclicked(mouseevent e) int fila = tabla.rowatpoint(e.getpoint()); int columna = tabla.columnatpoint(e.getpoint()); String contenido; if ((fila > -1) && (columna > -1)) contenido = dtm.getvalueat(fila,columna).tostring(); ); David Contreras Bárcena 263 9.5 HOWTO sobre Swing Drag&Drop Se descompone en dos roles distintos: Dragging y Dropping Dragging: hacer click sobre un objeto, presionar el ratón y arrastrar el objeto hacia alguna otra parte de la aplicación. Dropping: si se arrastra un ítem a un componente, observar este hecho y aceptarlo. Se necesita código para facilitar ambos Dos clases: DragSource y DropTarget. Mediante la propiedad setdragenabled los siguientes componentes permiten drag and drop sin escribir código: JEditorPane, JFormattedTextField, JTextArea, JTextField, JTextPane David Contreras Bárcena 264

9.5 HOWTO sobre Swing Drag&Drop Ejemplo sobre JTextField y JLabel /*Este ejemplo permite arrastrar texto entre JTextField y Jlabel*/ JTextField textfield = new JTextField(40); textfield.setdragenabled(true); //para permitir drag Jlabel label = new JLabel( Etiqueta ); label.settransferhandler(new TransferHandler("text")); label.addmouselistener(new DragMouseAdapter()); /*añade soporte de Drag al Jlabel ya que no acepta el método setdragenabled*/ private class DragMouseAdapter extends MouseAdapter public void mousepressed(mouseevent e) JComponent c = (JComponent)e.getSource(); TransferHandler handler = c.gettransferhandler(); handler.exportasdrag(c, e, TransferHandler.COPY); David Contreras Bárcena 265 9.7 Práctica AWT Realizar la siguiente aplicación gráfica: Almacenar en disco información del objeto Leer de disco y mostrar la información del objeto en pantalla David Contreras Bárcena 266

9.7 Solución a la Práctica public class VentanaGrid extends Frame implements ActionListener, WindowListener TextField nombre, dni, tipo; Button botonwrite, botonread; public VentanaGrid(String titulo) Label label1, label2, label3; this.settitle(titulo); label1 = new Label("Nombre: "); nombre = new TextField(10); label2 = new Label("DNI: "); dni = new TextField(2); label3 = new Label("Tipo: "); tipo = new TextField(2); botonwrite = new Button("Escribir"); botonread = new Button("Leer"); David Contreras Bárcena 267 9.7 Solución a la Práctica this.setlayout(new GridLayout(4,2)); this.add(label1); this.add(nombre); this.add(label2); this.add(dni); this.add(label3); this.add(tipo); this.add(botonwrite); this.add(botonread); botonwrite.addactionlistener(this); botonread.addactionlistener(this); this.addwindowlistener(this); this.pack(); this.show(); David Contreras Bárcena 268

9.7 Solución a la Práctica public void windowclosed(windowevent event) public void windowdeiconified(windowevent event) public void windowiconified(windowevent event) public void windowactivated(windowevent event) public void windowdeactivated(windowevent event) public void windowopened(windowevent event) public void windowclosing(windowevent event) System.exit(0); David Contreras Bárcena 269 9.7 Solución a la Práctica public void actionperformed(actionevent event) Object source = event.getsource(); Programador p=null; if (source == botonwrite) p=new Programador(nombre.getText(), Integer.parseInt(dni.getText()), tipo.gettext()); p.write(); nombre.settext(" "); dni.settext(" "); tipo.settext(" "); if (source == botonread) p=(programador)programador.read(); nombre.settext(p.getnombre()); dni.settext(string.valueof(p.getdni())); tipo.settext(p.gettipo()); David Contreras Bárcena 270

9.8 Applets Aunque la palabra applet deriva de aplicación pequeña, la mayoría de aplicaciones desarrolladas en Java, puede ser un Applet. Un applet es una aplicación JAVA, capaz de ejecutarse de forma remota a través de Internet, desde un navegador. Tecnología cliente: La ejecución de la aplicación se realiza en la máquina cliente. Un applet debe heredar de la clase Applet. David Contreras Bárcena 271 9.8 Applets De JFrame a JApplet El método main(string[] )pasa a ser ahora el método init(). Las clases y constructores deberán ser públicas. El tamaño del frame se asigna ahora a través de la páginas html. Por este motivo tendrán que desaparecer los métodos de asignación de tamaño (setsize()) o ajuste (pack()). David Contreras Bárcena 272

9.8 Applets - Restricciones Un applet no puede realizar accesos a disco. De este modo garantiza la seguridad del usuario que ejecuta un applet. Existen los llamados applet trusted, que pueden saltarse esta restricción en un dominio de confianza. David Contreras Bárcena 273 9.8 Applets - Métodos paint( Graphics g ): Se llama cada vez que se necesita refrescar el área de dibujo del applet. Se implementa el contenido del applet. init(): Se invoca al crear el applet. Se debe implementar para la inicialización del applet (p.e. carga de imágenes y sonido, el resize del applet para que tenga su tamaño correcto, asignación de valores a las variables globales, etc.) repaint(): Se invocará este método cuando se necesite actualizar el contenido del applet. Internamente llama a update() que borrará el rectángulo sobre el que se redibujará y luego se llama a paint(). David Contreras Bárcena 274

9.8 Applets - Métodos start(): Se invoca automáticamente. Activa el applet. Las clases heredadas deberían sobrecargarlo para comenzar una animación, sonido, etc. stop(): Se invoca al finalizar el applet. David Contreras Bárcena 275 9.8 Applets - Ejemplo import java.awt.graphics; import java.applet.applet; public class HolaMundo extends Applet public void paint( Graphics g ) g.drawstring( Hola Manuel,25,25 ); David Contreras Bárcena 276

9.8 Applets - Ejecución del Applet Para que se pueda visualizar debe ir contenido en una página html. La página se puede ejecutar de dos formas: Navegador Appletviewer: Visor de Applets (contenidos en páginas) que posee el SDK. David Contreras Bárcena 277 9.8 Applets - Etiqueta <APPLET> <APPLET CODE= WIDTH= HEIGTH= [ARCHIVE=] [CODEBASE=] [ALT=] [NAME=] [ALIGN=] [VSPACE=] [HSPACE=]> <PARAM NAME= VALUE= > </APPLET> Parámetros Obligatorios CODE : Nombre de la clase principal WIDTH : Anchura inicial HEIGHT : Altura inicial Parámetros Opcionales ARCHIVE : Archivo JAR CODEBASE : URL base del applet ALT : Texto alternativo NAME : Nombre de la instancia David Contreras Bárcena 278

9.8 Applets - Ejemplo etiqueta <APPLET> <HTML> <BODY> <APPLET CODE= MiApplet WIDTH= 300 HEIGHT= 100 > </BODY> </HTML> David Contreras Bárcena 279 9.8 Applets - Ejemplo etiqueta <PARAM> Un applet puede recibir parámetros a través de la etiqueta <PARAM>. <HTML> <BODY> <APPLET CODE=MiApplet.class WIDTH=300 HEIGHT=100> <PARAM NAME= Nombre VALUE= David > </APPLET> </BODY> </HTML> El método getparameter(string parametro) es el encargado de recoger estos parámetros. public void init() nombre = this.getparameter("nombre"); David Contreras Bárcena 280

9.8 Applets - Práctica de Applets Realizar un reloj animado. David Contreras Bárcena 281 9.8 Applets - Práctica de Applets import java.awt.graphics; import java.util.*; import java.text.dateformat; import java.applet.applet; public class Reloj extends Applet implements Runnable private Thread relojthread = null; public void start() if (relojthread == null) relojthread = new Thread(this, Reloj"); relojthread.start(); David Contreras Bárcena 282

9.8 Applets - Práctica de Applets public void run() while (true) repaint(); try Thread.sleep(1000); catch (InterruptedException e) David Contreras Bárcena 283 9.8 Applets - Práctica de Applets public void paint(graphics g) Calendar cal = Calendar.getInstance(); Date date = cal.gettime(); DateFormat dateformatter = DateFormat.getTimeInstance(); g.drawstring(dateformatter.format(date), 5, 10); public void stop() relojthread = null; David Contreras Bárcena 284