Sunteți pe pagina 1din 33

NDICE:

!"

Programacin con Java:

1. Introduccin al lenguaje Java: !" Fundamentos. !" Gestin de eventos. 2. Creacin y uso de "threads". 3. Sincronizacin.

Referencias: http://nuvol.uji.es/~vcholvi/teaching/dstr.html http://Java.sun.com http://www.fie.us.es/docencia/publi/JAVA/ http://usuarios.tripod.es/Ozito/index.html http://www.lucas.simplenet.com/trabajos/java/java.html http://www.ctv.es/USERS/pagullo/arti/javacpp.htm

1. Introduccin al lenguaje Java.


Java: Es un cambio radical en el desarrollo de software pero reimplementando las buenas soluciones:
!"

Entornos de desarrollo visuales (Kawa, VisualAge, Forte, J++,...). Paradigma principal: orientado a objetos. Abstraccin para el acceso a base de datos JDBC.

!"

!"

Elementos que consiguen que le lenguaje Java sea una tecnologa diferente:
!"

Applets: aplicaciones pequeas, dinmicas, seguras, multiplataforma, activas y en red. Lenguaje de programacin poderoso: orientado a objetos, sintaxis simple y familiar, entorno robusto y agradable. Clases de objeto: abstracciones para las funciones del sistema habituales como gestin de ventanas, de red y de entrada/salida.

!"

!"

Lenguaje de programacin revolucionario:


!"

Simple: Aprendizaje simple partiendo de conocimientos de programacin O. O. o No muestra las interioridades del sistema.

!"

Orientado a objetos: Modelo de objetos simple y fcil de ampliar combinado con tipos simples que son no objetos de alto rendimiento. Robusto: Java evita muchas de loas principales causas de error del programador: o Gestin de memoria avanzada: recogida de basura. o Orientado a objetos integrados. o Se detectan los errores de tipos y de declaracin en tiempo de compilacin.

!"

!"

Interactivo: Posibilita la construccin de sistemas interactivos que se ejecutan sin problemas. Arquitectura neutral: Se compila en una representacin intermedia llamada cdigo byte de java que es interpretable en cualquier sistema que tenga un interprete Java. El problema de los lenguajes interpretados es que son poco eficientes.

!"

!"

!"

Sin embargo, el cdigo byte de Java es sencillo de traducir a cdigo mquina nativo consiguiendo un rendimiento alto.

!"

Se compila en cdigo de byte de alto nivel independiente de la mquina. Seguro: o No se puede llamar a funciones globales para ganar el acceso a recursos del sistema. o No se producen desbordamiento en la pila. o No hay conversiones ilegales entre datos. o El cargador de Clases puede verificar una firma digital antes de realizar una instancia de un objeto (validar los privilegios de acceso). o Las operaciones con archivos se trabajan sobre el disco duro de la mquina de donde parti el applet.

!"

!"

Puede ejecutarse desde una mquina hipottica que es implementada por un sistema run-time, que si es dependiente de la mquina.

!"

Son dependientes del sistema la Mquina Virtual Java (JVM) y las libreras fundamentales, que nos permiten acceder la hardware. Tambin existen APIs de Java que entran en contacto con el hardware: o Java 2D: grficos 2D y manipulacin de imgenes. o Java Media Framework: Elementos crticos en el tiempo: audio, vdeo... o Java Animation: Animacin de objetos en 2D. o Java Telephony: Integracin con telefona. o Java Share: Interaccin entre aplicaciones multiusuario. o Java 3D: Grficos 3D y su manipulacin.

!"

Clases de Internet:
!"

Conjunto de clases comunes que pueden crecer y posibilitan que muchos programadores creen objetos en Java que interactan. Clases de Internet: proporcionan un modelo unificador de protocolos de internet para PC, Mac y estaciones de trabajo Unix. Trabajo en red con TCP/IP: Implementaciones de ftp, http, sockets de red de bajo nivel, etc. Protocolos de Internet -> objetos de Java simples. WWW y HTML: o Utilizacin de applets insertadas en pginas HTML. o Clases de manipulacin de cadenas adecuadas al tipo de procesamiento de texto que forma parte de cualquier programa basado en HTML.

!"

!"

!"

!"

Programas distribuidos: o Invocacin a objetos remotos. o Cdigo que se ejecuta de manera distribuida a travs de la red. Acceso a Base de Datos (JDBC).

!"

Clases requeridas por cualquier entorno JAVA:


!"

Lenguaje: o Clase String o Clase Thread o Clase Exception o Clase Error o Clase Math Utilidades: conjunto completo de estructuras de datos complejas y sus mtodos asociados (pilas, matrices, tablas, etc...). Entrada/Salida. Trabajo en red a bajo nivel.

!"

!"

!"

!"

Clases de la interfaz de usuario abstracta AWT: abstracciones para ventanas, botones, mens

Lenguaje JAVA
!"

Facilidad para aplicaciones relacionadas con INTERNET (applets), aunque tambin para tareas de propsito general. Cundo Java no es la mejor eleccin? o Texto por Internet -> HTML (menor coste de transferencia y de interpretacin). o Aplicaciones de propsito general rpidas. Ej: en funciones del API de Windows.

!"

Programar en JAVA
!"

Compilacin y ejecucin del la aplicacin tpica Holamundo

// Aplicacin HolaMundo de ejemplo public class HolaMundo { public static void main( String args[] ) { System.out.println( "Hola Mundo!" ); } }
!"

Se debe almacenar el texto en un archivo llamado HolaMundo.java. El nombre del archivo debe coincidir con el nombre de la clase. El compilador javac crea un archivo HolaMundo.class que contiene el cdigo byte compilado de nuestro programa (instrucciones del lenguaje mquina para el interprete de maquina virtual Java). javac HolaMundo.java
!"

!"

El compilador javac se encuentra en el directorio bin por debajo de directorio Java donde se halla instalado el JDK.

Un Applet:
!"

Compilacin y ejecucin del applet HolaMundo con el siguiente cdigo:

import java.applet.Applet; import java.awt.Graphics; public class HolaMundo extends java.applet.Applet{ public void paint(Graphics g){ g.drawString(Hola Mundo,5,50); } }
!"

Se debe almacenar en un archivo llamado HolaMundo.java El compilador crea un archivo llamado HolaMundo.class Creacin del fichero HTML que incluye el applet ubicado en el mismo directorio que se encuentra la clase:

!"

!"

<HTML> <HEAD> <TITLE> Applet HolaMundo </TITLE> </HEAD> <BODY> <P> Este es el applet HolaMundo: <BR> <APPLET CODE=HolaMundo.class WIDTH=100 HEIGHT=80> </APPLET> </BODY> </HTML>

!"

La ejecucin del applet se realiza con appletviewer o con el navegador. Un applet es una mnima aplicacin Java diseada para ejecutarse en un navegador Web. No necesita mtodo main(). El appletviewer crea un espacio de navegacin, incluyendo un rea grfica, donde se ejecutara el applet.

!"

!"

Mtodos de la clase Applet: public void init (): Se activa cuando el applet es cargado. public void init() { if( width < 200 || height < 200 ) resize( 200,200 ); valor_global1 = 0; valor_global2 = 100; // cargaremos imgenes en memoria sin mostrarlas // cargaremos msica de fondo en memoria sin reproducirla }

public void start (): Llamada para activa el applet. Es llamada cuando se visita el applet. Las clases derivadas deberan sobrecargarlo para comenzar una animacin, sonido, etc. public void start() { estaDetenido = false; // comenzar la reproduccin de la msica musicClip.play(); } public void paint (): Llamada cada vez que se refresca el rea de dibujo del applet. void public paint( Graphics g ) { g.drawString( "Hola Java!",25,25 ); // Dibujaremos la imgenes que necesitemos } public void stop (): Llamada para detener el applet. public void stop() { estaDetenido = true; if( /* se est reproduciendo msica? */ ) musicClip.stop(); } public void destroy (): Es llamada cuando el applet no se va a usar ms. En applet multithread debern usar destroy() para matar cualquier thread del applet que quedase activo. public void run (): Contiene el cdigo que se ejecutar: bucle del applet, nuevos mtodos, etc. En grficos suele llamar a repaint() para refrescar el rea de dibujo.

La marca applet de html: Dado que los applets estn mayormente destinados a ejecutarse en navegadores Web, haba que preparar el lenguaje HTML para soportar Java, o mejor, los applets. El esquema de marcas de HTML, y la evolucin del estndar marcado por Netscape hicieron fcil la adicin de una nueva marca que permitiera, una vez aadido el correspondiente cdigo gestor en los navegadores, la ejecucin de programas Java en ellos. La sintaxis de las etiquetas <APPLET> y <PARAM> es la que se muestra a continuacin y que se ir explicando en prrafos posteriores: <APPLET CODE= WIDTH= HEIGTH= [CODEBASE=] [ALT=] [NAME=] [ALIGN=] [VSPACE=] [HSPACE=]> <PARAM NAME= VALUE= > </APPLET> Los atributos que acompaan a la etiqueta <APPLET>, algunos son obligatorios y otros son opcionales. Todos los atributos, siguiendo la sintaxis de html, se especifican de la forma: atributo = valor. Los atributos obligatorios son:

CODE Indica el fichero de clase ejecutable, que tiene la extensin .class. No se permite un URL absoluto, como ya se ha dicho, aunque s puede ser relativo al atributo opcional CODEBASE. WIDTH Indica la anchura inicial que el navegador debe reservar para el applet en pixels. HEIGHT Indica la altura inicial en pixels. Un applet que disponga de una geometra fija no se ver redimensionado por estos atributos. Por ello, si los atributos definen una zona menor que la que el applet utiliza, nicamente se ver parte del mismo, como si se visualiza a travs de una ventana, eso s, sin ningn tipo de desplazamiento.

Los atributos opcionales que pueden acompaar a la marca APPLET comprenden los que se indican a continuacin: CODEBASE Se emplea para utilizar el URL base del applet. En caso de no especificarse, se utilizar el mismo que tiene el documento. ALT Funciona exactamente igual que el ALT de la marca <IMG>, es decir, muestra un texto alternativo, en este caso al applet, en navegadores en modo texto o que entiendan la etiqueta APPLET pero no implementen una mquina virtual Java. NAME Otorga un nombre simblico a esta instancia del applet en la pgina que puede ser empleado por otros applets de la misma pgina para localizarlo. As, un applet puede ser cargado varias veces en la misma pgina tomando un nombre simblico distinto en cada momento.

ALIGN Se emplea para alinear el applet permitiendo al texto fluir a su alrededor. Toma los siguientes valores: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM y ABSBOTTOM. VSPACE Indica el espaciado vertical entre el applet y el texto, en pixels. HSPACE Funciona igual que el anterior pero indicando espaciamiento horizontal, en pixels.

El Lenguaje Comentarios En Java hay tres tipos de comentarios: // comentarios para una sola lnea /* comentarios de una o ms lneas */ /** comentario lneas */ de documentacin, de una o ms

Los comentarios de documentacin, son colocados antes de una declaracin (de variable o funcin), indican que ese comentario ha de ser colocado en la documentacin que se genera automticamente cuando se utiliza la herramienta de Java, javadoc. En este tipo de comentario para documentacin, se permite la introduccin de algunos tokens o palabras clave, que harn que la informacin que les sigue aparezca de forma diferente al resto en la documentacin. Palabras clave Las siguientes son las palabras clave que estn definidas en Java y que no se pueden utilizar como identificadores:
abstract boolean break byte byvalue case catch char class const continue default do double else extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static super switch synchronized this threadsafe throw transient true try void while

Palabras Reservadas
cast future generic inner operator outer rest var

Operadores Aritmticos: Para los tipos numricos y char + suma - resta * multiplicacin / divisin % modulo ++ incremento += suma y asignacin -= resta y asignacin *= multiplicacin y asignacin /= divisin y asignacin %= modulo y asignacin - - decremento

Ejemplo: Class Incdec{ Public static void main(String args[]){ int a=1; int b=2; int c=++b; int d=a++; c++; System.out.println(a= +a); System.out.println(b= +b); System.out.println(c= +c); System.out.println(d= +d); } } Operadores == != > < >= <= & | ^ igual distinto de mayor que menor que mayor o igual que menor o igual que AND OR XOR

&& Condicional AND || Condicional OR

Arrays Se pueden declarar en Java arrays de cualquier tipo: char s[]; int iArray[]; Incluso se pueden construir arrays de arrays: int tabla[][] = new int[4][5];
!"

Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar desbordamientos y la corrupcin de memoria. En Java un array es realmente un objeto, porque tiene redefinido el operador []. Tiene una funcin miembro: length. Se puede utilizar este mtodo para conocer la longitud de cualquier array. int a[][] = new int[10][3]; a.length; /* 10 */ a[0].length; /* 3 */

!"

!"

Para crear un array en Java hay dos mtodos bsicos. o Crear un array vaco: int lista[] = new int[50]; o Crear ya el array con sus valores iniciales: String nombres[] = {"Juan","Pepe","Pedro","Maria"};

Esto que es equivalente a: String nombres[]; nombres = new String[4]; nombres[0] = new String( nombres[1] = new String( nombres[2] = new String( nombres[3] = new String(

"Juan" ); "Pepe" ); "Pedro" ); "Maria" );

Errores:
!"

No se pueden crear arrays estticos en tiempo de compilacin: int lista[50]; // generar un error en tiempo de compilacin

!"

Tampoco se puede rellenar un array sin declarar el tamao con el operador new: int lista[]; for( int i=0; i < 9; i++ ) lista[i] = i;

Accediendo a los elementos de un array: int a[]=new int[100]; a[0]=0; for(int i=1;i<a.length;i++) a[i]=i + a[i-1];

Operadores Los operadores de Java son muy parecidos en estilo y funcionamiento a los de C. En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia: . [] () ++ -- ! ~ instanceof * / % + << >> >>> < > <= >= == != & ^ | && || ? : =

Control de Flujo Muchas de las sentencias de control del flujo del programa se han tomado del C: Sentencias de Salto: if/else if( Boolean ) { sentencias; } else{ sentencias; } switch switch( expr1 ) { case expr2: sentencias; break; case expr3: sentencias; break; default: sentencias; break; } Sentencias de Bucle: Bucles for for( expr1 inicio; expr2 test; expr3 incremento ) { sentencias; }

El siguiente trocito de cdigo Java que dibuja varias lneas en pantalla alternando sus colores entre rojo, azul y verde. Este fragmento sera parte de una funcin Java (mtodo): //int contador; for( int contador=1; contador <= 12; contador++ ){ switch( contador % 3 ) { case 0: setColor( Color.red ); break; case 1: setColor( Color.blue ); break; case 2: setColor( Color.green ); break; } g.drawLine( 10,contador*10,80,contador*10); } Java permite introducir cadenas en el bucle y soporta el operador coma (,). int i; String s; for (i=0, s=testing;(i<10)&&(s.length()>=1); i++,s=s.substring(1)){ System.out.println(s); } Los bucles do_while y while son igual que en C.

Excepciones
!"

Una excepcin en Java es un objeto que describe una condicin anormal que se ha producido en un fragmento de cdigo. Cuando surge una excepcin se crea el objeto Exception que se enva al mtodo que ha provocado la excepcin. Formas de aparecer una excepcin: o Asincronamente. o Creadas manualmente

!"

!"

try-catch-throw try{ sentencias; } catch( Exception ) { sentencias; }

Excepciones asncronas
!"

Los objetos de excepcin los crea automticamente el intrprete de Java como respuesta a alguna condicin excepcional. El flujo de cdigo se interrumpe en la sentencia que provoc la excepcin y se busca en la pila de llamadas actual cualquier gestor de excepciones. Cuando no se ha establecido ningn gestor de excepciones, se ejecuta el gestor por defecto en tiempo de ejecucin.

!"

!"

try-catch
!"

La instruccin try permite especificar el bloque de cdigo que se debera proteger frente a excepciones. La clusula catch permite resolver la condicin excepcional poniendo las variables en un estado razonable y luego continuar. Pueden tenerse varias clausulas catch.

!"

!"

El bloque de cdigo finally se ejecuta siempre que se produce una excepcin y adems cuando hay una sentencia return.

Ejemplo: class multiCatch{ public static void main(String args[]){ try{ int a=args.length; System.out.println(a= +a); int b=42/a; int c[42]=99; } catch (AritmeticException e){ System.out.println(div por 0: +e); } catch (ArrayIndexOutBoundsException e){ System.out.println(fuera de limites: + e); } finally{ // Terminate the output with a newline System.out.println(\n); } } }
!"

Averiguar la excepcin que se esta produciendo: public class Prueba4{ public static void main(String [] args){ try{ int i = 4 /0; } catch(Exception e){ System.out.println(Mensaje capturado:); e.getMessage();e.printStackTrace(); } } }

Excepciones creadas por el usuario throw


!"

Permite lanzar explcitamente una excepcin. La forma general de una sentencia throw es: Throw InstanciaThrowable;

!"

!"

La instancia Throwable debe ser posteriormente capturada con catch.

creada

por

new

Ejemplo: Class ThrowDemo{ static void demoproc(){ try{ throw new NullPointerException(demo); } catch(NullPointerException e){ System.out.println(capturada dentro de demoproc); throw e; } } public static void main (String args[]){ try{ demoproc(); } catch(NullPointerException e){ System.out.println(capturada de nuevo + e); } }

Programacin orientada a objetos. Clase


!"

Los programas en Java slo se pueden expresar como clases. Un programa completo consta de varias clases almacenadas en distintos archivos fuente. ATENCIN: Java no soporta variables globales ni punteros. Variables de instancia: Son las variables que se declaran dentro de una clase y fuera del mbito de un mtodo concreto. Mtodos: Son subrutinas unidas a una definicin de clase, se declaran al mismo nivel que las variables de instancia.

!"

!"

!"

!"

public class Circle{ public double x,y; public double r; // Mtodos public double circunference(){ return 2*3.14159*r; } public double area(){ return 3.14159*r*r; } }
!"

Cada clase que se crea aade un tipo que se puede utilizar igual que los tipos simples. Referencia a objeto: se utiliza el nombre de la clase como tipo en la declaracin de variables.

!"

Circle c;
!"

El objeto tiene un valor null hasta que se crea el objeto real y esta variable lo apunta.

!"

Operador new: Crea una nica instancia de clase y devuelve una referencia a ese objeto.

Circle c; c = new Circle();


!"

Acceso a los datos del objeto.

Circle c = new Circle(); c.x=2.0; c.y=2.0; c.r=1.0;


!"

El acceso a los mtodos del objeto es igual al acceso de los datos.

Circle c = new Circle(); double a; c.r=2.5; a=c.area(); // igual que un tipo estructurado
!"

Operador this: Se utiliza dentro de los mtodos para referirse al objeto actual. Tambin sirve para ocultar variables de instancia. Puede ocurrir que los nombres de las variables locales o parmetros formales se solapen con las variables de instancia. Para referirnos a las variables de instancia utilizaremos this. Los constructores inicializan un objeto inmediatamente despus de su creacin. No devuelven ningn valor (ni siquiera void) y tienen el mismo nombre que la clase.

!"

!"

!"

!"

!"

public class Circle{ public double x,y,r; // constructor de nuestro mtodo public Circle(double x,double y, double r){ this.x=x;this.y=y;this.r=r; } public double circunference(){ return 2*3.14159*r; } public double area(){ return 3.14159*r*r; } }
!"

Encapsulado: Clase = abstraccin para un conjunto de objetos que comparten la misma estructura y comportamiento. Mecanismos para encapsular la complejidad: marcar cada mtodo o variable de una clase como pblico o privado. PRIVADOS: no pueden se accedidos por otro cdigo que est fuera de la implementacin de la clase. PBLICOS: accesibles por usuarios externos a la clase. PROTEGIDOS: pueden se accedidos nicamente por mtodos de su clase y de clases derivadas de l.

!"

!"

!"

!"

Herencia
!"

Subclase: es una clase que hereda todos los atributos y mtodos de sus antecesores en la jerarqua de clases. Es, por lo tanto, una clase ms especfica. Superclase: antecesor inmediato de una clase. super: se refiere a los constructores de unas superclase. Tambin se puede utilizar para seleccionar directamente mtodos con nombre adems de constructores. ATENCIN: En Java no se puede hacer herencia mltiple, simplemente se traspasa la funcionalidad de los mtodos asociados a la superclase.

!"

!"

!"

Object------Circle------GraphicCircle Math System Component---Container---Panel---Applet Button List


!"

La superclase de una clase es especificado por la clausula extends:

public class GraphicCircle extends Circle{ // automaticamente heredamos las variables y //mtodos de Circle. Color outline,fill; public void draw(DrawWindow dw){ dw.drawCircle(x,y,r,outline,fill); } } Asignaciones: GraphicCicle gc = new GraphicCircle(); // hereda el mtodo area de la clase Circle double area=gc.area();

!"

Operador super: Para llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede hacer referencia al mtodo padre con la palabra clave super:

import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); super.Suma_a_i( j ); } } Sobreescritura: Una subclase puede definir de manera diferente un mtodo de su superclase.

// superclase class Point{ int x,y; Point(int a, int b){ // constructor x=a;y=b; } double distancia(int a,int b){ int dx=x-a; int dy=y-b; return Math.sqrt(dx*dx+dy*dy); } } class Point3D extends Point{ int z; Point3D(int a, int b,int c){ // constructor x=a;y=b;z=c } double distancia(int a,int b){ double dx=(x/z) - a; double dy=(y/z) - b; return Math.sqrt(dx*dx+dy*dy); } }

Polimorfismo
!"

Una clase tiene varios mtodos con el mismo nombre. A estos mtodos se les pasa informacin en forma de parmetros en la llamada al mtodo. Los parmetros determinan el mtodo al que se tiene que llamar. El mtodo de la subclase oculta o anula el mtodo de la clase paterna. La bsqueda del mtodo asociado siempre empieza examinando los mtodos asociados con el objeto. Si no se encuentra ningn mtodo se busca entre los mtodos asociados a la superclase.

!"

!"

!"

!"

// superclase class Point{ int x,y; Point(int a, int b){ // constructor x=a;y=b; } double distancia(int a,int b){ int dx=x-a; int dy=y-b; return Math.sqrt(dx*dx+dy*dy); } double distancia (Point p){ return distancia(int p.x,int p.y); } } class Point3D extends Point{ int z; Point3D(int a, int b,int c){ // constructor x=a;y=b;z=c } double distancia(int a,int b){ double dx=(x/z) - a; double dy=(y/z) - b; return Math.sqrt(dx*dx+dy*dy); } }

Ejemplos: Point3D p1 = new Point3D(30,40,50); Point3D p2 = new Point3D(0,0,0); Point p = new Point(4,6); System.out.println(p1.distancia(p)); System.out.println(p2.distancia(4,6); Otras caractersticas.
!"

Mtodo finalizer(): Java no utiliza destructores ya que recoge de forma automtica los objetos que se salen de su alcance No obstante proporciona un mtodo para cerrar ficheros, finalizar conexiones de red, etc..

!"

protected void finalized() throws IOException{ if (fd != null) close(); }


!"

Clases Abstract: declaran la estructura de la clase sin proporcionar una implementacin completa de cada mtodo. Una clase que contiene un mtodo abstract tambin tiene que ser declarada como abstract.

!"

public abstract class Shape{ public abstract double area(); public abstract double circumference(); } public class Circle extends Shape{ protected double r; protected static final double PI= 3.14159; public Circle(){r=1.0} public Circle(double r){ return PI*r*r;} public double area(){return 2*PI*r;} }

!"

Interfaces: proporcionan un mecanismo para abstraer los mtodos si forzar al usuario a utilizar la herencia. Clases sin variables de instancia y con mtodos declarados pero sin cuerpo. Se diferencian de las clases abstractas en que una clase puede implementar un nmero ilimitado de interfaces, pero solo puede heredarlos de una superclase.

!"

!"

public interface Drawable{ public void setColor(Color c); public void setPosition(double x,double y); public void draw(DrawWindow dw); }
!"

Las clases que quieran utilizar el interface Drawable utilizarn la palabra implements y proporcionarn el cdigo necesario para implementar los mtodos que se han definido en el interface:

public class DrawableRectangle extends Rectangle inplements Drawable{ // new instance variables private Color c; private double x,y; // constructor public DrawableRectangle(double w,double h){ super(w,h);} // implementations of the Drawable methods public void setColor(Color c){this.c=c;} public void setPosition(double x,double y){ this.x=x;this.y=y; } public void draw(DrawWindow dw){ dw.drawRect(x,y,w,h,c); } }

Utilizacin Shape[] shapes= new Shape[3]; Drawable[] drawables = new Drawable[3]; // create some drawable DrawableCircle dc = new DrawableSquare ds = new DrawableRectangle dr (2.3,4.5); shapes DrawableCircle(1,1); DrawableSquare(2,5); = new DrawableRectangle

// Las formas pueden ser asignadas a ambos arrays shapes[0]= dc; shapes[1]=ds; shapes[2]= dr; drawables[0]= dc; drawables[1]=ds; drawables[2]= dr; double total_area=0.0; for (int i=0;i<shapes.length;i++) total_area+= shapes[i].area();

Gestin de eventos
!"

Los eventos slo recibe aquellas componentes que las llaman mediante un sistema de "clases de escucha". Estas implementa un interface genrico con eventos y se registra con un objeto productor de eventos. Es necesario importar las clases java.awt.event.* Ejemplo: Applet que dibuja un punto azul cuando se pulsa un boton del ratn.

!"

!"

!"

import java.awt.Graphics; import java.awt.Color; import java.awt.event.*; public class Puntos extends java.applet.Applet{ final int MAXPUNTOS = 10; int xpuntos[] = new int[MAXPUNTOS]; int ypuntos[] = new int[MAXPUNTOS]; int puntoact =0; public void init(){ setBackground(Color.white); addMouseListener(new M); } class M implements MouseListener{ //Se ha presionado un boton del ratn public void mousePressed(MouseEvent e){ if(puntoact<MAXPUNTOS) ponpunto(e.getX(),e.getY()); }

// soltar el botn del ratn

public void mouseReleased(MouseEvent e){}; // se ha pulsado el botn del ratn public void mouseClicket(MouseEvent e){}; // el puntero del ratn sobre componente public void mouseEntered(MouseEvent e){}; // salir ratn de la componente public void mouseExited(MouseEvent e){}; } void ponpunto(int x,int y){ xpuntos[puntoact]=x; ypuntos[puntoact]=y; puntoact++; repaint(); } public void paint(Graphics g){ g.setColor(Color.blue); for(int i=0;i<puntoact;i++){ g.fillOval(xpuntos[i]-10,ypuntos[i]10,20,20); } } } Movimientos del ratn.
!"

Aadir en init un nuevo evento:

addMouseMotionListener (new M2();


!"

Movimiento de ratn pulsado:

public void mouseDragged(MouseEvent e){};


!"

Movimiento del ratn no pulsado:

public void mouseMoved(MouseEvent e){};

Dibujar mientras el ratn esta pulsado.


!"

Sustituir MouseListener y MouseMotionListener.

class M1 extends MouseAdapter{} class M2 extends MouseMotionAdapter{} Eventos de Teclado


!"

El mtodo keyPressed() captura los eventos de teclado. La clase KeyEvent tiene el mtodo getKeyChar() que devuelve el carcter correspondiente a la tecla que ha producido el evento. El mtodo getKeyCode() devuelve un entero con el cdigo de la tecla. Ejemplo: pintar el carcter tecleado en pantalla. Adems, podemos moverlo por la pantalla. java.awt.Graphics; java.awt.Color; java.awt.event.*; java.awt.Font;

!"

!"

!"

import import import import

public class Teclas extends java.applet.Applet{ char currkey; int currx; int curry; public void init(){ currx=(this.getSize().width/2)-8; curry=(this.getSize().height/2)-16; setBackground(Color.white); setFont(new Font("Helvetica",Font.BOLD,36); addKeyListener(new M()); }

class M extends KeyAdapter{ public void keypressed(Keyevent e){ switch(e.getKeyCode(){ case KeyEvent.VK_DOWN: curry+=5; break; case KeyEvent.VK_UP: curry-=5; break; case KeyEvent.VK_LEFT: curry-=5; break; case KeyEvent.VK_RIGHT: curry+=5; break; default: currkey = e.getKeyChar(); } repaint(); } } public void paint(Graphics g){ if(currkey !=0){ g.drawString(String.valueOf(currkey),currx ,curry); } } }

S-ar putea să vă placă și