PRIMERA CLASE LÍNEAS A INCLUIR EN EL AUTOEXEC.BAT SET CLASSPATH = .;C:\JAVA\LIB SETHOMDRIVE = C; SET HOMEPATH = \JAVA SET JAVA_HOME = C:\JAVA SET PATH = C:\WINDOWS; C:\WINDOWS\COMMAND; C:\JAVA\BIN JAVA Comenzó como un proyecto para desarrollar pequeños electrodomésticos porque creían que era bueno que un lenguaje funcionase en varios tipos de procesadores. Su empresa creadora es Sun. El primer nombre de Java fue OAK y fue presentado en 1995. Algunas características son: • Lenguaje orientado a objetos (se definen los datos del objeto y lo que se puede hacer con él). • Semicompilado o interpretado Código fuente (*.java) código intermedio (*.class) El código intermedio (Byte Codes) está compilado para una máquina virtual (un procesador que no existe). Este código se tiene que volver a interpretar. Las consecuencias son que un programa de Java funciona en cualquier plataforma y es relativamente lento. • El acceso al hardware está bastante restringido, principalmente por razones de seguridad. • Es distribuido (todas las clases no tiene por qué estar en el mismo sitio) • Optimizado para el protocolo TCP/IP. • El compilador es totalmente gratuito. Al kit de desarrollo de Java se le entiende por JDK (Java Development Kit) siendo un conjunto de herramientas para compilar, depurar y ejecutar programas de Java. En Java nos vamos a encontrar con: • Aplicaciones de consola • Aplicaciones de ventana • Applets : programas incrustados en un documento HTML y que se suele ejecutar en Internet. Concepto de herencia Un objeto hereda los atributos de un objeto de categoría superior, en este caso, de una clase superior. Una subclase hereda las variables y los métodos de su clase superior. Concepto de polimorfismo Consiste en tener dos o más métodos con el mismo nombre pero que actuarán de manera distinta según donde 1
estén situados o según los parámetros que le ponemos. Concepto de encapsulado Consiste en ocultar datos o funciones de un determinado objeto para que no sean accesibles ni modificables por el resto de objetos de manera que no se pueda alterar el contenido de esos datos de forma errónea. CUESTIONES LÉXICAS DE JAVA Para los nombres de variable se pueden utilizar espacios en blanco. Hace distinción entre mayúsculas y minúsculas. Los nombres de las clases de las variables o de las funciones sólo pueden empezar por una letra, el signo $ o el guión bajo. La longitud de estos nombres es ilimitada. Los comentarios se pueden hacer de tres maneras: como en C/C++ o usando el comentario de documentación /** ... */. Mediante la herramienta javadoc nos produce un fichero HTML acerca de lo que estemos usando. EJEMPLO: Class ejemplo1 { Public static void main (String args []) { System.out.println(Hola mundo. Hoy es lunes); } } TIPOS SIMPLES DE DATOS • Números enteros: • Int 2.147.48.648 a 2.147.483.647 (32 bits) • Byte −128 a 127 • Long 92233720368547755808 a 9223372036854775807 (64 bits) • Short −32768 a 32767 (16 bits) • Coma flotante: • Float 3,4 * 10 −38 a 3,4 * 10 38 (32 bits) • Double 1,7 * 10 −308 a 1,7 * 10 308 (16 bits) • Caracteres: • Char 0 a 255 o una letra entre comillas simples (16 bits) • Booleanos: 2
• Boolean true o false (1 bit) LITERALES ESPECIALES \ xxx número en base octal \ vxxx número en base hexadecimal \' comilla simple \ comillas dobles \\ barra invertida \ r retorno de carro \ n salto de línea \ f salto de página \ t tabulación \ b retroceso de carácter sin borrar el anterior EJEMPLO: Int x = 15; // valor en decimal Int x = 015; // valor en octal Int x = 0x15; // valor en hexadecimal ÁMBITO DE UNA VARIABLE En Java se pueden definir en cualquier parte del código. Para definir una variable se procede de la siguiente manera: Tipo nombre [= valor]; Globales: se pueden usar en todos los métodos de la clase. Locales: se pueden usar solamente en el ámbito en el que han sido definidas. Parámetros formales: usan los valores de las variables en la función indicada. MATRICES Y VECTORES Para definir un vector se procede de la siguiente manera: Tipo nombre []; EJEMPLO: 3
Int num []; Num = new int [25]; // se suele poner int num [] = new int [25] en vez de lo otro. Para definir una matriz en Java se hace igual que con vectores. Por ejemplo: Int num [] [] = new int [3] [5]; PALABRAS RESERVADAS EN JAVA
Abstract Byte Char Continue Double Final For Implements Int Native Private Return Super This Transient Volatile False Boolean Case Class
4
Default Else Finally Goto Import Interface New Protected Short Switch Throw Try While Null Break Catch Const Do Extends Float If Instanceof Long Package Public Static
5
Synchronized Throws Void True
SEGUNDA CLASE OPERADORES Son símbolos utilizados para realizar distintas operaciones. Los tipos de operadores que hay son: Aritméticos y de bits: − cambia el signo del operando. ~ nos da el complemento bit a bit de ese elemento. ++ incrementa una unidad. −− decrementa una unidad. + operador de suma. + = suma y realiza una asignación. − operador de resta. − = resta y realiza una asignación. * operador de producto. * = producto y realiza una asignación. / división entera. / = división y realiza una asignación. % resto de la división. % = resto y realiza una asignación. & AND bit a bit. & = AND y realiza una asignación. | OR bit a bit.
6
| = OR y realiza una asignación. ^ XOR bit a bit. ^ = XOR y realiza una asignación. >> realiza un desplazamiento a la derecha con propagación del bit de signo. >> = realiza un desplazamiento a la derecha y una asignación. << realiza un desplazamiento a la izquierda con propagación del bit de signo. << = realiza un desplazamiento a la izquierda y una asignación. >>> desplazamiento a la derecha rellenando el hueco con ceros. >>> = desplazamiento rellenando huecos y asignación. Booleanos: sólo devuelven true o false y sólamente trabajan con datos de tipo boolean. ! negación. & AND & = AND y asignación. | OR | = OR y asignación. ^ XOR ^ XOR y asignación. Relacionales: también devuelven true o false usándose para hacer comparaciones. > mayor que > = mayor o igual que < menor que < = menor o igual que == igual que ! = distinto que Lógicos: también devuelven true o false y se usan para realizar expresiones complejas. && AND
7
|| OR ! NOT EJEMPLO: class Prueba{ public static void main (String args []){ int x = 9; int y = 5; int a = ~x; int b = −x; int d = x/y; int e = x%y; int f = x&y; int g = x|y; int h = x^y; int i = x>>2; int j = x>>>2; int k = x<<2; System.out.println("x:"+x+"\n y" + y+ "\n x en binario:"+Integer.toBinaryString(x)+ "\n y en binario:"+Integer.toBinaryString(y)+ "\n C1 de x:"+Integer.toBinaryString(a)+ "\n cambio de signo de x" + b + "\n x/y:"+d+ "\n x%y:"+e+ "\n AND bit a bit:"+Integer.toBinaryString(f)+ "\n OR bit a bit:"+Integer.toBinaryString(g)+
8
"\n XOR bit a bit:"+Integer.toBinaryString(h)+ "\n Desp. 2 de bits derecha con bit signo\n\t"+ Integer.toBinaryString(i)+ "\n Desp. 2 bits derecha con relleno \n\t" + Integer.toBinaryString(j)+ "\n Desp. 2 bits a la izquierda:\n\t"+ Integer.toBinaryString (k)); } } SENTENCIAS DE CONTROL Selección if cuyo formato es: If(condición){ Código; } [else{ código; }] switch cuyo formato es: switch(variable){ case valor 1: sentencias; break; [default: sentencias]; Repetición for cuyo formato es: for(incialización;condición;incremento){
9
sentencias; } while cuyo formato es: while(condición){ sentencias; } do...while cuyo formato es: do{ sentencias; }while(condición); CLASES Se puede definir como una entidad o un tipo de dato que contendrá por un lado las variables y por otro lado los métodos o funciones que queremos. En Java, tenemos las clases estándar (las que vienen con el compilador) y las clases definidas por el usuario las cuales contendrán las variables y métodos que queramos incluir. El formato para crear una clase es: Class nombre_clase [extends clase_madre] [implements interface]{ Tipo variable instancia; // global Tipo nombre método (parámetros){ Tipo variable método; // local Sentencias; } } Para crear un objeto de una determinada clase se pone: Nombre clase nombre objeto = new nombre clase(); // constructor Un constructor es un tipo especial de método cuyo nombre es igual al de la clase y que se ejecuta cuando creamos un objeto o una instancia de esa clase. EJEMPLO: Class Caja{
10
Double ancho, alto, largo; } class Ejem1{ public static void main (String args []){ Caja micaja = new Caja(); Micaja.ancho = 10; Micaja.alto = 15; Micaja.largo = 2; Double volumen = micaja.alto * micaja.ancho * micaja.largo; System.out.println(Volumn:+volumen); } } VARIABLES REFERENCIA Se refieren a una variable que ya existe. Van precedidas por &. Si por ejemplo tenemos dos variables a y b de tipo int cuyos valores son respectivamente 5 y a, cuando a la variable a le demos valor 7 b seguirá valiendo 5. Si queremos que b valga lo mismo que cuando le demos un valor a la variable a habrá que definir b de la siguiente manera: int &b = a; SOBRECARGA PARAMÉTRICA Consiste en escribir el mismo método con el mismo nombre pero pasándole distintos valores de forma que depende de los que le pasemos se ejecutará uno u otro. También se pueden pasar un objeto en vez de pasarle valores. EJEMPLO: Class Caja{ Double ancho, alto, largo; Caja(){ Ancho = 10; Alto = 10; Largo = 10; } 11
Caja (double an, double al, double lar){ Ancho = an; Alto = al; Largo = lar; } } EJEMPLO: Class Test{ Int a, b; Test(int i, int j){ a = i; b = j; } boolean igual(Test.obj) { if(a == obj.a && b == obj.b) return true; } else return false; } } class EjObParam{ public static void main(String args []){ Test obj1 = new Test(100,22), Test obj2 = new Test (−1, −2); Test obj3 = new Test (100,22); System.out.println(ob1 == ob2 + obj1.igual(ob2));
12
System.out.println(ob1 == ob3 + ob1.igual(ob3)); } } CONTROL DE ACCESO Public: podrá usarse desde la clase en la que está definida y desde todas las demás. Private: forzamos a la variable o al método a que sólo se pueda usar en la clase en la que fue definida. Protected: es similar al private, pero si existe herencia la clase hija sólo podrá usar las public y las protected. EJEMPLO: Class Test{ Int a; Public int b; Private int c; Void establecer_c(int i){ c = i; } int obtener_c(){ return c; } } class ControlDeAcceso{ public static void main(String args []){ test ob = new Test (); ob.a = 10; ob.b = 20; // ob.c = 30; Esto da error ob.establecer_c(40);
13
System.out.println(a,b,c: + ob.a + ob.b + ob.obtener_c()); } } EJEMPLO DE HERENCIA: Class A{ Int i, j; Void mostrar (){ System.out.println(i y j + i + j); } class B extends A{ int k; void mostrar2(){ System.out.println(k: + k); } void suma (){ System.out.println(i + j + k: (i + j + k)); } } class Herencia{ public static void main(String args []){ A ob1 = new A(); B ob2 = new B(); ob1.i = 10; ob1.j = 20; ob1.mostrar (); ob2.i = 5;
14
ob2.k = 9; ob2.mostrar(); ob2.mostrar2(); ob2.suma(); } } OPERADOR super Tiene dos utilidades. Se utiliza para llamar al constructor de una superclase (un clase madre) y siempre debe ser la primera línea del método que lo llame. La segunda utilidad es la de acceder a un miembro de la clase madre que ha sido ocultado por un miembro de la clase hija. EJEMPLO: class Caja{ private double ancho, largo, alto; Caja(Caja ob){ ancho = ob.ancho; alto = ob.alto; largo = ob.largo; } Caja(double an, double al, double lar){ ancho = an; alto = al; largo = lar; } Caja(){ ancho = −1; alto = −1; largo = −1;
15
} Caja(double lon){ ancho = alto = largo = lon; } double volumen(){ return ancho * alto * largo; } } class CajaconPeso extends Caja{ double peso; CajaconPeso(CajaconPeso c){ super (c); peso = c.peso; } CajaconPeso(double an, double al, double lar, double pe){ super(an,al,lar); peso = pe; } CajaconPeso(){ super(); peso = −1; } CajaconPeso(double longitud, double pe){ super(longitud); peso = pe; }
16
} class EjemploSuper1{ public static void main(String args []){ CajaconPeso ob1 = new CajaconPeso(10,10,15,34.3); CajaconPeso ob2 = new CajaconPeso(2,3,4,0.77); CajaconPeso ob3 = new CajaconPeso(); CajaconPeso ob4 = new CajaconPeso(6,7.3); CajaconPeso copia = new CajaconPeso(ob1); double vol; vol = ob1.volumen(); System.out.println("Vol.ob1="+vol); System.out.println("peso="+ob1.peso); vol = ob2.volumen(); System.out.println("Vol.ob2="+vol); System.out.println("peso="+ob2.peso); vol = ob3.volumen(); System.out.println("Vol.ob3="+vol); System.out.println("peso="+ob3.peso); vol = ob4.volumen(); System.out.println("Vol.ob4="+vol); System.out.println("peso="+ob4.peso); vol = copia.volumen(); System.out.println("Vol.copia="+vol); System.out.println("peso="+copia.peso); } }
17
CLASE ABSTRACTA Se caracteriza porque tiene definido los datos y los métodos de esa clase sin código. Para declarar una clase abstracta hay que poner abstract delante del nombre de la clase. EJEMPLO: abstract class Figura{ double dim1; double dim2; abstract double area (); } Una clase abstracta no se puede instanciar, es decir, no se pueden hacer copias de esa clase. Sirven para usar la herencia; siempre se heredan. Cada clase hija de una clase abstracta deberá sobrescribir esos métodos. OPERADOR final Su utilidad principal es para evitar la herencia, es decir, para que una clase adquiera características de otra. EJEMPLO: final class A { sentencias; } class B extends A { //error sentencias; } La segunda utilidad que posee este operador es para evitar la sobre escritura de métodos. EJEMPLO: Class A{ final void f1(){ sentencias; } }
18
class B extends A{ void f1() { //error sentencias; } } MÉTODO main public static void main(String args []) public accesible desde cualquier parte. Static no se puede referenciar desde otras clases. Void sin valor String args [] array de objetos de cadenas. Le podemos pasar parámetros al ejecutarlo. Por ejemplo: Java eje1 hola adiós EJEMPLO: Class Saludo{ public static void main(String args []){ System.out.println(Hola+args[0]); } } CLASES ESTÁNDAR Básicas (java.lonh). Para poder utilizarlas debemos poner antes de nada import java.long.* Number: es una clase abstracta que contiene los tipos numéricos int, long, float, double. Tiene cuatro métodos: double doubleValue(); double floatValue(); int intValue(); 19
long longValue(); Las clases que cuelgan de Number son Double, Float, Integer y Long. Los métodos de Double y Float son: boolean equals(object objfl objlo); devuelve true si el objeto que pasamos como parámetro es igual al objeto al que pertenece. boolean isInfinite(); devuelve true si ese número es infinito. static boolean isInfinite(float o double num); boolean isNan(), devuelve true si el contenido del objeto al que se hace referencia es un no número. static boolean isNan(double o float num); string toString(); devuelve el valor de ese número como una cadena de caracteres. static String toString(float o double num); Los constructores de Float son: Float (double num); Float (float num); Float (string cadena); Los constructores de Double son: Double (double num); Double (string cad); EJEMPLO: Class claseEstandar1{ public static void main(String args []){ Double ob1 = new Double(3.14); Double ob2 = new Double(341E−2); System.out.println(ob1 == ob2 + ob2.equals (ob1)); } } Los constructores de Integer y Long son: Integer (int num); 20
Integer (string cad); Long (long num); Long (string cadena); Los métodos comunes son: boolean equals(object objint objlong); devuelve true si el objeto que pasamos como parámetro es igual al objeto al que pertenece. static int parseInt(string cadena[int base]) devuelve la parte entera de una cadena de cadena de caracteres. static long parseLong(string cadena [int base]); static String toBinaryString(int o long num); convierte un número en una cadena. static String toHextString(int o long num); convierte un número a una cadena en hexadecimal. static String toOctalString(int o long num); string toString(); devuelve la representación de ese número a una cadena de caracteres. static Integer valueOf(String cad [base]) hace la conversión en la base que le indiquemos. static Long valueOf(String cad[base]) TERCERA CLASE Character: sirve para trabajar con datos de tipo char. El constructor de esta clase es: Character (char objeto); Los métodos de esta clase son: static boolean isDefined(char c) devuelve true si el carácter está definido en el código Unicode (65536 caracteres diferentes). static boolean isDigit(char c) nos indica si el carácter pasado es un dígito. static boolean isJavaLetter(char c) devuelve true si este caracter se puede utilizar como primer caracter para un nombre de variable o de método. static boolean isJavaLetterOrDigit(char c) devuelve true si este carácter se puede utilizar como primer carácter para un nombre de variable o método o si es un dígito. static boolean isLetter(char c) devuelve true si ese carácter es una letra. static boolean isLetterOrDigit(char c) devuelve true si ese carácter es una letra o un número. static boolean isLowerCase(char c) devuelve true si ese carácter es una letra minúscula. static boolean isSpace(char c) devuelve true si ese carácter es un espacio. static boolean isTittleCase(char c) devuelve true si es un carácter de Unicode. 21
static boolean isUpperCase(char c) devuelve true si es mayúscula. EJEMPLO: If(Character.isDigit(`c')); static char toLowerCase (char c) convierte a minúsculas el carácter indicado. static char toUpperCase(char c) convierte a mayúsculas el carácter indicado. static char toLittleCase(char c) devuelve el carácter como el más cercano a Unicode. static char farDigit(int num [,int base]) devuelve el carácter del código Unicode correspondiente a ese número. static int digit(char c [,int base]) devuelve el número Unicode correspondiente a ese carácter. EJEMPLO: class Caracteres{ public static void main(String args []){ char frase [] = { `a', `bB', `3', `?', ` ' }; for(int i = 0; i
boolean booleanValue (); devuelve un dato de tipo booleano dependiendo del objeto que sea. boolean equals(Object objeto, boolean) compara dos datos de tipo boolean. String toString() devuelve una representación en cadena del dato booleano. Static boolean valueOf(string s) devuelve el valor booleano de la cadena pasada. Math: contiene métodos y funciones para trabajar en coma flotante y que trabajan sobre geometría y trigonometría. Tiene dos constantes: double E que vale aproximadamente 2,72 cuya referencia se hace: Math.E double PI que vale aproximadamente 3,14 cuya referencia se hace: Math.PI Los métodos de esta clase son: static double sin(double ángulo) devuelve el seno del ángulo expresado en grados. static double cos(double ángulo) devuelve el coseno del ángulo expresado en grados. static double tan(double ángulo) devuelve la tangente de ángulo expresado en grados. static double asin(double num) devuelve el arcoseno del número indicado. static double acos(double num) devuelve el arcocoseno del número indicado. static double atan(double num) devuelve la arcotangente del número indicado. static double atan2(double x, double y) devuelve el ángulo cuya tangente vale x partido de y. static double exp(double num) devuelve el número e elevado al número pasado como parámetro. static double pow(double x, double y) devuelve el número x elevado a y. static double sqrt(double num) devuelve la raíz cuadrada del número indicado. static [int, long, double, float] abs([int, long, double, float] num) devuelve el valor absoluto del número expresado. static double ceil(double num) devuelve el número entero inmediatamente superior. static double floor(double num) devuelve el número entero inmediatamente inferior. static [int, long, double, float] max([int, long, double, float] x, [in, long, double, float] y) devuelve el mayor de los dos números. static [int, long, double, float] min([int, long, double, float] x, [in, long, double, float] y) devuelve el menor de los dos números. static [int, long, double, float] round([double, float] num) devuelve el número redondeado.
23
static double IEEERemainder(double dividendo, double divisor) halla la división devolviendo el resto. static double random() devuelve un valor aleatorio entre 0 y 1. GESTIÓN DE CADENAS En Java hay dos clases que se encargan principalmente de esta cuestión. Son la clase String y la clase StringBuffer. Se diferencian en que con la primera el objeto creado no se puede modificar, cosa que sí se puede hacer con la segunda. Los constructores de la clase String son: String cadena = new String(); Char a[] = {`a', `b', `c'}; String cad = new String (a); String cad2 = new String(cad); String cad3 = new String(a,0,1); String cad4 = hola; String cad5 = new String(hola); Los métodos de esta clase son: int length() contiene el número de caracteres de esa cadena. char charAt(int pos) nos devuelve el caracter de la posición que indiquemos. void getChars(int in, int fin, char destino[], int destino_inicio) coge los caracteres entre inicio y final y los copia en el array destino a partir de la posición indicada. char[] toCharArray() guarda en un array de caracteres el contenido del objeto String. boolean equals(String cad) devuelve true si el objeto pasado es igual al que le aplico el método. boolean equalsIgnoreCase(String cad) devuelve true si el objeto pasado es igual al que le aplico el método ignorando mayúsculas y minúsculas. boolean regionMatches(boolean ignorar mayúsculas, int inicio, String cad2, int inicio 2, int número caracteres) compara una zona de una cadena con otra subcadena. Por ejemplo: String c = Hoy es lunes; String d = Hoy Lunes, c.regionMatches(true,7,d,4,5); boolean startsWith(String cad) devuelve true si el objeto string comienza por el valor que yo le pase. boolean endsWith(String cad) comprueba si el objeto termina con la cadena que yo le indique. 24
int compareTo(String cad) devuelve un número menor que cero si mi cadena es menor que la otra que yo le paso; igual que cero si son idénticas y mayor que cero si la cadena cad es mayor a donde yo lo aplico. Int indexOf(int o char caracter[,inicio]) devuelve un número que es la posición que ocupa un carácter dentro de ese objeto String. Si se omite inicio empezará desde cero. int lastIndexOf(int caracter o string cadena [,inicio]) devuelve la última coincidencia con esa cadena de caracteres. string substring(int inicio [,int fin]) devuelve un objeto de tipo string desde incio hasta final. string concat(String cad) hace lo mismo que el operador +. string replace(char original, char sustituto) devuelve una cadena en la cual sustituyo un caracter por otro. string trim () copia una cadena en otra pero eliminando los espacios que pudisese haber por el principio o al final. string toLowerCase () devuelve el objeto en minúsculas. string toUpperCase () devuelve el objeto en mayúsculas. Los constructores de la clase StringBuffer son: StringBuffer cad = new StringBuffer (por defecto son 16 caracteres) StringBuffer cad = new StringBuffer (int x) (se le indica la capacidad) StringBuffer cad = new StringBuffer (String c) (le indicamos la cadena de caracteres) Sus métodos son: int length() hace lo mismo que con String. int capacity () devuelve el espacio reservado en un objeto. void ensureCapacity(int capacidad) asigna la capacidad del objeto. void setLength(int longitud) establece la longitud de este objeto. char charAt(int x) hace lo mismo que con String. void setCharAt(int pos, char carácter) pone un carácter en la posición indicada. void getChars(int ini, int fin, char destino[], int destino inicio) hace lo mismo que con String. StringBuffer append(string cad) añade una cadena, un número o un objeto a la cadena ya existente. StringBuffer insert(int índice) inserta una cadena, un número o un objeto a partir de la posición indicada con índice. StringBuffer reverse() devuelve la cadena al revés. 25
ENTRADA POR CONSOLA Hay dos métodos dentro de la clase System.in que se ocupan de realizar esta tarea y son los siguientes: int read() throws IOException lee sólamente un carácter. final String readLine() lee cadenas enteras. EJEMPLO: import java.io.*; class EjemploRead{ public static void main(String args[]) throws IOException{ char c; System.out.prinln(Introduzca caracteres. 'q' para salir); do{ c = (char) System.in.read(); //molde System.out.println (c); }while(c!='q'); } } EJEMPLO: import java.io.*; class EjemploReadLine{ public static void main(String args[]) throws IOException{ DataInputStream dato = new DataInputStream (System.in); String cad [] = new String [100]; int in; System.out.printl(Introduzca frases \n `fin' para salir); for(i = 0; i<100; i++){ cad [i] = dato.readLine();
26
if(cad[i].equals(fin)) break; } for(int x = 0; x
27
public class Cuenta{ public static void main(String args[]){ Balance actual [] = new Balance[3]; actual[0] = new Balance(Pepe, 123.23); actual[1] = new Balance(Luis,31.1); actual[2] = new Balance(Juan, 300.9); for(int i = 0; i<3; i++){ actual[i].verSaldo(); } } } Algunos paquetes integrados en el Kit de Desarrollo de Java son: java.applet contiene clases que se usan con los applets. java.awt contiene clases para trabajar con componentes GUI (para realizar una interfaz de usuario). java.io contiene clases para utilizar ficheros. java.lang contiene clases para trabajar con el propio lenguaje java. java.net da soporte al protocolo TCP/IP. java.util contiene clases de diversa utilidad. GESTIÓN DE EXCEPCIONES Son unos tipos de objetos utilizados para controlar posibles errores en tiempo de ejecución, no en tiempo de compilación. El formato para gestionar las excepciones es: try{ (sentencias que pueden dar error); } catch(tipo de excepción nombre){ (sentencias para este error); } 28
[finally{ (sentencias); }] EJEMPLO DE ERROR SIN CONTROL: class Excepciones1{ public static void main(String args[]){ int d = 0; int r = 30/d; System.out.println(La división es:+r); } } EJEMPLO DE ERROR CON CONTROL: class Excepciones2{ public static void main(String args[]){ int d, r; try{ d = 0; r = 42/d; System.out.println(La división es:+r); } catch(ArithmeticException ae){ System.out.println(ERROR AL INTENTAR DIVIDIR POR 0); } } } EJEMPLO DE TRY ANIDADO:
29
class TryAnidados{ public static void main(String args[]){ try{ int a = args.length; int b = 42/a; System.out.println(a=+a); try{ if(a == 1) a=a/(a−a); if(a == 2){ int c[] = {1}; c[44] = 3; } } catch(ArrayIndexOutOfBoudsException aio){ System.out.println(ÍNDICE FUERA+aio); } } catch(ArithmeticException ae){ System.out.println(DIVISIÓN POR CERO +ae); } } } Para lanzar la excepción en vez de capturarla existe la palabra reservada throw. Por ejemplo: class EjemploThrow{ static void demo(){ try{
30
throw new NullPointerException(demo); } catch(NullPointerException npe){ System.out.println(Captura en demo()); throw npe; } } public static void main(String args[]){ try{ demo(); } catch(NullPointerException npes){ System.out.println(Captura en main()); } } } La sentencia throws la usaremos cuando utilicemos un método que hace referencia a una excepción pero que no está definida ni capturada dentro de ese método. El formato es: Tipo nombre método(parámetros) throws lista de excepciones Las excepciones que más se producen son: ArithmetciExcepcion errores de tipo aritméticos. ArrayIndexOutOfBoundsException índice del array fuera de su extensión. ArrayStoreException cuando se asigna a un elemento de la matriz un tipo incompatible. ClassCastException al producirse una conversión de tipo no válido. IllegalArgumentException al pasar un parámetro inválido a una función. IllegalMonitorStateException al intentar realizar una tarea ilegal. IllegalThreadStateException al solicitar una operación no compatible con el estado actual de una tarea. 31
NegativeArraySizeException al crear un array con tamaño negativo. NullPointerException al intentar acceder a un dato nulo. NumbreFormatException al realizar una conversión inválida de una cadena de texto a número. SecurityException al intentar violar la seguridad. CloneNotSupportedException intentar duplicar un objeto que no puede serlo. IllegalAccessException al acceder a una clase o miembro de una clase que no es accesible. InstantationException al crear un objeto de una clase abstracta. InterruptedException al interrumpir una tarea a otra tarea. QUINTA CLASE APPLETS Son aplicaciones de Java que para funcionar necesitan estar incrustadas en un documento HTML. Para incluirlo se utiliza la etiqueta
. Los parámetros son: Code = nombre de la clase debe ser igual al nombre de la clase del applet. Width = número indica el ancho de la zona de acción del applet. Height = número altura de la zona de acción del applet. Codebase = directorio se utiliza para especificar el directorio en el cual está la clase que queramos cargar. Dentro de esta etiqueta nos podemos encontrar con la etiqueta abierta
que posee dos parámetros obligatorios que son: Name = nombre da un nombre a ese parámetro. Value = valor Todos los parámetros pasados a un applet son de tipo String. Para poder ejecutar un applet lo podemos o ver en el navegador o usar el comando appletviewer pasándole como parámetro el nombre de la página Htm donde se encuentre el applet. EJEMPLO: import java.applet.*; import java.awt.*; public class PrimerApplet extends Applet{ public void paint(Graphics g){
32
g.drawString(¡Hola Mundo!, 20, 20); } } Las applets de Java no tienen función main al contrario de cualquier aplicación de Java. La estructura principal de un applet es: public void init(){} se ejecuta una vez, cuando lo cargamos y en este método inicializaremos las variables a utilizar. public void paint(Graphics g){} se ejecuta cada vez que se debe repintar el applet. public void stop(){} contendrá las sentencias que se ejecutan cuando el navegador abandona la página. public void destroy(){} contendrá las sentencias que se ejecutarán cuando se destruya el applet. public void start(){} contendrá las instrucciones para reiniciar el applet. Para crear un applet lo primer que hay que hacer es crear un elemento contenedor que contendrá los distintos componentes del applet. La manera de definir componentes, primero deberemos declarar el que esté más afuera e iremos añadiendo elementos de dentro a afuera; los componentes definidos se introducen en sus contenedores y por último los subcontenedores se introducen en el general. Otros métodos adicionales para trabajar con un applet de Java son: String getAppletInfo() devuelve una cadena de información del applet. AudioClip getAudioClip(URL o String nombre) crea un objeto de tipo AudioClip que contiene un fragmento de sonido. URL getCodeBase() devuelve la dirección donde se encuentra el applet. URL getDocumentBase() devuelve la URL donde está el código HTML que llama al applet. Image getImage(URL o String imagen) crea un objeto de tipo Image y guarda en él la imagen que esté donde le especifiquemos. Boolean isActive() devuelve true si el applet está activo o false si no está activo. void play(URL o String nombre) carga un sonido especificado y si lo encuentra lo reproduce. void resize(int ancho, int alto) redimensiona el applet. void resize(Dimension d) redimensiona el applet. void showStatus(String cad) muestra un mensaje en la barra de estado del navegador. String getParameter(String p) recoge el valor del parámetro cuyo nombre lo especifiquemos y que será un parámetro que esté dentro de una etiqueta param.
33
EJEMPLO: String cad = getParameter(valor); MÉTODOS DE GRÁFICOS SIMPLE public void drawString(String cad, int x, int y) public void SetBackground(Color c) color de fondo. public void setForeground(Color c) color de dibujo. public Color getForeground () obtiene el color de dibujo. public Color getBackground() obtiene el color de fondo. public Color repaint() repinta el applet. public Color repaint(int izquierda, int superior, int ancho, int alto) repinta el área especificada por los parámetros. public Color repaint(long tiempo) repinta el applet cada x tiempo indicándolo en milisegundos. Public Color repaint(long tiempo, int izquierda, int superior, int ancho, int alto) repinta el área especificada por los parámetros cada x tiempo. CLASE COLOR Los constructores de esta clase son: Color(int red, int green, int blue) indica la cantidad de rojo, verde y azul variando entre 0 y 255. Color(int valor_RGB) pasamos un valor hexadecimal correspondiente al número HTML de ese color. EJEMPLO: 0XFF0000 Los métodos de esta clase son: int getRed() obtendremos la cantidad de rojo. int getBlue() obtendremos la cantidad de azul. int getGreen() obtendremos la cantidad de verde. int getRGB() obtendremos el color con el formato RGB. Hay unas caonstantes que especifican colors ya definidos que son black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink. EJEMPLO: setForeground(new Color(128,128,128); EJEMPLO: import java.awt.*; 34
import java.applet.*; public class Métodos1 extends Applet{ String cad; public void init(){ setBackground(Color.cyan); setForeground(Color.red); cad = dentro de init(); } public void start(){ cad+= dentro de start(); } public void paint(Graphics g){ cad+=dentro de paint(); g.drawString(cod,10,10); } } EJEMPLO DE MARQUESINA: import java.awt.*; import java.applet.*; public class Marquesina extends Applet implements Runnable{ String cad = " TEXTO EN MOVIMIENTO "; Thread t = null; public void init(){ setBackground(Color.red); setForeground(Color.white); t = new Thread(this);
35
t.start(); t.suspend(); } public void start(){ t.resume(); } public void run(){ char c; for(;;){ try{ repaint(); Thread.sleep(100); c = cad.charAt(0); cad = cad.substring(1,cad.length()); cad+=c; } catch(InterruptedException ie){} } } public void stop(){ t.suspend(); } public void destroy(){ if(t!=null){ t.stop(); t = null;
36
} } public void paint(Graphics g){ g.drawString(cad,50,30); } } SEXTA CLASE GESTIÓN DE EVENTOS Es el mecanismo que posee Java para controlar todas las posibles acciones del usuario. Pueden ser eventos de ratón o eventos de teclado. Los eventos del ratón son: boolean mouseDown (Event e, int x, int y) se usa para controlar la pulsación de un botón del ratón. boolean mouseDrag (Event e, int x, int y) se ejecutará cuando movamos el ratón con un botón pulsado. boolean mouseEnter (Event e, int x, int y) se ejecuta al entrar en el applet. boolean mouseExit (Event e, int x, int) se ejecuta al salir de la zona de acción del applet. boolean mouseMove (Event e, int x, int y) se ejecuta al mover el ratón. boolean mouseUp (Event e, int x, int y) se ejecuta cuando se suelta el botón del ratón. EJEMPLO: import java.awt.*; import java.applet.*; public class Raton extends Applet{ String cad = ; int x = 0, y = 0; public void init(){ setBackground(Color.blue); } public boolean mouseDown(Event e, int a, int b){ x = a; 37
y = b; cad = Botón pulsado; repaint(); return true; } public boolean mouseUp (Event e, int a, int b){ x = a; y = b; cad = Botón soltado; repaint(); return true; } public boolean mouseMove(Event e, int a, int b){ showStatus(Posición del ratón:+a+,+b); return true; } public void paint(Graphics g){ g.drawString(cad,x,y); } } Para controlar los eventos de teclado tenemos los siguientes métodos: boolean keyDown(Event e, int tecla) se ejecuta cuando se pulsa una tecla. boolean keyUp(Event e, int tecla) se ejecuta si se suelta una tecla. Dentro de la clase Event hay una serie de constantes: las teclas de función (F1 − F12), PGDOWN, PGUP, LEFT, RIGHT, DOWN, HOME, END. EJEMPLO: import java.awt.*; 38
import java.applet.*; public class Teclado extends Applet{ String cad = ; public void init(){ SetBackground(Color.red); } public boolean keyDown(Event e, int tecla){ swith(tecla){ case Event.F10: cad = F10; break; case Event.PGUP: cad =RegPag; break; case `b': cad = Tecla b; break; default: cad = Ni F10, ni RegPag, ni b; break; } repaint(); return true; } public void paint(Graphics g){ g.drawString(Tecla:+cad,10,10);
39
} } AWT (Abstract Windowing Toolkit) Juego de herramientas de ventana abstracta. Son un conjunto de clases que utilizaremos para crear ventanas, applets y demás elementos relacionados con ellas. Las clases definidas dentro de este paquete son:
BorderLayout Button Canvas CardLayout Checkbox Checkbox Group Choice Color Container Component Dialog Dimension List Event FileDialog FlowLayout FlowLayout Font FontMetrics Frame Graphics 40
GridBagConstraints GridBagLayout GridLayout Image Insets Label MediaTracker Menu MenuBar MenuComponent MenuItem Panel Point Polygon Rectangle Scrollbar TextArea TextField Toolkit Window
CONTENEDOR La estructura de la clase container es la siguiente: • Component • TextComponent • TextArea • TextField 41
• Scrollbar • Label • Container • window • Frame • Dialog • FileDialog • Panel • Applet • Canvas La clase Panel crea una ventana sin barra de título, ni menús ni bordes, etc. Podemos dibujar o colocar componentes. Un panel se puede redimensionar usando resize(). Para añadir un elemento a un panel utilizaremos: Nombre_elemento.add(); La clase window es abstracta. Para crear una, usaremos o Frame o Dialog. CLASE FRAME Para crear un frame tenemos dos constructores: Frame() creará uno sin título. Frame(String título); Los métodos de esta clase son: void resize (int ancho, int alto) redimensiona la ventana al tamaño especificado. void resize (Dimension d) void show () muestra la ventana. void hide () si la queremos ocultar. Dimension size() obtendremos las dimensiones del frame. void setTitle (String cad) estableceremos el título de la ventana. void setResizable (boolean b) indicaremos si ese frame se peude redimensionar o no. EJEMPLO: import java.awt.*; 42
import java.applet.* class marco extends Frame{ marco(String título){ super(título); } public boolean handleEvent(Event obj){ if(obj.id == Event.WINDOW_DESTROY){ hide(); return true; } return super.handleEvent(obj); } public void paint (Graphics g){ g.drawString(Ventana hija, 40, 10); } } public class awt1 extends Applet{ marco f; public void init(){ f = new marco(Ventana creada desde el Applet); f.show(); f.resize(250,100); } public void stop(){ f.hide(); }
43
public void start(){ f.show(); } public void paint(Graphics g){ g.drawString(El Applet, 10,20); } } SÉPTIMA CLASE MÉTODOS DE GRÁFICOS SIMPLES II Van dentro del método paint y están asociados a un objeto de tipo graphics para trabajar con gráficos. void drawLine(int x1, int y1, int x2, int y2) dibuja una línea. void drawRect(int x, int y, int ancho, int alto) dibuja un rectángulo sin relleno. void fillRect(int x, int y, int ancho, int alto) dibuja un rectángulo con relleno. void drawRoundRect(int x, int y, int ancho, int alto) dibuja un rectángulo hueco con las esquinas redondeadas. void fillRoundRect(int x, int y, int ancho, int alto) dibuja un rectángulo relleno con las esquinas redondeadas. void drawOval(int x, int y, int ancho, int alto) dibuja una elipse sin relleno. void fillOval (int x, int y, int ancho, int alto) dibuja una elipse con relleno. void drawArc(int x, int y, int ancho, int alto, int áng_ inicio, int ang_ barrido) dibuja un arco. void drawPolygon(int x[], int y[], int num) dibuja un polígono hueco. El array x contiene todas las coordenadas x y el array y contiene todas las coordenadas de y. El último parámetro se utiliza para indicar el número de vértices. void fillPolygon(int x[], int y[], int num) dibuja un polígono igual que el anterior pero en este caso relleno. EJEMPLO: import java.awt.*; import java.applet.*; public class Gráficos1 extends Applet{ int incremento = 25;
44
int max = 500; int min = 200; Dimension d; public void paint(Graphics g){ d = size(); g.drawLine(0, 0, d.width−1, d.height−1); g.drawLine(0, d.width−1, d.height−1,0); } public boolean mouseUp(Event e, int x, int y){ int ancho = d.width+incremento; int alto = d.height+incremento; resize(ancho, alto); return true; } } CLASE Font Nos va a permitir establecer una fuente para trabajar con ella. Esta clase tiene tres variables que nos infrman de la fuente activa: String name nombre de la fuente. int size tamaño en pixeles. int style estilo de la fuente. El constructor que hay que utilizar es: Font(String nombre, int estilo, int tamaño); El nombre puede ser: Dialog, Courier, Arial, TimesRoman, Helvetica. El estilo puede ser: Font.BOLD, Font.ITALIC, Font.PLAIN; Los métodos de esta clase son: String getFamily() nos devuelve la familia a la que pertenece esa fuente. 45
String getName() obtenemos el nombre completo de la fuente. int getSize() obtenemos el tamaño en puntos de esa fuente. int getStyle() obtenemos el estilo de esa fuente. boolean isBold() averiguamos si está en negrita. boolean isItalic() averiguamos si está en cursiva. boolean isPlain() averiguamos si es normal. String toString() devuelve una representación del objeto de tipo Font. String[] getFontList() devuelve un array de cadenas con los nombres de las fuentes que están disponibles. EJEMPLO: impot java.awt.*; import java.applet.*; public class Fuentes extends Applet{ public void paint(Graphics g){ Font f = new Font(Courier, Font.BOLD,18); SetFont(f); g.drawString(Prueba Courier,10,40); f = new Font(Helvetica, Font.BOLD|Font.ITALIC,20); setFont(f); g.drawString(Prueba Helvética, 10,100); } } EJEMPLO: import java.awt.*; import java.applet.*; public class Fuentes_Disponibles extends Applet{ public void paint(Graphics g){
46
String lista[]; lista = getToolkit().getFontList(); for(int i = 0; i
47
EJEMPLO: import java.awt.*; import java.applet.*; public class CentrarTexto extends Applet{ Font f = new Font(Helvetica, Font.BOLD,18); public void paint (Graphics g){ Dimension d; g.setColor(Color.white); g.fillRect(0, 0, d.width, d.height); g.setColor(Color.black); g.setFont(f); centrar(Esto está cemtrado, d.width, d.height, g); g.drawRect(0, 0, d.width, d.height); } public void centrar(String cad, int ancho, int alto, Graphics g){ FontMetrics fm = g.getFontMetrics(); int x = (ancho − fm.stringWidth(cad))/2; int y = 50; // Aquí calcularemos el alto g.drawString(cad, x, y); } } OCTAVA CLASE AWT (COMPONENTES Y CONTROLES) Para añadir un complemento se utiliza el método add(). Cuando queramos añadir un componente al contenedor lo indicaremos así: contenedor.add(componente). Para eliminar un complemento de la aplicación tenemos: remove(componente) quita uno en concreto.
48
RemoveAll() quita todos los componentes. Para controlar los eventos de los componentes se utiliza: public boolean action (Event e, Object ob) Este objeto tiene una seire de variables con las que vamos a trabajar: int clickCount contiene el número de veces que se ha pulsado el botón. int id contiene la identificación de lo que ha ocurrido. int key contiene la tecla que se ha pulsado. int modifiers contiene el estado de las teclas mayúsculas, control y alt. long when contiene el instante en el que se produjo el evento. int x, y contiene las coordenadas del ratón cuando se produjo el evento. Las constantes de este evento son: ACTION_EVENT pregunta si se ha generado un evento. GET_FOCUS cuando una ventana ha cogido el foco. KEY_ACTION cuando se ha pulsado una tecla especial. KEY_ACTION_RELEASE si se ha pulsado esa tecla. KEY_PRESS si se ha pulsado una tecla. KEY_RELEASE si se ha soltado esa tecla. LIST_DESELECT si se ha deseleccionado un elemento de una lista. LIST_SELECT si se ha seleccionado un elemento de la lista. LOAD_FILE si se está cargando un fichero. LOST_FOCUS si se ha perdido el foco. MOUSE_DOWN si se pulsó un botón del ratón. MOUSE_DRAG si se está moviendo el ratón con un botón pulsado. MOUSE_ENTER identifica que el ratón ha entrado en la ventana. MOUSE_EXIT identifica que el ratón ha salido de la ventana. MOUSE_MOVE identifica si se ha movido el ratón.
49
MOUSE_UP si se ha soltado el botón del ratón. SAVE_FILE si se está grabando un fichero. SCROLL_ABSOLUTE comprueba si ha habido un desplazamiento en una barra de desplazamiento de un applet nuestro. SCROLL_LINE_UP controla si se ha producido el evento de pinchar en el botón de subir de una barra de desplazamiento. SCROLL_LINE_DOWN controla si se ha producido el evento de pinchar en el botón de bajar de una barra de desplazamiento. SCROLL_PAGE_UP controla si se ha producido un avance de página. SCROLL_PAGE_DOWN controla si se ha producido un retroceso de página. WINDOW_DEICONIFY pregunta si una ventana ha sido restaurada. WINDOW_DESTROY pregunta si una ventana ha sido cerrada. WINDOW_EXPOSE pregunta si se acaba de visualizar una ventana. WINDOW_ICONIFY pregunta si se ha minimizado una ventana. WINDOW_MOVED pregunta si se ha movido esa ventana ALT_MASK comprueba si pulsamos ALT a la vez que hacemos algo. CTRL_MASK comprueba si pulsamos CONTROL a la vez que hacemos algo. SHIFT_MASK comprueba si pulsamos SHIFT a la vez que hacemos algo. CLAS Label Es un texto que se puede incorporar a nuestra ventana pero con el que no podemos hacer nada. Tenemos dos constructores: Label etiqueta = new Label() crea una etiqueta vacía. Label etiqueta = new Label (String cad) crea una etiqueta con un texto alineado a la izquierda. Label etiqueta = new Label(String cad, int pos) crea una etiqueta con texto indicando la posición que puede ser Label.LEFT, Label.RIGHT, Label.CENTER Esta clase tiene dos métodos: void setText(String cad) establece el texto de la etiqueta. String getText() recoge el texto de la etiqueta. EJEMPLO: 50
import java.awt.*; import java.applet.*; public class etiquetas extends Applet{ Label et1,et2,et3; public void init(){ Label et1 = new Label(Texto 1); Label et2 = new Label(Dos); Label et3 = new Label(Tres); add(et1); add(et2); add(et3); } } CLASE Button Los constructores de esta clase son: Button botón = new Button() crea un botón sin texto. Button botón = new Button(String cad) crea un botón con texto. Los métodos de esta clase son: void setLabel(String cad) establece el texto del botón. String getLabel() obtiene el texto del botón. EJEMPLO: import java.awt.*; import java.applet.*; public class Botones extends Applet{ String cad = ; public void init(){
51
Button b1 = new Button(Sí); Button b2 = new Button(No); add(b1); add(b2); } public boolean action (Event e, Object o){ if(e.target instanceof Button){ if(o.equals(Sí)){ cad = Ha pulsado sí; } if(o.equals(No)){ cad = Ha pulsado No); } repaint(); return true; } return false; } public void paint(Graphics g){ g.drawString(cad,6,100); } } CLASE Checkbox Hay tres constructores: Checkbox() crea una casilla de verificación sin texto. Checkbox(String cad, CheckboxGroup g, boolean marcado) crea una casilla de verificación que estará incluida dentro de un grupo. 52
Los métodos que tiene esta clase son: boolean getState() devuelve el valor de la casilla. void setState(boolean m) establece el estado de la casilla. String getLabel() obtengo el texto de la casilla. void setLabel(String cad) establezco el texto de la casilla. EJEMPLO: import java.awt.*; import java.applet.*; public class Check extends Applet{ String cad = ; Checkbox ch1,ch2,ch3; public void init(){ ch1 = new Checkbox(Win 95); ch2 = new Checkbox(Solaris); ch3 = new Checkbox(WinNT); add(ch1); add(ch2); add(ch3); } public boolean action (Event e, Object o){ if(e.target instanceof Checkbox){ repaint(); return true; } return false; }
53
public void paint(Graphics g){ cad = Estado actual; g.drawString(cad,6,80); cad = Win 95 = +cad.getState(); g.drawString(cad,6,100); cad = Solaris = +cad.getState(); g.drawString(cad,6,120); cad = WinNT = +cad.getState(); g.drawString(cad,6,140); } } CLASE CheckboxGroup Crea un grupo de casillas de verificación de las cuales sólo una puede estar marcada. Para añadir casillas se utiliza el tercer constructor de la clase Checkbox. El constructor es: Checkbox(). Los métodos que tiene esta clase son: Checkbox getCurrent() devuelve el objeto Checkbox seleccionado. void setCurrent(Checkbox objeto) establece el elemento seleccionado. EJEMPLO: import java.awt.*; import java.applet.*; public class Check2 extends Applet { String cad = ; Checkbox ch1, ch2, ch3; CheckboxGroup chg; public void init(){ chg = new checkboxGroup(); ch1 = new Checkbox(win 98, chg, true);
54
ch2 = new Checkbox(MacOs, chg, false); ch3 = new Checkbox(linux,chg, false); add(ch1); add(ch2); add(ch3); } public boolean action (Event e, Object o){ if(e.target instanceof Checkbox){ repaint(); return true; } return false; } public void paint (Graphics g){ cad = Selección actual: ; cad+= chg.getCurrent().getLabel(); g.drawString(cad,6,100); } } CLASE Choice Sirve para crear una lista desplegable con elementos de los dos sólo se va a poder seleccionar uno. El constructor es: Choice() Los métodos que tiene son: void addItem(String elemento) añade elementos haciéndolo por el final. String getSelectedItem() devuelve una cadena con la opción seleccionada. int getSelectedIndex() devuelve la posición del elemento. int countItems() devuelve el número de elementos de la lista. 55
void select(int posición) selecciona el elemento indicado. void select(String elemento) selecciona el elemento cuya cadena sea la indicada. String getItem(int posición) devuelve una cadena con el texto que tenga el elemento de la posición indicada. EJEMPLO: import java.awt.*; import java.applet.*; public class Listas extends Applet{ Choice a, b; Sring cad = ; public void init(){ a = new Choice(); b = new Choice(); a.addItem(Win 98); a.addItem(WinNT); b.addItem(Internet Explorer); b.addItem(Netscape Navigator); add(a); add(b); } public boolean action(Event e, Object o) íf(e.target instanceof Choice){ repaint(); return true; } return false; }
56
public void paint(Graphics g){ cad = S. Operativo: +a.getSelectedItem(); g.drawString(cad,6,100); cad = Navegador: +b.getSelectedItem(); g.drawString(cad,6,120); } } NOVENA CLASE CLASE List Los constructores son: List() List(int filas, boolean selección múltiple) Los métodos son: void addItem(String elemento,[int posición]) añade elementos con la posibilidad de indicarle en qué posición. String getSelectedItem() devuelve el elemento seleccionado. int getSelectedIndex() devuelve el índice del elemento seleccionado. String[] getSelectedItems() devuelve un array con el nombre de los elementos seleccionados. int[] getSelectedIndexes() devuelve un array con las posiciones de los elementos seleccionados. int counItems() devuelve el número de elementos. void select(int posición) selecciona el elemento indicado. String getItem(int posición) obtengo el nombre del elemento indicado. CLASE Scrollbar Crea una barra de desplazamiento horizontal o vertical para el uso que le indiquemos en nuestro programa. Tiene tres constructores: Scrollbar() crea una barra vertical. Scrollbar(int estilo) crea una barra con un determinado estilo. Scrollbar(int estilo, int valor inicial, int tamaño, int mínimo, int máximo) crea una barra de desplazamiento 57
con el estilo especificado con el valor inicial que yo indico. Los métodos de esta clase son: void setValues (int valor inicial, int tamaño, int mínimo, int máximo) establece el valor inicial, el tamaño del indicador de posición y los valores máximo y mínimo. int getValue() obtenemos el valor actual de la barra de desplazamiento. void setValue(int valor) establece el valor de la barra de desplazamiento. int getMinimun() obtenemos el valor mínimo. int getMaximun() obtenemos el valor máximo. void setLineIncrement(int valor) establece las unidades en las que aumentará o disminuirá el valor de la barra de desplazamiento. void setPageIncrement(int valor) establece cuánto tiene que indicar el valor de la barra de desplazamiento cuando se pincha fuera del indicador. CLASE TextField Crea una caja de texto de una sóla línea. Los constructores de esta clase son los siguientes: TextField() TextField(int num) crea una caja de texto del ancho de caracteres indicado. TextField(String cad) TextField(int num, String cad) Los métodos que tiene son: String getText() devuelve el texto. void setText(String cad) establece un texto. String getSelectedText() devuelve el texto seleccionado. void select(int inicio, int fin) maraca los caracteres especificados entre inicio y fin. boolean isEditable() valdrá true si el texto se puede modificar. False si no se puede modificar. void setEchoCharacter(char c) establece un carácter de eco en el campo de texto. boolean echoCharIsSet() valdrá true si he establecido un carácter de eco. False si no lo he establecido. char getEchoChar() obtengo el caracter de eco. EJEMPLO: 58
import java.awt.*; import java.applet.*; public class Contrasenya extends Applet{ TextField t1, t2; public void init(){ Label l1 = new Label("Nombre: ",Label.RIGHT); Label l2 = new Label("Password: ",Label.RIGHT); t1 = new TextField(12); t2 = new TextField(8); t2.setEchoCharacter('*'); setLayout(new GridLayout(2,2)); add(l1); add(t1); add(l2); add(t2); } public boolean action(Event e, Object o){ if(e.target instanceof TextField){ repaint(); return true; } return false; } public void paint(Graphics g){ g.drawString("Nombre: "+t1.getText(),6,60); g.drawString("Password: "+t2.getText(),6,80);
59
} } CLASE TextArea Los constructores son: TextArea() TextArea(int filas, int columnas) TextArea(String cad) TextArea(String cad, int filas, int columnas) Los métodos son los mismos que los de la clase TextField salvo los relativos al carácter de eco. A estos métodos hay que unir tres más: void appendText(String cad) añade una cadena de texto al final. void insertText(String cad, int posición) inserta texto a partir de la posición indicada. void replaceText(String cad, int inicio, int fin) sustituye el texto entre inicio y fin por la cadena indicada. GESTORES DE ORGANIZACIÓN (LAYOUTS) Son los componentes de java para colocar y organizar los componentes gráficos en una ventana. Para poder utilizar estos gestores hay un métodos: void setLayout(Layout) pasándole como parámetro el gestor de que queramos. Hay cuatro gestores: FlowLayout: gestor de organización por defecto de java. Coloca los componentes de izquierda a derecha y de arriba a abajo. Los constructores que tiene son: new FlowLayout() deja una separación de 5 pixeles entre los componentes. new FlowLayout(int modo) pudiendo ser el modo LEFT, RIGHT o CENTER. new FlowLayout(int modo, int horizontal, int vertical) deja una separación vertical y horizontal especificada. BorderLayout: coge la ventana de la aplicación dividiéndola en cinco partes − North, South, West, East, Center − Para poner la parte indicada se utiliza add(North, componente). Los constructores son: new BorderLayout() new BorderLayout(int modo, int horizontal, in vertical) el modo puede ser LEFT, RIGHT o CENTER y la separación es entre componentes de una misma zona. GridLayout: coloca los elementos en forma de rejilla. Los dos constructores son: new GridLayout(int filas, int columnas) crea una rejilla de las filas y columnas especificadas.
60
new GridLayout(int filas, int columnas, int vertical, int horizontal) CardLayout: gestiona los elementos como si fuesen distintas pestañas de tal modo que cuando vemos una se ocultan las demás. Los constructores son: CardLayout() CardLayout(int horizontal, int vertical) Los métodos son: void first() activa la primera tarjeta. void last() activa la última tarjeta. void next() activa la siguiente tarjeta. void previous() activa la anterior a la actual. void show(Component c, String cad) activa la ventana cuyo nombre sea el especificado por la cadena String. EJEMPLO: import java.awt.*; import java.applet.*; public class Tarjetas extends Applet{ Checkbox ch1, ch2, ch3, ch4; Panel p1; CardLayout card; public void init(){ Button win = new Button("Windows"); Button otros = new Button("Otros"); add(win); add(otros); card = new CardLayout(); p1 = new Panel(); p1.setLayout(card); ch1 = new Checkbox("Win 95", null, true); 61
ch2 = new Checkbox("Win NT"); ch3 = new Checkbox("Solaris"); ch4 = new Checkbox("MAcOs"); Panel p2 = new Panel(); p2.add(ch1); p2.add(ch2); Panel p3 = new Panel(); p3.add(ch3); p3.add(ch4); p1.add("Windows",p2); //añado p2 a p1 p1.add("Otros",p3); add(p1); } public boolean mouseDown(Event e,int x, int y){ card.next(p1); return true; } public boolean action(Event e, Object o){ if(e.target instanceof Button){ if(o.equals("Windows")) card.show(p1,"Windows"); else if(o.equals("Otros")) card.show(p1,"Otros"); return true; } return false; } }
62
DÉCIMA CLASE IMÁGENES EN JAVA Se utiliza la clase Image y sólo soporta los formatos GIF y JPG. Al trabajar con imágenes podemos crear una, cargarla o variar la presentación de la misma. Para crear una imagen tenemos un método de la clase Applet: Image createImage(int ancho, int alto) No tiene constructor especificado. Para ello declararemos un objeto de la clase Image. Por ejemplo: Image foto; Foto = createImage(200,200); Para cargar una imagen tenemos dos métodos: Image getImage(URL dir); Image getImage(URL ruta, String nombre); EJEMPLO: Image foto1, foto2; foto1 = getImage(new URL(http://www.miweb.es/fotos/paisaje.jpg)); foto2 = getImage(new URL(http://www.miweb.com/fotos paisaje.jpg)); Para cargar una imagen del mismo directorio se procede de la siguiente manera: foto1 = getImage(getDocumentBase(),paisaje.jpg); Obtenemos una URL con la ruta de la web que llama al applet. Para mostrar la imagen usaremos el método: boolean drawImage(Image ob_imagen, int izquierda, int superior, Component c) pertenece a la clase Graphics por lo que se pone dentro del método paint. Muestra la imagen especificado por ob_imagen y la esquina superior izquierda de la imagen se visualiza según lo indicado por izquierda y superior. El último parámetro sirve para indicar en qué componente se va a dibujar. Se suele poner this. EJEMPLO: import java.awt.*; import java.applet.*; public class EjImagen extends Applet{ publci void init(){ im = getImage(getDocumentBase(),foto.jpg);
63
} public void paint(Graphics g){ g.drawImage(im,0,0,this); } } Doble búffer Es una técnica de programación que consiste en crear una imagen en memoria en la que podremos dibujar y que será mostrada en pantalla cuando nosotros queramos consiguiendo eliminar el parpadeo que se produce al repintar el applet. Necesitaremos crear un objeto de la clase Image y a partir de éste crearemos un objeto de la clase Graphics que usaremos para poder dibujar en esa imagen. EJEMPLO: import java.awt.*; import java.applet.*; public class DobleBuffer extends Applet implements Runnable{ Thread hilo; int xpos; Graphics bufferG; Image bufferImg; public void init(){ bufferImg = createImage(this.getSize().width,this.getSize().height); bufferG = bufferImg.getGraphics(); //Obtengo el objeto Graphics } public void start(){ if(hilo==null){ hilo = new Thread(this);//Applet actual hilo.start(); } } 64
public void stop(){ if(hilo!=null){ hilo.stop(); hilo=null;//destruye el hilo } } public void run(){ while(true){ for(xpos=5;xpos<=105;xpos+=4){ repaint(); try{ Thread.sleep(100); } catch(InterruptedException ie){ } } xpos=5; } } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ bufferG.setColor(Color.blue); bufferG.fillRect(0,0,200,100); bufferG.setColor(Color.red);
65
bufferG.fillOval(xpos,5,90,90); g.drawImage(bufferImg,0,0,this); g.setColor(Color.black); g.fillRect(0,100,200,100); g.setColor(Color.yellow); g.fillOval(xpos,105,90,90); } } ¿CÓMO ABRIR UNA PÁGINA WEB EN EL NAVEGADOR DESDE JAVA? Para ello se utilizan dos métodos: getAppletContext() nos permite acceder al entorno en que se está ejecutando nuestro applet. Una vez accedido al entorno utilizaremos el siguiente método. showDocumetn(URL dir, String destino) showStatus(String cad) muestra un mensaje en la barra de estado del navegador. EJEMPLO: URL direccion = new URL(getDocumentBase(),página.html); GetAppletContext().showDocument(direccion,marco2); CLASE AudioClip Se utiliza para reproducir archivos de sonido. Hasta la versión 1.2 del JDK sólo soportaba el formato au. A partir de la versión 1.2 los formatos pueden ser mid, rmf, wav, aif. EJEMPLO: import java.awt.*; import java.applet.*; public class Sonido extends Applet{ Button b1,b2,b3; AudioClip son; public void init(){
66
b1 = new Button("Play"); b2 = new Button("Stop"); b3 = new Button("Loop"); son = getAudioClip(getDocumentBase(),"sonido.au"); setLayout(new FlowLayout()); this.add(b1); this.add(b2); this.add(b3); } public boolean handleEvent(Event e){ if(e.target==b1) son.play(); if(e.target==b2) son.stop(); if(e.target==b3) son.loop(); return true; } }
67