Beruflich Dokumente
Kultur Dokumente
Conceptos basicos
Parte I
Indice
1 Introduccion
Historia
Herramientas
Empaquetador JAR
Este curso
Que es Java?
Herramientas basicas
Sintaxis basica
Manejo de objetos
Threads
Mecanismos de E/S
Clases de u
tilidad mas usadas
...
Breve historia
Creado por Sun.
Objetivo de dise no: creacion de un lenguaje independiente de
la plataforma y del sistema operativo, para el desarrollo de
electronica de consumo.
El proyecto original (Green) comenzo apoyandose en C++:
problemas de portabilidad.
Desarrollo su propio lenguaje y en agosto de 1991 nacio un
nuevo lenguaje orientado a objetos (Oak).
A mitad de 1993 se lanzo Mosaic el primer navegador para la
Web, y comenzo a crecer el interes por Internet (y en
particular por la World Wide Web).
Redise no del lenguaje para desarrollar aplicaciones para
Internet.
5 [5 - 6] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Historia
Sintaxis
Herramientas
Objetos en java
Empaquetador JAR
Relaciones entre clases
Breve historia
Interprete
Un interprete Java es un software que contiene una maquina
virtual Java y que ejecuta aplicaciones Java:
Realiza todas las actividades del sistema de ejecucion de Java.
Carga los archivos de clase y traduce el bytecode compilado.
El interprete Java de Sun es java, la sintaxis es:
java [opciones] nombre clase [argumentos]
Aplicaciones independientes
En una aplicacion independiente, una clase contiene el metodo
main(), que contiene sentencias para ejecutar al inicio. Para que la
aplicacion se ejecute, se ejecuta el interprete indicando esa clase
como argumento.
7 [7 - 11] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Historia
Sintaxis
Herramientas
Objetos en java
Empaquetador JAR
Relaciones entre clases
Interprete
Aplicaciones independientes
Compilador
Compilador
Ejemplo
Compilador
Se pueden especificar m
ultiples archivos .java en un u
nico
comando javac. El compilador crea un archivo de clase por
cada archivo fuente.
No es necesario listar los archivos fuente de todas las clases
utilizadas, estas se buscan usando la ruta de clases.
Empaquetador JAR
Empaquetador JAR
Empaquetador JAR
Ejemplo
manifest agregado
agregando: clases/(entrada = 0) (salida= 0)(almacenado 0%)
agregando: clases/HolaMundo.class(entrada = 423) (salida= 288)(desinflado 31%)
Empaquetador JAR
Ejemplo
Desempaquetamos el JAR:
jar -xfv holamundo.jar
creado: META-INF/
extra
do: META-INF/MANIFEST.MF
creado: clases/
extra
do: clases/HolaMundo.class
Empaquetador JAR
Ejemplo
Empaquetador JAR
Manifiesto
Empaquetador JAR
Manifiesto: Ejemplo
Invocamos:
jar -cvmf manifesto.mf holamundo.jar .
Indice
2 Sintaxis
Comentarios
Tipos
Sentencias
Expresiones
Excepciones
Arrays
Comentarios
// C o m e n t a r i o de una l i n e a
// Otro c o m e n t a r i o de una l i n e a
Comentarios
Observaciones
Comentarios Javadoc
Comentarios Javadoc
Ejemplo
/
E s t a una c l a s e h o l a mundo . E s t a c l a s e e s c r i b e h o l a
mundo en l a s a l i d a e s t a n d a r
@see H o l a P l a n e t a
@ a u t h o r C a r l o s V a r e l a Paz
@ v e r s i o n 1 . 0 0 , 3 Dec 2004
/
p u b l i c c l a s s HolaMundo {
/
Metodo p r i n c i p a l de H o l a mundo
@param a r g s Argumentos p a s a d o s a l i n t e r p r e t e
@ r e t u r n nada
/
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
System . o u t . p r i n t l n ( H o l a mundo ! ) ;
}
}
Comentarios Javadoc
Comentarios Javadoc
Etiquetas
Etiqueta Descripci
on Se aplica a
@see Nombre de clase asociada Clase, metodo o varia-
ble
@auhor Nombre del autor Clase
@version Cadena con la version Clase
@param Nombre y descripcion del Metodo
parametro
@return Descripcion del valor de Metodo
retorno
@exception Nombre y descripcion de la Metodo
excepcion
@deprecated Declara un elemento como Clase, metodo o varia-
obsoleto ble
25 [20 - 25] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Tipos
Tipos primitivos
Los elementos fundamentales en Java son n umeros, caracteres
y valores booleanos.
A diferencia de otros lenguajes orientados a objetos, estos no
son objetos. Para aquellas situaciones en las que es deseable
tratar en valor primitivo como un objeto, Java proporciona
clases envolventes1 .
Una de las ventajas de tratar con valores primitivos es que el
compilador esta mas preparado para optimizar su uso.
Otra caracterstica esta relacionada con la portabilidad de
Java, los tipos primitivos estan definidos con precision. p.e: un
int tiene un tama no de 32 bits en cualquier plataforma
1
En Java 1.5 el compilador hace autom aticamente la conversi
on seg
un el
uso que le vaya a dar (ej: se puede hacer 5+Integer(5))
27 [26 - 40] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Tipos primitivos
Tipos de datos
Tipo Definicion
boolean true o false
char Caracter Unicode de 16 bits
byte Entero de complemento 2 con signo de 8 bits
short Entero de complemento 2 con signo de 16 bits
int Entero de complemento 2 con signo de 32 bits
long Entero de complemento 2 con signo de 64 bits
float Valor en coma flotante 754 IEEE de 32 bits
double Valor en coma flotante 754 IEEE de 64 bits
Tipos primitivos
Declaraci
on e inicializaci
on de variables
Tipos primitivos
Declaraci
on e inicializaci
on de variables
Tipos primitivos
Literales enteros
Tipos primitivos
Literales enteros
Los literales enteros son del tipo int salvo que lleven una L como
sufijo que indique que es un long:
long i =13L ;
long i =13; // e q u i v a l e n t e : 13 s e c o n v i e r t e
// de un t i p o i n t
Cuando se usa un tipo numerico en una expresion donde aparece
un tipo con rango superior, el tipo inicial se puede convertir al tipo
mayor (como en el ejemplo anterior). Algunas operaciones
numericas y de comparacion tambien crean estas conversiones.
Tipos primitivos
Literales enteros
Tipos primitivos
Literales en coma flotante
Tipos primitivos
Literales car
acter
Tipos referencia
En Java, al crear una clase se define un nuevo tipo en el
lenguaje.
Por ejemplo, si se crea un clase llamada Prueba, tambien se
crea de forma implcita un nuevo tipo llamado Prueba. Un
elemento del tipo Prueba, en general, puede ser asignado a
una variable del tipo Prueba o pasarse como argumento a un
metodo que acepte un valor Prueba.
Los tipos referencia se pasan por referencia. Lo que contiene
una variable de tipo referencia es una referencia a un objeto
de su tipo. Cuando se asigna o se pasa una referencia a un
metodo, esta se pasa por valor.
Se puede pensar en una referencia como un tipo de puntero al
que se quita la refencia automaticamente siempre que se cita.
36 [26 - 40] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Tipos referencia
Ejemplo
Tipos referencia
Los tipos referencia siempre apuntan a objetos y los objetos
siempre se definen por clases. Sin embargo, existen dos
excepciones: los arrays y las interfaces.
Los arrays tienen un lugar especial en el sistema de tipos. Son
tipos de objetos especiales que se crean automaticamente
para contener otro tipo de objetos, conocidos como tipo base.
Al declarar una referencia de tipo array se crea el nuevo tipo
de clase.
Las interfaces definen un conjunto de metodos y un tipo
correspondiente. Cualquier objeto que implemente todos los
metodos de la interfaz puede ser tratado como un objeto de
ese tipo. Los argumentos pueden ser declarados del tipo
interfaz.
38 [26 - 40] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Tipos referencia
Notas acerca de los strings
Tipos referencia
Notas acerca de los strings: Ejemplo
Sentencias
Sentencias
Bloques de c
odigo
Sentencias
Bloques de c
odigo: Metodos
Sentencias
Bloques de c
odigo: Condicionales
Sentencias
Bloques de c
odigo: Condicionales
do {
sentencia ;
sentencia ;
...
} while ( c o n d i c i o n ) ;
Sentencias
Bloques de c
odigo: For
Sentencias
Bloques de c
odigo: for
Sentencias
Bloques de c
odigo: switch
Sentencias
Bloques de c
odigo: switch
Sentencias
Bloques de c
odigo: etiquetas
Sentencias
Bloques de c
odigo: ejemplo
Expresiones
Operadores
Precedente Operador Tipo Descripcion
1 ++, Aritmetico Incrementa y decrementa.
1 +, Aritmetico Mas y menos unarios.
1 ~ Integral Complemento bitwise.
1 ! Boolean Complemento l ogico.
1 (type) Cualquiera Cast.
2 , /, % Aritmetico Multiplicacion, divisi on,
resto de la divisi
on.
3 +, Aritm
etico Adici
on y sustracci on.
3 + Cadena Concatenaci on de cade-
nas.
4 << Integral Cambia a la izquierda.
4 >> Integral Cambio por la derecha con
la extensi
on del signo.
4 >>> Integral Cambio por la derecha sin
extensi
on.
5 >, <=, >, >= Aritm
etico Comparaci on num erica.
5 instanceof Objeto Comparaci on del tipo.
Operadores
Precedente Operador Tipo Descripcion
6 ==, != Primitivo Igualdad y desigualdad de
valor.
6 ==, != Objeto Igualdad y desigualdad de
referencia.
7 & Integral AND bitwise.
7 & Boolean AND booleano.
8 ^ Integral XOR bitwise.
8 ^ Boolean XOR booleano.
9 | Integral OR bitwise.
9 | Boolean OR booleano.
10 && Boolean AND condicional.
11 || Boolean OR condicional.
12 ?: NA Operador ternario condi-
cional.
13 = Cualquiera Asignacion.
13 =, / =, %=, + =, Cualquiera Asignacion con operaci
on.
=, <<=, >>=,
>>>=, &=, ^=, | =
Operadores: observaciones
Java no permite la manipulacion directa del puntero, por lo
que no soporta operadores de referencia y dereferencia (que
tiene, por ejemplo, C). Tambien a
nade operadores como la
concatenacion de cadenas.
La asignacion se puede usar como una valor por parte de otra
expresion:
j = ( i = 5);
La expresion null puede asignarse a cualquier tipo de
referencia. Tiene el significado de sin referencia. Una
referencia null no puede utilizarse para hacer referencia a
algo y su intento genera un NullPointerException durante
la ejecucion.
55 [52 - 63] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Operadores: new
El operador new se usa para crear objetos:
O b j e c t o = new O b j e c t ( ) ;
El argumento para new es el constructor de la clase.
El constructor es un metodo que siempre tiene el mismo
nombre que la clase y especifica cuales son los parametros
necesarios para construir la clase.
El valor de la expresion new es una referencia del tipo de
objeto creado.
Los objetos siempre tienen uno mas constructores. Ya veremos
mas adelante la creacion de un objeto con detalle.
Podemos crear un objeto e invocar un metodo con el directamente:
i n t h o r a s = new Date ( ) . g e t H o u r s ( ) ;
60 [52 - 63] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Operadores: instanceof
Para determinar el tipo de un objeto en tiempo de ejecucion se usa
el operador instanceof. Este operador comprueba si un objeto es
de un tipo concreto y devuelve un boolean que indica si el objeto
es de una clase especificada:
Boolean b ;
S t r i n g s t r = cosa ;
b = ( s t r i n s t a n c e o f S t r i n g ) ; // t r u e
b = ( s t r i n s t a n c e o f O b j e c t ) ; // t r u e
b = ( s t r i n s t a n c e o f Date ) ; // f a l s e
instanceof tambien informa correctamente si el objeto es del tipo
del array o de la interfaz especificada:
i f ( c o s a i n s t a n c e o f byte [ ] )
...
61 [52 - 63] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Operadores: instanceof
condici
on?expresi
on:expresi
on
por ejemplo:
a == b ? X . f u n c i o n 1 ( ) : X . f u n c i o n 2 ( ) ;
es equivalente a:
i f ( a == b )
X. funcion1 ( ) ;
else
X. funcion2 ( ) ;
Excepciones
Excepciones
Excepciones
Clases de excepciones y errores
Excepciones
Tratamiento de excepciones
Excepciones
Tratamiento de excepciones
Excepciones
Tratamiento de excepciones
Excepciones
Tratamiento de excepciones
Excepciones
Tratamiento de excepciones
Excepciones
Tratamiento de excepciones
Excepciones
Lanzar excepciones
Excepciones
Propagaci
on de excepciones
Excepciones
Propagaci
on de excepciones: Ejemplo
Veamos un ejemplo de propagacion de excepciones:
p u b l i c c l a s s Pr ue ba {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) {
try {
metodo1 ( ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
s t a t i c v o i d metodo1 ( ) t h r o w s E x c e p t i o n {
metodo2 ( ) ;
}
s t a t i c v o i d metodo2 ( ) t h r o w s E x c e p t i o n {
throw new E x c e p t i o n ( E r r o o o o o o o o o o o o o o o o o o o r ! ! ! ! ! ! ) ;
}
}
75 [64 - 80] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Excepciones
Propagaci
on de excepciones
Excepciones
Acerca del try
Excepciones
Acerca del try
v o i d metodo ( ) {
int cosa ;
try {
cosa = cogerResultados ( ) ;
...
} catch ( E x c e p t i o n e ) {
...
}
i n t v a r = c o s a ; // E r r o r de c o m p i l a c i o n
}
Excepciones
La cl
ausula finally
Excepciones
La cl
ausula finally
try {
// C o s a s try {
} catch ( Excepcion1 e ) { // H a c e r c o s a s
... ...
} catch ( Exception2 e ) { return ;
... } finally {
} finally { System . o u t . p r i n t l n ( me e j e c u t o i g u a l ) ;
// L i m p i a r }
}
Arrays
Arrays
Arrays
Tipos de arrays
Una variable del tipo array se representa con un tipo base seguido
por corchetes vacos [], aunque tambien es valido poner los
corchetes antes del nombre del array. Por ejemplo, estas dos
declaraciones son equivalentes:
int [ ] arrayEnteros ;
int arrayEnteros [ ] ;
En estas declaraciones no dimos el tama no del array, solo estamos
declarando la variable de tipo array. El tamano lo daremos al crear
el array.
Podemos crear un array de objetos con la misma sintaxis:
String [ ] strings ;
Cosa c o s a s [ ] ;
83 [81 - 97] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Comentarios
Introduccion Tipos
Sintaxis Sentencias
Objetos en java Expresiones
Relaciones entre clases Excepciones
Arrays
Arrays
Creaci
on e inicializaci
on de arrays
Arrays
Creaci
on e inicializaci
on de arrays
Arrays
Creaci
on e inicializaci
on de arrays
Arrays
Creaci
on e inicializaci
on de arrays
Arrays
Creaci
on e inicializaci
on de arrays
Arrays
Uso de arrays
El tama
no de un array se encuentra en la variable p
ublica length:
char [ ] a l f a b e t o = new char [ 2 6 ] ;
i n t a l f L o n g = a l f a b e t o . l e n g t h ; // a l f L o n g == 2 6 ;
S t r i n g numeros [ ] = { uno , d o s , t r e s } ;
i n t num = numeros . l e n g t h ; //num == 3
length es el u
nico campo accesible del array. Es una variable, no
un metodo.
Arrays
Uso de arrays
Arrays
Uso de arrays
Arrays
Arrays an
onimos
Arrays
Arrays multidimensionales
Arrays
Arrays multidimensionales
tablero [0] = f i l a I n i c i a l ;
Arrays
Arrays multidimensionales
Arrays
Arrays multidimensionales: Ejemplo
Arrays
Arrays multidimensionales
Hay que observar que como la longitud no forma parte del tipo, las
dimensiones no tienen porque tener todas la misma longitud. Es
decir, los arrays multidimensionales no tienen porque ser
rectangulares, por ejemplo:
t a b l e r o [ 2 ] = new boolean [ 3 ] ;
t a b l e r o [ 3 ] = new boolean [ 1 0 ] ;
Por ejemplo, podemos crear un array triangular;
i n t [ ] [ ] t r i a n g u l o = new i n t [ 5 ] [ ] ;
f o r ( i n t i =0; i < t r i a n g u l o . l e n g t h ; i ++) {
t r i a n g u l o [ i ] = new i n t [ i + 1 ] ;
f o r ( i n t j =0; j <i +1; j ++) {
t r i a n g u l o [ i ] [ j ] = i+j ;
}
}
97 [81 - 97] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Indice
3 Objetos en java
Clases
Creacion de objetos
Destruccion de objetos
Objetos
Objetos
Clases
Objetos
Clases
Podemos ver una clase como una plantilla o modelo que se utiliza
para crear objetos concretos.
Consta de variables denominadas campos junto con metodos
que operan sobre esos campos.
Encapsula los componentes pasivos (campos) y componentes
activos (metodos) en una unica entidad.
Una vez se declara una clase, se debe instanciar, es decir,
crear un objeto de ella, antes de que se pueda utilizar.
Cuando se crea una instancia de una clase, se crea un objeto
de ese tipo y el sistema asigna memoria para las variables
declaradas por la clase.
A continuacion se puede invocar a los metodos del objeto.
101 [100 - 112] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Clases
v o i d metodo1 ( f l o a t n ) { . . . }
S t r i n g metodo2 ( ) { . . . }
...
}
102 [100 - 112] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Clases
Objetos
Variables
Objetos
Variables: Ejemplo
c l a s s MiClase {
...
static float var3 = 4 . 0 ;
...
}
Ahora todos los objetos de la clase MiClase tendran como valor
para var3 4.0 y si el valor se modifica desde uno de ellos queda
modificado para todos. Como los miembros static existen en la
misma clase tambiem podemos acceder a ellos empleando
directamente la clase:
MiClase . var3 = 8;
105 [100 - 112] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Variables
Objetos
Metodos
s t a t i c v o i d metodo1 ( ) {
System . o u t . p r i n t l n ( v a r 1 = +v a r 1 ) ;
System . o u t . p r i n t l n ( v a r 2 = +v a r 2 ) ; // E r r o r de
// c o m p i l a c i o n
}
}
107 [100 - 112] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Metodos
Objetos
Metodos: Ocultaci
on de variables
Si una variable local y una de contenido tienen el mismo nombre,
la variable local oculta el nombre de la variable de contenido
dentro del ambito de metodo:
c l a s s Pajaro {
i n t xPos , yPos ;
i n t xNext , yNe xt ;
...
double flyToNext () {
i n t xPos=x N e s t ;
i n t yPos=yN e xt ;
r e t u r n ( f l y ( xPos , yPos ) ;
}
}
En este ejemplo (un poco forzado) las variables xPos e yPos son
ocultadas en el metodo flyToNext().
109 [100 - 112] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Metodos: Ocultaci
on de variables
Objetos
Sobrecarga de metodos
La sobrecarga es la capacidad de definir multiples metodos con el
mismo nombre en una clase. Al invocar el metodo el compilador
selecciona el correcto dependiendo de los argumentos que se le
hayan pasado al metodo. Por ejemplo:
c l a s s Habla {
s t a t i c String habla ( Perro p) {
r e t u r n guau ;
}
s t a t i c S t r i n g h a b l a ( Gato g ) {
r e t u r n miau ;
}
Objetos
Sobrecarga de metodos
Objetos
Creaci
on de objetos
Objetos
Creaci
on de objetos: Ejemplo
c l a s s Persona {
i n t edad ;
Persona () {
edad = 1 8 ;
}
P e r s o n a ( i n t edad ) {
t h i s . edad = edad ;
}
}
Objetos
Creaci
on de objetos
Si no se declara ning
un constructor Java crea un constructor
por defecto sin argumentos.
Un constructor puede invocar a otro constructor sobrecargado
usando la referencia this() con los argumentos necesarios
para llamar al constructor deseado.
Si hace una llamada a this() debe ser la primera del
constructor que la realiza.
Objetos
Creaci
on e objetos: Ejemplo
c l a s s Persona {
String calle ;
i n t edad ;
Persona () {
t h i s ( , 1 8 ) ;
}
Persona ( S t r i n g c , i n t e ) {
calle = c;
edad = e ;
}
Persona ( i n t e ) {
S t r i n g c = mi c a l l e ; // E r r o r de
this (c , e ); // c o m p i l a c i o n
}
}
116 [113 - 120] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Creaci
on de objetos
Objetos
Creaci
on de objetos
Objetos
Creaci
on de objetos
Objetos
Creaci
on de objetos
static {
numeros . p u t ( new I n t e g e r ( 1 ) , Uno ) ;
numeros . p u t ( new I n t e g e r ( 2 ) , Dos ) ;
...
}
...
}
120 [113 - 120] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Introduccion
Clases
Sintaxis
Creacion de objetos
Objetos en java
Destruccion de objetos
Relaciones entre clases
Objetos
Destrucci
on de objetos
Objetos
Destrucci
on de objetos
Indice
Herencia
Herencia
Herencia
Herencia
Anulaci
on de variables
Herencia
Anulaci
on de variables
public c l a s s Anulacion {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
B b = new B ( ) ;
b . imprimeVarA ( ) ; // v a r = 2
b . imprimeVarB ( ) ; // v a r = 4
}}
class A {
int var = 2;
p u b l i c v o i d imprimeVarA ( ) {
System . o u t . p r i n t l n ( metodo A v a r=+v a r ) ;
}}
c l a s s B extends A {
int var = 4;
p u b l i c v o i d imprimeVarB ( ) {
System . o u t . p r i n t l n ( metodo B v a r=+v a r ) ;
}}
Herencia
Anulaci
on de variables
$ java Anulacion
metodo A var=2
metodo B var=4
Herencia
Anulaci
on de metodos
Herencia
Anulaci
on de metodos
class A {
int var = 2;
p u b l i c v o i d imprimeVarA ( ) {
System . o u t . p r i n t l n ( metodo A v a r=+v a r ) ;
}
}
c l a s s B extends A {
int var = 4;
p u b l i c v o i d imprimeVarA ( ) {
System . o u t . p r i n t l n ( metodo A v a r=+v a r ) ;
}
p u b l i c v o i d imprimeVarB ( ) {
System . o u t . p r i n t l n ( metodo B v a r=+v a r ) ;
}
}
131 [124 - 144] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Herencia
Introduccion
Interfaces
Sintaxis
Paquetes
Objetos en java
Visibilidad
Relaciones entre clases
Clases internas
Herencia
Anulaci
on de metodos
Herencia
Anulaci
on de metodos
Herencia
Anulaci
on de metodos
Herencia
Anulaci
on de metodos
class A {
int var = 2;
p u b l i c void imprimeVar ( ) {
System . o u t . p r i n t l n ( v a r=+v a r ) ;
}
}
c l a s s B extends A {
int var = 4;
p u b l i c void imprimeVar ( ) {
System . o u t . p r i n t l n ( v a r=+v a r ) ;
super . imprimeVar ( ) ;
}
}
Herencia
Casting
Animal a n i m a l = . . .
Perro perro = . . .
animal = perro ;
perro = ( Perro ) animal ;
p e r r o = a n i m a l ; // E r r o r , t i p o i n c o m p a t i b l e
136 [124 - 144] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Herencia
Introduccion
Interfaces
Sintaxis
Paquetes
Objetos en java
Visibilidad
Relaciones entre clases
Clases internas
Herencia
Casting
Herencia
Contructores de superclase
Herencia
Contructores de superclase
c l a s s Animal {
...
A n i m a l ( S t r i n g nombre ) {
// I n i c i a l i z a c i o n de v a l o r e s
...
}
}
Herencia
Constructores de superclase
Herencia
Constructores de superclase: Reglas
Herencia
Constructores de superclase: Reglas
Herencia
Metodos y clases abstract
Herencia
Metodos y clases abstract
Interfaces
Las interfaces son parecidas a clases abstractas con todos los
metodos abstractos, solo que declarar interfaces tiene sus
ventajas como veremos a continuacion.
Una interfaz define un conjunto de metodos que deben ser
implementadas por una clase.
Los tipos de interfaz act uan como tipos de clase, se pueden
declarar variables del tipo de una interfaz, los metodos pueden
devolver tipos interfaz. . .
Las interfaces son una declaracion de meritos, realmente son
como un contrato que la clase se compromete a cumplir.
Una clase puede decir que implementa tantas interfaces como
quiera. De esta manera se pueden resolver algunos casos en
los que necesita la herencia m ultiple.
145 [145 - 150] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Herencia
Introduccion
Interfaces
Sintaxis
Paquetes
Objetos en java
Visibilidad
Relaciones entre clases
Clases internas
Interfaces
Ejemplo
p u b l i c c l a s s P e r r o extends Animal
implements A d i e s t r a b l e {
...
public void s a l t a ( ) { . . . }
p u b l i c v o i d ven ( ) { . . . }
public void c o g e l o ( ) { . . . }
}
}
146 [145 - 150] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Herencia
Introduccion
Interfaces
Sintaxis
Paquetes
Objetos en java
Visibilidad
Relaciones entre clases
Clases internas
Interfaces
Ejemplo
A d i e s t r a b l e a = new P e r r o ( ) ;
a . cogelo ( ) ;
Interfaces
Interfaces
Ejemplo de jerarqua
Interfaces
Ejemplo de jerarqua
Paquetes
package a n i m a l e s ;
c l a s s Animal {
...
}
Paquetes
Paquetes
Si no queremos estar anteponiendo el nombre del paquete al de la
clase todo el tiempo podemos utilizar la sentencia import que
indica al compilador cual es el paquete al que pertenece la clase:
i m p o r t a n i m a l e s . A ni ma l ;
c l a s s Zoo {
....
void blabla () {
A n i m a l a = new A n i m a l ( ) ;
..
}
}
Visibilidad
Visibilidad de clases
Por defecto una clase solo es accesible para otras clases dentro de
su propio paquete. Para que sea visible en cualquier parte hay que
declararla como public:
package a n i m a l e s ;
p u b l i c c l a s s A n i ma l { . . . }
Visibilidad
Visibilidad de variables y metodos
Visibilidad
Visibilidad de variables y metodos
Modificador Visibilidad
private Ninguna
(ninguno) Clases en el paquete
protected Clases en el paquete y en las sub-
clases dentro o fuera del paquete
public Todas las clases
Cuadro: Modificadores de visibilidad
Visibilidad
Visibilidad de interfaces
Clases internas
Clases internas
La clase Cerebro es una clase interna de Animal. Ahora a
nadimos
un metodo a la clase Animal:
p u b l i c c l a s s Animal {
S t r i n g nombre ;
c l a s s Cerebro {
public void piensa () { . . . }
}
public void realizaComportamiento () { . . .
C e r e b r o c = new C e r e b r o ( ) ;
c . piensa ();
...
}
}
Clases internas
Clases internas
Clases internas
Nos gustara que esta clase nos proporcionara sus elementos por
medio de un iterador, que es una interfaz sencilla para listar
objetos. La interfaz java.util.Iterator tiene varios metodos
como:
public interface I t e r a t o r {
p u b l i c boolean h a s N e x t ( ) ;
public Object next ( ) ;
p u b l i c v o i d remove ( ) ;
}
Esto nos permite ver los elementos preguntando por el siguiente y
preguntando si queda alguno mas.
Clases internas
Para crear un iterador podemos usar una clase interna:
public c l a s s ListaEmpleados {
p r i v a t e Empleado [ ] e m p l e a d o s = . . . ;
...
c l a s s I t e r a d o r implements j a v a . u t i l . I t e r a t o r {
i n t elemento = 0;
p u b l i c boolean hasNext ( ) {
r e t u r n e l e m e n t o<e m p l a d o s . l e n g t h ;
}
p u b li c Object next () {
i f ( hasNext ( ) ) {
r e t u r n e m p l e a d o s [ e l e m e n t o ++];
} else {
throw new R u n t i m e E x c e p t i o n ( No hay mas e l e m e n t o s ) ;
}
}
p u b l i c v o i d remove ( ) {
throw new U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;
}
}
...
}
Clases internas
Clases internas
Clases internas dentro de metodos
Clases internas
Clases internas dentro de metodos
Clases internas
Ocultaci
on de variables
Clases internas
Ocultaci
on de variables: Ejemplo
class Cerebro {
Animal miAnimal = Animal . t h i s ;
}
Tambien podemos hacer referencia a las variables de la clase del
mismo modo:
c l a s s Animal {
int s i z e = 10;
class Cerebro {
int size = 2;
i n t a n i m a l S i z e = Animal . t h i s . s i z e ;
}
}
168 [158 - 171] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Herencia
Introduccion
Interfaces
Sintaxis
Paquetes
Objetos en java
Visibilidad
Relaciones entre clases
Clases internas
Clases internas
Clases internas an
onimas
Clases internas
Clases internas an
onimas: Ejemplo
public c l a s s ListaEmpleados {
p r i v a t e Empleado [ ] e m p l e a d o s ;
...
I t e r a t o r getIterator () {
r e t u r n new j a v a . u t i l . I t e r a t o r ( ) {
i n t elemento = 0;
p u b l i c boolean hasNext ( ) {
r e t u r n e l e m e n t o<e m p l a d o s . l e n g t h ;
}
p u b l i c Object next () {
i f ( hasNext ( ) ) {
r e t u r n e m p l e a d o s [ e l e m e n t o ++];
} else {
throw new R u n t i m e E x c e p t i o n ( No hay mas e l e m e n t o s ) ;
}
}
p u b l i c v o i d remove ( ) {
throw new U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;
}
}
}
}
170 [158 - 171] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Herencia
Introduccion
Interfaces
Sintaxis
Paquetes
Objetos en java
Visibilidad
Relaciones entre clases
Clases internas
Clases internas
Clases internas an
onimas: Ejemplo
Tambien podemos usarlo para anular metodos o variables:
p u b l i c c l a s s Prueba {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
A n i m a l a1 = new A n i m a l ( ) ;
h a z H a b l a r ( a1 ) ;
A n i m a l a2 = new A n i m a l ( ) {
public void habla () {
System . o u t . p r i n t l n ( o t r a c o s a ) ;
}
};
h a z H a b l a r ( a2 ) ;
}
s t a t i c v o i d hazHablar ( Animal a ) {
a . habla ( ) ;
}
}
c l a s s Animal {
public void habla () {
System . o u t . p r i n t l n ( h o l a ! ) ;
}
}
Parte II
Indice
5 Threads
Introduccion
Sincronizacion
Introduccion
Introduccion
Composicion
Al usar threads siempre hay dos actores principales:
Uno representa al thread
El otro contiene el metodo que el thread va a ejecutar.
A veces, es posible combinarlos, pero esto no cambia la relacion.
Introduccion
El contructor de la clase Thread recibe informacion sobre
d
onde debe comenzar la ejecucion del thread.
Para indicar que debe ejecutar el thread existe la interfaz
java.lang.Runnable.
Esta interfaz define el metodo run() que es el que invocara el
thread al ser iniciado:
public i n t e r f a c e Runnable {
public void run ( ) ;
}
Cada thread comienza su vida con la ejecucion del metodo
run() en el objeto Runnable (el objeto destino) que se
paso al thread.
176 [174 - 191] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Threads
Entrada/Salida Introducci
on
Interfaces Graficas de usuario Sincronizaci
on
Interfaces Gr
aficas de usuario II
Introduccion
Introduccion
Ejemplo
c l a s s A n i m ac i o n implements R u n n a b l e {
...
public void run ( ) {
while ( true ) {
// d i b u j a
...
}
}
}
Esta clase podra ser la encargada de dibujar una animacion en una
interfaz. Para usarlo:
A n i m a c i o n anim = new A n i m a c i o n ( ) ;
Thread t = new Thread ( anim ) ;
t . start ();
178 [174 - 191] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Threads
Entrada/Salida Introducci
on
Interfaces Graficas de usuario Sincronizaci
on
Interfaces Gr
aficas de usuario II
Introduccion
Ejemplo
Introduccion
Ejemplo
Introduccion
Ejemplo
c o r r e d o r 1 = new C o r r e d o r ( A ) ;
c o r r e d o r 2 = new C o r r e d o r ( B ) ;
Que sucede?
Primero se ejecuta uno y desp
ues el otro. Vamos a a
nadir
concurrencia para que sea una carrera de verdad.
Introduccion
Ejemplo: A
nadiendo concurrencia
Introduccion
Recordamos
Introduccion
Otro modo
Introduccion
Otro modo
Introduccion
Control de un Thread
Introduccion
Control de un Thread
Introduccion
Control de un Thread
Introduccion
Control de un Thread
Introduccion
Vida de un Thread
Introduccion
Control de un Thread
c o r r e d o r 1 . setDaemon ( t r u e ) ;
c o r r e d o r 2 . setDaemon ( t r u e ) ;
Sincronizacion
Sincronizacion
Acceso en serie a metodos
Sincronizacion
Acceso en serie a metodos: Ejemplo
Sincronizacion
Acceso en serie a metodos: Ejemplo
Sincronizacion
Acceso en serie a metodos: Ejemplo
Sincronizacion
Acceso en serie a metodos: Ejemplo
di ( s , hola a todos ) ;
d i ( s2 , HOLA A TODOS ) ;
Sincronizacion
Acceso en serie a metodos: Ejemplo
Vuelven a mezclarse
El motivo es que el cierre esta en el objeto
Se soluciona haciendo el metodo di(String frase) estatico
con lo que el cierre pasa a la clase
Sincronizacion
Sincronizacion
Bloques de c
odigo
Sincronizacion
Metodos wait() y notify()
Sincronizacion
Metodos wait() y notify(): Ejemplo
p u b l i c c l a s s C o n s u m i d o r e x t e n d s Thread {
Productor productor ;
S t r i n g nombre ;
Consumidor ( S t r i n g n , Pr o duc t o r p ) {
nombre = n ;
productor = p ;
p u b l i c void run ( ) {
try {
while ( true ) {
S t r i n g mensaje = productor . getMensaje ( ) ;
System . o u t . p r i n t l n ( nombre+ o b t i e n e m e n s a j e : +m e n s a j e ) ;
sleep (2000);
}
} catch ( I n t e r r u p t e d E x c e p t i o n e ) {
}
}
}
Sincronizacion
Metodos wait() y notify(): Ejemplo
import j a v a . u t i l . Vector ;
p u b l i c c l a s s P r o d u c t o r e x t e n d s Thread {
s t a t i c f i n a l i n t LONG COLA = 5 ;
p r i v a t e V e c t o r m e n s a j e s = new V e c t o r ( ) ;
p u b l i c void run ( ) {
try {
while ( true ) {
generaMensaje ( ) ;
sleep (1000);
}
} c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {}
}
p r i v a t e synchronized void generaMensaje ( ) throws I n t e r r u p t e d E x c e p t i o n {
w h i l e ( m e n s a j e s . s i z e ( ) == LONG COLA) wait ( ) ;
m e n s a j e s . a d d E l e m e n t ( new j a v a . u t i l . Date ( ) . t o S t r i n g ( ) ) ;
notifyAll ();
}
p u b l i c synchronized S t r i n g getMensaje ( ) throws I n t e r r u p t e d E x c e p t i o n {
notify ();
w h i l e ( m e n s a j e s . s i z e ( ) == 0 ) w a i t ( ) ;
S t r i n g mensaje = ( S t r i n g ) mensajes . f i r s t E l e m e n t ( ) ;
mensajes . removeElement ( mensaje ) ;
retur n mensaje ;
}
}
203 [192 - 204] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci on al lenguaje de programaci
on Java
Threads
Entrada/Salida Introducci
on
Interfaces Graficas de usuario Sincronizaci
on
Interfaces Gr
aficas de usuario II
Sincronizacion
Metodos wait() y notify(): Ejemplo
En la clase principal:
P r o d u c t o r p = new P r o d u c t o r ( ) ;
p. start ();
new C o n s u m i d o r ( Uno : , p ) . s t a r t ( ) ;
new C o n s u m i d o r ( Dos : , p ) . s t a r t ( ) ;
Indice
6 Entrada/Salida
E/S Estandar
Ficheros
Entrada/Salida
Entrada/Salida
Primer ejemplo
Entrada/Salida
Primer ejemplo
import j a v a . i o . ;
p u b l i c c l a s s Ejemplo {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] )
throws IOException {
int c ;
int contador = 0;
w h i l e ( ( c = System . i n . r e a d ( ) ) != 1 ) {
c o n t a d o r ++;
System . o u t . p r i n t ( ( c h a r ) c ) ;
}
System . o u t . p r i n t l n ( ) ; // L i n e a en b l a n c o
System . e r r . p r i n t l n ( C o n t a d o s + c o n t a d o r + b y t e s . ) ;
}
}
Entrada/Salida
Ficheros
Entrada/Salida
Ficheros: Ejemplo
import j a v a . i o . ;
class InfoFichero {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) t h r o w s I O E x c e p t i o n {
i f ( args . length > 0 ) {
f o r ( i n t i =0; i < a r g s . l e n g t h ; i++ ) {
F i l e f = new F i l e ( a r g s [ i ] ) ;
System . o u t . p r i n t l n ( Nombre : +f . getName ( ) ) ;
System . o u t . p r i n t l n ( Camino : +f . g e t P a t h ( ) ) ;
i f ( f . e x i s t s () ) {
System . o u t . p r i n t ( F i c h e r o e x i s t e n t e ) ;
System . o u t . p r i n t ( ( f . canRead ( ) ?
, s e pue de L e e r : ) ) ;
System . o u t . p r i n t ( ( f . c a n W r i t e ( ) ?
, se puese E s c r i b i r : ) ) ;
System . o u t . p r i n t l n ( . ) ;
System . o u t . p r i n t l n ( La l o n g i t u d d e l f i c h e r o s o n +
f . l e n g t h ()+ b y t e s ) ;
} else
System . o u t . p r i n t l n ( E l f i c h e r o no e x i s t e . ) ;
}
} else
System . o u t . p r i n t l n ( Debe i n d i c a r un f i c h e r o . ) ;
}
}
Entrada/Salida
Ficheros: Lectura
Entrada/Salida
Ficheros: Lectura
import j a v a . i o . ;
public class VerFichero {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) {
} else
System . o u t . p r i n t l n ( Debe i n d i c a r un f i c h e r o . ) ;
}
Entrada/Salida
Ficheros: Escritura
Entrada/Salida
Ficheros: Escritura
import j a v a . i o . ;
public class Salida {
s t a t i c FileOutputStream fos ;
public s t a t i c f i n a l int longLinea = 81;
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) t h r o w s I O E x c e p t i o n {
b y t e d a t o s [ ] = new b y t e [ l o n g L i n e a ] ;
f o s = new F i l e O u t p u t S t r e a m ( d a t o s . d a t ) ;
while ( true ) {
System . e r r . p r i n t ( T e c l e a a l g o : ) ;
leeLinea ( datos ) ;
f o r ( i n t i =0; d a t o s [ i ] != 0 ; i++ )
fos . write ( datos [ i ] ) ;
f o s . w r i t e ( \n ) ;
}
}
p r i v a t e s t a t i c void l e e L i n e a ( byte l i n e a [ ] ) throws IOException {
int b = 0 , i = 0;
w h i l e ( ( i < ( l o n g L i n e a 1) ) &&
( ( b = System . i n . r e a d ( ) ) != \n ) )
l i n e a [ i ++] = ( b y t e ) b ;
l i n e a [ i ] = ( byte ) 0 ;
}
}
Entrada/Salida
Ficheros
Entrada/Salida
Ficheros
InputStreamReader/OutputStreamReader
Convierten un InputStream/OutputStream en un
Reader/Writer.
BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedWriter
A
naden memoria de almacenamiento temporal.
DataInputStream/DataOutputStream
Permiten leer modelos simples de datos como tipos
primitivos y String
PrintWriter/PrintStream
Simplifican la impresion de texto
Entrada/Salida
Ficheros: Ejemplo
import j a v a . i o . ;
public class Salida2 {
p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) t h r o w s I O E x c e p t i o n {
P r i n t W r i t e r pw =
new P r i n t W r i t e r ( new F i l e W r i t e r ( d a t o s . d a t ) ) ;
BufferedReader br =
new B u f f e r e d R e a d e r ( ( new I n p u t S t r e a m R e a d e r ( System . i n ) ) ) ;
while ( true ) {
System . e r r . p r i n t ( T e c l e a a l g o : ) ;
pw . p r i n t l n ( b r . r e a d L i n e ( ) ) ;
}
}
}
Entrada/Salida
Ficheros: Ejemplo
Indice
import j a va x . swing . ;
p u b l i c c l a s s HolaMundoSwing {
p r i v a t e s t a t i c v o i d createAndShowGUI ( ) {
JFrame . s e t D e f a u l t L o o k A n d F e e l D e c o r a t e d ( t r u e ) ;
JFrame f r a m e = new JFrame ( Ventana h o l a mundo ) ;
f r a m e . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ;
J L a b e l l a b e l = new J L a b e l ( H o l a mundo ! ) ;
f r a m e . g e t C o n t e n t P a n e ( ) . add ( l a b e l ) ;
f r a m e . pa ck ( ) ;
frame . s e t V i s i b l e ( true ) ;
}
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
j a v a x . s w i n g . S w i n g U t i l i t i e s . i n v o k e L a t e r ( new R u n n a b l e ( ) {
p u b l i c void run ( ) {
createAndShowGUI ( ) ;
}
});
}
221 [221 - }224] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introduccion al lenguaje de programaci
on Java
Hola mundo
Threads
Mini-aplicaci
on
Entrada/Salida
Entrada de datos
Interfaces Graficas de usuario
Layouts
Interfaces Gr
aficas de usuario II
Ejercicio
JFrame . s e t D e f a u l t L o o k A n d F e e l D e c o r a t e d ( t r u e ) ;
JFrame f r a m e = new JFrame ( Ventana h o l a mundo ) ;
...
f r a m e . pack ( ) ;
frame . s e t V i s i b l e ( true ) ;
J L a b e l l a b e l = new J L a b e l ( H o l a mundo ! ) ;
f r a m e . g e t C o n t e n t P a n e ( ) . add ( l a b e l ) ;
javax . swing . S w i n g U t i l i t i e s . i n v o k e L a t e r (
new R u n n a b l e ( ) {
p u b l i c void run ( ) {
/ c r e a r y m o s t r a r l a GUI /
}
});
Con UIManager.setLookAndFeel(LOOKANDFEEL);
establecemos la apariencia de la aplicacion.
El parametro es el nombre del Look and Feel
Hay unos cuantos predefinidos:
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
Ademas:
UIManager.getCrossPlatformLookAndFeelClassName():
Devuelve un look and feel multiplataforma.
UIManager.getSystemLookAndFeelClassName(): Look and
feel de la plataforma actual
226 [225 - 232] Carlos Varela Paz (cvarela@dc.fi.udc.es) Introducci
on al lenguaje de programaci
on Java
Hola mundo
Threads
Mini-aplicaci
on
Entrada/Salida
Entrada de datos
Interfaces Graficas de usuario
Layouts
Interfaces Gr
aficas de usuario II
Ejercicio
Para a
nadir el borde, usamos
pane . s e t B o r d e r (
BorderFactory . createEmptyBorder (
30 , 30 , 10 , 30) ) ;
Crea un borde al panel de manera que separa los componentes
a
nadidos del borde exterior.
JTextArea
Podemos usar el metodo setText(String t) para poner todo el
texto o append(String t) para ir a
nadiendo poco a poco.
Con getText() obtenemos todo el texto que contiene.
Podemos a
nadir menus a las ventanas. Para ellos creamos un
JMenuBar y se lo a
nadimos al JFrame haciendo
setJMenuBar(menu)
El JMenuBar esta formado por elementos JMenu
Los JMenu contienen elementos del tipo JMenuItem
Los JMenuItem reciben como argumento una accion.
f r a m e . addJMenuBar ( menuBar ) ;
Ademas podemos a
nadir un menu popup a nuestro editor.
Usamos un JPopupMenu
Son parecidos a los JMenu, contienen JMenuItem
Para hacer que aparezca al pulsar el boton derecho tenemos
que registrarnos en los eventos del raton.
Usamos el metodo addMouseListener que espera recibir un
MouseListener. Podemos extender la clase MouseAdapter y
anular los metodos que nos interesan.
c l a s s P o p u p L i s t e n e r extends MouseAdapter {
p u b l i c v o i d m o u s e P r e s s e d ( MouseEvent e ) {
maybeShowPopup ( e ) ;
}
p u b l i c v o i d m o u s e R e l e a s e d ( MouseEvent e ) {
maybeShowPopup ( e ) ;
}
p r i v a t e v o i d maybeShowPopup ( MouseEvent e ) {
i f ( e . isPopupTrigger ()) {
popup . show ( e . getComponent ( ) ,
e . getX ( ) , e . getY ( ) ) ;
}
245 [238 - 246] } Varela Paz (cvarela@dc.fi.udc.es)
Carlos Introducci
on al lenguaje de programaci
on Java
Hola mundo
Threads
Mini-aplicaci
on
Entrada/Salida
Entrada de datos
Interfaces Graficas de usuario
Layouts
Interfaces Gr
aficas de usuario II
Ejercicio
Indice
j a v a . n e t . URL imgURL =
NombreDeClase . c l a s s . g e t R e s o u r c e ( p a t h ) ;
El metodo getResource hace que el cargador de clases busque en
los directorios del classpath y en los .jar y devuelva una URL con la
direcci
on del fichero.