Download APPLET - UCEMA
Document related concepts
no text concepts found
Transcript
Algunos componentes Swing Clase JComponent http://java.sun.com/docs/books/tutorial/uiswing/components/components.html 4 Ed Chapter 14 - 1 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. th Algunos contenedores Swing Clase Container http://java.sun.com/docs/books/tutorial/uiswing/components/components.html 4 Ed Chapter 14 - 2 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. th Otros Manejadores de presentación 4 Ed Chapter 14 - 3 http://java.sun.com/docs/books/tutorial/uiswing/components/components.html ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. th Herramienta IDE para desarrollo con GUI NetBeans GUI Builder (Project Matisse) Demo de uso de netbeans con GUI: http://www.netbeans.org/download/flash/netbeans50_es/player.html ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 4 Manejando eventos de Ratón • Los eventos de ratón incluyen interacciones tales como – movimiento del ratón – arrastrar el ratón – presionar los botones de ratón. • La interfase MouseListener maneja los botones del ratón – mouseClicked, mouseEntered, mouseExited, mousePressed, y mouseReleased • La interfase MouseMotionListener maneja el movimiento del ratón – mouseDragged y mouseMoved.Ver SketchPad • Ver Ch14TrackMouseFrame and Ch14SketchPad ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 5 Ch14TrackMouseFrame class Ch14TrackMouseFrame extends JFrame implements MouseListener // constructor public Ch14TrackMouseFrame { // poner las prop del marco // poner la salida para mostrar las coord del punto output = System.out; // registrar los eventos del ratón addMouseListener(this);} ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 6 mouseClicked() // muestra las coord en las cuales se presionó y soltó el boton izq del ratón public void mouseClicked (MouseEvent event){ int x, y; x = event.getX(); y = event.getY(); output.println (“[” + x + “, ” + y + “]”); } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 7 mousePressed() y mouseReleased() • para detectar cuando se presiona y cuando se libera el botón izq del ratón en forma separada, se escriben dos métodos • public void mousePressed (MouseEvent event){ output.println (“Down”);} • public void mouseReleased (MouseEvent event){ output.println (“Up”);} ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 8 mouseClicked() // Si se presiona dos veces salir caso contrario mostrar las coord public static final int DOUBLE_CLICK = 2; public void mouseClicked (MouseEvent e){ if (e.getClickCount() == DOUBLE_CLICK){ System.exit(0); }else { int x, y; // muestra las coord como antes .....}} ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 9 Resto de los Met de la Interfase • Si no necesitamos explicitar código para el resto de los mét de la interfase MouseListener se implementan poniendo el cuerpo del mét vacío, pues es obligación implementar todos los mét de una interfase ej public void mouseEntered (MouseEvent ev){} public void mouseExited (MouseEvent ev){} ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 10 Relación evento y oyente ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 11 Receptor vs eventos • Un receptor puede gestionar varios eventos • Ej: WindowListener: windowActivated (WindowEvent) windowClosed (WindowEvent) windowClosing (WindowEvent) windowDeactivated (WindowEvent) windowDeiconified(WindowEvent) windowIconified ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 12 Adaptadores para la recepción de eventos Eventos no deseados métodos vacíos. Solución usar adaptadores (clases abstractas) Implementan todos los métodos como vacíos. Los receptores pueden extenderlas definiendo sólo los métodos deseados. ComponentAdapter MouseAdapter FocusAdapter MouseMotionAdapter WindowAdapter KeyAdapter class GestorFrameX extends WindowAdapter { // subclase de adaptador public void windowClosing(WindowEvent evt) { System.exit(0);}}... frameX.addWindowListener(new GestorFrameX()); ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 13 Clases internas • Si no deseamos que nuestras clases de manejo de eventos desciendan de una clase adaptador, pues precisamos que desciendan de otra clase ej JFrame, se pueden definir como clases internas public class MiClase extends JFrame ... unObjeto.addMouseListener (new MiAdaptador()); ... class MiAdaptador extends MouseAdapter{ public void mouseClicked(MouseEvent e){ // implementacion del manejador} } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 14 Clase anónima interna Son clases internas sin nombre Permiten trabajar con clases locales sin tener que ponerles nombre public class MiClase extends JFrame{ ... unObjeto.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { // implementacion del manejador} } ); ................. } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 15 Ej Creación de clase anónima // creación de la clase anónima ActionListener listener = new ActionListener (){ public void actionPerformed(ActionEvent ae){ System.out.println (“Ej de clase anónima”); } } // registro del componente con el oyente button.addActionListener; ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 16 Ambas en un bloque Creación de la clase anónima y registro del oyente en el mismo bloque de código, evitamos el uso de una variable local button.addActionListener(new ActionListener (){ public void ActionPerformed (ActionEvent ae){ System.out.println(“Boton presionado”); } } // termina la definición de la clase ); // finaliza la lista de argumentos, //hay un sólo elem en la lista y es de tipo ActionListener ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 17 Conveniencia de las clases internas anónimas • El compilador le asigna nombre de clase a las clases anónimas internas. • Les asigna el nombre de la clase que los contiene, un signo $ y un número Ej miclase.class miclase$1.class • Ventaja: pueden ser más concisas que las clases miembro • Desventaja: puede complicar la lectura del código, si el código de la interfase es largo y complejo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 18 Que es un Applet? • Es un programa que se ejecuta en un navegador • Se transporta en la red, se instala automáticamente y se ejecuta in situ como parte de un documento web • Esto genera algunas restricciones sobre lo que puede hacer un applet para proteger el medio en el cual se ejecuta • Security manager es el sistema de seguridad de Java Provee met para poner y verificar que es lo que puede o no puede hacer un prog java • Determinar lo que pude o no puede hacer un applet depende además de lo especificado en el navegador ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Ref: Horton 4th Ed Chapter 14 - 19 Qué no puede hacer un Applet? • A menos que se permita explícitamente un applet: 1) no tiene acceso a los arch locales 2) no puede invocar otros prog de la computadora local 3) no puede comunicarse con ninguna otra máquina exceptuando aquella que contiene el applet ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 20 Crear un Applet Arch:HelloWorld.java import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { // sobre escribimos el mét paint() g.drawString("Hello world!", 50, 25); } } Compilar: javac HelloWorld.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. HelloWorld.class 4th Ed Chapter 14 - 21 Observar que • No tiene un met main • la clase AppletViewer (VisorApplet) es la clase ppal del programa • se define una subclase de Applet que el visor de applet usa cuando se ejecuta • el visor de applet envía automáticamente el mensaje paint() con un objeto Graphic como argumento a un applet ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 22 Crear el Html y ejecutar el Applet Crear Arch: HelloWorld.html <HTML> <HEAD> <TITLE> A Simple Program </TITLE> </HEAD> <BODY> Hello World! <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML> Navegador: C:\Java\HelloWorld.html ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Hello World! 4th Ed Chapter 14 - 23 Visor de Applet (Appletviewer) • Appletviewer herramienta incluido en JDK • Recibe como parámetro una página HTML y muestra el applet incluído en la misma acción • Uso: appletviewer HelloWorld.html • Tambien se puede incluir: /** <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> */ en un comentario en el achivo java y ejecutar con c:>\Java> appletviewer HelloWorld.java ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 24 Ciclo de vida de un Applet void init () llamado por el navegador cuando comienza a ejecutarse el applet, se utiliza para iniciar variables void start() llamado por el navegador inmediatamente despues de init(), void stop() llamado por el navegador cuando el usuario sale de la pag que contiene el applet, interrupe las actividades generadas con start() void destroy() despues del mét stop cdo se cierra el navegador, libera todos los recursos, , pde ser útil para mostrar una ventana de confimación ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 25 Cont. void repaint() no debería ser sobrecargado y es llamado cuando se necesita redibujar el applet. Podemos llamarlo nosotros desde nuestro código. Llama a update(Graphics). void update(Graphics) llamado por repaint() cuando se necesita actualizar el applet. Su implementación borra el rectángulo y llama a paint() para volver a pintarlo. void paint(Graphics) dibuja el applet y el cual deberemos sobreescribir para poder dibujar lo que nosotros deseemos.. void print(Graphics) equivalente a paint() pero es llamado cuando se va a imprimir el contenido del applet. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 26 Funciones de menú de appletviewer ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 Ed Chapter 14 - 27 Referencia: http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/parte6/cap6-1a.html th Etiqueta APPLET • Tiene varios parámetros, de los cuales sólo es obligatorio poner los ya usados CODE, WIDTH y HEIGHT. Son los sig: • CODE Nombre completo (incluyendo extensión) del fichero que contiene el applet. • WIDTH Ancho del rectángulo donde se ejecutará el applet. • HEIGHT Altura del rectángulo donde se ejecutará el applet. • CODEBASE dirección donde está el fichero .class que contiene al applet. Es necesario ponerlo cuando el applet se encuentra en un directorio distinto al de la página desde la que se le llama, ya que CODE no puede contener directorios, sólo el nombre del fichero. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 28 Paso de parámetros al applet Entre <APPLET> y </APPLET> podremos colocar etiquetas PARAM que nos permitirán pasar parámetros al applet. Tienen dos atributos: • VALUE: nombre del parámetro. • NAME : valor del parámetro. • Podemos obtener esos valores por medio del método getParameter(String), como vemos en el siguiente ejemplo: ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 29 Ej uso de parámetros /** Applet MostrarMensaje <APPLET CODE="MostrarMensaje.class" WIDTH="200" HEIGHT="70"> <PARAM NAME="Mensaje" VALUE="Mi mensaje propio"> * </APPLET> */ import java.applet.Applet; // p’ Applet import java.awt.*; // p’ Graphic public class MostrarMensaje extends Applet { String mensaje; public void init() { mensaje = getParameter("Mensaje"); if (mensaje==null) mensaje = "Mensaje por defecto"; } public void paint(Graphics g) { g.drawString(mensaje,20,20); } } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 30 Mét de la Clase Graphics drawString(String texto,x,y) escribe un texto a partir de las coordenadas (x,y). drawLine(x1,y1,x2,y2) dibuja una línea entre las coordenadas (x1,y1) y (x2,y2). drawRect(x,y,ancho,alto), fillRect(x,y,ancho,alto) y clearRect(x,y,ancho.alto) Son encargados de dibujar, rellenar y limpiar, respectiva||, un rectángulo cuya esquina superior izquierda está en las coordenadas (x,y) y tienen el ancho y alto especificados. drawRoundRect(x,y,ancho,alto,anchoArco,altoArco) fillRoundRect(x,y,ancho,alto,anchoArco,altoArco) Equivalentes a los anteriores, pero con las esquinas redondeadas. La forma y tamaño de dichas esquinas viene dada por los dos últimos parámetros. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 31 Mét de la Clase Graphics cont. draw3DRect(x,y,ancho,alto,boolean elevado) fill3DRect(x,y,ancho,alto,boolean elevado) Idem a los primeros, pero dibujan un borde para dar la sensación de que está elevado o hundido (dependiendo del valor del último parámetro) drawOval(x,y,ancho,alto), fillOval(x,y,ancho,alto) Dibujan una elipse con esquina izquierda superior en (x,y) y el ancho y alto especificados. Si son iguales dibujará un círculo. ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 32 Mét de la Clase Graphics cont. drawArc(x,y,ancho,alto,anguloInicio,anguloArco) fillArc(x,y,ancho,alto,anguloInicio,anguloArco) Dibuja una arco cuyo primer vértice está en (x,y) y el segundo en (x+ancho,y+alto). La forma del mismo vendrá dado por los dos últimos parámetros. drawPolygon(int[] coordenadasX,int[] coordenadasY,numCoordenadas) fillPolygon(int[] coordenadasX,int[] coordenadasY,numCoordenadas) Dibuja un polígono cerrado del número de puntos especificado en el último parámetro. copyArea(xOrigen,yOrigen,ancho,alto,xDest,yDest) Copia el área cuya esquina superior izquierda está en (xOrigen,yOrigen) y de ancho y alto especificados a la zona que comienza en (xDest, yDest). ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 33 Ej FigurinesColor /**APPLET CODE="FigurinesColor.class" WIDTH="200" HEIGHT="70"></APPLET> */ import java.applet.Applet; import java.awt.*; public class FigurinesColor extends Applet { public void paint(Graphics g) { g.drawString("Adios, mundo cruel",20,20); g.setColor(Color.green); g.fillRoundRect(10,30,50,20,10,10); g.setColor(new Color(30,40,50,100)); g.fill3DRect(50,40,50,20,true); }} ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 34 Ej FigurinesColor ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 35 Aplicación de los met de Graphic ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 Ed Chapter 14 - 36 Referencia: http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/parte15/cap15-6.html th Multihilo (thread) Ejecución multihilo: si deseamos controlar la ejecución en el tiempo, o que se ejecute más de una cosa a la vez • En un entorno multihilo cada uno representa un proceso individual ejecutándose en el sistema, ej controlar la entrada y salida de un disco • Todos los hilos que se ejecutan concurrentemente disponen del mismo espacio de mem. • Difiere de multitarea donde cada proceso disponde de su espacio de mem ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 37 Multihilos cont • Java permite la creación y control de los hilos de ejecución explícitamente. • Los navegadores utilizan diferentes hilos en paralelo para realizar tareas “concurrentemente” ej desplazar la pag mientras continuan cargándose imágenes. • Multihilo permite que cada hilo comience y termine tan pronto como sea posible, lo que otorga mejor tiempo de respuesta ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 38 Met de Clase de Thread Clase Thread permite controlar a los hilos currentThread() devuelve el obj thread que representa al hilo que se está ejecutando sleep(long) hace que el interprete ponga el hilo en reposo durante la cant de miliseg especificada, transcurrida ese tiempo, el hilo vuelve a estar disponible para su ejecución yield() hace que el intérprete cambie de un hilo al próximo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 39 Met de Instancia de Thread • start() crea un hilo y comienza a ejecutarlo • run() constituye el cuerpo de un hilo. Este es el único met de la interfase Runnable. Es llamado por start() despues de inicializarlo • stop() detención brusca • suspend() suspende • resume() revive el hilo suspendido • setPriority() pone la prioridad (entero de 1 a 10) • getPriority() devuelve la prioridad • setName(String) • getName() • isAlive() devuelve true si el hilo está vivo ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 40 Trabajar con hilos • Hay dos formas para conseguir hilos de ejecución: 1) implementar la interfase Runnable (met run()), forma más frecuente o 2) extender la clase Thread, Ej: class MiHilo extends Thread { public void run (){ // lo que debe hacer el hilo} } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 41 Ej de ejecución con hilos /** <APPLET CODE="MostrarCadena.class" WIDTH="200" HEIGHT="70"> * <PARAM NAME="Cadena" VALUE="Este texto está en movimiento"> * </APPLET> */ import java.applet.Applet; import java.awt.*; public class MostrarCadena extends Applet implements Runnable { String mensaje; // hilos de ejecución int lugar; Thread hilo = null; // declaramos un hilo inicia a null ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 42 Ej de ejecución con hilos cont. public void init() { mensaje = getParameter("cadena"); //obt la cadena del param if (mensaje==null) mensaje = "Mensaje por defecto"; lugar = getBounds().width; } public void start() { // creamos el hilo y se arranca if (hilo==null) { hilo = new Thread(this); hilo.start(); } } public void stop() { hilo = null; // se para el hilo } ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 14 - 43 Ej de ejecución con hilos cont. public void paint(Graphics g) { g.drawString(mensaje,lugar,20); } // de la interfaz Runnable public void run() { // cdo se crea un hilo com. su vida while (hilo!=null && hilo.isAlive()) { //ejecutando el mét run() lugar -= 1; // desplaza a la izq repaint(); try { hilo.sleep(10); } catch (InterruptedException e) {} // No hacemos nada } // nec. por usar sleep() } } Ref: Hilos:Companies, http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/introduccion/indice.html ©The McGraw-Hill Inc. Permission 4 Ed Chapter 14 - 44 required for reproduction or display. Applets: http://www.programacion.com/java/tutorial/applets/ th