Transcript APPLET

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