Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Java en 21 Dias PDF
Java en 21 Dias PDF
Rogers Cadenhead
Aprendiendo
TRADUCCIN:
Antonio Enrique Gonzlez Velzquez
Traductor Profesional
REVISIN TCNICA:
Ariel Ortiz Ramrez
HALL
Aprendiendo Jvj I en 21
i vi
DIa 3
65
...66
...67
Creacin de variables
Nomenclatura de variables
67
69
Tipos de variable
70
72
72
Comentarios
76
Literales de c;ulcna
Expresiones y operadores
.;
Ms sobre asignacin
Incremento y decrcmento
Comparaciones
Operadores lgicos
Precedencia de operadores
Aritmtica ele cadenas
Resumen
Preguntas y respuestas
Lecciones de objetos
Creacin de objetos nuevos
Uso de new
Qu hace ncw
Modificacin de valores
\arhbles de clase
Llanadas a mtodos
I. ;>s mtodos dt clase
Da I
75
Literales de caracteres
,
7
74
Lcrales boolcanas
Semana 1
7.1
Literales numricas
DIa 4
Introduccin
73
!.heniles
Aritmtica
Resumen de contenido
Introduccin a Java
33
65
Lecciones de objetos
89
111
135
77
Creacin de clases
77
153
79
80
2
X3
S4
So
87
171
173
231
23!
11
267
12
291
90
13
317
92
14
351
N8
89
yo
93
93
93
10
38!
95
16
413
96
17
437
18
461
100
19
485
102
20
509
531
44
os
'}')
103
104
105
105
107
Da 15
379
-21
Contenido
Resumen
.
Preguntas y respuestas
553
Apndices
Apndice A
555
DIa5
565
'
( jq
111
Arreglos
573
ndice
*
-.
583
589
......
^
"
^ ]4
^ ^
Arreglos multidimensionales
^^
Instrucciones de bloque
Condicionales if
pj
El operador condicional
Condicionales switch
Ciclos f or
]28
Ciclos while y do
Ciclos while
Ciclos do-.while
12g
120
(jj
,32
Ciclos etiquetados
^4
Resumen
Preguntas y respuestas
134
135
DIa 6
Creacin de clases
Definicin de clases
]36
Constantes
jjg
Variables de clase
Creacin de mtodos
Definicin de mtodos
)4
]4,
)4<.
Mtodos de clase
,46
]47
Clases auxiliares
Resumen
Preguntas y respuestas
.e de un objr-io
v-
w.
]4g
^
j4g
- )5)
)52
:
Contenido
153
',
Sobreposicin de mtodos
.. 160
.. I6
.. I62
.. 165
.. 166
Sobreposicin de constructores
.. 168
Mtodos finalizadores
Resumen
.. 158
.. 159
154
Preguntas y respuestas
.. 169
.. 169
171
173
174
175
176
177
177
178
180
182
182
. 183
^
'
185
HSPACE y VSPACE
CODE y CODEBASE
La etiqueta <OBJECT>
.uchiveros JAVA
Otros formatos de almacenamiento
] 'aso de parmetros a los applets
'Insumen
'regunias y respuestas
La clase Graphics
. 1S8
. 190
. 191
. 195
. 197
199
. 200
. 202
.. 202
Lneas
Rectngulos
valos
Arcos
.
:::.:
:...
::..
Copiado y limpieza
texto y fuentes
203
203
207
208
2I2
'..'.'
213
213
213
214
Color
216
216
217
218
219
219
220
Colores 20
Resumen
Preguntas y respuestas
Animacin en Java
Pintado y repintado
220'
223
225
228
229
232
232
5J
233
234
2*6
TO
239
240
240
~3*
2-+3
243
244
~ *
246
248
El ejemplo Neko
Doble bfer
231
246
24S
256
Contenido
258
Resumen
V.
El AWT
261
2M
267
.... 2(.S
....269
.... 26')
.... 27I
Etiquetas
.... 273
Botones
Casillas de verificacin
. 274
0??
Listas de seleccin
.,
Campos de texto
.,<,.,
reas de texto
.^
Listas desplazabas
08J
"^
Lienzos
Resumen
Preguntas y respuestas
T^y
... 289
291
... 292
oy?
El administrador FlowLayout
"^
El administrador GridLayout
~%
El administrador BorderLayout
"^
"^
~^
El administrador CardLayout
'
El administrador GridBagLayout
,^
Relleno de celdas
^^
Mrgenes
-,l4
Resumen
3I4
Preguntas y respuestas
Doble clic
258
205
Preguntas y respuestas
317
318
XII
325
325
'.
326
326
331
332
Teclas predeterminadas
332
333
337
338
340
341
343
344
344
345
346
Resumen
349
Preguntas y respuestas
349
351
352
La clase Window
352
Marcos
352
Cuadros de dilogo
Eventos de ventanas
356
361
362
362
363
Mens
Mens y barras de mens
Elementos de men
Evenlos de men
Creacin de aplicaciones AWT independientes
364
364
366
367
369
371
372
375
377
377
XII
Contenido
379
3S2
388
390
Variables
Mtodos
Clases
.
391
391
392
381
39.
3o
El comando import
-"-1
Conflicios.de nombres
396
397
7
397
398
398
398
Interfaces
40
Interfaces y clases
401
4^2
44C-
44
405
nterfaces nuevas
406
408
A'
Clases internas
409
41 I
R sumen
Pr:guntas y respuestas
4P
413
414
I as excepciones de Java
4!5
Manejo de excepciones
417
v 418
41S
XIII I
422
La clusula throws
423,
423
424
throws y herencia
425
426
426
427
427
428
428
429
429
430
431
433'
Polticas de seguridad
'.
434
Resumen
435
Preguntas y respuestas
435
437
438
438
439
Flujos de bytes
Flujos de archivo
440
440
Filtrado de un flujo
444
445
Filtros de bytes
Flujos de caracteres
Cmo leer archivos de lexto
Cmo escribir archivos de texto
Archivos y filtros para los nombres de archivo
Resumen
Preguntas y respuestas
DIa 18 Comunicacin a travs de Internet
Conectividad en Java
Apertura de conexiones con Web
Apertura de un flujo a travs de la red
Sockets
452
453
455
456
459
460
461
462
462
463
467
468
469
470
V
xv I
Contenido
Resumen
Presuntas y respuestas
.479
Resumen
Preguntas y respuestas
;""
485
s
532
El evento principal
Escuchadores de eventos
JavaBeans
El objetivo de JavaBeans
4g8
534
La API de JavaBeans
Trucos con applets
.491
El mtodo showStatusO
.491
.491
. 496
.. 497
.. 49S
El portapapdes
.. 502
.. 503
La arquitectura de la RM1
.. 504
.. 505
... 506
Resumen
... 507
Preguntas y respuestas
509
...510
... 511
Etiquetas
,'
...512
...514
5|6
^16
- - " ^
"
Eventos de ratn
Eventos de movimiento del ratn
Eventos de ventana
Resumen
,..
Mtodos abreviados
^2
^
553
Apndices
556
^^
Comentarios
,,,
556
^-
Literales
Declaracin de variables
55g
0bJel0S
"'.560
Arreglos
560
Ciclos y condicionales
Definiciones de clases
Importacin
5J]
544
...
M8
^
5"+4
Preguntas y respuestas
Eventos de tecla
^7
.. 541
Eventos de elemento
Operadores
reas de texto
Barras de desplazamiento
Eventos de enfoque
515
Campos de texto
Listas de seleccin
Eventos de ajuste
Asignacin de variables
5I
Eventos de accin
5]j
Botones
Proteccin
Apndice B Recursos de Java en Internet
Sitio Web de este libro
565
565
56fi
. 5<>6
. 5oK
do sei
. 568
JavaWorld
Oportunidades de empleo
. 570
S5
s d.vcrt.do. En sus
The Off
. 571
573
573
S7S
575
576
5S0
5 SO
583
c0" ilIDK
5X3
5S5
586
5X7
5SX
589
NDICE
nttp://v/ww.Prefect.com/]ava2i.
Prentice-Hall Hispanoamericana
Dedicatoria
A Eric. por todas las razones comunes (soporte moral, preguntas estpidas, apoyo en los
A Rita Cracker (de cario "Nana ") y Mary Cadenhead (de cario "Abuela " o "Mimi").
Cualquiera debera tener a su alrededor abuelas Um amantes, amadoras y divertidas como estos dos (ounq.u
ellas no me dieron el pony que yo realmente, pero realmenu: quera cuando ,,, cuco anos). - hoy. .
Hispanoamericana lo invita a dar su opinin. Por favor hganos saber si disfruta este libro, si
tiene alguna dificultad con la informacin y los ejemplos que se presentan, o si tiene alguna
sugerencia para la prxima edicin.
Reconocimientos
software o el hardware.
Al equipo de Java de Sun, por todo su intenso trabajo en Java, el lenguaje, y sobre el nave
gador, en particular a Jim Graham. quien me ense Java y Hoav;, en un curso in.cns.vo en
Responderemos a todos los lectores que podamos. Su nombre, direccin y nmero telefnico
A lodos quienes compraron mis libros anteriores y les gustaron: compren lambin ste.
jams formarn parle de ninguna lista de correos ni sern usados para otro fin, ms que el de
ayudarnos a seguirle llevando los mejores libros posibles. Puede escribirnos a la siguiente
direccin:
De Rogis Cadenhecd:
Soy una de esas personas que planea su discurso de recepcin del Osear con anterioridad
aunque yo nunca .ral aj en ningn proyecto que pudiera liderar para ganar un prcm.o de a
academia. Si este libo fuera elegible para un Osear, mi discurso podra empezar por ayudar a
los compaeros de Semillan, quienes han contribuido en gran manera a la calidad de este
libro incluyendo a J> ark Teber, Seo.. Meyers. Tonya Maddox. Eric WoK. y Deborah Fnsbv.
A continuacin, quis era agradecer a mi ex agente Brian Gil y mi agente actual Dav.d
la audiencia de este ibro. Despus del beso, lanzara los nombres de conocidos personales y
parientes a quienes , ebo favores o dinero. Wade DuChene, Jonha.an Bourne. Mark Wmner.
Phil Weins.oek. Ene Manuel, Chad Cadenhead, Kelly Cadenhead, Mama. Papa. Cl.ni Moowe.
Mane Moewe. Induurial Light and Magic, James Camarn, la Academia. M.ke Rhyner, la
Liga an.i-d.famacicn de B'nai Bri.h, Andrew Borokove, Greg WilHams. Walker Com.sano de
Texas el sistema d simal Dewey, y la estacin de radio KTCK de Dallas -Fort Wortl,
C.P. 53370
Rogerverg y le plan aria un beso a mi esposa Mary y a mi hijo Max, quien debena estar entre
Finalmente, me gu ..aria terminar con una splica a toda la gente para que viva en armon.a y
paz, y por la aboli< ion inmediata del bateador designado.
Introduccin
Hace tres aos, mencionar la palabra "java" traa a la mente una de dos cosas: Una isla de
Indonesia o una taza de caf caliente. Hoy, quienquiera que haya tenido contacto con una
pgina Web, alguna revista de computacin, o una seccin de negocios de algn diario, tiene
otro concepto de Java: el lenguaje de programacin introducido por Sun Microsystems.
&
crmenes y polticos corruptos que han recibido menos atencin que Java. El lenguaje ha lle
gado a ser parte del desarrollo de software, como el lquido del mismo nombre.
Por una pane Java mantiene despiertos a los programadores hasta tarde, mientras al mismo
tiempo otro tipo de Java permite a los programadores dormir mejor despus de una jornada de
desarrollo de programas.
Netscape firm un contrato para integrarlo en el navegador Navigator. Hoy hay vanas
A) ser liberada la versin 1.2 de Java, sta tiene alcance completo sobre Web. El lenguaje es
tan popular en Internet que adems est disponible para el desarrollo de programas de uso
general.
Podra sede familiar el uso de herramientas de programacin Java como Visual Caf de
Symantec y Java Workshop de SunSoft. Estos programas permiten desarrollar programas Java
funcionales, pero la mejor manera de entender todo el alcance de este lenguaje es a travs de
la experiencia directa de trabajar con l por medio del JDK de Sun (Kit de Desarrollo de
Java). El paquete, que est disponible sin costo en Web en http: / / j ava. sun. com, es un
Aqu es donde queremos presentar el libro Aprendiendo Java 2 en 21 das editado por
Prentice Hall. Usted ser guiado por todos los aspectos del desarrollo de programas Java
Cuando termine de leer el libro, tendr razones bien fundamentadas por las que Java ha llega
do a ser el lenguaje de programacin ms comentado durante la ltima dcada, y las razones
Introduccin
El da 12 cubre cmo hacer que una interfaz de usuario luzca bien mediante los adminis
tradores de diseo, un conjunto de clases que determinan cmo se organizan los com
ponentes en una interfaz.
El da 13 contina la cobertura del AWT con clases de manejo de eventos, los cuales
capacitan a un programa para responder a los clics del ratn y otras interacciones del
usuario.
cacin Java.
ciones.
para agrupar clases y organizar una jerarqua de clases, as como oros aspectos avanza
crearlos, cmo lener acceso a sus variables y llamar a sus mtodos, y cmo comparar
los y copiarlos. Tambin tendr un primer contacto con las bibliotecas de clases Java.
das tamo por el sistema como por sus programas; tambin aprender acerca de la
y ciclos
seguridad Java.
nican con Internet, incluyendo la programacin con sockets y el manejo de los URL.
Web).
constructores.
y otros temas.
El da 20 inicia una introduccin de dos das a Swing, las nuevas clases sobresalientes
que son partes de Java 2. Usted usa estas clases para crear la interfaz de usuario para
El di; 8 proporciona los elementos bsicos de los applels. cmo difieren de las aplica
cin, s. cmo las crean, y acerca de las partes ms importantes de un ciclo de vida de
un ai piel. Tambin aprender cmo crear pginas HTML que contienen applels Java.
. En (I da 10, usted crea programas multimedia que usan imgenes, sonido y secuencias
de r limacin. Usted tambin tiene su primera experiencia con los subprocesos. Una
Este libro le ensea todo acerca del lenguaje Java y cmo usarlo para crear applcts tanto para
Ion .a de hacer que sus programas manejen varias tareas al mismo tiempo.
usted sabr lo suficiente acerca de Java y las bibliotecas de clases Java para hacer casi
cualquier cosa, dentro o fuera de un applet.
Introduccin
Prograinadores novatos.
Convenciones
Una Nota presenta piezas interesantes de informacin, algunas veces tcni
Nota
Us,ed aprende a desarrollar applets; tambin conocer los programas Java mteractivos que se
Tip
LuJcumo parle de un;, pgina Web y aplicaconcs. programas que corren en cualquu,
, ra parte. Cuando uslcd termine "Ap^ulicndo Java 2 en 21 das' sera capa, de salvar
. 1, uier aspecto de. lenguaje y se en,rf lo suficientemente bien con Java para prolund,
en sus propios proyectos a.nh.-riosos de programacin, dentro o Im-r:. de Woh.
semanera - ira 's de, tema, sin importar su nivel de experiencia. Si enuende que son vanables ciclos y fi nciones, se beneficiar plenamente de es.e libro. El upo de persona que
Trmino Nuevo
quema leer cst, libro le incluye si cualesquiera de los siguicn.es aspectos son ceos:
.Precaucin
Escriba
Entrada
Un icono ESCRIBA identifica pane del cdigo Java que usted mismo puede
escribir. Tambin puede obtener el cdigo del sitio Web del libro.
Un icono de entrada acompaa al indicador de comandos.
. Usted tu-o algn conocimiento de BASIC o Pascal, nene dea de lo que es progra
. Usted h: escuchado que Java es fabuloso para la programacin en Web-y desea ver que
tan bien c puede usar en otros desarrollos de software.
Salida
El texto que usted escribe y el lexlo que debera aparecer en su pantalla se presenta en upo
monoespaciado:
It will look
like this
Esta fuente simula la forma en que el lexlo aparece en su pantalla. Los marcadores de posi
cin para las variables y expresiones aparecen en irJicas monoespaciadas.
Al final de cada captulo se presentan preguntas comunes acerca del lema objeto del da. con
respuestas de los autores.
Semana 1
Los inicios de la
programacin en
Java
1
Introduccin a Java
Un vistazo a la programacin
orientada a objetos
Lecciones de objetos
Creacin de clases
r :;^.r,
i ysyTt:f JS
tareas
#
S
r .'-.t-;.};i-Sj.^
iSt
Semana 1
:#
Da
m
&
Introduccin a Java
El resultado representa el producto final de casi 15 aos de intentos por con
Cuando el lenguaje de programacin Java fue dado por primera vez a la luz pblica
en mayo de 1995, se asemejaba mucho a Clini Eastwood en su papel de pistolero,
entrando a un pueblo hostil del Oeste.
Como Clini, Java era un desconocido para el resto del pueblo. Era un lenguaje de
programacin que se poda ejecutar en una pgina Web, construyendo un nombre
para si' mismo entre grficos, texto, auclio y seales de "I3N CONSTRUCCIN" por
todos lados. La gente vena desde muchos kilmetros a la redonda (la mayora
mediante enlaces de Internet, pero hubo quien vino en persona a Silicon Valley)
para darle una ojeada a este lenguaje.
&s
11
Introduccin a Java
Da 1
Las metas de hoy son razonablemente modestas. Aprender sobre los temas siguientes:
. .'Java nace que los autores de .ibros de compuncin lleguen ser ce,ebr,c,des ap.auelidas imcrnacionalinentc!"
Por qu vale la pena aprender Java, y por qu es un-justo competidor para otros
lenguajes de programacin.
Lo que se necesita para empezar a escribir programas Java, el software, las tcnicas y
algo de terminologa bsica.
Cmo crear su primer programa de Java.
',
De, mismo modo, .a leyenda se iden.T.c rpidamente por s misma con .as hazaas enemalogr;fic;is tic Clint:
Qu es Java
"Desayuna balas!"
Basndose en la enorme cantidad de publicaciones que Java ha recibido durante los ltimos aos
revista JavaWorld), usted podra lener una impresin exagerada de lo que Java es capaz de hacer.
Java es un lenguaje de programacin apropiado para disear programas que funcionen en conjun
to con Internet. Tambin es un lenguaje de programacin que hace uso de una melodologa cuya
programacin.
cruzadas, lo que significa que puede ser diseado para que corra igualmente en Windows de
Microsoft, Apple de Macinlosh y la mayora de las versiones UN1X, incluyendo Solaris. Java se
extiende ms all de los escritorios para ejecutarse en dispositivos como televisores, relojes de
pulso y telfonos celulares. JavaStation, la computadora de red de Sun, ejecuta el sistema operati
5S
Estos programas, a los cuales se les conoce como appleis, aparecen en una pgina Web
de manera parecida a las imgenes. A diferencia de stas, los applets son interaciivos
constante).
Los applets se pueden usar para crear animacin, figuras, juegos, formularios que respondan
inmediatamente a la entrada del lector, u otros efectos interactivos entre textos y grficos en
las mismas pginas Web. La figura l.l muestra un applct ejecutndose en la versin 4.04 ele
P S.n
Netscape Navigator. Java permite que una persona juegue domin contra tres oponentes en
computadora.
13
Introduccin a Java
Los usuarios de Web con un navegador sin soporte de Java podran ver texto, un grfico o
nada (dependiendo de si el diseador de la pgina ofrece una alternativa al applct de Java).
Figura 1.1
Conforme avance en este libro aprender ms acerca de cmo trabajan applets, navegadores y
Un appla de Java
Web entre s.
corriendo en Netscape
Nuviii"""'
Aunque los upplcls son probablemente el uso ms popular ile Jiivii, son solo un moilo ilc usar
el lenguaje. Como Visual C++, Visual Basic y Delphi, Java es un lenguaje robusto para desa
rrollar una amplia gama de programas, soporlar inierfaces grficas de usuario, conectividad de
redes, conectividad de bases dedulos y ola funcionalidad sofisticada. Para diferenciarlos de los
upplcls, a los programas escritos en Java <|iie no se ejecutan dentro tic un navegador Web se
les llama aplicaciones.
La biografa no autorizada
El lenguaje Java fue desarrollado en Sun Microsystems en 1991 como parte del proyecto
Green, un grupo de investigacin con la misin de desarrollar software para e! control de dis
positivos electrnicos dirigidos al consumidor final. Los investigadores esperaban desarrollar
un lenguaje de programacin que pudiera ser ejecutado en aparatos inteligentes del I muro
Tambin deseaban que estos dispositivos se comunicaran entre s, para, que la podadora le
pudiera decir a la licuadora que le avisara a usted que los vecinos haban regresado del cole
gio y que de nuevo estaban tomando baos de sol.
Para arrancar su investigacin, ios investigadores de Green desarrollaron un prototipo de dispositivo llamado Star7, semejanie a un conirol remoto comn que se pudiera comunicar con
otros de su propia clase. La idea original fue desarrollar el sistema operativo del Star? en
,er cjecu-
&
Stroustrup. Sin embargo, James Gosling, miembro del proyecto Green, al no quedar satisfe
lenguaje para mejorar la manipulacin del Star7. Al lenguaje se le denomin Oak, en honor al
rbol que Gosling poda ver por la ventana de su oficina.
Nota
Sun descubri ms tarde que el nombre Oak ya se haba usado, pero nunca
Nota
de
usa
-in funciona
ck en cmo ca decw!'"!*
Fresalvaje
Laventanaindiscreta
Agujeronegro
Lavaventanas
#
#
V
Introduccin a Java
Da 1
Java 1.1.7sta es una versin de 1998 con.mejoras a la interfaz del usuario, manejo
Eshoradccomer
Guardaespaldas
Java 2La nueva versin, liberada primero bajo el nombre Java 1.2 para pruebas beta
Solovino
Mota
Java 2, cuyo nombre clave nicialmenle fue JDK 1.2. Es importante notar que
aunque el nombre oficial manejado por Sun con fines publicitarios es Java 2,
el kit de herramientas de desarrollo, junto con toda su documentacin en
linea, mantiene su nombre original: JDK 1.2. Por tanto, en este libio, sin
nimo de confundir al lector, los trminos Java 2 y JDK 1.2 se manejan de
mo hbito de estallar en llamas.
manera intercambiable.
. Java es pcquclio -Los programas son ms rpidos de descaer desde una pg.na.
. Java es seguro -Evi.a que los hackers escriban programa que -sen cW en los
navegadores de los usuarios.
Adems Java podra ser usado como un lenguaje de programaron de propsuo gene.! para
liar programas que se puedan ejecutar en distintas pla.a.ormas.
Para demostrar e, potenca, de Java y saWar su proyecto ele *,ijac, de ser arc^o.e
S3S
Los nmeros de versin del lenguaje Java corresponden al software primario de desanollo de
Sun: el JDK (Kit de Desarrollo de Java). Comnmente denominado como el JDK. actual
mente est disponible en las versiones 1.0.2, I.) .7 y 1.2.
El JDK siempre ha estado disponible sin costo en http: / / j ava. sun. com, y su disponibi
lidad es uno de los tactores detrs del rpido crecimiento del lenguaje. Es la primera herra
mienta de desarrollo que sopona nuevas versiones de Java cuando han sido liberadas,
frecuentemente seis meses o ms antes que oros programas de desarrollo de Java.
Adems del JDK, hay ms de una docena de herramientas comerciales de desanollo de Java
disponibles para programadores de Java, entre las que se incluyen las siguientes:
Visual Caf de Symantec
JBuilder de Borland
SuperCede
^^
CodeWarrior de MetroWerks
Si planea usar alguna herramienta distinta al JDK 1.2 de Sun para crear programas de Java,
asegrese de que soporte Java 2. Al momenlo Je escribir el libro, el JDK contina s.emlo la
nica lieirainienu. que licu soporte completo i la versin 2 ik- esle lenguaje.
expandiendo el lenguaje.
Precaucin
Los programas en este libro fueron probados con el JDK 1.2 Beta 3, la versin
ms anual del kit al momento de la impresin de este libro. Si utiliza algo dife
rente al JDK,
17
Introduccin a Java
Da 1
116
basado en Iniel, el programa resultante se ejecutar en otras computadoras basadas en Intel pero
no funcionara en todas las Macintosh, Commodore VlC-20s, u otras mquinas. Si desea usar el
,, *
mismo programa en otra plataforma, debe transferir el cdigo fueijte a la nueva plataforma y
recompilarlo para producir un cdigo de mquina especfico para ese sistema. En muchos casos
se requerirn cambios al cdigo fuente antes de ser recompilailos exitosamente en el nuevo
equipo, sobre todo por las diferencias en sus procesadores y otros factores.
Figura 1.2
^^
. Arrastrar y coloca,
loca, -^J^'
Archivo binario
(Penlium)
Programas compilados
en forma tradicional.
Compilador (Penlium;
Archivo binario
Archivo binario
^ ^
(SPARC)
Compilador (SPARC)
tres sem-inas.
Los programas dc Java logran esta independencia mediante una mquina virtual (algo as como
una computadora dentro de una computadora). La mquina virtual toma los programas de Java
compilados y traduce sus instrucciones en comandos que puede manejar un sistema operativo. El
mismo programa compilado, confoimado en un formato denominado cdigo de bytes. puede ser
?^ >
ejecutado en cualquier plataforma y sistema operativo que tenga una mquina virtual.
naui-
Trmino Nuevo
Javaesindependiente^^ma^^
de ejecucin de Java.
Si tiene problemas para imaginarse cmo funciona una mquina virtual, piense en el disposi
tivo de la pelcula original de Viaje a las Estrellas que convierte al espaol cualquier idioma
que hablen los extraierreslres, para la tripulacin de la nave espacial Enterprise. El capitn
de j8 sobre otros lenguajes.
s.
rograma escrito en
Cua ,do usted compila un programa
escrito en
ler.gu.ye
gy
o c
.^ ^^ sop
.^
James T. Kirk no tiene que aprender un nuevo idioma cada vez que aterrizan en un planeta, ya
que el traductor universal convierte sus palabras en una expresin que los exlraterrestres
entienden. Del mismo modo, los programadores de Java no tienen que crear versiones distin
tas de sus programas para cada una de las plataformas en las que desean aterrizar pues la
Introduccin a Java
Da 1
Precaucin
que
*-
Trmino Nuevo
http://java.sun.com/products
Por otra parte las aplicaciones de Java slo se pueden ejecutar en un sistema donde se haya
Figura 1.3
Esto provoca algunas consideraciones de desempeo (los programas de Java se ejecutan con
/inlrprele de Java
(Penlium)
(Indepencienle
Cdigo de Java
La capacidad de un archivo de cdigo de bytes nico para correr por todas las plataformas es
crucial para que Java funcione en Web, ya que Web por s misma es independiente de la
plataforma. As como los archivos HTML pueden ser legibles en cualquier plataforma, los
applets pueden ser ejecutados en cualquier plataforma con un navegador habilitado para Java.
Para muchos programas bsicos de Java, la velocidad podra no ser una preocupacin. Si
escribe programas que requieren ms velocidad de ejecucin que lo que la mquina virtual
puede ofrecer, he aqu algunas soluciones disponibles:
ocupas d. lo qc ly=
ur"'1
19
Introduccin a Java
Da 1
21
Nota
tSgje&
Mfflft.
m
m
Por hoy dejaremos de lado todas las lecciones de historia, para realizar la segunda mitad del
trabajo. Aqu tiene una oportunidad de ver a Java en accin cuando cree su primer programa
- -
laOOPdcC+r,'
'
1 #
Para poder usar este libro a toda su capacidad, debe usar una herramienta de desarrollo que
sopme plenamente Java 2 y. por ahora, la nica opcin es el JDK. sta es siempre la
C" >
J Si pt0Enil,,al|, O*.
semana di i libro.
GetFunky
Este comando le indica al programa java (el intrprete de cdigo de bytes) que ejecute un
archivo de cdigo de byles llamado GetFunky. ciass. (Como podr ver ms tarde hoy, lodos
los programas de Java compilados tienen la extensin de archivo .class.)
program
y son an ms
L ,, stracion de ,a
rpidan':me.
iles de coneg
s podr.n e.ra.,
Los usuarios de Windows 95 deben usar el comando MS-DOS (Inicio I Programas I MSDOS) de la barra de tareas, para abrir una ventana donde se puedan escribir los comandos.
Esto representa un gran abismo en la mayora de las herramientas de programacin, las cuales
utilizan merfaces grficas de usuario, depuradores, editores de programacin y otras muchas
linduras. La gente que se siente cmoda con los sistemas operativos como MS-DOS y DOS
se sentir en casa con el JDK.
puede ; accr.
%rx
V
23
Introduccin a Java
Da 1
La pgina actual, que lista todas las versiones del JDK para distintas plataformas, tiene la
direccin siguiente:
http://java.sun.com:80/egi-bin/java-ports.cgi
JDK 1.2.
Asegrese de haber recibido completo el archivo luego de haberlo descargado. Las instruc
ciones de instalacin de Sun en Web listan el tamao de la versin vigente del JDK para la
Uversin 1.2 de. JDK (Kit de Desarrollo de Java) est disponible actualmente para las s-
Pura verificar el tamao en Windows 95 o Windows NT, vaya al directorio que contiene el
guientes plataformas:
archivo de instalacin del JDK y haga clic en el archivo con el botn derecho del rutn. Surge
. Windows 95
. Windows 98
. Windows NT
. SohrisSPARC
Antes de instalar el JDK en su sistema, asegrese que no haya otras herramientas de desarro
Descargu : e, JDK para estas plataformas de, sitio Web de Sun, en ,a gueme dneccn:
http://
ava.sun.com
U seccic n Produc & APls del s.tio Web, ofrece hipexvincu.es a versiones d.suiuas de,
v otros p educios de Sun.
Para instalar el JDK en Windows 95 o Windows NT, haga doble clic en el archivo de insta
lacin o use el comando Starl I Run (Inicio I Ejecutar) de la barra de tareas de Windows para
encontrar y ejecutar el archivo.
Despus de ver un cuadro de dilogo que le pregunta si desea instalar el JDK 1.2, se desplie
ga el Asistente de configuracin del JDK (figura 1.4). Use esla ventana para configurar el
huP:/^.iavasOn.con,/Products/JDK/i.2/xndex.html
Figura 1.4
Trecawin
iii
r,13ndo a
/yjava.sun.com
ti
sin que usted obtuvo (como \ jdk1.2), a menos que utilice el botn Browse (Examinar) para
seleccionar un directorio diferente en su sistema.
Introduccin a Java
Da 1
Tip
que est
% chmod a+x
jdk12-solaris2-sparc.bin
Para instalar el JDK despus de hacer el cambio con chmod, use una ventana de sesin del
intrprete de comandos para escribir el comando . / seguido del nombre de archivo del
./jdk12
-solaris2-sparc.bin
Prueba de la instalacin
^^
^.^
Los usuarios de Windows pueden verificar su instalacin del JDK al usar el comando de MS-
DOS en la mayora de los sistemas. Esto hace aparecer una ventana en la cual usted puede
escribir comandos en MS-DOS, el sistema operativo que precedi a Windows 3.1.
precaucin
en su
Tip
el JDK sin aprender antes un poco de MS-DOS. Este libro ofrece algunos tips
para facilitarle todo el aprendizaje de MS-DOS humanamente posible.
Escriba lo siguiente en un indicador de comandos para verificar que su sistema pueda encon
trar la versin correcta del JDK en l:
java
-versin
Si est usando el JDK 1.2, en respuesta uslcd debera ver el siguiente mensaje:
java versin
subdirectorio llamado )
previamente un s
existentes en su sistema.
"1.2"
cuente a la reparacin de una falla de programacin del JDK, con un nmero como 1.2.1,
debera ser reportado por el comando j ava versin. Si ve el nmero equivocado de
251
27
Introduccin a Java
Da 1
126
El JDK no incluye un editor de lexto, pero la mayora de herramientas de Java vienen con su
file
Com|;,
Si utiliza Windows 95 o Windows NT, un editor de texto como el Bloc de notas podra
aadirle una extensin .txt de ms al nombre de archivo de cualquiera de los archivos fuente
de Juvii que usted guarde (lo cuul provoca que un nomine como GetFunky. juva Iciniiiie cu
GetFunky. java. txt). El compilador de Java manejar nicamente archivos fuente con la
extensin de archivo . j ava. Para evitar este problema, ponga entre comillas el nombre de
archivo cuando guarde el archivo fuente. La figura 1.5 muestra esta tcnica para guardar
cl archivo fuente Craps. java desde cl Bloc de notas de Windows.
pLcg
celebridad' por un
cu.u
Figura 1.5
~3
Cuuixtudo de un
archivo fuente.
Nota
Tip
nentemente los archivos de Java con el editor de texto que va a usar. Esto le
permitir abrir un archivo fuente para su edicin al hacer doble clic en el
archivo en una carpeta de Windows. Para aprender a hacerlo, vea el
apndice D, "Uso de un editor de texto con el JDK".
Escriba el programa
la se nana 2, -
S : "S^
)o ^
^
^^
;ip,.cml:, micnlriis
K)
clcmc||Lil
Si su editor pide un nombre de archivo antes di empezar a escribir cualquier cosa, use
HelloDan.java.
es de usuano
2:
is fuenie de Java s
lauier editor de icxio o
muestra en el listado 1.1. Tenga cuidado que todos los parntesis, llaves y comillas en el lista
do estn correctamente escritos, y use exactamente las maysculas y minsculas requeridas.
":
5:
HelloDan
3:-
class
HeiloDan.
'
Kenneth?");
Introduccin a Java
5Ss
Entrada
javac HelloDan.java
http://www.prefect.com/java21
Al terminar de escribir el programa, guarde e, archivo en alguna pane en su disco Curo con e.
nombre HelloDan. java.
Nota
MS-DOS, usted podra notar que un archivo tiene dos nombres de archivo, el
que usted le dio, como HelloDan . j ava, y una versin abreviada, como
=SS=S
La figura 1.6 muestra ios comandos de MS-DOS que se usaron para cambiarse a la carpeta
\J21work, listar los archivos de las carpetas y compilar HelloDan. java.
Figura 1.6
jMSDUSPimw
Compilacin de pro
ventana de MS-DOS.
Corp
19S1-3996.
\J21uork
::\J21.rk>dir
Voluiac
ir,
Volui.ie
StL'ial
di i ve
Oiroctory of
has
Nutnbr.
nc
]s
label
DS4T.-2F2F
C:\021ucirl:
01-24-96
IELLC'D-1 JAV
'
file(s)
dic(s)
14
';
2:39s
C;l-24-'5a
2:33a
..
01-24-5J
2:2a Heliot-ih
14 3
byt.es
42 , 96,704
bytes
fr-i-e
::\J21uork>javac HelloDan
'1
S ..ard e. arcn.vo dentro de una carpc.a recen creada J2iworK fuera de. d.rectono ra,, de,
s siema, el comando debera ser el siguiente:
ci
\J2iwork
--
^--'-:-
..
...
El compilador del JDK no despliega ningn mensaje si el programa se compila con xito. Si
el programa se compil sin ningn error, se crear un archivo HelloDan. class en el mismo
Introduccin a Java
Da 1
130
directorio que contiene Hellodan. java. Este archivo .class es el cdigo de bytes de Java
que puede ser ejecutado por la' mquina virtual. Si obtiene algn error, regrese.al arch.vo
fuente original y asegrese de haberlo escrito correctamente, como aparece en<el listado 1.1.
Una vez que tenga un archivo .class, lo puede ejecutar mediante el intrprete de cdigo de
by.es La versin del intrprete del JDK se llama java, y tambin es ejecutado desde la Imea
directorio que contiene el archivo fuente de Java Hellodan. java. Si usa el directorio J21work
Use el compilador de Java de lnea de comandos que viene con el JDK pura compilar el archivo
fuente de Java en un sistema Solaris. Desde una lnea de comandos UNIX, use cd para ir al
recomendado para los usuarios de Windows, ste sera el comando que debera usar:
cd -/J21work
Una vez en el directorio correcto, utilice as el comando javac con el nombre de archivo:
HelloDan
Javac HelloDan.java
Si su programa fue escrito y compilado correctamente, deber ver la frase What' s the f re
queney, Kenneth? desplegada en la pantalla de su ventana de MS-DOS.
.HelloDan.class. ste es el archivo de cdigo de byies de Java que puede ser ejecutado por
la mquina virtual. Si obtiene algn error, vaya al archivo fuente original y asegrese de que
se escribi exactamente como aparece en el listado I. I.
Nota
Una vez que tenga un archivo .class, lo puede ejecutar con el intrprete de cdigo de bytes.
La versin del intrprete de Java JDK se llama java y tambin se ejecuta a partir de la lnea
de comandos. Ejecute HelloDan cambindose al directorio que contenga HelloDan. class y
escriba lo siguiente:
java
HelloDan
La figura 1.7 muestra la salida apropiada de la aplicacin HelloDan junio con los comandos
Si su programa est correctamente escrito y compilado, deber ver la frase What' s trie
frequeney,
Figura 1.7
Ejecucin Je aplica
ciones Javo en unu
Nota
ventana de \1S-DOS.
Volimu:
:^-lj-5)
IJumUl
1-
Resumen
01-M-S
2 fiii-is)
2 dir(s)
;lik:
''-- "y-""
39,419,OJ
by<
Esto no es del todo falso, despus de todo. Usted no slo cre una aplicacin funcional de
Kenr.eth?
Java, sino que tambin hizo un viaje de un da a travs de la historia, fuerza, debilidades y
futuro del lenguaje.
31
Semana 1
en pginas Web.
m
m
Los appiets son programas de Java que se ejecutan en Web, y las aleaciones son todo aque,
software que pueda ser escrito con Java.
m
m
a Objetos
Da
Preguntas y respuestas
p Cul es la relacin entre JavaScript y Java?
R Tici en iguales las primeras cuatro letras.
Un vistazo a la
programacin orientada
SS
.<* cua.es
h n y applets de Java:
m
m
o
A la mayora de la gente que la prueba por primera vez no le gusta, y podra cues
Algn tiempo despus, sin embargo, se cultiva un gusto por la cerveza en quienes
continan bebindola.
a objetos
tionar la salud mental de quienes cantan sus alabanzas. "Qu te hice... diran
&
una materia que puede ser estudiada y practicada durante aos. Sin embargo, la
idea central es simple: organizar los programas de modo que reflejen la forma de
organizacin de los objetos en el mundo real.
Da 2
Internamente, cada uno de esos componentes podra ser sumamente complicado y construido
por compaas dTerentes mediante mtodos de diseo distintos. Sin embargo, usted no nece
sita saber cmo funcionan estos componentes, qu hace cada procesador en las tarjetas y
cmo una "A" es enviada a la pantalla de su computadora cuando oprime la tecla A. Cada
componente que utilice es una unidad independiente y, como ensamblador de lodo el sistema,
a usted slo le interesa cmo inieructan las unidades entre s:
Cada componente producir los comandos apropiados para interactuar con otros com
ponentes, de modo que cada parle de la computadora sea entendida por cada otra parte?
Una vez que conoce las interacciones entre los componentes y las puede empatar, ensamblar
todo el sistema es sencillo.
ques LEGO o ensamblar una PC. Mediante la OOP, todo su programa est formado por obje
Piense
Trmino Nuevo
ii
,l
Cada objeto tiene un papel especfico en un programa, y todos los objetos pueden tuncionar
con otros objetos en maneras definidas.
Objetos y clases
La programacin orientada a objetos se basa en la observacin de que, en el mundo real, los
objetos se construyen a partir de objetos ms pequeos. Sin embargo, la capacidad de combi
'
,. uchas otras piezas -
,,
c.,slillos, an
nar objetos es slo un aspecto general de dicha programacin. Tambin incluye conceptos y
caractersticas que hacen que la creacin y el uso de objetos sea ms sencilla y flexible. La
um> maginar.
Trmino Nuevo
Una clase es una plantilla que se utiliza para crear mltiples objetos con carac
tersticas similares.
Las clases engloban todas las caractersticas de un conjunto particular de objetos. Cuando
escribe un programa en un lenguaje orientado a objetos, usted no define objetos individuales,
sino que define clases de objetos.
351
Da 2
CoromandButton no tiene que reescribir el cdigo para cada botn de comando que desee usar
en sus programas. Adems, puede usar de nuevo la clase CommandButton para crear diferen
tes tipos de botones conforme los vaya necesitando, tanto en este programa como en otros.
rboles en general:
. Tienen hojas y races
.
Figura 2.1
Crecen
. Producen clorofila
objetos Tree.
cn ,,
. Bajo o alto
. Tupido o ralo
.
>e da frutos o no
i
Nota
Al escribir un programa Java, usted disea y construye un conjunio de clases. Cuando su pro
grama se esl ejecutando, los objetos se crean desde estas clases y se usan conforme se van
necesitando. Su tarea como programador de Java es crear el conjunio adecuado de clases para
371
Da 2
Por fortuna no tiene que empezar de cero. Cada versin de. .enguaje Java incluye un grupo
c2Tq imp.emen.an la mayora de la funcionalidad bsica que neces.tara. A estas agrupaciones se les denomina bibliotecas.'
Una biblioteca de clases es un grupo de clases diseadas pan, su use, con .rus
Trmino Nuevo
Cuando usted habla de usar el lenguaje Java, realmente se refiere al uso de la biblioteca de
clases de Java y algunas palabras Cave y operadores que son reconocaos por un compilador
En una clase los atributos estn definidos por variables. Usted puede considerarlos anlogos
para las variables globales para cada objeto de esa clase. Cada objelo puede tener valores
distintos para sus variables y a stas se les denomina variables de instancia.
Trmino Nuevo
Java.
to de.un objeto en particular. La clase del objeto define qu tipo de atributo es,
La biblioteca estndar de Java maneja numerosas tareas co.no funciones mticas, .anejo
dt textos grficos, somdo, interaccin del usuario y conectividad de redes. En muchos casos.
y cada instancia almacena su propio valor para ese atribulo. A las variables de instancia
consistira en crear una Case sencilla que se use para crear objetos a pan,r de ,as clases tan-
Cada atributo de clase tiene una variable correspondiente sencilla; al cambiar el valor de la
as
Cecas de clases de Java sern suficientes para sus necesidades. En tal caso su tarea
Para
Fn -enera! c ada clase que usted escriba en Java est compuesta de dos componentes: a.nbu;Zmpo. en, En es.a seccin aprender cmo se aplica cada componente a una Cas,
eoricn >hl da Jabberwock. Para finalizar esta seccin, cread una dase Java que ,mplc-
Atribuios
ios de una clase de objetos
^:t^arienca, estado y otras cualidades de esa Case. Piense cmo se podna crear ,a
Los
variable puede cambiar ese atributo en un objeto. En el programa que crear hoy un poco
ms adelante, la instruccin siguiente se emplea para indicar que un objeto Jabberwock
representado por j ya no est hambriento:
].hungry
= false;
Las variables de instancia pueden lomar un valor cuando se crea un objeto y permanece
constante a travs de la vida del objeto, o bien pueden tomar valores diferentes mientras el
objeto se usa en un programa en ejecucin.
Atributo; y comportamiento
-
Los atributos de una clase de objetos tambin pueden incluir informacin acerca del estado
de un objeto. Por ejemplo, usted podra tener las caractersticas de la disposicin de un jab
femenino, qu-le-importa
. Ap -'lito satisfecho,
hambriento
Para describir toda una clase de objelos se usa otro tipo de atribulo en vez de objetos espec
ficos desde la clase. A estas se les denomina variables de clase.
Trmino Nuevo
instancias, de modo que slo se almacena un valor, no impona cuntos objetos de clase
riable de instancia para el conteo en la clase Jabberwock, cada uno de los objetos podra
tener un conteo distinto, lo cual no sera preciso. Habra que utilizar una variable de Case
para que slo se almacenara un valor, y que cada objeto Jabberwock pudiera lener acceso
a esa variable.
para s o para otros objetos. El comportamiento de una clase determina qu objelos de esa
Case hacen cambiar sus atributos, y tambicn qu hacen cuando otros objetos les piden hacer
algo. El comportamiento de un objeto Jabberwock podra incluir lo siguiente:
391
Din 2
41 I
Se enoja
Se calma
Ahora que ya conoce la terminologa bsica de la programacin orientada a objetos, las cosas
i
. Se come a un campesino
.
Se salta la cena
Se recupera
podran ser ms claras con un ejemplo ms concreto. Crear un ejemplo de trabajo de la clase
Jabberwock, para que pueda ver cmo se definen variables de instancia y mtodos en una
clase. Asimismo, podr crear un applet Java que cree un objeto nuevo mediante la clase
Jabberwock, modificar sus variables de instancia y tomar accin a partir de sus valores.
La sintaxis real del ejemplo no se detalla aqu. sela como una introduccin
Nata
Abra el editor de lexto que suele usar para crear programas Java, de modo que empiece a
crear un archivo fuente de Java. En vez de introducir un programa completo, escribir algunas
instrucciones mientras aprende a usarlo. Tiene una oportunidad de revisar doblemente su ira-,
bajo al final, para asegurarse que est correcto.
o
m
Jabberwock
}
por pillaba:
Usted ha creado una clase. Por el momento no es gran cosa, pero las dos lneas son un ejem
Para o,ue Jabberwock sea ms sofisticada, hay que crear tres variables de instancia para esta
clase. Justo debajo de la lnea class Jabberwock {, inserte las tres lneas siguientes:
String
color;
String sex;
m
Q
m
boolean hungry;
Estas lneas crean tres variables de instancia. Dos de ellas, color y sex, pueden contener
objetos String. Una cadena de texto es un trmino general que significa un grupo de
caracteres, pero en Java un objeto String se crea mediante una de las clases estndar en
la biblioteca de clases de Java. La clase String se usa para guardado de texto y muchas
funciones de manejo de texto.
El tercer objeto, hungry, es una variable boolean que slo puede guardar uno de dos valo
res: true (cieno) o f alse (falso). Este objeto se usa para registrar si el jabberwock est
hambriento (true) o satisfecho (f alse).
s:
void feedJabberwock()
6:
if
7:
(hungry == true)
8:
Systera.out.printlnCYum
9:
hungry =
18:
a peasant!");
else
System.out.println("No,
11:
--
false;
thanks
--
already ate.");,
12:
13:
//y an hay ms
14:
ntodos. Hay
15:}
Tip
incluyen para beneficio de los programadores, para que la lgica del progra
P;ll, empezar, agregue las siguientes lneas debajo de las tres variab.es de instan,, en su
definicin de clase:
void feedJabberwock(
if
hungry = false;
//
an
Antes de que compile esta ciase, necesita agregar un mtodo ms. El mtodo
showAttributes() despliega los valores actuales de las variables de instancia en una instan
cia de su clase Jabberwock.
hay mas
Tif
showAttributes()
(hungry ==
" + color +
"
jabberwock.");
true)
System.out.println("The
jabberwock is hungry.");
else
System.out.println("The
jf (hungry
==
true .Si
.
true
lo*
: --:::
jabberwock is full.");
El mtodo showAttributes() despliega dos lneas en pantalla: el sexo y color del objeto
Jabberwock y si est hambriento o no. A travs de su editor de texto, guarde en disco el
archivo fuente asegurndose que se llame Jabberwock. j ava, para que el nombre de archivo
corresponda al nombre de clase.
En este momento, usted tiene una clase Jabberwock con variables de instancia y mtodos de
instancia que se pueden usar para desplegar y modificar estas variables.
1:
class Jabberwock {
2:
String color;
3:
String
4:
boolean
sex;
hungry;
Use uno de los procedimientos siguientes para compilar el programa, dependiendo del sis
tema que est usando.
43 I
451
Da 2
|"44
Hay dos maneras de usar la clase Jabberwock:
Agregue un mtodo main () a la clase Jabberwock para que pueda ser ejecutada direc
indicador de
MI
javac Jabberwock.java
tamente.
; ,
Para esle ejercicio se har lo ltimo. Cargue Jabberwock. java a su edilor de texto e inserte
una lnea en blanco directamente debajo de la ltima lnea del programa. (Lnea 21 del
listado 2.2.)
iavac Jabberwock.java
Jabberwock j
j.color =
j.sex =
j.hungry
= new Jabberwock();
"orange";
"male";
-
true;
1: class Jabberwock {
System.out.println("Calling showAttributes
2:
String color;
j.showAttributes();
3:
String
System.out.println("
sex;
boolean
4:
5:
j.feedJabberwock();
System.out.println("
8:
j.showAttributes();
hungry = false;
9:
System.out.println("
");
System.out.println("Feeding the jabberwock
10:
");
i1 (s;s?e:.::t:;
7:
-");
hungry;
void ieedJabberwock()
6:
...");
...");
j.feedJabberwock();
11:
12:
13:
14:
15:
sex
color
jabberwock.");
iabberwock i.
16:
17:
1Se
18:
19:
Systen,
28:
21:
Con el mtodo main<) en su lugar, ahora se puede usar la clase Jabberwock como una apli
El listado 2.3 muestra el archivo de cdigo fuente Jabberwock .java final, en caso de que
haya tenido problemas al compilarlos.
Si tiene problemas con cualquier programa en este libro, puede obtener una
Tip
copia del archivo fuente y otros archivos asociados en el sitio Web oficial de
este libro en http://www.prefect.coro/java21.
class
1:
class
Jabberwock {
2:
String
color;
3:
String
sex;
4:
boolean hungry;
m
Q
Da 2
47 j
5:
void feedJabberwocM) {
6:
if (hungry == true)
7:
System.out.println("Yum -- a peasant!
8:
9:
10:
11:
java Jabberwock
),
hungry = false;
12:
13:
14:
15:
void showAttributes() {
System.out.println("This is a " + sex +
color
Yum
jabberwock.");
h. iabberwock is hungry.",;
16:
17:
18:
19:
^" system.out.printlnC'The
The
J.bberwcck is full.);
22:
23:
24:
25:
26:
27:
28:
29:
3C:
31:
32:
33:
34:
35:
36:
37:
jabberwock is full.
28:
21:
No,
...
already ate.
.'
Lnea 22 Se declara el mtodo main (). La primera lnea del mtodo main () siem
j.sex = "raale";
pre se parece a sta, y usted aprender acerca de cada elemento posteriormente durante
yS..7out.pri"t(
esta semana.
j.showAttributes();
");
Con el listado 2.3 como gua, lo que sigue toma lugar en el mtodo main ().
"orange";
Svstem.out.printlnf'
thanks
),
feedJabberwock();
aprendi, usted de hecho no opera directamente en las clases en sus programas Java.
K;::::":;Sun!"c;i;;showAttributes.
En vez de ello, crea objetos de aquellas clases y llama a mtodos para esos objetos para
j.showAttributes();
operar en ellos.
Svstem.out,println("
)>
38:
39:
La apHcacn Jabberwock se puede ejecutar con uno de los siguien.es procedimientos espec,
fieos de plataforma:
Lneas 24-26 Las variables de instancia color, sex y hungry son asignadas para el
objeto Jabberwock creado en la lnea dos. El color es orange, el sexo es male y la
variable hungry toma el valor booleano true. Esto indica que el objeto Jabberwock
est hambriento.
Esto hace que el objeto Jabberwock indique los valores de sus variables de instancia:
color, sex y hungry.
Una clase puede tener nicamente una superclase, pero cada clase tiene una cantidad ilimita
da de subclases. Las subclases reciben por herencia todos los atributos y comportamiento de
sus superclases..;
cambia el
el va
valor
cambia
de la
t)
.-.;
En trminos prcticos, esto significa que si la superclase tiene comportamiento y atributos que
la clase que usted est creando necesita, no tendr que definirlos o copiar el cdigo para
superclase, la cual a su vez las obtiene de su superclase y as sucesivamente por toda la jerar
qua de clases. La clase que usted est creando se convierte en una combinacin de todas las
caractersticas de las clases superiores en la jerarqua, as como de las propias.
La situacin es comparable a la manera en que se heredan todo tipo de aspectos de los padres,
como la altura, el color del cabello, el amor por la msica africana, o la resistencia a pregun
tar cmo llegar a alguna parte. Se heredan algunas de estas cosas de los padres, quienes lo
heredaron de los suyos, y as hacia atrs hasta llegar al Jardn del Edn, el Big Bang, o
(.inserte aqu su propia creencia cosmolgica).
Una jerarqua de
Clase A
clases.
La clase A es la superclase de B
La clase B es la subclase de A
La clase B es la sjperclase
de C, D y E
Las clases C, D y E
son subclases de B
Clase B \
Herencia
ia en la programacin orientada a
Clase D
En la pane superior de la jerarqua de clases de Java est laclase Object (todas las clases
heredan de esta superclase nica). Object es la clase ms general de la jerarqua y define el
comportamiento y atributos heredados por todas las clases de la biblioteca de clases de Java.
Conforme desciende la jerarqua, las clases se construyen para un propsito especifico. Una
'
Slbc/ase,yalaclasequepro- |>
jerarqua de clases define conceptos abstractos en la pane superior de la jerarqua. Estos con
ceptos se vuelven ms concretos conforme desciende la lnea de subclases.
Da 2
51
Los dragones y los jabberwocks tienen caractersticas similares (son monstruos grandes y se
comen a los campesinos). Ambos tienen garras afiladas, dentadura poderosa y personalidad
tipo A. El primer impulso podra ser abrir el archivo fuente Jabberwock. j ava y copiar la
mayor parte de l en el nuevo archivo fuente llamado Dragn, java.
Pnn recibir toda la funcionalidad de ComnandButton sin tener que pasar por el trabajo de
I -a lima m clase como subclase ,lc CommundButton. S,. cl:.sc Icn.ln, :...",,...
',;
nbmos de las saciases de Co-ndButton. Todo lo que debe hacer es def.mr Ips aspec-
TRMINO NUEVQ
Si -sf aculo un uran conjunto de Cases, tendr sentido que stas hereden de la j^rqma
ty 2 men una jerarqua por s mismas. Organizar las Cases de esta manera
;;^;n^;r un tiempo Considerable de p.aneaein. pero las ventajas son ,as s,gluen,es:
en una jerarqua ms general de clases. Esto podra desembocar en mucho ms trabajo para
las clases Dragn y Jabberwock, pero qu pasa si tambin quiere aadir Medusa, Yeti,
Sasquatch, Grue y DustBunny?l colocar el comportamiento comn en una o ms clases
reutilizables se reduce en gran medida el total de trabajo.
Para disear una jerarqua de clases que pudiera servir para este propsito, empiece por el
principio con la clase Object, la cima de las clases Java. La clase ms general, a la cual
deben pertenecer un jabberwock y un dragn, se podra llamar Monster. Un monstruo, ge
neralmente, podra ser definido como una criatura feroz de algn tipo, que aterroriza a la
gente y reduce el patrimonio. En la clase.Monster se puede definir nicamente el compor
tamiento que califique el ser feroz, terrible y malo para el entorno.
voladores podra incluir bajar en picada sobre la presa, lomar campesinos y cargarlos hacia el
cielo, soltarlos de grandes alturas y cosas similares. Los monstruos que caminan podran tener
un comportamiento distinto y ser ms susceptibles al ataque de arqueros. La figura 2.3 le
muestra lo que ha hecho.
Figura 2.3
La jerarqua bsica
Monster.
La Case jabb.rwock est terminada, funciona correctamente y todo est bien. Ahora acara
una Case Java llamada Dragn.
I'
531
I 52
La herencia en accin
En Java la herencia funciona de manera mucho ms simple que con las herencias en el mundo
real. En el mundo Java no se requieren albaceas, jueces, o cortes de algn tipo.
Cuando se crea un objeto nuevo, Java registra cada variable definida para el objeto y cada
variable definida para cada superclase del objeto. De este modo, todo lo que contienen las
clases se combina para formar una estructura descriptiva del objelo en uso, y cada objeto
Figura
2.4
FlyingMonster
Los mtodos trabajan de manera parecida: los objetos nuevos tienen acceso a todos los nom
bres de los mlodos.de su clase y superclase. Esto se determina de manera dinmica cuando
ti
objeto en particular, el intrprete de Java primero revisar la clase del objeto para este mto
FourLegged
do. Si no lo encuentra, el intrprete de Jav;i lo busca en la superclase ilc esa clase, y as suce
FlyingMonster
sivamente, hasta encontrar la definicin del mtodo. Esio se ilustra en la figura 2.5.
(3
Figura 2.5
Mammal
Repule
Ubicacin de los
Amphibian
jerurquia de clases.
,es
oira.s.
Las cosas se complican cuando una subclase "define un mtodo que tiene el mismo nombre,
Nota
diatamente debajo de
de las clases a organizar.
i*
tipo de valor de retorno y argumentos que otro mtodo definido en una superclase. En este
caso, la definicin del mtodo que se localiza primero (comenzando por el fondo de la jerar
qua y desplazndose hacia arriba) es la que se ha empleado. En consecuencia, puede crear
un mtodo en una clase que evite que se use un mtodo de una superclase. Para hacerlo,
cree un mtodo con ti mismo nombre, tipo de valor de retomo y argumentos como el mtodo
en la superclase. A este proceso se le denomina xobreposicin (figura 2.6).
Da 2
551
Las interfaces son un tema que se entiende mejor despus de tener alguna experiencia de
Figura 2.6
Sobrepostcin de
El mtodo es sobrepuesto
mtodos.
Paquetes
Definicin inicia!
En Java los paquetes son una forma de agrupar clases e interfaces asociadas. Habilitan los
bel mtodo
., grupos de clases para estar disponibles slo si son necesarios y eliminan los conflictos
potenciules entre los nombres de clases en grupos diferentes de clases.
jis bibliotecas de clases en Java estn contenidas en un mi/ucie llanuiilo java. Las
le corresponda
de Java y son las nicas clases garantizadas para estar disponibles a travs de implementaciones diferentes. El paquete java contiene paqueics ms pequeos que definen
subconjuntos especficos de la funcionalidad del lenguaje Java, como caractersticas
estndar, manejo de archivos, multimedia y muchas otras cosas. Las clases en otros
paquetes como sun y netscape suelen estar disponibles nicamente en implementa-
ciones especficas.
En forma predeterminada, sus clases de Java slo tienen acceso a las clases en
Fu J-tva a la forma de herencia se le denomina herencia semilla debido a que cada clase Java
slo puede lencr una superase (aunque cualquier suprelas* dada pueda tener mltiples suh-
j ava. lang (caractersticas bsicas del lenguaje). Para usar clases de cualquier otro
paquete, tiene que referirse a ellas explcitamente por nombre de paquete o importar
las a su archivo fuenic.
clases).
En otros lenguajes de programacin orientada a objetos como C++, las clases pueden tener
ms de una "upcrclase y heiedar variables y mtodos de forma combinada de todas aquellas
supcrclases A esta forma se le denomina herencia mltiple, y proporciona la estructura para
que se pued tn crear clases que conformen casi cualquier componamiemo imaginable. Mn
embargo, cemplica significativamente las definiciones de clase y el cdigo necesario para
producirlas. Java hace ,ue la herencia sea menos complicada al habilitar nicamente la herencia sencilla.
Para referirse a una clase dentro de un paquete, se deben listar lodos los paquetes
que la clase contiene seguidos del nombre de clase, con cada elemento separado por
puntosf.). Por ejemplo, supongamos la clase Color. Est contenida en el paquete awt,
el cual est a su vez en el paquete java. Para referirse a la clase Color en sus progra
mas se puede usar la notacin java.awt.Color.
Interfa :es
mtodos. Tambin tendr una mejor sensacin acerca de cmo trabajan los paquetes.
implemcnu,, sea ms acl de comprender y disear. Sin embaivo. lamb.en podna ser resme-
cuando se crean los applets. Crear applets es diferente a crear aplicaciones. Los applets java
1 , herencir. sencilla h.- ce que la relacn entre clases y la funcionalidad que estas clases
,iv, (sobre i.do cuand , se cuenta con comprtamelos smil-tes que necesitan ser duplica
dos :i lo lar; o de br;./. s Jislimos de l:i jerarqua de clases) O> l:is i.iu-i laces. J.v:i resuelve
portamiento. Debido a estas reglas especiales para los applets, crear un applet sencillo es
Trmino Nuevo
se ejecutan como parte de una pgina Web, y por tanto tienen reglas especiales para su com
Jna interf, z es un conjunto de mtodos que indican que una clase tiene un com
Todos los applets son subclases de la clase Applet (la cual es parte del paquete j ava. applet).
ii
571
Da 2
Al crear una variable de instancia para contener este objeto Font, lo pone disponible para
todos los mtodos en su clase. El siguiente paso en el proyecto Palindrome es crear un mto
// y an hay ms
do que lo use.
Cuando escribe applets, hay varios mtodos definidos en la superclase Applet que usted
comnmente sobrepone a su applet. stos incluyen mtodos para configurar el applet antes de
que se ejecute, para iniciar el applet, para responder a la entrada del ratn, y para que libere
applet.Applet.
Uno de estos mtodos es paint (), el cual maneja cualquier cosa que debiera ocurrir cuando
el upplet se despliegue en una pagina Web. El mtodo paint () que heredn de Palindrome no
hace nada (es un mtodo vaco). Al sobreponer paint (), usted indica que debera ser dibuja
screen.setFont(f);
screen.setColor(Color.rad);
5,
46);
El mtodo paint () es declarado public, como el applet en s mismo, pero por una razn
distinta. En este caso, paint () debe ser pblico debido a que el mtodo que est sobrepuesto
tambin es pblico. Un mtodo de superclase que es pblico debe ser sobrepuesto por un
mtodo pblico, o el programa Java no se compilar exitosamente.
El mtodo paint () toma un argumento sencillo: una instancia de la clase Graphics llamada
j, ,*
colores y dibujar lneas y otras formas. Aprender ms acerca de la clase Graphics durante la
semana 2: "Temas avanzados de Java", cuando cree ms applets.
declaracin:
Da 2
591
import
5,
36);
java.awt.*;
,
Ahora, con las clases apropiadas importadas en su programa. Palindrome. java debera
40);
compilarse sin problemas a un archivo de dase. El listado 2.4 muestra la versin final para
En este pumo debi haber notado que algo faltaba en el ejemplo. Si guard una copia e nicn-
Rs.os errores ocurren debido a que las clases Graphics, Font. y Color son parte del paque
te java awt y no estn disponibles en forma predeterminada. Usted so relir. a la clase
paquete (java, applet. Applet). En el resto del programa, se refiri a otras clases s.n usar
1:
import java.awt.Graphics;
2:
import Java.awt.Font;
3:
import java.awt.Color;
4:
5:
6:
java.applet.Applet
new Font("TimesRoman",
Font.BOLD,
36);
7:
8:
. Referirse a todas las clases exlernas por su nombre de paquete compleio, como
java.awt.Graphics,
java.awt.Font, y java.awt.Color.
. Usar una instruccin import al principio de! programa para que estn disponibles uno
publie
9:
void paint(Graphics
screen)
screen.setFont(f);
10:
sereen.setColor(Color.red);
11:
screen.drawString("Go hang a
salami,
I'm
lasagna
hog.",
5,
40);
12:
13:
Cul elija es, en su mayor parte, un asunto de preferencia personal: pero si se refiere a una
Guarde este archivo con el nombre Palindrome. java. Puesto que este archivo fuente con
de texto.
clase pblica para que se compile exitosamente. El uso de maysculas y minsculas aqu tam
clase en otro paquete muchas veces, tal vez prefiera usar import para dism.nu.r la canndad
En este ejemplo se usar lo ltimo.
Para importar estas clases, aada los tres enunciados siguientes antes de la induccin
Palindrome:
tiene una clase pblica, Palindrome, el nombre de archivo debe corresponder al nombre de la
bin es importante, por lo que las letras deben ser idnticas.
Este archivo fuente puede ser compilado de la misma manera que las aplicaciones Java que
usted ha creado hasta aqu. Sin embargo, para poder ejecutarlo, debe crear una pgina Web
publie
class
import
java.awt.Graphics;
import
java.awt.Font;
Muchos programas de desarrollo de pginas Web, como Home Page de Claris y Dreamweaver
iniport
java.awt.Color;
para colocarlo.
Si no tiene una de estas herramientas, puede crear una pgina Web sencilla mediante las ca
ractersticas asociadas Java del lenguaje descriptivo de pginas HTML.
50
61
ff
Para abrir la pgina Web Palindrome. htral mediante un navegador Web, use,el comando del
men desplegable en el navegador para abrir archivos locales en vez de pginas Web. En
Navigator 4.04 de Netscape, el comando es File I Open Page I Choose File.
Para abrir la pgina con la herramienta appletviewer del JDK, vaya al indicador de una
lnea de comandos en la misma carpeta que contenga Palindrome. html, y escriba el comando
siguiente:
Prentice Hall.
Entrada
appletviewar Palndroma.html
tenido en la pgina.
ti
Figura 2.7
El applel Palindrome,
ejecutndose en la
herramienta
appletviewer.
1
Go liang
salan n, I 'ni
1 as a na ho.
Cl
Acplet euiuo
(1
Natasha" y "To Idi Amin: l'm a idiot". Los tres ltimos son palndromos de la
lista gigante de palndromos de Neil/Fred en la direccin Web:
http://www.tsoft.net/-derf/palindronie.html
Resumen
Si ste es su primer encuentro con la programacin orientada a objetos, podra haber descu
bierto de otra forma en qu se parece a la cerveza.
.I
I
II
Q
. Si el material de hoy parece terico y abrumador en este punto, no tiene por qu alarmarse.
Estar usando tcnicas orientadas a objetos por todo el resto del libro, y se familiarizar ms
conforme adquiera ms experiencia al usarla.
631
Preguntas y respuestas
P En efecto, los mtodos son funciones que estn definidas dentro de clases. Si
lucen como funciones y actan como funciones, por qu no se les llama fun
Para resum.r el materia, de hoy, aqu le presentamos un g.osario de los trminos que se
ciones?
cubrieron:
eron:
ciones miembro). Otros lenguajes orientados a objetos las diferencian de las funciones
de.ntro y fuera del cuerpo de una clase u objeto, ya que en esos lenguajes el uso de !
trminos separados es importante para entender cmo opera cada funcin. Puesto que
de otras clases.
Ohieto instancia de una clase. Objetos mltiples que son instancias de la misma clase
2 acl^o a los mismos mtodos, pero frecuentemente tienen valores d.stintos para sus
variables de instancia.
todo Grupo de instrucciones en una Case que define como debern comportarse^ los
ob e,os de la clase. Los mtodos son anlogos a las funcione, de otros lenguajes de p,o. elacin, peo siempre deben ser ubicados dentro de un, clase.
\unuio d, clase Mtodo que opera en una Case en s misma en ve, de Rancias pee.Mto
yimMe , , clase Es una variable que describe un atributo de una Case en vez de insun,ci-is especficas de la ciase.
*rilMe , , naonato Variable que describe un atribu.o de una infancia de una Case en
vez de la :lase en s misma.
lene
R Casi cualquier cosa que se pueda hacer en un programa Java involucrar instancias
(tambin llamadas objetos) en vez de clases. Sin embargo, algunos comportamientos
y atributos tienen ms sentido si se almacenan en la clase por s misma en vez de en
el objeto. Por ejemplo, para crear una nueva instancia de una clase, necesita un mto
do que est definido y disponible para la Case por s misma. De olra manera, usleil
corre entre el dilema del huevo y la gallina (no puede crear un objeto beb sin la exis
tencia del objeto mam, que tiene un mtodo de creacin de bebs; y ningn objeto
mam puede existir sin haber tenido antes un beb).
m
m
Semana 1
m
m
m
m
&
DA
En este momento, le podra parecer que Java es como las muecas rusas anidadas lla
madas Matrvoshkas. Cada una de esas muecas contiene una mueca igual dentro de
ella, la cual es tan intrincada y detallada como su compaera ms grande.
Reljese, babushka; este da retira las muecas grandes para revelar los elementos
Comentarios
Literales
Expresiones aritmticas
Comparaciones
Operadores lgicos
Da 3
j.Las instrucciones en Java estn agrupadas mediante una llave que abre ({) y la que cierra()).
Al grupo de instrucciones organizadas entre estos caracteres se le denomina bloque o bloque
de instrucciones. Aprender ms acerca de ellos durante el da 5, "Listas, lgica y ciclos".
Puesto aue Java es similar a C y C++. gran parte del material en este da les
Nota
de una sola letra. Cuando sea necesario, las notas tcn,cas como esta
iva^
y expresiones
Tod" hsTireas que quiera cumplir en un programa Java se pueden dividir en un;, seno de
Trmino Nuevo
instrucciones.
Para poder crear una variable, debe darle un nombre e identificar qu lipo de informacin alma
cenar. Tambin le puede dar un valor inicial a una variable al mismo tiempo que la crea.
, as insnuccones representan una necon sencilla que se ,oma en un programa Java Todo lo
En Java hay tres tipos de variables: variables de instancia, variables de clase y variables
locales.
Las variables de instancia, como lo aprendi ayer, se usan para definir los atributos de un
objeto.
import java.awt.dnd;
Systemout.printim-VouTenotthebossof mel");
, Las variables de clase definen los atributos de toda una clase de objetos, y aplican a todas sus
instancias.
AlgUna instrucciones producen un va.or, como cuando suma dos nmeros dentro de un pro
grama. \ es.:.s instrucciones se les llama expresiones.
=:
- Alinas expresiones producen un valor de retomo numrico, como en el ejem-
instancia se usan de una manera distinta a las variables locales. Hoy aprender acerca de las
variables locales y cubrir las variables de clase y de instancia durante el da 4, "Lecciones de
objetos".
;5EErS
Creacin de variables
Antes de que pueda usar una variable en un programa de Java, usted debe crear la variable
declarando su nombre y tipo de informacin que almacenar. Se enlista primero el tipo de
67
691
Como indica la ltima instruccin, usted puede asignar valores a variables mltiples del
mismo tipo mediante comas para separarlas.
A las variables locales se les debe dar valores antes de ser usadas en un programa, o el pro
variable:
grama no se compilar con xito. Por esta razn es una buena prctica darle valores iniciales
int highScore;
String
username;
boolean gameOver;
Variables numricas 0
Booleanas f alse
Objcctos nuil
Nomenclatura de variables
En Java los nombres de variables deben empezar con una letra, un carcter de subrayado(
),
o un signo de pesos($). No pueden empezar con un nmero! Despus del primer carcter, los
nombres de variable pueden incluir cualquier combinacin de letras o nmeros.
un prcrama.
tring reportTitie,
\oolean active;
Nota
Cuando se da nombre a una variable y se usa eji un programa, es importante recordar que
HamuJasstreet.cityystate:
En los programas de este libro y en cualquier otra parte, a las variables de Java se les da
nombres con significado til que incluyan varias palabras unidas. Para facilitar la identifi
71
Da 3
demasiado grande o demasiado pequeo para su tipo de variable designado, por lo que usted
debera ser precavido al designar el tipo.
Button loadFile;
Trmino Nuevo
int areaCode;
Otro tipo de nmero que puede ser almacenado es un nmero de punto flotante,
el cual tiene el tipo float o double. Los nmero.1! e punto flotante representan
nmeros con una parte decimal. El tipo float debera ser suficiente para la mayora de los
boolean piayerSetNewHighScore;
usos, puesto que puede manejar cualquier nmero de 1.4E-45 a 3.4E+38. Si no es as, se
puede osar el tipo double para nmeros ms precisos en el rango de 4.9E-324 a 1. 7E+308.
Tdos de variable
Adems de un nombre, una dejacin de vanab.e debe incluir el tipo de informacon que se
El tipo char se usa para caracteres individuales como letras, nmeros, puntuacin y otros
smbolos.
El ltimo de los ocho tipos de datos bsicos es boolean. Como sabe, en Java los valores
Todos estos tipos le variables estn listados en minsculas, y usted debe usarlos igual en Io
programas. Hay clases con el mismo nombre de algunos de estos tipos de dalos pero diferente
Un arreglo
inicial, por ejemplo, Boolean y Char. stas tienen diferente funcionalidad en un programa
lipos de variables.
Java, por lo que usted no las puede usar cu forirui intercambiable. Maana ver cmo se usan
Tdos de datos
Tipos de clase
Adems de los ocho tipos de dalos bsicos, una variable puede tener una clase como su tipo,
como en los ejemplos siguientes:
String
Hay cuatro tipos de da.os que se pueden usar para almacenar enteros. Su uso depende de,
tamao del entero, como se indica en la tabla 3.1.
"Walsh";
hair;
Jabberwock
firstMonster;
Cuando una variable tiene una clase como su tipo, la variable se refiere a un objeto de esa
clase o-a una de sus subclases.
Tamao
Color
lastName
El ltimo de los ejemplos en la lista anterior, jabberwock f irstMonster;, crea una variable
llamada f irstMonster que se refiere al'objeto Jabberwock.
Referirse a una superclase como a un tipo de variable es prctico cuando la variable deba ser
-2 i47,483,64Ba2,147,483,647
2
i47,,
A.,, , a^i!41775.B8a0,223,372,36,B54,775.Bey
alguna de las distintas subclases. Por ejemplo, una jerarqua de clases con una superclase
Fruit y iros subclases: Apple Peary Strawberry. Si cica una variable Fruit llamada
favoriteFruit, se podr usar para referirse a un objeto Apple,
Pear o Strawberry.
Declarar un tipo de variable Object significa que puede contener cualquier objeto.
73
El tipo final de comentario puede ser ledo tanto por una computadora como por una persona.
Si su comentario empieza con el texto /** (en vez de /*) y termina con */, el comentario
ser interpretado como un documento oficial del modo en que trabajan la clase y sus mtodos
Nota
pblicos.
Este tipo de comentario puede ser ledo entonces por utileras como la herramenia javadoc
incluida en el JDK. El programa javadoc usa comeniarios oficiales para crear un conjunto de
pginas Web que documentan el programa, sus clases y mtodos.
http://java.sun.eom/products/jdk/1.2/docs
snappyDresser = faise;
Literales
Adems de las variables, mmhin ulili/.ar una Hiera! en una instruccin Ja\a.
Trmino Nuevo
lario.s.
Una literal es un trmino de programacin que significa, en esencia, que lo que escribe es lo
Trmino Nuevo
que obtiene. La siguiente instruccin de asignacin es un buen ejemplo del uso de ujia literal:
Hay tres diferentes tipos de comntanos que se pueden usar en ,a programacin de Java y los
puede usar a su eniera discrecin.
Int
year =
1998
La literal es 1998 porque representa directamente el valor entero 1998. Nmeros, caracteres y
cadenas, todos ellos son ejemplos de literales.
Aunque el uso y significado de las literales pareyea muy sencillo. Java liene algunos tipos
especiales de literales que representan diferentes lipos de caracteres, nmeros, cadenas y va
lores booleanos.
Literales numricas
En este ejemplo todo e, texto desde hasta e, fina! de ,a Knea es un comen.ano y e, comp,-
Java tiene varias literales enteras. El nmero 4, por ejemplo, es una literal eniera de tipo de
variable int. Tambin puede ser asignada a las variables byte y short porque el nmero es
lo suficientemente pequeo para que quepa dentro de esios tipos enieros. Una literal eniera
ms grande de lo que un int puede contener es considerada-automticamente como
perteneciente al lipo long. Tambin puede indicar que una literal debera ser un culero long
"
JiA
Da 3
I 74
Para representar un nmero negativo como una literal, anteponga a ste el smbolo menos (-).
Si ha usado otros lenguajes como C, esperara que un valor de 1 fuera equivalente a true y
0 a false. ste no es el caso de Java (debe usai\ los valores true o f alse para representar
como en -45.
Nota
Observe que la literal true no est entre comillas. Si as fuera, el compilador Java podra
Literales de caracteres
nmeros como un dgito sencillo. Las letras A a F representan los ltimos seis
como 'a",'#' y "31. Usted debiera estar familiarizado con el conjunto de caracteres ASCII,
C, D, E. F. .
'
Si necesita un entero literal con numeracin ocial, anteponga un 0 al nmero. Por ejemplo, el
nmero octal podra ser la literal 0777. Los hexadecimales enteros se usan como liieralc-s al
anteponer 8x al nmero, como en 8x12 o OxFF.
el cual incluye 128 caracteres entre letras, numerales, puntuacin y otros caracteres tiles en
computacin. Java sopona miles de caracteres adicionales a travs del estndar Unicode de 16
bits.
letra en los cdigos de escape octal, hex, y Unicode representa un nmero o un dgito hexa
decimal (a-f, o A-F).
Las literales de punto flotante usan un carcter punto (.) para el punto decimal, como se
podra esperar. La siguiente instruccin usa una literal para asignar una sanable double.
double myGPA = 2.25;
Significado
Todas las literales de puni notante se consideran del tipo de variable double en ve/ de
f loat. Para especificar una literal de f loat. agregue la letra RF o fia la literal, como en
\n
Lnea nueva
\t
Tabulador
el ejemplo siguiente:
\b
Retroceso
float
piValue = 3.1415927F;
Utilice expolenles en las literales de punto dolante al usar la letra e o E, seguida del expo
\r
Retomo de carro
\f
Salto de hoja
nente, el cual puede ser un nmero negativo. Las instrucciones siguientes usan notacin expo
\\
Diagonal invertida
nencial:
\'
Comilla sencilla
double
double
12e22;
19E-95;
Literales booleanas
Los valores booleanos true y f alse tambin son literales. stos son los dos nicos valares
que puede u.-ar cuando se asigna un valor a una variable de tipo boolean o cuando, de algn
modo, se requiere un booleano dentro de una instruccin.
\-
Comillas dobles
\d
Octal
\xd
Hexadecimal
\ud
Carcter Unicode
75 |
77
Da 3
76
Aunque las literales de cadena se usan en forma parecida a otras literales en un programa, son
manejadas en forma diferente tras bambalinas.
Al usar una literal de cadena, Java almacena este valor como un objeto String. Usted no
tiene que crear un objeto nuevo explcitamente, como lo tendra que hacer al operar con otros
objetos, de modo que son tan fciles de operar como los tipos de datos bsicos. En este
aspecto las cadenas son poco comunes; ninguno de los tipos bsicos son almacenados como
objeto cuando se usan. Hoy y maana aprender ms acerca de cadenas y la clase String.
Literales de cadena
dc caraclei,s. En Java
Expresiones y operadores
Una expresin es una instruccin que produce un valor. Algunas dc las expresiones mas
bay n,l0dos
= 3;
int y = 4;
cor
int
'
y;
inacciones !
Al valor producido por una expresin se le denomina un valor de retorno, como ha aprendido.
Este valor puede ser asignado a una variable y usado de otras muchas maneras en sus progra
mas Java.
'
Aritmtica
ver caracteres
"Precaucin
A la mayora de los
Unicode al
Hay cinco operadores que se utilizan para ejecutar la aritmtica bsica en Java. stos se
muestran en la tabla 3.3
pueda ser re
el despliegue de cualquier
Suma
Resta
Multiplicacin
'
Divisin
14
Mdulo
20
til
. Da 3
Cada operador usa dos operandos, uno a cada lado del operador. El operador resla tambin se
puede usar para negar un operador sencillo (lo que equivale a multiplicar el operando por -1).
79 i
25:
26:
Al usar la divisin tenga presente el tipo de nmeros con que se maneja la operacin. Si
almacena una operacin de divisin en un entero, el resultado ser truncado a un nmero
entero, ya que el tipo de datos int no puede manejar nmeros de punto flotante. Como un
ejemplo, la expresin 31
You hw have 16
Observe que la mayora de \z operaciones que involucran enteros producen un int sin
importar el tipo origina! de los operandos. Si est trabajando con oros nmeros, como
nmeros de punto flotante o enteros long, debera asegurarse que los operandos tengan el
En esta sencilla aplicacin Java, las tres variables estn creadas con valores iniciales en las
lineas 3-5: el entero x. el en,ero corto y, y el nmero de pumo flotan,,- a. Como el upo prede
terminado para los nmeros de punto flotante es double, se antepone una f a la literal .12
6;
4:
short
5:
float a =
3:
6:
7:
8:
class oebaMath {
int
El resto del programa usa operadores aritmticos para dar seguimiento a la poblacin de una
colonia de amibas. (Ninguna amiba resuli daada durante la preparacin de este da.)
4:
.I2f;
+ x +
"
pet amoebas.");
9:
10:
11 :
12:
"
+ x);
System.out.println("\tMitosis occurs,
14:
15:
16:
x! =
2;
+ x);
System.out.println("\tThere's a fight.
out.");
17:
18:
19:
20:
21:
22:
23:
24:
y;
colony.');
x =
(x
3);
Ms sobre asignacin
La asignacin de un vaJor a una variable es una expresin, debido a que produce un valor.
Por esta caracterstica, usted puede encadenar las instrucciones de asignacin unidas de la
siguiente manera:
puede usar el operador + para combinar estos elementos en una cadena sencilla.
amoebas.");
13:
System.out. println() toma un argumento sencillo dentro de sus parntesis: una cadena
Para poder presentar ms de una variable o literal como el argumento para println (), usted
2;
Este programa tambin utiliza el mtodo System. out.println() en varias instrucciones Este
mtodo se usa en una aplicacin para desplegar cadenas y otra informacin para el dispositivo
x = y = z
7;
lid
Da 3
81
80
siempre se calcula ames de que se
dla
Trmino Nuevo
de ejemplo:
int x = 5;
x = x + 2;
- v - x + 2 lo primero que
En la expresin x - x + .
l
ocurre es
que
alcula x + 2 . El resultado de
se ca
uv comn en progra-
int
x++;
= 7;
equivalentes a:
despus de un nombre.
En una expresin simple como standards- -;, usar un operador de prefijo o posfijo no cam
bia el resultado. Sin embargo, cuando las operaciones de incremento y decremento son parte
cada lado de su in
on
int
x,
42;
y,
x++;
++x;
z;
stas arrojan valores muy distintos por la diferencia entre el prefijo y el posfijo. Al utilizar
operadores de posfijo como en y = x ++, y recibe el valor de x antes tic ser incrementado por
1. Cuando se usan operadores de prefijo como en z = ++x, x se incrementa por 1 antes de
que el valor se asigne a 2. El resultado final de este ejemplo es que y es igual a 42, 2 igual a
44 y x igual a 44.
mismo valor:
x = x / y + 5;
2 = ++x;
mcrerfento y decremento^^awectk
h^^_
2;
_
// x, y, y 2 ya estn declaradas
// a x se le ha dado el valor de 42
// a y se le ha dado el valor de x (42.^. antes de ser
Da 3
Precaucin
83
Operadores lgicos
Las expresiones que producen valores booleanos, como las operaciones de comparacin,
lgico.
Para'las combinaciones AND se usan los operadores lgicos & o &.&. Cuando dos expresiones
booleanas son enlazadas por los operadores & o &&, la expresin combinada devuelve el valor
Comparaciones
#
#
:.
Java tiene varias operaciones para hucer comparaciones entre las variables, variables y li
terales, u lros tipos de informacin en un programa.
Esta expresin combina dos expresiones de comparacin: age < 21 y girlf riendAge > 78.
Si ambas expresiones son verdaderas, el valor true est asignado a la variable unusual. En
Estos operadores se usan en expresiones que devuelven valores booleanos true o f alse.
dependiendo de ;i la comparacin que se hace es verdadera o falsa. La tabla 3.5 muestra a los
La diferencia entre & y && radica en cunlo Irabajo realiza Jasa en la expresin combinada. Si
operadores de ce mparacin.
se usa &, las expresiones en cada lado de & son evaluadas indistintamente. Si se usa && y el
lado izquierdo de && es f alse, la expresin en el lado derecho de la && nunca se evala.
Tabla 3.5. Operadofes de comparacin.
Operador
Significado
Ejemplo
Igual
==
No igual
1=
Menor que
<
Mayor que
>
<= 3
>=
hip;.
a la variable unusual. nicamente si ambas de estas expresiones son f alse el valor false se
asignar a unusual.
Observe el uso de en vez de . Por este uso, si grimThoughts > 10 es true, se asigna el
La combinacin XOR tiene un operador lgico, \ Esto provoca un resultado true slo si las
hip
dos expresiones booleanas que combina tienen valores opuestos. Si ambas son true o ambas
age
< 25;
La expresin ; ye
<
entero age. Pi esto que age es 31 en este ejemplo (lo cual es menor a 25), a hip se le da el
valor booleano de f alse.
' /!
La combinacin NOT usa el operador lgico I seguido de una expresin sencilla. Invierte
el valor de una expresin booleana de la misma manera en que un smbolo menos inviene el
signo positivo o negativo en un nmero.
85 1
Dia 3
llcvlH:,w
,.o, ,-u,
< Suelve
a.o,
Operador
Notas
new
(tipo)expresin
especialmente en el da 5.
Suma, resta.
Precedencia de operadore
<
>
csublccK;1
<=
>=
Igualdad.
!=
AND
&
XOR
OR
&&
AND lgico.
OR lgico/
? .
= +* .= = /= %= -=
Asignaciones varias.
4=
Ms asignaciones.
= = = >>>=
__
. Coir puniciones
Para cambiar el orden en que se evalan las expresiones coloque parntesis alrededor ilc las
^ones de asignacin
,cuU en ,a c,P-n
?&^
expresiones que se deber evaluar primero. Anide un conjunto de parntesis dentro de otros
para asegurarse que las expresiones se evalen en el orden deseado (la expresin de parntesis
ms interna se evala primero).
La siguiente expresin produce un valor 5:
y =
(6 + 4)
El resultado es el valor 5, porque 6 + 4 se calcula antes del resultado, 10, que es dividido
Notas
entre 2.
"Mediante
Mediante los
los parmesi
pa. :..--
" <;
arreglos, i
+*
- instanceo-f
una instancia de \
expone maana).
^.^ cn |os
,,,.,]
'osieiioniienie en la seni.iiui. i
basndose en si el objeto e
Los parntesis tambin pueden ser tiles para nwjorar la lectura de una expresin. Si la prece
dencia de una expresin no es inmediatamente clara para usted, aada parntesis para impo
ner la precedencia deseada, de modo que la instruccin sea ms sencilla de entender.
H!
I!
Da 3
Resumen
Aritmtica de cadenas
Concatenar significa enlazar dos cosas. Por convencin se ha elegido este verbo
Trmino Nuevo
Quien abre una a una las matruskas queda algo decepcionado al llegar a la mueca ms
Como se estableci previamente hoy. el operador tiene una doble vida fuera del mundo de
las matemticas. Puede ser usado para concatenar dos o ms cadenas.
871
tas rusos para crear muecas an ms pequeas, hasta que alguien alcance el lmite subatmi
co y se declare el ganador.
Usted ha alcanzado la mueca anidada ms pequea de Java, lo cual no debera ser una
Hoy aprendi a crear variables y asignarles valores; usar literales para representar valores
numricos, caracteres y cadenas y trabajar con operadores. Maana podr usar estas habili
Para resumir el materia! de hoy, la tabla 3.7 lista los operadores que usted ha aprendido.
El operador combina cadenas, otros objetos y variables para formar una cadena sencilla^ En
firstName.
Operador
puede manejar cu quier tipo de variable y valor de objeto como si Iueran una den* S>
cualquier pane de una operacin de concatenacin es una String o una hteral String. todos
Significado
Suma
Resta
Multiplicacin
Divisin
Mdulo
Esto produce el te: to de salida 4 score and 7 years ago., como si las literales enteras 4
Menor que
y 7 lucran cadena:.
Hay tambin un o ,erador cono = para aadir algo al final de la caoena. Por ejemplo, la
>
Mayor que
<=
==
Igual
expresin siguieni::
myNarae +=
"
pequea en el grupo. Idealmente, los avances en microingenierfa deberan habilitar a los artis;
para describir el acto de combinar dos cadenas (destacndose sobre pegar, engo
el ejemplo precdeme, la Hiera) Everybody loves se concatena al valor del objeto Stnng
Jr ";
i =
Diferente
myName = myNar; +
&&
ANO lgico
" Jr.";
En este ejemplo >. t cambia el valor de nyName (que podra ser algo parecido a Ef rgm
Zimbalist)alaudirJr. al final (Efrem Zimbalist Jr.).
li
i
&
i
!:
OR lgico
NOT lgico
ANO
OR
fll
Semana 1
XOR
Asignacin
Incremento
Decrcmento
Suma y asignacin
Hi-si y asignacin
Multiplicacin y asignacin
Da
Divisin y asignacin
Mdulo y asignacin
Lecciones de objetos
Hace dos das, la programacin orientada a objetos se comparaba con la cerveza, ya
que sta tiene un sabor que se aprecia con el tiempo que podra provocar desorien
ejemplo * .to
c,o ,.,
El da de hoy ofrece un repuesto. Usted se pone al corrienie con esle tipo de progra
macin al tiempo que trabaja con objetos en Java.
La mayora de lo que se hace en este lenguaje est hecho con objetos. Usted crea
objetos, los modifica, los mueve de un lado a otro, cambia sus variables, llama a sus
mtodos, y los combina con otros objetos. Usted desarrolla clases, crea objetos
po enea de progn ^^
^^
-^
compor.
^.K-do evitarlo
e)
1M- u>
en esos objetos.
c. si. ptop.a
Lecciones de objetos
";
Cando escribe un programa de Java, usted define un conjunto de clases. Como aprenda c,v
el da 2 las clases son plantillas para objetos; para la mayor pane usted solo usa la clase p
crear instancias y as trabajar con el.as. En esta seccin, por unto, aprender a crear un objuo
para generar los nmeros aleatorios en un programa. Estos objetos son llamados generadores
de nmeros aleatorios, y su rango es de un valor decimal de 0.0 a 1.0. Los nmeros aleato
,. Recuerda las cadenas de ayer? Aprendi que mediante una literal de cadena (una serie de
caracteres entre comillas dobles) crea una nueva instancia de la clase String con el valo.
'
91
rios son tiles en juegos y otros programas en los cuales s necesita un elemento de impre- dictibilidad.
<
de esa cadena.
En realidad el objeto Random no genera nmeros de manera aleatoria. En vez de ello, loma un
En este caso la clase String no es comn. Aunque es una clase, hay una forma sencilla de
crear instancias de esa clase mediante una literal. Las otras clases no uenen ese atajo;
para crear instancias de esas clases usted nene que hacer.o de manera explica med.an.e el
operador new.
le debe dar un valor de semilla. Esta semilla puede ser enviada cuando el objeto se construye.
El listado 4.1 es un programa Java que crea objetos Random con new de dos maneras dife
Nota
rentes.
ealidad no son objetos. Usted puede colocar envolturas de objetos alredelor de ellos si necesita tratarlos como objetos (lo cual aprender mas tarde
n este libro).
import
java.til.Random;
2:
3:
class RandomKunbers
4:
5:
Uso de m.'W
Para crear un o jeto nuevo, utilice el operador new con el nombre de la clase de la :ual desea
Los parmesi son importantes: no hay que retirarlos. Los parntesis pueden estar vacos en
publie static
6:
Randon
void main(String
r1,
argumens[])
valu
r2;
7:
8:
r1
9:
System.out.println(Randoro
new
Random();
1:
"
r1.nextOouble());
valu 2:
"
r2.nextDouble());
10:
11:
r2 =
12:
System.out.println("Randoi
new Random(8675389);
13:
14:
objeto. Los templos siguientes muestran objetos que estn s.endo creados con ar .amentos.
GregorianCalendar date = new Gre0orianCalendar(64, 6, 6, 7, 30);
Point pt :
new Point(0,0);
I a cantidad v tipo de argumentos que puede usar dentro de los parn.esis con nev estn
d finidos p. 'r la clase en s misma mediante un mtodo especial llamado connruc o, (Ho>
p Ir , s acerca de los constructores.) Si trata de crear una nueva insumo. una Case
1:
Random valu 2:
0.312596.1341023068
0.754788115099576
En este ejemplo se han creado dos objetos Random distintos usando argumentos distintos para
la clase listada despus de new. La primera instancia (lnea 8) usa new RandomO sin argumen
tos, la cual crea un objeto Random alimentado con una semilla de la hora en curso. Su valor
Lecciones de objetos
'
de memoria
Si est familiarizado con otros lenguajes de programacin orientada a objetos, quiz se pre
gunte si el operador new tiene un opuesto que destruya un objeto cuando ya no lo necesite.
.-o.no la semilla.
tiene que asignar explcitamente ninguna memoria para objetos. Java lo hace por usted.
1V. La segunda l
S3j
#
m
Por esta razn, no tiene que desalojar la memoria utilizada por un objelo cuando haya termi
nado de usarlo, pues para enlonces ste ya no tiene referencias activas de s (no ser asignado
a ninguna variable que usted siga usando, o almacenado en ningn arreglo). Java lienc un
recolector de basura que busca objetos sin usar y recuerda a la memoria qu objetos estn en
uso; por lo que no hay que liberar la memoria en forma explcita, slo asegrese de no con
tener ya un objelo que desee descartar.
clase y de instancia se comportan igual que las variables locales que aprendi ayer. Slo
reficrasea ellas en forma ligeramenle distinta a como lo hace con respecto a las variables re
gulares en su cdigo.
u hace new
Cu
,a cia
,ener un numero
C
cn,e de argumentos. C
Cuan
0 uPo difcn,e
^^
cs(os
Trmino Nuevo
Por ejemplo, si tiene un objeto asignado a la variable myCustomer^y dicho objeio tiene una
variable llamada orderTotal, usted se refiere al valor de la variable con algo como esto:
b ^ Ran(jom(, cn e eJem
^.^ de ,a declaracion
myCustomer.orderTotal;
Esta forma de accesar variables es una expresin (esto es, devuelve un valor), y ambos lados
del punto lambin son expresiones. Esto significa que usted puede anidar el acceso a varia
Para obtener el valor de una variable de instancia, usied usa la notacin de pumo. Con ella, un
Lecciones de objetos
D(a4
ese objeto tiene su propia variable de instancia llamada layaway, usted podra referirse a ella
951
de esta forma:
'
X equals 4 '
myCustome.orderTotal.layaway;
Y equals
Las expresiones de punto se evalan de izquierda a derecha, as que inicie con l variable
13
Moving to
(7,
6)
Ending location:
X equals 7
Y equals 6
Modificacin de valores
Asignar un valor a esa variable es igualmente sencillo; slo hay que agregar un operador de
asignacin a la derecha de la expresin:
myCustomer.crderTotal.layaway = true;
mo las lneas 17 y 18 despliegan nuevamente los valores ile x y y para mosir.iiciiio han
2:
3:
4:
5:
6:
7:
8:
9:
10:
11 :
12:
13:
14:
15:
16:
17:
18:
import
cambiado.
Variables de clase
Las variables de clase, como ya Jo aprendi, son variables que estn definidas y almacenadas
en la clase por s mismas. Sus valores aplican a la clase y a todas sus instancias.
(lnea 6). Las lneas 9 y 10 despliegan estos valores individuales mediante la notacin de
punto. Las lneas 13 y 14 cambian los valores de x a 7 y de y a 6, respectivamente. Por lti
En este ejemplo, primero crea una instancia de Point donde x es igual a 4 y y es igual a 13
Con las variables de instancia, cada nueva instancia de la clase obtiene una nueva copia de las
variables de instancia que define la clase. Entonces cada instancia cambia los valores de estas
instancias sin afectar a las dems. Con las variables de clase slo hay una copia de esa varia
java.awt.Point;
ble. Al modificar el valor de esa variable lo modifica para todas las instancias de esa clase.
class fetPoints {
Usted define las variables de clase al incluir la palabra clave static antes de la variable
misma. Por ejemplo, tome la siguiente definicin parcial de clase:
class FamilyMember {
static String smame =
String ame;
"Igwebuike";
int age;
Cada instancia de la clase FamilyMember tiene sus propios valores para ame y age, pero la
7;
1 ication.y = 6;
variable de clase smame slo tiene un valor para lodos los miembros de la familia:
S/steo.out.println("\nEnding location:-);
ystem.out.printlnCX-equals
afectadas.
"
+ location.x;
19:
20:
Lecciones de objetos
Da 4
97 1
96
System.out es una variable de clase que contiene una instancia de la clase PrintStream.
Este objeto PrintStream representa la salida estndar del sistema, la cual j>uele ser la pan
talla, mas puede ser redirigida hacia un monitor o a un archivo en disco. Los objetos
PrintStream tienen un mtodo println () que enva una cadena al flujo de salida.
El listado 4.3 muestra un ejemplo de llamar algunos mtodos definidos en la clase String.
Las cadenas incluyen mtodos para pruebas y modificacin de cadenas, parecido a lo que
esperara en una biblioteca de cadenas en otros lenguajes.
class
CheckString
2:
3:
publie
static
String
A:
void main(String
str
"In
my
next
arguments[J)
life,
will believe
in
reincarnation";
Llamadas a mtodos
5:
6:
System.out.println("Length
+
7:
9:
12:
System.out.println("The
index
15:
str);
"
position 7:
of
to 31:
the character x:
"substring
\"will\":
"
"
"
the
str.indexOf("will"));
16:
17:
"
str.indexOf('x'));
14:
R.,,Ea , ,
substring frora 24
31));
13:
"
string:
character at
str.substring(24,
11:
is:
this
str.charAt(7));
Systen.out.println("The
10:
of
str.lengthO);
8:
string
str.tol)pperCase());
18:
19:
definido en myCistomer:
elAllOrdersO .talkToManager() ;
dar de su sistema
In my next life,
Length of this
string:
The
character
The
substring from 24
The index
at
48
position
to
7:
31:
of the character x:
believe
8
objeto myCustcner:
REINCARNATION
cll que
-"---"-
En la lnea 4 usted crea una nueva instancia de String al utilizar una literal de cadena. (Este
modo es ms sencillo que usar new e introducir los caracteres en forma individual.) El residuo
del programa, simplemente, llama a mtodos de cadena diferentes para hacer operaciones
diferentes en esa cadena:
m
m
*
Lecciones de objetos
Da 4
,98
La notacin de punto se usa para llamar a un mtodo de clase. Como con las variables de
clase, usted puede usar una instancia de la clase, o la clase en s misma, a la izquierda del
punto. Sin embargo, por las mismas razones mencionadas en las variables de clase, mediante
el nombre de la clase hace que su cdigo sea ms sencillo de leer. Las dos ultimas lneas en
. La linca 7 llama al mtodo length() sobre el nuevo objeto String. La cadena tiene 48
caracteres.
.. La linca 9 llama al mtodo charAt (), el cual devuelve el carcter en la posicin dada
String s,
S2
Trmino Nuevo
rara un String.
En realidad no est usando objetos cuando asigna un objeto a una variable o pasa un objeto
a un mtodo como un argumento. Tampoco est usando copias de los objetos. En vez de ello,
. La lnea 15 muestra un uso distinto del mtodo indexOf (), el cual toma un argumento
de cadena y devuelve el ndice del principio de esa cadena.
. La lnea 17 usa el mtodo toUpperCase para devolver una copia de la cadena slo en
Para ilustrar mejor la diferencia, el listado 4.4 muestra cmo funcionan las referencias.
mayscul is.
^;
2:
3:
mente a ella P< r ejemplo, la clase String contiene un mtodo de dase llamado valueOf<>
e puede ton, r uno o muchos tipos distintos de argumentos (enteros, boolcanos ros
4:
os, etctera). E once, el mtodo valueOf,) devuelve una instancia nueva de St 9 co .emendo e, val., de cadena de, argumento. Este mtodo no opera d,
- -tan
definitiva, una .peracin del estilo String, y ..ene sentido definirlo en la clase Strxng.
Los mtodos d: clase pueden ser tiles para colocar juntos mtodos en un solo '^
Case,. Por eje nplo. la Case Math. defmida en el paquete i . lang, contiene un con unto
Math pero at, , puede usar sus mtodos con argumentos numricos o booleanos. Po ejemplo.
Usicd no nec sita crear una nueva instancia de Math; sta puede ser llamada en .ualqu.er
lugar que se icccsiic. como en el siguiente ejemplo:
S.VBluopf(5);
Puesto que usted trabaja con objetos, algo importante para entenderlo es el uso de referencias.
. ,,, .i,,-:, .." H;inu, alm.odo indexOf (). que devuelve I P--, do la primer., instan
cia del carcter dado (aqu, x ). Las literales de carcter estn rodeadas por com.ll,
scncllas; si en la lnea 13 la x estuviera entre las comillas dobles, la lucra, se cons,c-
ca ex.stente de Strin., pero a. obtener una cadena de otro objeto o upo ^ '
Referencias a objetos
a sus instancias Los mtodos de clase suelen ser usados para mtodos de
"
s2 = String.valueOf(5);
Los mtodos de Case, como las variab.es de Case, aplican a la Case como
s2;
s = "tem"; "
99 i
5:
import java.awt.Polnt;
class ReferencesTest {
pt2;
6:
pt1
= new Point(1O0,
7:
Pt2
10e);
pt1;
8:
9:
10:
11:
12:
13:
pti.x
200;
pti.y = 200;
"
+ pt1 .x +
",
"
"
+ pt1
-,
"
+ Pt2
pt2 .x
y);
y);
14:
200,
200
Point2:
200,
200
! I
>
Lecciones de objetos
Cuando enve argumentos pura mtodos o use variables en expresiones, debe usar variables de
. Lnea 6
. Linca 7
101
los tipos apropiados. Si un mtodo requiere un int, el compilador Java responde con un error
si intenta enviar al mtodo un valor f loat. Del mismo modo, si asigna una variable con el
valor de otra, stas deben ser del mismo tipo.
Nota
pt2
System.out.println("Honest,
"
(gpa+1.5));
usted lo necesita. Podra ser la clase incorrecta, o el tipo de datos incorrectos, como un float
pti,
Referan as ti objetos.
my GPA is a
Algunas veces tendr un valor en su programa de Java que no es del tipo correcto para lo que
usar cualquier v
Figura 4.1
dad,
pt2-
Objeto Point
x:200
y: 200
Trmino Nuevo
Conversin por cast es el proceso de producir un valor nuevo con un tipo dil'erente al de su fuente. El significado es semejante a la actuacin, donde el per
sonaje de un programa de televisin puede ser representado por olro actor, si el primero
Aunque el concepto de conversin por cast es razonablemente sencillo, el uso se complica por
el hecho de que Java tiene tanto tipos primitivos (como int, float y boolean), como tipos
de objetos (String, Point, ZipFile, y similares). En esta seccin se expondrn ires for
mas de conversin.
Conversiones por cast entre tipos primitivos, tales como int a float o float a
ola
double.
Conversiones por Cast desde una instancia de una clase a una instancia de otra clase.
MM^
i y no a
f2t.tvC;! c^era que Us -osa, sean de unat:::
forma precisa
Algo que
nianej
Al hablar de conversiones por cast, podra ser ms sencillo pensar en trminos de fuentes y
dcsiinos. La fuente es la variable a ser representada en otro tipo. El deslino es el resultado.
103 I
Lecciones de objetos
Las instancias de clases tambin pueden ser convertidas por cast a instancias de otra clase,
con una restriccin: las clases fuente y destino deben estar asociadas por herencia. Una clase
debe ser una subclase de la otra.
As como se puede convertir un valor primitivo a un tipo ms largo, algunos objetos podran
no necesitar ser convertidos por cast en forma explcita. Sobre iodo, como todas las subclases;
contienen la misma informacin que sus superclases, usted puede usar una instancia de una
i
illliiiil
un double. piicJe causar alguna prdida de precismn.
Por ejemplo, piense en un mtodo que toma dos argumentos: uno del tipo Object y otro del
tipo Window. Usted puede pasar una instancia de cualquier clase al argumento Object, debido
a que todas las clases de Java son subclases de Obj ect. Para el argumento Window, usted
puede pasarle sus subclases como Dialog,
FileDialog y Frame.
Tambin es cieno en forma inversa y usted puede usar una superclase cuando se espera una sub
clase. Sin embargo hay una desventaja: puesto que las subclases contienen mas comportamiento
que sus superclases, se da una prdida de precisin. Esos objetos de superclase podran no tener
todo el comportamiento requerido para actuar en vez de un objeto de subclase. Por ejemplo, si
tiene una operacin que llama a mtodos en objcios de la clase Integer, mediante un objeto de
la clase Number no incluira muchos mtodos definidos en Integer. Los errores ocurren si traa
Para usar objetos de superclase donde se esperan objetos de subclase, debe usar explcita
cisin. La epresentacin explcita toma la forma s.gu.ente
(nomared iripo)valu
mente una conversin por cast. No perder informacin alguna en la conversin por cast,
pero conseguir todos los mtodos y variables que define la subclase. Para convertir por cast
un objeto a otra clase, utilice la misma operacin que emple para los tipos base:
(nombredelaclase)object
y);
El siguiente ejemplo convierte por casting una instancia de la clase VicePresident a una
Lecciones de objetos
1051
Da 4
104
String pennsylvania = "65000";
int penn. = Integer.parselnt(pennsylvania);
La documentacin de la API de Java incluye detalles en estas clases. Puede encontrar estas
pginas HTML en la seccin Documentaon del sitio Web de Sun Microsystcms:
http://java.sun.com
screen2D:
Nota
Hay tipos especiales de clases para boolean, Byte, Character, Double, Float,
Integer, Long, Short y Void.
Comparar objetos
r F13L
F1 ,?
Se clases t,enen una te T^^'^daL y' sus voznes de Case. v un prominascula. Java .rata en forma 1,^ - |o
^a no se contra e.tos,,-,
P ^ ^^ sc ^a ,, ol,,,
^^ ^ ^ ^
Comparacin de objetos
Ayer aprendi acerca de operadores para comparar valores: igual, distinto, menor que.
La excepcin a esta regla son los operadores de igualdad: == (igual), y 1= (distinto). Cuando
se usan con objetos, estos operadores no hacen lo que usted de primera impresin podra
esperar. En vez de determinar si un objeto tiene el mismo valor que el oiro, determina si los
objetos son el mismo objeto.
Para poder comparar las instancias de una clase y tener resultados relevantes, debe mplementar mtodos especiales en su clase y llamar a esos mtodos.
Un buen ejemplo de esto es la clase String. lis posible tener dos objetos diferentes que con
tengan los mismos valores. Sin embargo, aun cuando hubiera utilizado el operador == para
compararlos, estos objetos deberan ser considerados diferentes. Pese a que sus contenidos
int
newcount
nt.w
usted necesita en p V
Sxring
,0 pucdc
pu
rcsuUacjo ,0
obtener ,
rcsuUacjo
Para poder ver si los dos objetos String tienen valores que corresponden, se utiliza un mto
do de la clase llamado equalsf). El mtodo verifica cada carcter en la cadena y devuelve
true si ambos tienen los mismos valores. El listado 4.5 ilustra esto:
Lecciones de objetos
1:
2:
3:
4:
6:
* M11;
ten out.println("String1:
7:
Systen,.out.println("String2:
8:
"
(stri == str2));
System.out.println("Same object.
9:
16:
12:
13:
14:
System.out.println(-String1:
Svstetn.out.println("String2:
System.out.printlnC'Sarae object.
15:
Systei.out.println(-Sa.e valu?
16:
Quiere encontrar la clase de un objeto? He aqu cmo hacerlo para un objeto asignado a la
String ame = obj.getClass().getName();
str2
==
.equals(str2));
Para qu se hace esto? El mtodo getClass() est definido en la clase Object, y por lano
disponible para todos los objetos. El resultado de ese mtodo es un objeto Class (donde
Class es por s misma una clase), el cual tiene un mtodo llamado getName (). getName ()
17:
18:
11:
Por qu no puede usar slo otra literal cuando cambia str2, en vez deusar
new? En Java las literales de cadena estn optimizadas. Si crea una cadena
mediante una literal y luego utiliza otra literal con los mismos caracteres.
Java sabe lo suficiente para devolverle el primer objeto String. Ambas
cadenas son los mismos objetos. Tiene que salirse de su camino para crear
dos objetos separados.
str2 = stri;
5:
Nota
Otra prueba que podra ser til es cl operador instanceof. ste tiene dos opeiandos: un
objeto a la izquierda y un nombre de clase a la derecha. La expresin devuelve true o false
Tambin se puede usar este operador instanceof para interfaces; si un objeto es una instan
Sw object? false
Se me
cia de una clase que implemento una inierfaz, cl operador instanceof con ese nombre de
inierfaz a la derecha devuelve true.
valu? true
Una de las mejoras hechas al lenguaje Java despus de Java 1.0.2 fue la introduccin de la
reflexin, a la cual tambin se le denomina niivspeccin. Bajo cualquier nombre, la reflexin
habilita a una clase de Java, como la de un programa que usted escriba, para aprender
detalles sobre cualquier otra clase.
A travs de la reflexin, un programa Java puede cargar una clase tic la cual no sabe nada, y
107 1
1091
Lecciones de objetos
Da 4
Randora y todos los mtodos heredados de las superclases Randora. Cada lnea del listado
muestra la informacin acerca de un mtodo:
Si es public
V import java.lang.reflect.*;
2: iaport java.til.Random;
3:
4:
<
La aplicacin SeeMethods pudo haber sido hecha con cualquier clase de objetos. Cambie la
6:
lnea 6 de SeeMethods. j ava para crear un objeto diferente y dar un vistazo a sus interiores.
7:
8:
(int i - .
i-MBthod-
Systsm.ot.pnntln( Method.
9:
16:
Le reflexin es muy usada por herramientas como navegadores de clases y depuradores, como
11:
12:
13:
acerca de lo que puede hacer (y entonces solicitar que haga algo), es til cuando se cons
Field
Method
Array
m USTAD^T.USAUBADEJ^APU^^
lili M
Constructor
da de la ; plicacin
n:M.t',od:pMicfin.ln.tive1.v..lanfl.C1.ss
Maneja arreglos
Modif ier
Adems, habr una gran cantidad de mtodos disponibles en una clase de objetos llamada
JI-SS; SS2
Class que ayuda a unir varias clases que tienen que ver con reflexin.
i =5? ^
La reflexin es una caracterstica avanzada que usted podra no estar listo para usar en sus
java.^ng.InterruptedException
java.utii.Random.setSeed(long)
extBytes(byte[l)
nextint()
Resumen
Ahora que ya ha bebido profundamente de la implementacin de la programacin orientada
a objetos en Java, est en una mejor posicin para decidir cuan til puede serle en su propia
programacin.
Dia4
110
Semana 1
Y si es de los que ven "el vaso medio lleno", vale la pena que use la programacin orientada a
objetos por los beneficios que ofrece: disponibilidad mejorada, rcu.ili.acio,, y man.ennn.cnU,
una clase.
Finalmente, le dio un primer vistazo a la flexin, una manera de hacer que una clase revele
A este punto va tiene las habilidades para manejar las tareas :ns simples en el lenguaje Java.
Tio * falta son arrelos, condiciona.es y ciclos (los cuales se vean maana), y cmo
definir y usar clases (en. el Ja 6, "Creacin de clases ).
Preguntas y respuestas
P .stoy confundido acerca de las diferencias entre los objetos y los tipos de datos
primitivos, como int y boolean.
R los tipos dedeos primitivos en el lenguaje (byte. short, int, long, float, dou
^ o entro y fuera <ie los mtodos. Sin embargo ,a mayora de las operacones que
funcionan exclusivamente en objetos no uncionarfn en tipos de d;,,os Pr,m,t,vos.
Los objetos son instancias de Cases y como tales suelen ser tipos de datos ms comple
jos que los nmeros simples y caracteres, que suelen contener nmeros y caraetces
Da
Adems tambin aprender cmo hacer que un programa decida hacer algo basado
en lgica. (Tal vez una computadora podra decidir que no es lgico repetir la
misma oracin dos veces seguidas en un libro.)
madas arreglos.
P -No hay apuntadores en Java? Si usted no tiene apuntadores, cmo puedo suponer que har .,*, como listas vincu.adas, donde .enga un apuntador de un nodo a
K No es del todo ceno decir que a fin de cuentas Java no posee apuntadores, slo que no
L fiable de instancia tambin de, tipo Node. Para vincular cure s, los objetos
odo -ene un objeto nodo a la vanab.e de instancia de. objeto inmechatamente antes ck
cTenVlfsu. Pues/o que las referencias a. objeto son apuntadores, las hstas v.nculadas
configuradas de eMa manera se componan como usted esperara que lo h.c.eran.
Incluso aprender a organizar grupos de la misma clase o lipo de dalos en listas lla
Lo primero por hacer en la lista de'hoy son arreglos.
1131
Da 5
String[]
difficultwords;
i
Point[]
int[)
hits;
guesses;
Usted ver los dos estilos utilizados en los programas, y como no hay un consenso sobre qu
Java. En al^
-"=::-~h'11'~11"~'"
objelo y asignarlo a esa variable. He aqu las formas de dar este paso:
pu
String[]
^ CO111O enteros.
Esta instruccin crea un nuevo arreglo de cadenas con 10 posiciones que pueden contener
objetos de tipo String. Cuando crea un arreglo de objetos con new, debe indicar cuntas
posiciones contendr el arreglo. Rn realidad estas instrucciones no colocan objetos en
las posiciones; eso lo debe hacer usted posteriormente.
Los arreglos de objetos pueden contener tanto tipos primitivos (como enteros o booleanos),
como objetos:
Amiacene
inform
int[)
Cuando usted crea un arreglo de objeto mediante new, todas sus posiciones se nicialuan ,
Declaracin de variables de
automticamente (0 para arreglos numricos, f alse para booleanos, ' \0' para arreglos de
lo habr4
Tambin puede crear e inicializar un arreglo al mismo tiempo. En vez de utilizar new para
crear el objeto de arreglo nuevo, encierre los elementos del arreglo entre llaves, separndolos
con comas:
StringU
chiles =
"habanero",
strinp
im
de
"thai"
"jalapeno",
"anaheiin",
"serrano"
};
!:-^
onsl1;
La palabra clave de Java nuil se refiere al objeto nuil (y se puede usar para
cualquier referencia de objeto). No equivale a cero o al carcter ' \0' como
las constantes NUIL en C.
m
m
Da 5
Insistimos: La longitud del arreglo es 10, pero su subndice slo puede llegar hasta 9 Los
arreglos uncan su numeracin en 0. Siempre que trabaje con arreglos, tenga esto en mume y
un arreglo al colocar una instruccin de asignacin despus del nombre del arreglo y el
=85;
sentence[0]
"The";
sentence[i0] = sentence[0];
--
^ ^.^ inician
Algo importante a tener en cuenta es que en Java un arreglo de objetos es un arreglo de refe
rencias a dichos objetos. Cuando asigna un valor a una posicin en ese tipo de arreglo est
creando una referencia a ese objeto. Cuando mueve valores entre arreglos, como en"el ltimo
de los ejemplos anteriores, est reasignando la referencia cn vez de copiar un valor de una
posicin a otra. Los arreglos de un tipo de dalos primitivo como int o f loat copian los va
lores de una posicin a otra.
Los arreglos son razonablemente sencillos de crear y modificar, pero proporcionan una canti
dad enorme de funcionalidad a Java. Usted se encontrar a s mismo corriendo entre arreglos
Para finalizar la discusin acerca de los arreglos, el listado 5.1 presenta un programa sencillo
Strlnol] M.tX.!.p.rt-"-rlnoIiBl;
l s dos l
1:
class ArrayTest
2:
3:
4:
5:
6:
'
int i = C;
^^ ^ -^^^ iii.i,iltflll
^ s^ pros
System.out.println(firstNames[i]
"
+ lastNames[i]);
System.out.println(firstNames[i]
+ "
importar el tipo:
"
" + lastNamesfi]);
11!
117]
Da 5
15:
16:
.printl(
El resultado son las primeras cuatro lneas de la salida; observe que se inicializ el
17:
arreglo f irstNames, pero los vaiores en lastNames son nuil. Si un arreglo no est
lastNames
18:
inicializado cuando se declara, los valores de las posiciones iniciales estarn vacas:
19:
nuil para los arreglos de objetos, 0 para nmeros y f alse para los booleanos.
2e:
21:
22:
a.printNanesO;
23:
Svsteit.out.printlnt
21:
25:
' 27:
Las lneas 25-28 establecen los valores de cada una de las posiciones en el arreglo
lastnames a las cadenas reales.
La lnea 29 llama a printNames() una vez ms para mostrar que ahora el arreglo
lastNames est lleno de valores, y cada nombre y apellido se imprime como usied
a.lastNamesl3] - 'Gosling ,
28:
a printNamesO;
25:
3f: '
3V.
Nota
Si usted no reconoce los nombres de este ejemplo, podra pensar que los
autores estn manejando referencias de sus amigos en este libro. Todos ellos
son importantes desabolladores de lenguajes de programacin de computa
dora: Dennis Ritchie (C), Bjarne Stroustrup (C++), Grace Hopper (COBOL) y
James Gosling (Java).
Una ltima observacin acerca del listado 5.1, es que es un ejemplo terrible de estilo de pro
Der.m
Ritchie
gramacin. De suyo cuando se trabaja con arreglos, usted puede usar los ciclos para circular a
Grsce Hopper
travs de los elementos de un arreglo, en lugar de trabajar con ellos individualmente. Esto
-arn Stroustrup
hace mucho ms pequeo al cdigo, y en muchos casos ms sencillo de leer. Cuando apren
j'snes GoslinQ
da acerca de ciclos hoy mismo ms adelante, ver este ejemplo reescrito con diferente estiio.
Arreglos multidimensionales
Si ya ha usado arreglos en otros lenguajes, podra suponer que Java puede manejar arreglos
c, mismo nmero de P
Las dimensiones son tiles cuando se representa )go como una malla x, y de elementos de
arreglo.
,..,,,_-,-1\
v main O
Java no sopona arreglos multidimensionales, pero usted puede lograr la misma funcionalidad
al declarar un arreglo de arregios. Estos arreglos pueden tambin contener arreglos, y as
sucesivamente, para cuantas dimensiones se necesiten.
Da 5
1191
coordsiaiiei = 1".
coordsi0lli] = 2;
dentro del cual est, y slo puede ser usada dentro de este bloque! Se podra dar un error si
tratara de usarla en otra pane del mtodo testBlockf). La variable x fue creada dentro del
mtodo pero fuera del bloque interior, por lo que puede usarla en cualquier parte del mtodo.
Usted puede modificar el valor de x en cualquier parte dentro del mtodo y se retendr este
valor.
. ;
De suyo las declaraciones de bloque no se usan solas en una definicin de mtodo, como
.I
Instrucciones de bloque
*,
estn en el ejemplo anterior. Usted las usa a travs de las definiciones de clase y mlodo,
igual que en la lgica y estructuras de ciclos que aprender a continuacin.
Condicionales if
Uno de los aspectos clave de la programacin es la capacidad de un programa para decidir
qu har. Esto est manejado a travs de un tipo especial de enunciado llamado condicional.
Trmino Nuevo
t tiui uLMiii
He aqu un ejemplo sencillo que despliega el mensaje "You cali thai a haircui?" slo con una
do
variables
if
, ,a cll;l,
Si desea que suceda algo ms en caso de que la expresin if devuelva un valor f alse, se
puede usar la palabra clave else. El ejemplo siguiente usa tanto if como else:
if (blindDatelsAttractive == true)
restaurant =
else
restaurant =
"Benihana's";
"Burrito Hut";
booleana sencilla.
int x = 10;
{
//
inicio de bloque
int y = 40;
//
x;
-fin de bloque
Da 5
Con if usted slo puede incluir una instruccin sencilla como el cdigo a ejecutar despus
de I. prueba. (En e, ejemplo anterior est asignada la variable restauran.) ^ en, argo en
jav. puede aparecer un bloque dondequiera que lo haga una ms.rucon sola. S, deso haca
,|,o ms que una solu cosa ceno resultado de un enunciado if. pon*, esas ,nsm,cc,oncs
dentro de un bloque. Observe que el siguiente segmento de cdigo, es una ex.cns.on del objc,o Jabberwock que usted cre el da 2."Un vistazo a la programacin oricniada a objetos :
if (attitude == "angry" )
18:
...
Valu is 2.
Stevenl
Valu is 54.
Stevenl
Valu is
decir if (hungry == true). Para las pruebas booleanas de este upo. dejar luera 1, ult.nu
El listado 5 2 nuestra otro ejemplo simple, en esta ocasin en forma de aplicacin completa.
L 'lase Even->teven contiene un mtodo utilitario llamado evenCheck,,. el cual -.cl.ca ....
valor para ver si es par. S. lo es, despliega Steven! en panialla.
ESCWBA
1:
2:
3:
if (val "s 2 == 6)
System.out.printlnf"Steven!");
7:
9:
10:
11:
12:
13:
14:
15:
is
+ val +"");
6:
8:
System.out.printlnCValue
5:
El corazn de la clase EvenSteven es el mtodo evenCheck () (lneas 3-8), donde se verifienn los valores y se imprime un mensaje propnelo. A diferencia de los ...iodo, que usicil ha
defin.do en los ejemplos anteriores, observe que la definicin incluye un argumento sencillo
entero (vea la lnea 3). El mtodo evenCheck () inicia en cuanto imprime el valor que le fue
pasado. Entonces se prueba ese argumento, mediante una condicional if, para ver si se trata
de un nmero par.
La prueba del mdulo del da 3, "Los ABCs de Java" devuelve el residuo de la divisin de sus
En esta aplicacin el mtodo main() crea una nueva instancia de EvenSteven y la prueba
llamando repetidamente al mtodo evenCheck () con valores diferentes. En la salida, nica
class EvenSteven {
4:
77.
Valu is 1346.
Steven!
e.evenCheck(1346);
19: }'
e.evenCheck(77),
17:
El operador condicional
Una alternativa a las palabras clave if y else en una instruccin condicional es usar el ope
rador condicional, tambin conocido como operador ternario, llamado as porque tiene tres
trminos.
El operador condicional es una expresin, lo que significa que devuelve un valor, a diferencia
del if ms general, que slo puede dar por resultado una instruccin o un bloque para ser eje
m
#
t
#
1231
Da 5
switch
(grade)
case ;a; ;
' '
"" System.out.println("Great job -- an Al"); .
break;
case
'B':
cas
'C:
System;out.println("Your grade was a C.");
'
break;
ourBestScore;
valor de la variable grade. Dicha variable, que puede ser de cualquiera de los tipos primitivos
ourBestScore - yScore,
byte, char, short o int se compara con cada uno de los valores case. Si despus de la
p i e g
El
La implementacin Java de switch es limitada. Las pruebas y valores slo pueden ser tipos
de datos primitivos que sean convenibles a int. Usted no puede usar tipos primitivos ms
^r una variable con.,
grandes como long o f loat, cadenas, u otros objetos dentro de un switch, ni tampoco puede
verificar por cualquier otra relacin distinta a la igualdad. Estas restricciones limitan al
switch a los casos ms simples. En contraste, las instrucciones if anidadas pueden funcionar
prob"por *""*'
ir (oper ==
+ )
addargs(arg1,
instruccin switch.
arg2),
arg2);
(oper)
case
'+':
addargs(arg1,
arg2);
'
break;
case
Lo siguiente es una revisin de if anidada mostrada previamente. Ha sido reescrito como una
switch
'*':
subargs(arg1,
aro2),
arg2);
break;
case
' -':
multargs(argi,
arg2);
break;
case
'/':
divargs(arg1,
arg2);
break;
Hay dos cosas que cuidar en este ejemplo. La primera es que despus de cada caso, usted
puede incluir una instruccin resultante sencilla o ms; tantas cuantas necesite.
Da 5
124
is:
default:
16:
cncuen.
^^
ase^ una
.^.^ ^ ^ hasla
nc , >
return "
17:
se
^ , ,0
18:
19:
28:
21:
n.convertNum(3);
22:
23:
24:
}.
cncucnl,,.
ch.
guem
valores de 2,
an
odd
switch
i >
(x)
2:
case
4:
is
El corazn de este ejempio es, por supuesto, la instruccin principal switch a la mitad del
mtodo en las lneas 4-16. switch toma el argumento entero que fue pasado a convertNun.()
y, cuando encuentra una coincidencia, devuelve el valor apropiado de la cadena. (Observe que
este mtodo est definido para devolver una cadena, a! contrario de otros mtodos que ha
definido hasta este punto, los cuales no devuelven nada. Maana aprender ms acerca de
r.umber.
case
Pr ejemplo, en
esto.)
case 6:
);
#
#
t
i
m
instruccin return en su lugar; return es similar a break, excepto en que interrumpe total
mente la definicin del mtodo y devuelve un valor simple. De nuevo, aprender ms acerca
Hasta aqu, probablemente ha visto suficientes mtodos main () para saber qu est pasando,
pero veamos este miodo rpidamente.
conver-tlt().
La lnea 21 define una cadena llamada num que ser la concatenacin de los valores de
cadena de los tres nmeros. Cada nmero se conviene mediante una llamada al mtodo
1:
2:
3:
4:
5:
6:
7:
8:
9:
16:
11:
12:
13:
14:
convertNum().
class N .mberReader {
String convertNum(int val)
switch (val)
case
0:
return
case
1:
return
case
2:
return
case
3:
return
case
4:
return
case
5:
return
case
6:
return
case
7:
return
case
8:
return
case 9:
return
"zero
"
"one
";
"two
";
Ciclos for
El ciclo for repite una instruccin por un nmero especificado de veces hasta que una condi-
"toree
"four
"
"five
"six
"
";
"seven
"eight
"nine
"
, cin se cumple. Aunque los ciclos for frecuentemente son usados para la iteracin simple en
la cual se repite una instruccin por un nmero preciso de veces, se pueden usar para casi
cualquier tipo de ciclo.
Da 5
mer vanable de celo o ndices de ciclo por usted mismo en otras panes del programa.
instruccin;
(ndice de,
f or si todo lo
encuc7
qU7a el-aCer
CSt numero
h Priprimo mayor
l Ca ^a CSe
CC'-(Llama
Pr ejemP)0'
el S8uienle
encuentra
primer
4,e00.
a un mtodo
llamadoc
El inicio
Un error comn en los ciclos for es colocar accidentalmente un punto y coma al final de la
leales al ciclo.
(i = 0;
i < 10;
x = x * i; //
i++).
En este ejemplo, el primer punto y coma finaliza el ciclo sin ejecutar x = x i como parte
del ciclo. La lnea x = x i se ejecutar slo una vez, debido a que est por completo
luera del celo for. Tenga cuidado de no cometer este error en sus programas de javu.
Para terminar con los ciclos for, reescriba ese ejemplo con los nombres de la seccin de
arreglos. El ejemplo original es largo y repetitivo y nicamente funciona con arrelos de Iongitud de cuatro elementos. Esta versin, mostrada en el listado 5.4, es ms corta y flexible
Escriba
1:
class NaoesLoop {
2:
3:
j,
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
a.printNames();
System.out.printlnC
");
a.lastNames[6] = "Ritchie";
a.lastNames[1] = "Hopper";
se Z I
n de
d contiene nicamente una instruccin:
cln
de bloo
bloque, 7,
sto no se requ.eren ya^que"""
el ciclo
17:
18:
19:
das'si m Ih"
a.printNames();
20:
21:
m nto es , eT 77 t ""'"
Dennis nuil
Grace nuil
Bjarne nuil
James nuil
Dennis
Gracs
Bjarne
cada
en ese punto.
2:
3:
Ritchie
4:
Hopper
Stroustrup
james Gosling
5:
6:
Systero.out.print("arrayi: [ ");
for (int i = 0; i < arrayl.length; i++) {
Systero.out.print(array1[i] + " ");
7:
8:
9:
10:
System.out.println("J");
11:
12:
System.out.print("array2: [ ")
13:
14:
16:
System.out.print(array2|count++] + " );
17:
18:
System.out.println(" J");
19:
20:
'
15:
Ciclos while y do
class CopyArrayWhile {
Salida
arrayl:
array2:
[7481414]
[ 7.0 4.0 8.0 J
(i <
Las lneas 3 y 4 declaran los arreglos; arrayl es un arreglo de enteros, los cuales se
inicializaron a algunos nmeros apropiados. array2 es un arreglo de nmeros de punto
notante de la misma longitud que arrayl, pero no tiene valores iniciales
bool
9
#
#
#
El cuerpo del ciclo se ejecuta una vez antes que se evale la condicin de prueba, i < 16;
entonces, si la prueba la evala como true, el ciclo se repite una vez ms. Si es f alse, el
.,
1 ciclo termina1. Tenga en mente que en los ciclos do el cuerpo del ciclo se ejecuta al menos una
vez.
El listado 5.6 muestra un ejemplo sencillo de un ciclo do que imprime un mensaje cada vez
que el ciclo itera (10 veces, para este ejemplo):
Escriba
1:
class DoTest {
2:
3:
int x
4:
do
6:
7:
x++;
8:
} while
9:
10:
1;
(x <= 16);
.-,}
Salida
Looping,
round
Looping,
round 2
Looping,
round 3
Looping,
round 4
Looping,
round 5
Looping,
round 6
Looping,
round
Looping,
round
Looping,
round 9
Looping,
round
10
cin.povloqicsistaes
menos una ve ..
de su trmino. Para eso puede usar las palabras clave break y continu.
^5
i;in>poco lc ^' N
Usted ya conoce a break como parte de la instruccin switch; break detiene la ejecucin
de una instruccin switch, y ei programa contina. La palabra clave break, cuando se usa
con un ciclo, hace lo mismo: detiene inmediatamente la ejecucin del ciclo actual. Si ha
una vez.
Los celos de se parecen a esto:
do {
_ ^
i++ //
anidado ciclos dentro de ciclos, la ejecucin contina con el siguiente ciclo exterior. De otra
manera, el programa contina con slo ejecutar la instruccin siguiente despus del ciclo.
131
if
ciclo:
int count = e
l T e
f or anida-
count2 =
4:
thisLoop:
6:
int count = 8
int
25:
J;
for (int j
7:
9:
11:
:[count2++] - (float)userDatai[count];
Ciclos pt;quetados
Ut 'for
( nt i = 0; i <1
i ls
' 3
j);
Salida
,. .> ,<. de un
System.out.prlntln("en(J of loops");
12:
13:
J++)
break thisLoop;
contii ue;
userData
} <= 3;
if (( i J) > 4)
8:
if (userCatai[count) =- 1)
= 1;
System.out.println("i is " + i +
con
i is 1, i is 1
i is 1, j is 2
i is 1, j is 3
i is 2, j is 1
i is 2, j is 2
i is 2,
t
#
#
1: class LabelTest {
is 3
end of loops
en(onces jos
Da 5
Semana 1
ueco
^^f y tch.
t. puede
p d,n^^ ^^ . aprenJl0
*
#
en*
Pregunta;; y respuestas
nesI)araunlf.Cu-..
Da
"
lf ,cnn ,6,1.
,vo ,, * W.v.V...
Creacin de clases
S; :
c ,,,, , I.,,
cuIT 1
m
m
M
HUS
Creacin de clases
4:
npfinicin de clases
137
String sex;.
5:
boolean hungry;
6:
int age;
7:
Esta definicin de clase contiene cuatro variables. stas son variables de instancia porque no
class Ticker {
//
cuerpo de la clase
color
sex
Si su clase es una subclase, la palabra clave extends se usa paro indicar la superch.se de la
hungry
en caso contrario
age
El color del jabberwock (por ejemplo; naranja, limn, amarillo limn, u ocre-
quemado)
cuerpo Je la clase
Constantes
Las variables son tiles cuando usted necesita almacenar informacin que se pueda modificar
al ejecutar un programa. Si el valor nunca se debiera modificar durante la ejecucin de un
programa, puede usar un tipo especial de variable denominado constante.
Trmino Nuevo
Una constante, tambin llamada variable constante, es una variable con un valor
que nunca cambia. Esto podra parecer una contradiccin, dado el significado de
la palabra "variable".
"Los
/ BCs de Java", aprend.
cmo declarar e ini
Los / .bu uc v ,
t
c,,o
Las constantes son tiles para definir valores compartidos para lodos los mtodos de un obje
to; en otras palabras, para dar nombres significativos a valores que no cambian en todo el
calizar las v .nables locales
t^
objeto. En Java, usted puede crear constantes para todos los linos de variables: instancia, clase
y local.
de instancia se
Nota
;.,,,, v
Las variables locales constantes no eran posibles en Java 1.0.2, pero se agre
garon al lenguaje desde Java 1.1. Esto es importante si usted quiere crear un
applet que sea totalmente compatible con Java 1.0.2. Aprender ms acerca
de esto durante la semsna 2, "Temas avanzados de Java".
3:
l'iirn dcclnrur umi consumi, uso ln paliihrn clnve final miles de la lUx-liinicin de variulili- e
incluya un valor inicial para esa variable, como en la siguime:
final float pi = 3.141592;
final boolean debug = false;
#
#
t
m
Creacin de mtodos
desempear durare su existencia).
Definicin de mtodos
- -
con lo siguiente:
thxs.alignn-ent = CENTER;
El cuerpo de un mtodo
switch (this.alignment) {
se denominay/w del
^fLargarse
de .lin..cion
L
break;
breaK;
this.alignment = CENTER;
this.alignment = 2;
Variables de clase
Como aprendi en las lecciones an^enojc
^ un COI1Junto de ob.e.os.
como en lo siguiente:
Da 6
140
Oh
,e si este mtodo devuelve un arreglo de objeto, los corchetes del arreglo pueden ir
Observe que s, e te me
21:
22:
23:
cc^ emre parntesis. Estos parmetros se convierten en variab.es locales en el cue^o del
Salida
The array: [ 1 2 3 4 5 6 7 8 9 10 ]
Usual puede tener instrucciones, expresiones. Humadas de mtodos a otros objetos cond,
dnales, ciclos, etctera, en el interior del cuerpo del mtodo; todo lo que usted ha apruul.do
en las lecciones anteriores.
A menos m,c un mtodo haya sido declarado con void co.no su tipo de retorno, el mtodo
#
a un
Luclve algn tipo de valor al finaliza, Este valor debe ser devuelto exphcuamcnte en algn
comoHin argumento
El lisruio 6 2 muestra un ejemplo de una clase que def.nc un mtodo makeRanget). Este
Le los (un lmite inLior y un Hm.te supenor) y crea un arreglo que connene todos
,os enteros entre esos dos lmites. Los lmites se incluyen en el arreg.o de enteros.
1 :
class
3:
4:
arr[i]
6:
return
8:
lower++;
return this;
18:
11 :
int theArray[];
12:
13:
'14:
15:
16:
17:
i..,.,..:, v
tM pc,.
como sigue:
t = X>'
);
System.out.print(theArray[i]
18:
En muchos casos podra no necesitar hacer uso explcitamente de la palabra clave this, ya ""
arr;
9:
19:
7:
26:
5:
langeClass {
2:
"
ctua 2 P
'
i*
"k-
Systera.out.println(*]");
Mota
Da 6
sta es la salida:
test =20
u na
1n'
o2 Z
0Cl1 ) riW
- E1 "^odo printT..t(, to
^ ^ ^
mtodo cu: ^
Teau^ .
c t un oh
"
this
ble: loca
encontrarla.
Wi'ble
na subclase
.tda^r/,
T le CmpOnamenI es ser ufcloso >n las variables definidas en
odas las superclases de su clase. Esta precaucin lo previene de duplicar una variable que
cuerpo del mtodo son pasados por referencia. Cualquier cosa que usted le haga a los objetos
dentro del mtodo, afecta a los objetos originales. Tenga presente que entre tales objetos se
mcluyen los arreglos y todos los objetos que es.n contenidos en arreglos. Cuando pasa un
arreglo a un mtodo y modifica sus contenidos, el arreglo original es afectado. Los tipos
2:
3:
Creacin de clases
Da 6
1451
144
'Las lneas 14-16 establecen los valores iniciales para este ejemplo. El primero es un arreglo
de enteros; el segundo es una instancia de la clase PassByReference, la cual es almacenada
en la variable test. El tercero es un entero simple para contener la cantidad de unos en el
arreglo.
4:
5:
if (arg[i] == D i
6:
7:
Las lneas 18-22 imprimen los valores iniciales del arreglo; usted puede ver la salida de estas
arg[i]
8:
La lnea 24 es donde las cosas suceden realmente; sta es donde usted llama al mtodo
definido onetoZero() en el objeto test y lo pasa al arreglo almacenado en arr. Esie mto
do devuelve la cantidad de 1 s en el arreglo, que usted entonces asigna a la variable numOnes.
9:
10:
11:
return count;
12:
Lo ha podido seguir hasta ahora? La lnea 25 imprime la cantidad de unos (el valor que
usted obtuvo de vuelta del mlodo onetoZero()). Devuelve 3, como usied esperara.
13:
14:
15:
16:
int
nuroOnes;
La ltima seccin de ineas imprime los valores del arreglo. Puesto que una referencia al
objeto del arreglo se pasa al mlodo, modificar el arreglo dentro de ese mlodo modifica la
copia original del arreglo. La impresin de Jos valores en las lneas 27-30 lo prueba (la ltima
lnea pie la salida muestra que todos los unos en el arreglo han sido cambiados a ceros).
17:
18:
19:
System.out
26:
21:
22:
23:
24:
System.out. println("]");
Mtodos de clase
numOnes = test
Ones
numOnes);
25:
26:
Los mtodos de clase estn disponibles para cualquier instancia de la clase misma y pueden '
estar disponibles para otras clases. Adems, a diferencia de un mtodo de instancia, una clase
27:
28:
29:
36:
System.out.println("]");
no requiere una instancia de la clase pura que se pueda llamar a sus mlodos.
31:
Por ejemplo, las bibliotecas de clases de Java incluyen una clase llamada Math. La clase Math
define un.conjunto1 desperaciones matemticas que puede usar en cualquier programa en
345087
0 34
Para definir los mtodos de clase, utilice la palabra clave static delante de la definicin del
mlodo, tal como usara static frente a una variable de clase. Por ejemplo, el mtodo de
clase.max () que se usa en el ejemplo anterior podra tener la firma siguiente:
'static inf max(int arg1, int arg2)
// cuerpo del mtodo
Creacin de clases
Da 6
La clase punto de inicio para su aplicacin slo necesita una cosa: un mtodo main() Al
cade,-
el t'empo m SOrpre"derle; ha eStad Creando "P^aciones Java con mtodos nain() todo
como . in.
p.r..lnt(, -o un entero
'I
-t
Publie significa que este mtodo est disponible para otras clases y objetos. El mtodo
publie y prvate.
El cuerpo del mtodo n.ain() contiene cualquier cd.go que usted necesite para iniciar su
apl.cac.6n, como la inicializacin de variables o la creacin de instancias de clases.
Cuando Java ejecuta el mtodo n.ain(), tenga presente que main() es un mtodo de clase
Una mstancta de clase que contenga main() no se crea automticamente cuando su programa
Creacijid^cwo^^^^
esta en ejecucin. Si desea tralar esta clase como un objeto, tiene que crear una instancia de
Clases auxiliares
Su aplicacin Java puede tener slo una clase o, en el caso de programas ms grandes, podra
estar compuesta de muchas clases, donde se crean y usan diferentes instancias de cada clase
m.entras la apl.cacin se est ejecutando. Usted puede crear tantas clases como desee para su
e, $islema grffico
programa.
pequeas
Si est usando el JDK, las clases deben ser accesibles desde un directorio que
En tanto Java encuentra la clase, sta ser utilizada por su programa mientras corre. Observe,
cla qm
sin embargo, que nicamente la clase de punto de inicio necesita un mtodo main(). Despus
Da 6
los
Escriba
1
class EchoArgs {
2
3
System.out.printlnrArgun.ent + i + -..
m
+
arguroentsfi]);
6:
7: }
lnea de comandos.
P,,, pasar argumentos a un programa Java en Windows o Solaris, se deben agregar a la lnea
Salida
Argument
Argument
Argument
Argument
0: Wilhelm
1: Niekro
2: Hough
3:
49
Salida
Argument 2: Hough
a^e > H
arreglo de argumentos.
una unidad
main():
Nota
T0 d,enar9Ument0S en Java no es a^logo a argv en C y UNIX. En parr. arg[OJ o arguments[0J, el primer elemento en el arreglo de argu-
Creacin de clases
Da 6
^:;:
r crnirios
^^ ilamad ParSeInt' Cambie <* '/ 6 para usar ese
sum += Integer.parselntargumentsfi]);
|, Average is: 2
Resumen
2:
int
3:
sum
i - ! i < .r,nt..l.nBth; !) t
4:
fcr (int i
5:
sura += arguments[i),
Variables de clase y de instancia, las cuales contienen los atributos de una clase v obje-
6:
7:
8:
9:
le una Case.
"110"1'" ^'^ defi"e
' lndUyend laS PaneS d "^ fia de ^'to. cmo
s? laa"palabra
3 ""iclave"this
mlOd0'
Cm " alPaSa"
'0Sanual
ar8U"lenIOS a ' -'odos y cmo
usar
para referirse
objeto
16:
11:
12:
13:
el
1:
devolve ,
}
}
c:
java.lang.String to
sum += arguments[il;
Da 6
Preguntas y respuestas
J V
Semana 1
P usted mencion que las variables locales constantes no pueden ser creadas en
l|M,U.|s que son compatibles con .lava 1.0.2. Por qu deseara yo crear programas
R La razn ms probable es que usted est tratando de crear un applc. que funcione en la
mayora ci los navegadores. El soporte completo para las versiones posteriores a 1.0.esi retrasado en navegadores como Netscape Navigator e Internet Lxplo.er de
Microsoft, aunoue JavaSofl est trabajando para corregir esto. La situacin se expone
ampliamente durante el da 8, -Cmo poner programas interactivos en Web .
P Ei. mi clase, tengo una variable de instancia llamada origin. Tambin tengo en
un mtodo una variable ocal llamada origin, la cual a causa del alcance de una
variable, queda oculta por la variable local. Hay alguna forma de aislar el valor
de la variable de instancia?
R l a manera ms sencilla es procurar no darle a sus variables locales los mismos non,-
bres que los'que tienen sus variables de instancia. Si siente que debe hacerlo, utilice
this.origin para referirse a la variable de instancia y origin para refer. a la va-
Da
riablc local.
|. Fscrih.... programa que loma cuatro argumentos, pero si le doy menos argumen-
Las clases y objelos proporcionan un marco de trabajo. Las variables de clase a' de
instancia brindan una forma de describir qu son bs clases y los objetos, nica-''
mente los mtodos pueden definir el comportamiento del objeto (qu es capa/ de
conocimiento a crear programas Java. Sin embargo, podra llegar a olvidar algunas
caractersticas que hacen poderosos a los mtodos (caractersticas que hacen que
,.
: ,
J .-I
Da 7
El prximo proyecto es crear un mtodo sobrecargado. El listado 7.1 muestra una definicin
de clase simple para una clase llamada MyRect, la cual define una figura rectangular con cua
tro vanables de instancia para establecer las esquinas superior izquierda e inferior derecha del
rectngulo: x1,
Escriba
sistema.
yi,
X2 y y2.
class MyRect {
int x1 = 0;
int y1
= 0;
int x2 = 0;
int y2 = 0;
io.cca de clases de Ja
dosvalueOf O tremes.
Mota
' LaUin'1'
d co I
clase.
Cuando se crea una nueva instancia de la clase MyRect, todas sus variables de instancia se ni-
aal.zan en 0. Usted puede aadir un mtodo de instancia buildRect () p;ira asignar las va
nables a sus valores correctos como las dos esquinas de un rectngulo. Este mtodo toma cuatro
argumentos enteros y devuelve el objeto rectngulo resultante. Debido a que los argumentos
tienen Jos mismos nombres que las variables de instancia, la palabra clave this se usa dentro del
mtodo cuando se refiere a las variables de instancia. El siguiente cdigo es para buildRect () :
MyRect buildRect (int x1, int yi, int x2, int y2) {
this.xi
= x1;
this.yi
= yi;
Con este mtodo se pueden crear rectngulos pero y qu tal si usted quera definir las
dimensiones de un rectngulo en una forma distinta? Una alternativa podra ser utilizar obje
tos Point en vez de coordenadas individuales. Para mplementar esta alternativa, puede
sobrecargar buildRect () para que su lista de argumentos tome dos objetos Point. Observe
Jo siguiente:
= topLeft.x;
y1
= topLeft.y;
x2 = bottomRight.x;
155
L55J
Da 7
156
157 |
t 25:
y2 =
-.-.-
bottomRight.y;
26:
return "this;
>
iara cue -l^cione el mtodo anterior, se debe importar la clase Point al inicio del archivo
27:
f i
2e:
32:.
33:
37:
38:
y2 =
40:
return
St
35:
x2
36:
-vi-'- topLeft.y;
void printRect(){
34:
39:
h);
this;
41:
}'"
Syste;out.prlntlnrcalling
42:
rect.printRect();
44:
43:
un mtodo main().
return this;
31:
U. lr,na:i.osib,e de dcmir el ,ee,ngulo es usar ul,a quina, supe, u,r. un aUo y un ancho.
;;
(xi + w);
38:
yi = topLeft.y;
X2 =
29:
System.out.println("**");
45:
46:
points
47:
48:
49:
1:
2:
3:
import
class MyRect
int x1
= 6;
5:
int y1
= 0;
6:
mt
x2
8;
7:
int
y2
a;
10:
11 :
12:
13:
14:
53:
54:
rect.buildRect(new Point(ie,i0)
55:
56:
57:
9:
51:
52:
4:
8:
System.out.println("***");
50:
java.awt.Point;
.'. '
this.xi = x1;.
this.yi = yi;
this.x2
this.y2
= y2;
x2,
int y2)
x2;
return this;
58:
rect.printRect();
Lo siguiente es la salida:
Salida
15:
16:
17:
18:
19:
28:
21:
22:
23:
24:
topLeft.x;
yi
topLeft.y;
x2
bottomRight.x;
y2
bottomRight.y;
return
this;
point
50
5e).
)j
n llamados. Puede de
ar el componam.emo ron.cr
bottOmRight)
*-
: topLeft.y,
MyRect
Escriba
1:
2:
os cn.cros. Con
3:
o argi.mcn.o
4:
class Person {
String ame;
'
int age;
5:
Person(String n, int a) {
6:
ame
7:
age
8:
n;
= a;
9:
10:
void printPerson() {
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:,
24:
System.out.prlntln("
");
System.out.println("
);
Escriba
arg2, arg3);
1:
2:
3:
4:
import java.awt.Point;
class Myfiect2 {
int xi = o;
= e;
5:
int y1
6:
int x2 = 0;
int y2 = 0;
7:
8:
9:
int
x,
y,
11:
radius;
this.yi
12:
10:
class MyCircle {
this.x2 = x2;
this.y2 = y2;
13:
14:
xPoint;
= yi;
15:
this.y = yPoint;
this.radius = radiusLengtn;
16:
1 point
17:
18:
y1 = topLeft.y;
19:
1);
x2 = bottomRight.x;
20:
21:,,
22:
>
23:
24:
x1 = topLeft.x;
25:
y1 = topLeft.y;
26:
X2 =
27:
29:,
3e:
31:
.,'
32:
35:'
36:
'
(xi
+ w);
y2 = (VI + h);
' .Mi. i .-
: .
void printRect() {,
33:
34:
y2 = bottomRight.y;
System.out.printCMyRect: <- + x1
Syit..out.println(V + x2 + ",
y2
Da 7
162
existentes
, Para .sobreponer un mtodo, ,odo lo que tiene que hacer crear un mtodo en su subclase que
tenga la misma firma (nombre, tipo de retorno y lista de argumentos) que un mftodo dormido
por la supcrelase de su clase. Como Java ejecuta la primera definicin del mtodo que encuentre
que coincida con la firma, la nueva firma oculta la definicin original del m.odo.
Aqu tiene un ejemplo sencillo; el jslado 7.5 muestra una clase simple con un mtodo llamado
printMe(). el cua] imprime el nombre de la clase y los valores de sus variables de instancia.
44:
rect.printRect();
45:
System.out.println*
Escriba
).
46:
1:
47:
48:
49:
class PrintClass {
2:
int x = e;
3:
int y =
1;
4:
50:
rect.printRect();
51:
System.out.prmtln(
5:
void printMe()
6:
52:
7:
53:
8:
54:
9:
55:
10:
El listado 7.6 muestra una clase llamada PrintSubClass, que es una subclase de
MyRect
2:
int z = 3;
3:
Sobreposicin de mtodos
Cuando usted Ua.na a un mtodo de -*^
.ri(ikMniic
^ mlodo nacia arriba en I. jerarq-a
^ ^.^
^ ^ ^^ a fc
vez
^ ^ subdase y se ejccula
4:
5:
6:
7-
8:
obj.printMe):
is 0,
y is
165 I
Da 7
en el que lo sobrepone. A! llamar al mtodo original en el cuerpo del mtodo que se sobre
pone, usted puede agregar lo que necesita.
Use la palabra clave super para llamar al mtodo original desde una definicin del mtodo.
La palabra clave pasa la llamada hacia arriba en la jerarqua, como se muestra a continuacin:
ti clase. printSubClissZ es i
//
; PRINTSUBCLASS2.
b);
La palabra clave super, muy parecida a la palabra clave this, es un marcador de posicin
para la superclase de la clase. La puede usar donde quiera que utilice this, pero super se
Escriba
1:
2:
// desde PrintClass
void printMe()
3:
System.out.printlnCx is
4:
5:
"
+ x +
",
y is
" + y) ;
this.getClass().getName());
6:
7:
v se ll.ma al mciCHloprintMeO.s
8:
9:
16:
11:
-*
//desde PrintSubClass2
void printMe()
Systen.out.println("x
yis
z is
Da 7
::sSobeP:;s;:prinicra msiniccin-usicd n
// desde PrintClass
ro.rintlnCl
}
thxs.getClassO.getNameO)
if (condition == true))
s(i2
System.out.printlnCX is " * .
System.out.printlnCY is
+ y),
ongina>
//
aadir
solamente
la
sUper(i,2,;
//
llamar
un
constructor
namar a
un
constructor
pore.
desde PrintSubClass
void printMeO {
super.prmtMeO;
Systera.out.printlnCZ
is
is
un, V
da adicional/
Sobreposicin de constructores
Tcnicamente, los mtodos constructores
nomb e
ve, nunda
^ ^ m,loi)o conM,,ltMOr de
ar
Si,, emha,,o. a!
super(argi, arg2, );
illicializar x
import java.awt.Point;
"CCCS'C-
Uamar-n cndor
-"
super(x,y);
this.name = name;
'
Da 7
168
is
is
ame
usar finalize()
is SmallPoint
El mtodo constructor definido aqu para NamedPoint llama al mlodo constructor de Point
para inicializar las variables de instancia de Point (x y y). Aunque usted mismo puede ,n.-
Resumen
cializar estas variables fcilmente, tal vez no podra saber qu ms est hacend Point para
inicializarse h s mismo. Por lo tanto, siempre es una buena idea pasar mtodos constructores
hacia arriba en la jerarqua para asegurarse que todo se configure correctamente.
Mtodos finalizadores
diferente,
condiciones
Los mtodos finalizado. son casi lo conirari a los mtodos constructores. Un nwwdo cons
tructor se usa para inicializar un objeto, y los nu.odos finalizados se llaman justo ames de
que el objeto sea recolectado como basura y se reclame su espacio de memoria.
finido que no hace nada. Para crear un mtodo finalizador para sus propias clases, nene que
sobreponer el mtodo f inalize {) usando esta firma:
protected void finalize() throws Throwable <
super.finalize();
Preguntas y respuestas
Nota
Incluya cualquier actividad de limpieza que desee hacer para este objeto dentro del cuerpo de
ese mtodo f inalize (). Tambin puede llamar a super.f inalize () para que las superclascs de su clase puedan finalizar el objeto, si lucra necesario.
Puede llamar usted mismo a) mtodo f inalize() en cualquier mntenlo (es un mtodo
,.., oros). Sin embargo, llamar a f inalize) no activa un objeto para que sea env.ado ;.
la basura. Slo cuando se eliminan todas las referencias de un objeto, ste se marca como
Cliniinable.
td l
purmetrl
Semana 2
Temas avanzados
de Java
fuentes y color
Silt
y sonido
11 Construccin de interfaces de
usuario sencillas para applets
12
Organizacin de los
componentes en una nterfaz
de usuario
13
usuario en un applet
14 Desarrollo de interfaces de
H</*
SlSi
Semana 2
i1ii
I
Da
3m
>".'
Li
i*
MI
loci. u.xL,,,tc. une, de los prognun.s tJUC llslc,| clvrt ,,, ; |ic.li;ioi
,
.
semana pasar al desarrollo de applets.
"-.u.h.i.ln J.,v.,. I.M..
Da 8
174
Debido a que los applets de Java se ejecutan en el sistema del usuario, hay algunas resine-'"
c.ones senas en cuanto a lo que un applet es capaz de hacer. Si no hubiera estas restricciones
un programador de Java podra escribir fcilmente un applet que borre archivos de usuario
Como una regla general, los applets de Java se ejecutan bajo un modelo de seguridad "mejor
Comunicarse con un sitio de Internet distinto al que sirvi la psina Web que incluy el
applet.
y aplicaciones
a licactol,esI*a
"
e, archiv0 <
Todas estas reglas son ciertas para los applels que se ejecutan bajo Netscape Navigator o
Mtcrosoft Internet Explorer, los navegadores ms favorecidos actualmente por los usuarios
Otros navegadores con capacidades Java y herramiemns de desarrollo Java podran habilitarle
para configurar el nivel de seguridad que desee, permitiendo algn nivel de acceso a archivos
o directorios especficos para conexiones de red a sitios selectos de interne!.
acceso, para las carpetas que un applet pueda leer o escribir archivos en ellas. Sin embargo
un desabollador de applets puede asumir que la mayora de la audiencia estar usando un '
Las aplicaciones de Java no tienen ninguna de estas restricciones de los applets. Pueden
: crear
cin y
Precaucin
Dia8
177 i
176
Java 2 habilita controles de seguridad muy especficos para ser colocados en un lugar o ser
direccin Web:
http://java.sun.com/products
Creacin de applets
La mayora de los programas de Java que usled ha creado hasta ahora han sido aplicaciones
de Java, programas simples con un mtodo main() sencillo que se usa para crear objetos,
asignar variables de instancia y Humar a otros mtodos.
Los applets no tienen un mtodo main() que automticamente se llama para iniciar el procra-
ma. En su lugar, hay varios mtodos que son llamados en punios distintos en la ejecucin de
un applet. Hoy aprender acerca de estos mtodos.
':
Todos los applets son subclases de la clase Applet en el paquete java.applet. La cl.'ise
Applet proporciona dos clases de comportamiento que lodos los applets deben tener:
Comportamiento para presentar una imerfuz grfica de usuario y lomur la emiadj ifo
usuarios.
Aunque un applet pueda utilizar tantas ciases cuantas necesite, la clase Applet es la prin
cipal que activa la ejecucin del applet. La subclase de Applet que usted crea toma la forma
siguiente:
}
mroduje.ronallenouajecnJaval.lo2
Da 8
HH5
la case Applet cuando ocurren eventos especficos.
Paro
,as pecffic al
Destruccin
fieos y otras cosas.
c cIL?^
IL?^
;.'
Inicializacin .;
PUede US:"
US:"" CKle mld |Wii fioil'uilaf
ej
fioil'uilaf cu"ufr subproceso en eje-
I pple haya creado. Para proporcionar e, componam.cn.o de limpie., para su apple,. sobre-
// aqu va el cdigo
// aqu va el cdigo
en si mismo.
k
i
Da 8
180
Web
Java tiene un colector de basura automtico que administra la memoria por usted. El recolector
. reda memoria de los recursos despus de que el programa ha termmado de usarlos, por .o
que usted norinahmcntc no tiene que usar mtodos como destroyf).
Pintado
iraport Java.awt.Graphics-
<t
[ DE PALIMDRQME . JAVA.
iiport java.awt.Font-
import java.awt.Color;
El pintudo es U forma en que un applet despliega algo en pantalla, sea texto, una lnea, un .
, do coloreado o una imagen. El pintado puede ocurrir muchos cientos de veces duran
delo de vida e un applet: una vez que el app.e. ha sido iniciando, de nuevo s, la ven ana
del navegador esitrada desde el segundo plano de otra ventana en pantalla de nuevo s, la
vL,.n Sel navegador se mueve , tremes posiciones en la panu.lla. y as, por el csi.lo
Ustld debe sobreponer el mtodo paint () de su subclase Applet para desplegar cualquier
screen.
Observe que aquerencia de otros mtodos descritos en esta seccin, paint <, toma aju-
men,o: una instancia de la Case Gr.phio. El objeto se crea y es pasado a p.int () peel
avegador por lo que usted no tiene que preocuparse por ello. S.n embargo, siempre d be .
"X '-lase oUi (Pa- de. paquete java.awt) dentro de, cod.go^de su app e ,
comnmente a travs de una instruccin i.port en la parte superior de su archivo fuente
Java, como en el siguiente ejemplo:
import
Tip
181
java.awt.Graphics;
Si usted importa muchas clases desde el mismo paquete, como las clases del
AV^T puede usar el carcter comodn para cargarlas todas a! rn.smo t.empo.
,a el
o ejemplo, la instruccin i.port J,va. awt.-; carga todas las Cases publ,
n.j,,
b.0.
4,
Un applet sencillo
,,, el .la " ''Un vistan a la programacin orientad, ;, objeos". usted ere un :Wlci sck.IIo
Ese .pplet serevisa aqu por una razn diferente: para tomarlo como un ejemplo de progra
macin de applets. El listado 8.1 muestra el cdigo de dicho applet.
,,,ls,n<MndoM
0,0
I,.,,:!! Palin.r-o.e que dJp.iega e, texto -Go h.nD a ..l..i. I a l..aBna ho0.
y utiliz el applei como ejemplo de la creacin de una subclase.
" I-
Figura 8.1
!
40^
Da 8
Si usted implementa los mtodos correctos del applel en su clase (init(), start(),
V:
18: <Mpplet>
11: </B0Dy>
12: </HTML>
Despus de que haya creado la Case o clases que componen su applc. y las haya condado
en archivos de clases, debe crear una pgina Web para colocar el applet.
El archivo de clase
El propsito de <APPLET> es colocar un applet en una pgina Web y controlar c.nn luce con
n-r un direcIorio
Los navegadores cort capacidades Java usan la informacin contenida en la etiqueta y ejecu
tan los archivos de clase combados en e, app.et. En esta seccon pender a el - appleLs
de Java en una pgina Web y a servir los archivos de Java ejecutables en \Uh en .oda
u^de^ '
suficientemente grande.
dimensin.
Nota
d-endo de
de ver
ver un
un aPP,eI
aPP,eI de
de Java
Java
porque su 1Z1^J.T
" Cnil! 4UC * ^ 'd
l sopona. Si usted no especifica
navL^dor
no lo
l
algo
entre <APPLET> y <MPPJT> .
La etiqueta <APPLET>
L, enqueta <APPLET> es una extensin especial a HTML para incluir apple.s de Java en pag,-
:M istado
<HTML>
2:
<HEAD>
4:
</HEAD>
5:
<BODY>
11
yd
not
support
Da8
~~~~~~~
tos app'eli
-*-"pSE
-~"~-
____
En su forma ms simple, la etiqueta <APPLET> utiliza los atributos CODE, WIDTH y HEIGHT
Figura 8.2
\ota
- Ui i>a'n(i Web
PalindromePage.html
V: en Navigator.
Mfammcfl>
El atributo ALIGN define cmo ser alineado el ;,pple, en una pgina Web en relacin a otra.s
panes de la pagina, liste atributo puede tener uno ele nueve valores:
ALIGN=LEFT alinea el applet a la izquierda del texto que sigue al applet en la pgina.
ALIGN=RIGHT alinea el apple. a la derecha del texto que sigue al applet en la pgina.
ALIGN=TEXTTOP alinea la parte superior del applcl con la parle superior del texto ms
alto en la lnea.
ALIGN=TOP alinea el applet con el elemento ms alto en la lnea (la cual puede ser otro
applet, una imagen, o lo ms alto del texto).
ALIGN=ABSMIDDLE alinea la mitad del applet con la mitad de! elemento ms grande en
la lnea.
ALIGN=MIDOLE alinea la mitad del upplel con la mitad de la lnea de base del texto.
ALIG!M=BASELINE alinea la parle mas baja del applel con la lnea base de! texto. Esle
soporta el lenguaje.
.. *iv<
descriptivo.
Para finalizar el formato que se especifica con el atributo ALIGN, puede usar la etiqueta
HTML de rompimiento de lnea BR con el atributo CLEAR. ste toma tres valores:
<BR CLEAR=LEFT> contina desplegando el resto de la pgina Web en el siguiente
margen izquierdo disponible.
Figura 8.4
Espacio vertical v
.'.
horizontal.
La f.gura 8.3 muestra varias opciones de alineamiento, en las cuales la carita sonriente es un
applel.
Figura 8.3
_-, *....-->
.,-. jr ._.i.~~i-
dei
la pgina
^ mismo
es u
un
es
Si utiliza una herramienta de desarrollo de Web que le permite colocar appiets Java en una
pgina.'us.ed debera poder asignar el atributo ALIGN al elegir LEFT, RIGHT, o uno de los
valores dentro del programa.
do BiX.class de
HSPACE y VSPACE
Mediante los atributos HSPACE y VSPACE se configura la cantidad de espacio en pixeles entre
un applc. y st, texto que lo rodea. HSPACE controla el espacio horizontal a la .z.qu.cda y
HEIQHT-4. WIDTH-4M>
erecL. del app.et, v VSPACE comro.a el espacio vertical sobre y bajo el applet. Por ejemplo,
aqu est ese fragmento muestra de HTML con espacio vertical de 50 y espac.o hor.zontal
de 10:
Java
</APPLET>
1 a fi.u.r.. 8.4 muestra cmo se desplegara este applet. el cual despliega una cama sonriente
en un fondo blanco, con otros elementos de una pagina Web. El fondo de la pag.na es una
rejilla, y cada rejilla tiene un tamao de !0xl0 pixeles. Usted puede usar la rej.lla para med.r
la cantidad de espacio entre el applet y el texto en la pgina.
CODE y CODEBASE
Los atributos CODE y CODEBASE a diferencia de otras partes de la etiqueta <APPLET>, se usan
nara indicar dot.de se pueden encontrar el archivo de la clase principal del applet y otros
archivos los cuales sern utilizados por un navegador con capacidades Java cuando trate de
ejecutar un applet despus de obtenerlo de un servidor Web.
j!
i
</APPLET>
La etiqueta <object>
Da 8
188
cuso*
hf1gHT-40
?,
- ->rMw jar ^ ^
archivo JAR. el
cantidad de arch
"" archivo *
;: fadrTncqueblenerddscrvidonusleJpualc**y*"-
...r*.*.-.*
que el tamao
Tior
7
escomprimir y ejecutar los archivos)
jlg
listado 8.2
1:
<HTML>
2:
3:
4:
</HEAD>
5:
6:
que el nombre
nombdJ
del
'
que
""''
ieme.
-r
7:
8:
9:
10:
</OBJECT>
11:
</BODY>
12:
</HTML>
Archiveros
ch.veros JAVA
jmvm
La manera estndar de colocar un applei de J-
^ es mediame <APPLET> u
^ ^ obcne y ejccuU,
pZ n ,
jar
H.nIrn . , .
..
.."
comcnc
|<m
^^
'
t -
Dia 8
i
Precaucin
t:rf''lc lm *
conocer el nombre del archivo de la clase principal del applet para cargarlo.
An.cs de que los desarrollados de Java introdujeran el formato de archivo JAR. lamo Netscape
L-.s versiones actuales de los navegadores Web de Netscape soportan el uso de archiveros Zip
coi, el atributo ARCHIVE, pero slo se pueden utilizar para los archivos de clase, no para ,ma-
"!!e ' u otros unos ele archivos que un applc. pudiera necesitar. Con Netscape, usted puede
usar el atribulo ARCHIVE para indicar el n.mib.v cid a.duvcro. um.o i-Me.
El archivero por s mismo es un arch.vo Zip sin comprimir. Los archivos Zip estndar no son
conocido, pues usan alguna forma de compresin para hacer ms pequeo el archivo.
S. las clases auxiliares podran estar contenidas dentro o fuera del arch.vo Z,p lo,
nav"; es de Netscape buscarn en ambos .ugare, El atributo ARCHIVE es ignorado por
"os niveladores o visualizados de applets que pudieran toparse con esta pagina Web.
Internet Explorer de Microsoft reconoce un tercer tipo de forma de archivero para la entrega
/A
e l,s de Java: el archivo CAB. ste es una abreviatura de la palabra cabinc, (gaveta , u .,
Lid" grunar archivos entre s y comprimir. para una entrega ms rpida a travs de *cb.
Los archivos CAB se crean con una herramienta de Microsoft llamada CABarc. Actualmente
dtmro dc
Mediante CABarc, usted puede comprimir todos ios archivos de clases y algunos ms requeri
dos por un app.e, en un archivero individua!, que tenga la ex.ens.on de arch.vo . cab. Para
especificar e ,c archivero se utiliza un parmetro llamado cabbase con la enqueta <PARAM>
un ejemplo:
valor de
Listado 8.4.
S^4
1:
import
2:
import java.awt.Font;
3:
iraport
4:
5:
java.awt.Graphics;
java.awt.Color;
"
'
-:
6:
Font
f = new Font("TiraesRonian",
Font.BOLD,
36);
7:
initffcomola siguiente
8:
screen.setFontff);
9:
screen.setColor(Color.red);
18:
11:
40);
Nota
12:
13:
Lo primero que necesila para aadir a esta clase es un lugar para que el parniciro palindrome
sea almacenado. Como usted necesilar esle nombre a iravs del applct, agregue una variable
de instancia para el nombre exactamente despus de la variable para la luentc:
h-i sido especificado en el archivo 1ITM1Observe i|uc si un parmetro que usted espera ^"^ ^ ^c% prucbc con uri parmetro
if (theFontName == nuil)
String
palindrome;
Para configurar un valor para el nombre, liene que obtener el parmetro. El mejor lugar para
manejar ios parmetros de un applet es denno del mtodo init (). Esle mtodo se del me del
mismo modo que paint () (publie, sin argumentos, y un tipo de retorno void). Al probar un.
parmetro asegrese de probarlo para un valor de nuil. Si no se indica un palndromo, lo pre
determinado, en este caso, es desplegar Oennis and Edna sinned, como lo ilustra lo
siguiente:
publie void init() {
palindrome = getParameter("palindrome");
if (palindrome == nuil)
palindrome = "Dennis and Edna sinned";
StringY = etParameter('size-);
if
Una vez agregado este mtodo, todo lo que queda es modificar el mtodo paint (). El mto
(s == nuil)
C,
e,
applci
p,_unar0.,
5,
50);
El listado 8.5 muestra el resultado final de la clase MoreHelloApplet. Compile la clase para
que tenga listo un archivo de clase.
1931
Da 8
|194
Cargar este archivo HTML en Netscape Navigator produce el resultado que se muestra en la
figura 8.5.
1:
import
java.awt.Graphics;
2:
import
java.awt.Font;
Figura 8.5
3:
import
Java.awt.Color;
La lanilla
4:
5:
java.applet.Applet
6:
7:
String
palindrome;
publie
void
Font.BOLD,
36);
apBBMp
-:*" 0
NewPalindrome.html
9:
paint(Graphics
screen)
screen.setFont(f);
11:
screen.setCoJor(Color.red);
12:
screen.drawString(palindrome,
".. -J..
*il U W -
8:
10:
1951
5,
50);
13:
14:
15:
irfi.-j-,. .-
palindrome = getPararaeter("palindrome");
16:
17:
if
18:
palindrome =
(palindrome ==
Al
-
.*
nuil)
es Dennis and Edna sinned . El lisuuJo 8.7 croa un archivo HTML sin im:i etiqueta de
sinned";
19:
20:
Ahora cree usted el archivo HTML que contiene este applet. El listado S.6 muestra una nueva
1:
Escriba
<HTML>
2:
<HEAD>
3:
4:
</HEAD>
5:
<BODY>
1:
<HTML>
6:
<P>
2:
<HEAD>
3:
7:
8:
Your
4:
</HEAO>
5:
<BODY>
6:
<P>
9:
10:
7:
<APPLET CODE="NewPalindrorae.class"
8:
9:
Your
10:
support
prefer prison">
Java!
</BODY>
12:
</HTML>
</APPLET>
</BODY>
:1
</APPLET>
11:
WIDTH=600 HEIGHT=100>
sir,
, ir
Resumen
Observe la etiqueta <APPLET>, la cual designa el archivo de clase para el applet y la altura y
ancho apropiado (600 y 108, respectivamente). Exactamente debajo de ella (lnea 8) esi la
Es discutible la razn por la que los applets siguen siendo el centro de atencin del desarrollo
de Java, ms de dos aos despus de que el lenguaje fuera liberado por primera vez al pblico.
etiqueta <PARAM> que se usa para pasar el palndromo al applet. En este ejemplo, el
Sin embargo, los applets permanecen como el uso pblico ms grande de Java, porque son
elaborados y colocados en miles de sitios de World Wide Web. De acuerdo con la mquina de
sir,
prefer prison.
Da 8
196
Preguntas y respuestas
Figura 8.6.
>P_.Teiigo un applet que toma parmetros y un archivo HTML que le pasa esos
La pgina
-r.-jwremetros, pero cuando mi applct se ejecuta, todo lo que obtengo son valores
R Los nombres de sus parmetros (en el atribulo AME) corresponden aclmeme con
los nombres que usted est probando en getParameter () ? Deben ser exactos,
incluyendo maysculas y minsculas, para que se pueda realizar la correspondencia
Asegrese tambin que sus etiquetas <PARAM> estn dentro de las etiquetas <APPLET>
de apertura y cierre y que no ha cometido ningn error de escritura.
P Hay alguna configuracin especial requerida para que mis programas de sen*
\
Debido a que se ejecutan y son desplegados dentro de pginas Web, los upplets pueden usar
los "i-lkos inicruz de usuario y estructura de eventos proporcionados por el navegador Web.
EsJcapacidad proporciona al programador de applets mucha funcionalidad que le ahorra irabajo duro adicional.
. Todos los applets son subclases de la clase java.applet .Applet, la cual proporciona
el comportamiento que el programa necesita para correr dentro de un navegador Web.
. Los applc.s tienen cinco mtodos principales que cubren las actividades que un applet
desarrolla a! momento de su ejecucin: init (). start{), stop(), destroy () y
. Los applets son colocados en las pginas Web mediante la etiqueta <APPLET> de
HTML o una herramienta de desarrollo Web que pueda manejar applets. Cuando un
navegador con capacidades Java carga una pgina que contiene un applet, carga el
archivo de clases descrito con la etiqueta <APPLET>
. Para acelcaf e! tiempo que .orna cargar un applct desde un servidor Web. usted puede
. Los appleis pueden recibir informacin desde una pgina Web medame la etiqueta
<PARAM> en asociacin con un applet. Dentro del cuerpo de su appiet, usted puede
lener acceso a esos parmetros a travs del mtodo getparameterf).
R Se requiere muy poco por parte del servidor para ofrecer applets de Java junto con
hacen, configurar el servidor para presentar applels dc Java requiere que se asocie la
MIME.
System.out.printlnO?
R Dependiendo de su navegador u otro ambiente habilitado para Java, usted podra tener
una ventana de consola donde aparezca la salida de depuracin (el resultado de
Advanced.)
rios reales).
Semana 2
Da
es con un programa que despliegue grneos. Tal vez el to Pedro no aprecie los
detalles de los ciclos bien construidos o una jerarqua de clases ele"ante pero si le
Para usar las caractersticas en sus programas, usied ,,,11,,;, d.iSCS dcl p.1()l)e|L,
java.awt, el cual proporcin;, la mayora de las moneras visuales do J;,v Con'
estas clases dibujar textos y figuras, como crculos y polgonos, en un apple.
Aprender a usar fuentes y colores distintos para las figuras que trace
Da .9
200
map . html.
1: <body bgcolor="#C4c4c4">
2: <dlv align="center">
widtn=35e>
La clase Graphics
del texto y el color fueron elegidos antes de dibujar los caracteres, del mismo modo que un
artista elegira un color y una brocha antes de pintar.
El tcx.o no e's lo nico que puede dibujar dentro de la ventana del applet. Usted puede dibujar
5:
</dlv>
6:
</body>
Dibujo de un texto en
una ventana del
applel.
1 ;, mayora de las operaciones bsicas son mtodos debidos en la el.se Graphics. l-n ....
applet usted no tiene que crear un objeto Graphics para poder dibujar algo (como recordara,
uno d los parmetros de! mtodo paint() es un objeto Graphics). Este objeto reprsenla la
ventana del applet y sus mtodos se utilizan para dibujar dentro del applet.
La clase Graphics es parte del paquete java.awt, por lo que iodos los applcts que dibujen algo
deben usar la instruccin import para que todos los programas puedan utilizar Graphics.
El listado 9.1 es un applet sencillo que usa el mtodo drawString(> para desplegar texto,
como lo ha hecho previamente con el applet Palindrome.
1:
iniport |ava.awt.Graphics;
2'
5:
e!
' }
screen.drawString("Florida",
185, 75);
Todos los comandos bsicos de dibujo que conocer hoy sern mtodos Graphics que son
amados dentro de. mtodo paint (, del apple,. ste es un lugar ideal para tocias las opera-
cones de d.bujo porque paint () es llamado automticamente siempre que la ventana del
applet necesite ser desplegada. Si otra ventana de algn programa cubre al applet y ste
requ.ere ser dibujado, colocar todas las operaciones de dibujo en paint () asegura que
Este applet utiliza el mtodo drawString () del objeto screen para dibujar la cadena
Florida- en las coordenadas 185, 75. El lis.ado 9.2 muestra el cdigo HTML que despl.ega
este applel luego de ser compilado en un archivo de clase.
Continuaremos agregando al apple. Map cada m.odo de dibujo que se abarque en esta
seccin.
'
Da 9
Lneas
nadas x y Algunos toman ms de un conjunto de coordenadas, como una lnea, que tiene una
y M p"ni *
coordenada x, y pra identificar su pumo de inicio y .ira coordenada x, y para su pimo Imal.
* >
sentido inferior. Esto difiere de otros sistemas de dibujo en el cual el origen 0. est en h
esquina inferior izquierda y los valores de y se incrementan en semido superior.
Todos los valores de pixeles son enteros (usicd no puede usar nmeros decimales para desple
gar algo entre valores enteros).
La figura 9.2 representa el sistema de coordenadas para grficos de Java con el origen en 0,0.
Dos de los puntos de un rectngulo estn en 20,20 y 60,60.
Esta instruccin dibuja una lnea de 185,80 a 222,80; una Knea que subrava
como se puede ver en ,a figura 9.3, una porcin de la ventana del apple,.
c\ texio Florida,
9.3
Figura 9.2
+X
0.0
El sistema de
coordenadas para
?r ?o
grficos de Java.
Mota
6C 60
lista completa al final de esta seccin. Hasta entonces, usted puede conti
nuar con el texto y escribir todo el cdigo Java una sola vez
Rectngulos
+Y
Dibujo y relleno
H-,y disponibles dos clases de mtodos de dibujo para muchas de las figuras que usted puede
dibujar en un applet: mtodos de dibujo, con los que se delinea el obje.o. y mtodos de
relleno, con los cuales se rellena el objeto con el color actual. En cada tipo de-mtodo tam
bin se desplegar el contorno con el color actual.
Nota
Tambin puede dibujar archivos de mapas de bits, como los archivos GIF y
JPG, mediante la clase Image. Maana aprender sobre esto.
redoderd?:
** "^
ieCUta8ul0:
reclnul ml v con esquinas
redondeadas (como en la mayora
de los*teclados
de computadora).
Usted puede dibujar ambos tipos de rectngulos en una forma delineada o rellena con el color
Para dibujar un rectngulo normal, use e. mtodo drawRect (, para los contornos y e, mtodo
Da 9
#
#
2,
345,
Esto weoa un contorno cttrecingul justo dentro de !as orillas exteriores de la ventana de.
^sTcn ve, d, ello se hadado e, mtodo* illRectO ^angu^hdo podna
llenar la mayor parte del rea del apple. y ocultar el texto subrayado Florida.
Les rcengulos con
esquinas redondeadas
redondeadas reque
requieren los mtodos drawRoundRect () y
on esquinas
3Sfe
tos de lo, rectngulos norm
3fe , que toman los primeros cuatro argumentos
normales.
con doVnrgU/iicntos aadidos 'il final.
ancho y 8 de aho El
345);
del aPL.;
Figura 9.5
Agregado de un
rectngulo redondeado
al applet.
"
lilo limos argumentos definen el ancho y el alto del rea en que se redondean las
^ n E re mis grande sea el rea, ms redondas sern las esquinas. Incluso puede hacer
() y nilPoIygon,,
qS cinguto se vea como un crculo o ., ovalo, haciendo esu, argumcn.os ,o su,,,cnteniente grandes.
"o tS,e n anl de 30 y una altura de ,0 para cada esquina redondeada. Otro nene un ancho
de 20 y una altura de 2()!y luce mucho ms como un crculo que como un rectangu.o.
maneras
Figura 9.4
10
dondeadus.
e!ZE
P
d6Sde ""Poly0on(nt/;
C^ de P"iattl
-diante
enteros. Esto requ.ere una llamada
al constructor
int x[]
= {
ia,
20,
30|
48|
50 }.
mt points = x.length;
p'un.os
Da 9
I 206
Figura 9.6
Agregado de un pol
gono al applel.
ejemplo:
,
65);
Cuando tenga ,
mtodos
drawPo
de correspondencia
valos
Precaucin
El ancho y alto del valo, que son del mismo tamao en crculos.
Como un valo no tiene esquinas, .al ve/, le desconcierte a qu se refieren las coordenadas x,
y. Los valos se manejan igual que las esquinas para los rectngulos redondeados. La coorde
nada x, y esta en la esquina superior izquierda del rea en que est dibujado el valo, y estar
screen.fillOval(225,130,i5,i5);
screen.fillOval(245,130,15,15);
stos son mtodos f ill (rellenar) en vez de mtodos draw (trazar), por eso crean tres crcu
los negros conectados entre s en un puni al ceniro de Florida, como se ve en la lgura 9.7
Da 9
208
Cmo
Figura 9.7
Figura 9.8
Agregado de un tro de
crculos el arpie!.
I22!2l!ifParencade:
l^gjggffg*^
Medidas de un aito.
270
Esta
Arcos
De todas las operaciones de dibujo, los arcos son los ms complejos de construir. Un arco es
pane de un valo y se implemento en Java como un valo dibujado parcialmente.
Los arcos se dibujan con los mtodos drawArc () y f illArc (), los cuales toman se.s argumemos:
Los primeros cuatro argumentos son los mismos que para un valo y funcionan de la misma
manera.
Pl nuiilo de inicio del arco va de 0 u 359 grados en sentido puesto a las manecillas del
reloj.Kr, un valo circular, 0 grados equivale a un reloj a las 3 en pumo; 90 grados a las 12 en
punto: 180 grados a las 9 en punto y 270 grados a las 6 en punto.
Los grados que cursa un arco van de 0 a 359 grados en sentido contrario a las manecillas del
reloj y de 0 a 359 grados en el sentido de las manecillas del reloj.
La figura 9.S muestra cmo se calculan los ltimos dos argumentos.
-190) .
instruccin dibuja el ve
veo
Figura 9.9
Un arco.
fuentes y color
Da 9
211
>210
.0 Pele>,
9:
screen.drawRoundRect(182,61,43,24,10l8);
int X[] =,{ 10, 234, 253, 261, 344, 336, 295, 259, 205, 211,
10:
11:
195,
12:
13:
, ,,. *
15:
19:
21:
screen.drawArcfax, ay,
23:
12 };
#&:!.
mmm.
22:
37,
screen.fill0val(245,130,15,15);
for (int ax = 50; ax < 150; ax += 10)
20:
24:
10 };
screen.fillDval(235,140,15,15);
screen.fillOval(225,130,15,15);
18:
12,
screen.drawPolygon(poly);
17:
valores x y y
94, 81,
16:
,a. ,. , *
120,
14:
medios crculos.
191,
int y[] = { 12,-15, 25, 71, 209, 278, 310, 274, 18B, 171, 174,
10,
10,
0,
-180);
La figura 9.10 muestra el applet Map que ha sido pintado con los mtodos do dibujo bsic
de Java:
50.120
Figura 9.10
50.130
El applel Map.
50,140
s1*
b*
50,150
50,160
50,170
import java.awt.Graphics;
2:
import
Aunque ningn cartgrafo temera perder su trabajo ante este despliegue de la hechura de un
mapa, el applet combina una muestra de la mayora de las caractersticas de dibujo de que
goza la clase Graphics. Un applet como ste podra ser expandido mediante los objetos Font
l\
y Color, y se podran reorganizar las operaciones de dibujo para mejorar el producto final.
s". P
\-
I'
8:
java.awt.Polygon;
Da 9
La clase Graphic, tambin incluye alguna funcionalidad de corte y pegado que .ncluve la
ventana del Applet:
. Hl mtodo copyArea( 5, copia una regin rectangular de la ventana del apple, en otra
regin de la ventana.
>
Los objetos de laclase java.awt .Font se usan junto con el mtodo drawString() para pro
ducir fuentes diferentes. Los objetos Font representan el nombre, estilo y tamao en puntos
de una fuente. Otra clase, FontMetrics, proporciona mtodos para determinar el tamao de
los caracteres que se van a desplegar con una fuente especificada, la cua! se puede usar para
cosas como formateo y centrado de texto.
El estilo de la fuenlc.
El nombre de la fuente puede ser un nombre especfico de fuente como Arial o Garamond Od
Style, y se usar si la fuente est en el sistema en que se est ejecutando el programa Java.
Tambin hay nombres que pueden ser usados para seleccionar las fuentes integradas de Java:
TimesRoman, Helvtica, Courier, Dialog y Dialoginpui.
Precaucin
brar una familia de fuente especifica usada para representarla. sta es una
mejor opcin ya que podran faltar algunas familias de fuente en todas las
implementecones de Java, por lo que se podra usar la mejor opcin para el
estilo de fuente seleccionada (como serif).
instruccin siguiente:
La instruccin siguiente crea una fuente Dialog de 24 puntos, que es negrita y con itlicas.
Font f = new Font("Dialog",
Font.BOLD +
Font.ITALIC,
24);
\1
Texto y fuentes
Copiado y limpieza
screen.copyArea(8,0,100,188,50,25);
2131
f-i-'.'-i'
4:
PU51^n^old_Paint(G'-aphics screen) {
9:
rics fm =
18:
g,
setFont(f);
11:
12:
,o y dibuja la cadena
13:
14:
16:
screen.dra*StrinB(S) ,, y);
dicha cadena.
charWidth(char)
getHeightl)
V
,
import java.awt.Font;
imoort java.awt.Graphics;
I i/port ]ava.at.FontMetrics;
^"J^^^^r'-v -- '-
215
217
Color
y ColorSpace del paquete j ava. awt para que sus aPPlel!| >'
usar las
SJndo scB. En este sistema un color se describe por la cantidad que contiene d. ojo
esencia completa de color rojo, verde o azul Blanco es 255. 255. bs. la
^ .^
sea
) float.
= newColor(0.807FjlF0F).
Color c2 = newcolor(255,204)102).
le s tres U ,ed tambin puede representar valores sRGB mediante los nume.o, de pa.to
Jal que van de 0 a ^ .0. Java puede representar millones de colores entre los dos
extremos mediante sRGB.
^^?
e^
-
; ^^
ar9umentos hexadeci-
"^ '^^ eS
eS quo
quo esI
esI tr^
color
ol
a sKGB. y
y
actuales
CU-.VO v.s,ed desnlieo aprime ulso de un co.or designado, el disposi.Ko de salida podr:,
=SEHSS==
>les mo
s co,o,,s usan las s,guienlCs variable., Color (con valores sRGB ind.cados en(re pa.nteblack
(0,0,0)
'aso de ese color, puede usar las clases ColorSpace y otras clases en el paquete
blue (0,0,255)
cyan
En ,a mayora de los programas, bastar e, uso integrado de sRGB para definir -os .o,o,w
darkGray (64,64,64)
P,r, conjurar el color del dibujo actual, ya sea con un objeto Color que debe ser creacto pan.
fresen.;,- el co.or o que usted deba usar alguno de los colores estndar dispenses ,a
clase Color.
(0,255,255)
ray (128,128,128)
green
(0,255,0)
lightGray (192,192,192)
magenta
orange
(255,0,255)
(255,200,0)
Pink (255,175,175)
red
(255,0,0)
wnite (255,255,255)
yellow (255,255,0)
Da 9
s de estab,ecer e, coior actual, todas ,as operaciones de d,buJ0 ocurrirn en ese co!or.
El m,odo setBackground<) es
> las coordenadas que se usaron para dibujar lneas, textos y otros elementos
es cb t0r
do paint ()
"
desde un objeto
Pa'a
El objeto screen2D en este ejemplo fue producido a travs de una conversin por cas,. Es d
Todas las operaciones grficas de Java2D deben ser llamadas en un objeto Graphics2D. ste
Da 9
220
Addico
Especificacin de los
Cclico
Figura 9.12
Desplazamientos de
degradados aa'clicos y
cclicos.
y muchas otras caractersticas.
d "*
2D
* -
screen2D.setColcr(Color.black)
Figura 9.13
litis rectngulas con
el mismo
GradientPaint.
Patrones de relleno
LS patrn, s de relleno
patrn c: Ueno ^
Ss22
2
- ^ -d, lo que es un **
,mslnil1or GradlentPaint
GradientPaint(x1Iyi>Colonlx2ly2,color2,;
setPaint()deGraPhics2Dconun
es io mismo que
de
"Z^::Tzrel co]or
ccl,C0.
GradientPaintfx!,yi,colon,X2,y2,colora,true,-
es insertados.
untos en
refieren
eren direcumentc a pu
. de coordenadas en
a JlamIa a, ,n
o un P- * su P^
el objeto
i de
d usuano y
Heren a, espacio
screen2D.setPamt(pat) ;
' \
BasicS
Td
Rectngulos
Los rectngulos se crean mediante las clases Rectan9le2D. Float o fiectan9le2D Double
L^ferenca entre ,OS dos es que uno loma argumentos fioat y eJ olro lc)n):Lgumentas
ente es un ejemplo:
faliltn de unin Je
minto fui"1-
Elipses
E" J;iva2D los bje.os ovales se llaman elipses, y pueden ser creados con la
U instruccin siguiente crea una elipse en .13,25 con un ancho de 22 pixeles y un alto de
Ellipse2D.Float ee = new Ellipse2D.Float(ii3,25,22,40)
redonclcadas.
'
El mtodo moveTof) de
usted qu.s.era
quisiera lnic,ar
iniciar polly
nonI en ?las coordenadas
"" ParU
' Prmer pUn' e" el Plfeono- Si
5,0 "^
t
tendra que usar la instruccin siguiente:
polly.moveTo(5f, 0f);
^rtoE
> se usa ei
nuevo punto. Es
POlly.lineTc(205f, 90f);
polly.lineTo(5,
90f);
y moveTo
St quiere cerrar un polgono, utilice el mtodo closePath( )s in
polly.closePath();
ado por el
m
odo lmeTo()
,
,rque conecta al punto
Pe
Ce'Ta
mtodo
original.
uraT[!
?
uraTrend[l'!" P'?On0
uia Mguiendo
Mguiendo los
los mtodos
mtodos raw() y fin O I-'I ohi.-K, Mn
guia
'
V
enn 5,0,
5,0, 2050
205,0, 20590
205,90, y
y 590
5.90.
Dibujo de objetos
Todos los objetos dibujados usan los mismos mtodos de la clase GrapfUcs2D:
los fiemos y f xll,, para los objetos rellenos. s,oS toman un objeto como argumento
para
obetoSt
J
awStr-9< ) ^ U,n,a tres n-umemos:
objeto St rano para d.bujar y sus coordenadas x. y. Como todas las coordenadas"
Java2D, se deben especificar los nmeros de punto flotante en vez de ser enteros
225
Da 9
Un ejemplo
de dibujo
2D
'
i-I
r
i nrimcns actividades de hoy usted cre un mapa de Ronda siguiendo los meiodos
? n
"c^n disponibles a uuvds de la clase Graphics. lil ,m',x,,,o applc, 4uc va ,
elr ls ulversin modificada de ese mapa, el cual utiliza tcnicas de dibujo 2D.
Pu -sto que todas las clases Java2D son nuevas eon la versin 2 de Java, este applet slo
^Tv con un navegador Web que soporte Java 2. A. momen.o de escnb.r es.a obra
,a herramienta appletviewer incluida con el JDK 1.2 es la nica manera de verlo.
F.I listado 9 5 contiene el applet MaP2D. Es un programa ms largo que muchos en este libro
debido a que 2D requiere muchas instrucciones para completar una operacin de d.bujo.
Listado 9.5. El texto completo de map2d . java.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
fl.lineTo(i9iF,neF)
fl.lineTo(12OF,56F);
fl.lineTo(94F,68F)'
fl.lineTo(81F,49F);
n.lineTo(12F,37F);
fl-closePath();
screen2D.fiii(fl);
// Dibujar valos
screen2D.setColor(C
S:-;;i;:?;
Float(245)130) 15,15) ;
screen2D.fill(e1).
screen2D.fiii(e2),'
screen2D.fill(e3);
importe java.awt.*;
importe java.awt.geom.*;
(Graphics2D)screen;
setBackground(Color.blue);
// Dibujar olas
screen2D.setColor(Color.white);
breve que io
^
PUCde SCr V!iIU
-nbir es,e libro, a
fl.moveTo(10F,12F);
fl.lineTo(234F,15F);
fl.lineTo(253F,25F);
fl.lineTo(261F,71F);
fl.lineTo(344F,209F);
fl.lineTo(336F,278F);
fl.lineTo(295F,310F);
fl.lineTo(259F,274F);
Pnes de dibuJ
fl.lineTo(205F,188F);
fl.lineTo(211F,171F);
fl.lineTo(195F,174F);
lnea
mrodo setStroke,, de
Da 9
co,or verde en 0 0 al
para l0
relleno actual.
=-
se al estado de Florida y
d
Preguntas y respuestas
en negrtlS a la n.i.ad.
la
19;
de un applet. Ya puede
\ \
Semana 2
Da
10
SE-''.
Adicin de imgenes,
animacin y sonido
<">
11
Adicin de i
Da 10
y sonido
234
aliciar el progr.ima
:; l*.
ejemplo previo:
runner.start();
implements Runnable *
vi . 1
"gUrando10 C '(>d<)'"
cosas emre
^
npommtao.
1"'
haber sid
ia instrucci11 sigllieme;
Tnread runner;
Precaucin
Hay un mtodo stop() que podra ser llamado en objetos Thread para
eTecucin
1, ''
PrCeS '^^dades en el ambiente de
ejecucin del programa y puede introducir errores en su operacin que son
235|
Da 10
1236
runner.start();
if (runner 1= nuil)
cesos mltiples.
runner = nuil-
vc
2sr,2S?
repaintf);
cn
try
Thread.sleep(ieee);
Figura 10.1
/ ///</e/ Dln<
screen.setFont(theFot);
en Netscape
Navigator.
u coIqueien
r^^zr
ya que
iroport
java.awt.oraphics;
import java.awt.Font;
import java.til.Date;
.-""4)i
g.
Date
theDate;
10'.
Thread runner;
I!!
13:
14:
if (runner == nuil) {
runner = ne Thread(ttus);
Da 10
V sonido
En esta secc,6n se ve este app.et desde la perspectiva de las panes rea.es de animac.n y mas
tarde manejar las partes que administran los subprocesos.
| destruir nbpm^'^^^
Parama.
rn.as 8 9 definen dos variables de instancia bsicas: theFont y theDate, las cuales con-
A,u,os mtodos start,) y .top() inician y detienen un subproceso:,a mayor pane de.
.S^
Dentro de run () es donde realmente ocurre la animacin. Observe el ciclo w.ile,) dentro
de la
I":, ocurre en e mtodo stop< > de. app.et). Dentro de ese ciclo whil. se construye un
cuadro sencillo de animacin.
, pausa por
.000
crear animaciones.
S:S=H
'
el -b de cadro,
Runnable.
L, 1(nea .0 defme una tercera variable de instancia para esta clase llamada runner de. tipo
Thread, la cual contendr el objeto subproceso para este applel.
Pp>dc,,,.
l d,b.jo y la ,mpra; ,
- *-
239 i
Da 10
240
runner.startf);
0.sot
paint(g);
runner = nuil;
o.
Color.getHSBColorfe, (float)1.0,(float),.0).
^^^
^ ^^ ^ presenta en colores
^^
int i = 0;
parpadea terriblemente
Figura 10.2
try
} caten (InterruptedException e) i
CnlorSwirl nmliaiw
Netscape NnviS"1'"'-
Thread.sleep(200);
if (i == colors.length ) i = 0;
import
java.awt.;
implements Runnable {
9.
,1(J':
Thread runner;
21.30, e, llenarloeo.
color
las Cses
*-
^y:
el proceso se repiie hasta el infinito.
*
, He
. y
es sencilla: sobreponer upcJatel) y quitar la part = donde s _l. P
'
no se necesha limpiar porpue no esta c:o
- P^
com/]ava21/images/booK
lcx(o
update (,
presen, .,
)
Al agregar estas tres
^^^
Nota
La clase Applet tiene dos mtodos que se pueden usar pan, crear un UP| h
. ,.
una d.reccn especfica dentro del programa:
"' M" U"llZiir
D;i 10
232
"s.ed dibuja lo que de.eu ver despicado, llan^ ZZ'^T """ ^ !" ^ "
nuevoarepainto.yassucesivameme.
r
1
Java.
PreCaUCin
Aunque pu
co,!f,0lecoiuaia
y Par
de 'a ejecucin de ^ applet
del da K, "Cnio poner programas intei etiv
w
Pintado y repintado
" dt
olio programa.
requieren start n t /
'
''
,-
mciodo repaintO.
' prorama
Ai
War en sus
^ de-una .rea
solicitudes a repaint,) se
)a, acunas podran ser
llamada
repaint O
.iempo de proce-
Da 10
Dibujo de imgenes
^desplegar una imagen a su .amao real, llame a, m.odo drawlnage,, con cua.ro argusc localiza el archivo de la clase principal del upplcl.
La coordenada y
"rsumt
imaaeU,
getimage(ge
tDocumentBase(), "i.ages/book.g.r
Las coordenadas x, y que se utilizan con drawlnage (, son similares a las coordenadas x, y
para desplegar un rectngulo. El punto representa la esquina superior izquierda de la nnagcn.
Usted puede desplegar una imagen a un tamao diferente mediante seis argumen.os ex.ra:
El objelo lmage a desplegar
La coordenada x
La coordenada y
Ancho
Alto
Los argumentos ancho y alto describen el ancho y alto, en pixeles. que la miasen debera de
ocupar al desplegarse. Si no son del tamao real, la imagen ser escalada parque quepa en
el ancho y aho modificados. Es.o no ahera la imagen, por lo que us.ed puede usar varias lla
madas a drawlmage() para desplegar un objeto im3ge en varios .amaos clileremes.
Hay dos mtodos de la clase Inrnge que son tiles cuando se despliega una imagen en 01ro
V..
Da 10
|248
Crear animacin con imgenes es lo mismo que con fuentes, colores y otros objetos amma-
1 U^
y usar otro ^
Succin de los poblanas de parpadeo. La nica diferencia es que usted uene una p,la de
imgenes para hojear entre s, en vez de un conjunto de dibujos.
L-, mejor fon,,:, de mostrar rimo animar imgenes es trabajar a travs de un ejemplo, lil
S> proyecto es el ms grande que usted haya emprendido y est amphamen.e de, Hado.
El a^e, Nek es una buena demostracin de la programacin de subprocesos en applets,
manejo de imgenes y animacin.
El ejemplo Neko
1 as imgenes con que usted trabaja en el apple. Neko les parecern familiares a muchos
Neko que proviene de la palabra japonesa que significa gato, es un programa de Mcuosh ,
esho or Kenji Gotoh que desarrolla un gato pequeo animado. Neko juega con el punten,
Neko se mover
pre el mismo valor- 50 Las
que
inj
int x.
int y = 50;
""7
Para este ejemplo, crear animacin basada en los grficos originales de Neka ste es. basa
Java se ejecutar desde el lado izquierdo de la ventana del applet, se deiend a a
Antes de empe ar a escribir un cdigo Java para construir una animacin, usted debena tener
consto .odas I: s imgenes que forman la animacin en s. Para es,:, vers.on de N.ko. M
nueve de ellas (l original tiene 36). como se muestra e la t.gi.ra 10.4.
Figura 10.4
i'S <lcl
ijtph'l Neko.
La idea bsica".-n el app.e, NeKo es tomar la serie de imgenes y desplegarlas de una en una
para crear la i\\ ariencia de movimiento.
a desplegar.
. sera ch'f 9
:;:z: *
r ri
'^
programa:
Da 10
i;
// intercambiar imgenes
if (currentlmg = = nekoPics[0])
currentlmg
nekoPics[i j ;
repaint();
pause(150);
2r:
La ltima
i
1/1 pixeles
i
10
cachi ve/, empujndola
-*
pendiente de hacer
if (currentlmg = nuil)
screen.drawlmage(currentlmg, x, y, this);
'd obieT^
9('' C'
S, no o hiciera
ZllZ ""I
'-" conl-
) co
Precaucin
<-t*"no
UU por lo que si usted est escribiendo este applet para permanecer con
Jf'M() aT
rempla2ar con 9etSi"< ) q^ modifica la llamada a
lo siguiente:
try {
Thr .ad.sleep(tirae)i
} caten (InterruptedException e) { )
La segunda actividad que Neko emprende es detenerse y bostezar. Esta accin es un cuadro
uk I o Ce la ;,m,,1;lcl()ll (]lie sc ,c|,jk. po,. , i|hc ^
^ ^ ^
Da 10
i 252
Todo ,o que tiene que suceder para desp.egar cada una de estas imgenes es .o guien*:
repaint();
Pause(250);
;
1
currentlmg = nekoPicsm
'epaintO;
. Llamara repaint().
pause(250);
currentlmg = nekoPics[2);
repaint();
6
//
currentlmg = nekoPics[3);
en ~
epaintO;
mclod
repaint();
pause(500)
nekoRunfx, si2e().width +
Paso 4: finalice
siguientes comprenden el mtodo,
void nekoScratch(int numTimes) <
pause('i5S);
repaint();
setBackgrourid(Color.vvhite);
currentlmg = nekoPics[5'j;
pause(150);
de 4:
rascarse
cuatro
En ese
appiei hay mucho cdigo
go que miz.
i
:
Den.ro de. mtodo run, de, applet, se llama a, mtodo r.ekoScratch,, con argumento
//
0Cada
rrin
fondo
~una*cuja
Cuadro
"e labianc-si
animacin .endrj
blanca alrededor.
v ,'
r una
anisenci,,:.:. Observ
a ani
Obs f . n T^ diftremes
Parpadco en este applei, ya que el tamao d
'""
""''^ ^ redwir la ranIidad de
problema se minimiza Por lo cl
""T" * "' ^ ^ dbujo son Ian W"^"* W
veces
nekoScratch(4);
m
m
bostezar
253
nekoSleep(5);
3:
repaint();
4:
6:
7:
8:
9:
10:
11:
12:
implements Runnable {
Image
currentlmg;
Thread
int
runner;
x;
int y = 58;
go^t! = ( Ti.Kti...
14:
15:
// intercambiar imgenes
" (currentlmg == nekoPicsfei)
currentlmg = nekoPicsri
pt0r
CrrtI
16:
17:
awake.gif"
18:
19:
nekoRUn(x, size(,.width
13:
20:
pause(580);
21:
22:
nekoscratch(int numTimes) {
r (int i = numTimes; i I . ..
currentlmg = nekoPics[4]'
repaintf);
' ''
23:
24:
25:
26:
27:
28:
Pause(i58);
};
pause(150);
currentlmg = nekoPicsfsi-
repaint();
pause(150);
runner.start ()
29:
38:
31:
32:
33:
34:
nekosie.p(int numTimes) /
runner = nuil;
currentlmg = nekopicsrei-
repaint();
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
58:
51:
Pause(258);
currentlmg = nekoPicsm-
repaintf);
l ''
pause(258);
//
detenerse y hacer una pausa
currentlmg = nekoPics[2);
repaint();
try {
pause(ieee);
//
bostezar
currentlmg = nekoPics[3];
repaint();
pause(1808);
//
rascarse cuatro veces
nekoScratch(4);
//
"turnos
Thread.sleep(time);
J caten (InterruptedException e)
Dia 10
256
L.STADO 10I4^0NTINUAON_
77 (currentlng
!= nuil)
(crre
101:
lT
rfrawimaoelcurrentlnig,
screen.drawImage(c
12
t, 1" SiemPrC S 'a mejr SOlUC"- S SU aPPli:t sufre de Panadeo, tmte de sobreponer
update() y d.bujar pnmero slo porciones de la pantalla; eso podra resolver su problema. El
x,
y,
doble bufer es menos eficiente que el uso normal de espacio, y tambin toma ms memoria y
this);
e paco, por lo que en algunos casos no podra ser la solucin ptima. Sin embargo, para eliminar
cas, por completo el parpadeo de la animacin, el doble bfer funciona excepcionalmeme bien.
' 1
Un,aPKPleI qUC UtICe e' dble bfCr' USled necesila dos c- gn fuera de
pan alia para dibujar en ella y un contexto grfico para dicha imagen. Juntas simulan el efecto
de I..superficie de d.bujo del applet: el contexto grfico (una instancia de Graphics) para
#
m
de pantalla y el contexto grfico necesitan ser almacenados en variables de instancia para que
usted las pueda pasar al mtodo paint (). Declare las siguientes variables de instancia en su
definicin de clase:
Image offscreenlmage;
resultado.
Graphics offsereen;
Segundo, durante la inicializacin del applet, usted crear un objeto Image y otro Graphics
y los as.gnar a estas variables. (Usted tiene que esperar hasta la iniciacin para saber
Figura 10.5
/ ap>lei
que tan grandes sern.) El m,odo createlmage(, le d:. una instancia de I.age, eon la que
puede entonces enviar el mtodo getGraphics () para obtener un nuevo contexto Grapracs
&
offscreenlmage = createlmage(si2e().width
size().height);
offsereen = offscreenlmage.getGraphicsf);
Ahora, siempre que tenga que dibujar la pantalla (regularmente con el mtodo paint ()). en
vez de d.bujar los grficos de paint, hay que dibujar los grficos fuera de pantalla. Por ejem
Doble bfer
**
plo, para dibujar una imagen llamada bug en la posicin 10,10, use esta lnea:
offscreen.drawlmagefbug, ib, ib, this);
U^ ui rea no visible an
m c, lklWc
Por supuesto, las ms de las veces deber sobreponer el mtodo update() para que no se
la P:'M"
screen.drawlmagefoffscreenlmage, 0, 0, this);
, a uperncie c
lili
Da 10
259 i
dirrme"'
Agg
bfer"fuera de pantalla.
contexto grfico
cuando se iniciahee su applet.
g
en y
Cree una imagen
y un
un c
4. 'ZL su metodo p.int< >. dibuje c, bfer fue do panta,,:, para .a pa,a..a rea..
Una nota acerca del borrado de objetos
de Graphics
*
offscreenlmg;
Graphics offsereen;
::;;rr
offsereen.setColor(Color.black)
offsereen.filiHectfO, 0, ,m \'m).
offsereen. setColor(Color.*vhite)
El applet Checkers
offsereen.setColor(Color.red)-
offscreen.dxsposeO ;
// dibujar ficha
offsereen.fillOval(xPos, 5, 90
g0)
SCreen-drawIma9e(offscreenlms'0 ;
del applet.
Pantana, ,,ena ^
offsereen.dispose();
tnis).
csn
**
Da 10
47:
48:
49:
java.awi.
2:
3:
Thread
A:
5:r
6:
7:
8:
runner;
51:
Graphics
offscreen.fili0val(p
53:
54:
this);
55:
57:
offscreen.dispose(i;
58:
59:
offscreen;
// dibujar ficha
offscreen.setColor(Color.red)
56:
int xPos = 5;
int xMove =4;
Image offscreenlmg;
?r?rTfiUfiect(1B0
50:
52:
iraport
1:
offscreen.fiiiRect(0)0,ie0)1e0)
offscreen.setColorfColor.white
9:
10:
11:
^:eS;i;reateImage(
12:
offscreen
;th,
siZe(>
offscreenlmg.ge
13:
Figura 10.6
14:
15:
16:
17:
18:
El applei Checkera.
runner.start();
19:
20:
21:
22:
23:
24:
25:
26:
Sr;Vhi.r.d - Thread.currentThre.dO;
27:
28:
29:
xPos
30:
+=
xMove;
31:
xMove *= -1;
32:
repaint();
33:
try
34:
Thread.sleep(100);
} caten (InterruptedException e) { }
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
,
46:
//
dibujar fondo
offscreen.setolor(Color.black);
Da 10
Si ios mtodos
objeto Audiociip.
un
ciado, durante su
cambia a o^r
do. Si un usuano de
mismo lugar que el applct:
play(getCodeBase(),
"zap.au');
Escriba
us;lo
o, un programa d.beri r
AudioClip bgSound;
AudioClip beep;
Thread runner;
AudioCli . clip -
; 1
new
AUdioClipCaudio/ariba.waV);
nuil;
Da 10
I 264
Una tcnica de animacin que usted ahora puede usar es el doble tfer, el cual virtualmcme
elimina el parpadeo en su animacin, a riesgo de perder eficiencia en la animacin y veloci
Listado
dad. Mediante imgenes y contextos de grficos, usted puede crear un bfer fuera de pantalla
27:
28:
29:
30:
31:
32:
33:
34:
35:
Usted aprendi a usar sonidos, que se pueden incluir en sus applels en cualquier momento
que lo necesite, en momentos especficos, o como son.dos de fondo que se puedan repetir al
ejecutarse el applet. Tambin aprendi a localizar, cargar y reproducir sonidos a travs de los
36:
37:
38:
if (beep != n"11)
39:
40:
41:
Preguntas y respuestas
P En el programa Neko, usted pone el proceso de car-a de la maKen denlro del
beep. playO!
mtodo nit(). Me parece que podra tomarle i Java mucho tiempo cargar todas
liabra una diferencia de pausas, l'or qu no en ese caso poner la .rjii'i de im-
42:
43:
44:
10);
45
46
47
la imagen. De esta manera, Java no tiene que conservar imgenes enormes en memoria
si el programa slo va a usar una sola pieza pequea. En todo caso, le basiar to*et.
una referencia de esos dalos y recuperarlos posteriormente cuando se necesiten." '*-'
P Compil y ejecut el applet Neko. Algo muy raro est pasando; la animacin inicia
en la mitad y pierde cuadros. Es como si slo se hubieran cargado algunas im
"
^ ^ ^ ^ as ,neas 32 y
inmediatamente, su applet slo podra estar animando pantallas en blanco mientras las im
genes todava se esln cargando. Dependiendo de cunio tarde en cargar esas imgenes,
podra parecer que su applel inicia en la miad. pierde cuadros o no funciona del lodo.
Hay tres soluciones posibles a este problema. La primera es tener el ciclo de animacin
(esto es, empezar nuevamente desde el inicio cuando se detiene). Posihlemente, las
imgenes se cargarn y la animacin funcionar correctamente. La segunda solucin, y
!il!
ltorademcu*ios.comostartO,stop0.paintO.
^.^^
no es muy buena, es lomarse una siesla antes de iniciar la animacin, para suspender
mientras las imgenes se cardan. La tercera, la mejor solucin, es usar observadores
Semana 2
Da
11
Construccin de
interfaces de usuario
mu faz grfica de usuario y hagan cosas c,uc puedan controlar con el r.,,rtll P,, el
lugar de trabajo el derecho de apuntar y hacer clic est en primer .ugar, por encima
E.staS amenidades de software son gratas para el usuario pero no para el programador en muchos lenguajes. Escribir programas de manejo de ventanas puede tener
Hoy usted tendr que usar el conjunto de herramientas para crear una interfaz de
usuano para un applet. Utilizar las tcnicas de Java 1.0.2, debido a que permanece
Da 10 '
t:
'
en
el lisudo I0.3 despliega un. .magen de M.llaol F Hn e, p
en e
,lll1CT,l, el ltimo de los Wl
Wli.es US
Figura 10.3
f/
Fillmore.
^ ^^ UmJos ^
import java.awt.Graphics;
1:
2:
3:
4:
5:
6:
7:
8:
import
java.awt.lmage;
9:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
La lnea 5 del applet asocia la variable *hig con la clase I.age. No ,iene que usar la ins.ruc-
con new para crear un objeto aqu, ya que recibe un ohje.o Image desde el mtodo
10:
23
int
int iWidth
iHeight = = *hi9"9etWdthl!,his)whig.getHe^ght(this),
int xPos = 10;
nan susTl'^4 "^ 96tWdth( J y 9etHei9ht' > d< '<>dos de |a clase Inage y a.muc,-
escaLde
Cm T**" "^ ^ *
l pdeme R.lmo. En la lnea 20. es.a variable se incremen.a pan, que |0 feo
Da 11
^^
Swngl,
El AWT
algo
y re
usuano
. de. usuano
ma5
TL
zio dd awt - -
.- -,,.
Un ob c
import
i!
java.awt.-;
>ed puede
un conten
contenedor
!la de Wrio aa un
41
ai
II
"8
3
O
u
Je
o
sZ
'r.
"3
ir 5
o
r:
^z
u
o
cu
S-
5o <->
i;
<2
c =
o. .h=
cj
81
"i:
"
VI
3"
?
.^
(O
O *^
'-*
3 "O
."
'C
'1
rtj
c .9
ai
Ql
QJ
"
QJ
Vi
j K
_j
x.
QJ
JO
3
Ol
CT "
!_
gj
,/>
~O
10
H
"" X)
" fl)
E 8 =
S "> 2
o "o
.2 O O -S
' c ^
*"
"O
.c
^i
a 3
ai
ni
c X)
i-
S o "2 o.
C "O
S c -o
2
Q.
r3
-^
X
_
O "2
T3
c3
S5
'2
s. e
."2
a)
2" *-J
2, c
x)
la
y. UJ
"u JZ p-
?3
O"
u
&>-
c '2
ui
n
'i 111
a -g s S
C o " ^
g -2. a r
J,
O
i-s S"
ra
rj
"l
12
o 1
aj
5J
r*
"o.
a. al
lil
3
,N
.^
<u
.5
-*
cj"
T3
b
o
>c
aj
'-
o I
r-
-^
o
V)
4
6
+^
Q.
at)
t-
^O
<
Q.
Ul
g.
o-
<J
-^
"O
"3
M
.2 "2 2-
^2
i.
T3
XJ
sa
i "8
S "
T3
3 a.
- >flj
"S CJS -a
"o
o.
o.
10
'-I "
XI
s If I
8 -F
" o
c C
2
c
..
i"
3
,2
! 5 ;
? s :e
-rl
rt
"O
>
V
L.
^ I-I 3
II
T3
0
<t)
L.
H
-H
a.
ro
Q.
Cl
^
;ear
T yOlT^
'Uttn'
USIddelPUdC
S -"-'
").
tr.ng)
obtener
la e.ique.a
,ex,oCOnfiuw
con el mtodo
getLabeK
n".
setFo();
setFont(lf);
setLayout(layout);
12:
add(lefty);
13:
add(center);
14:
add(righty);
15:
16:
17:
Pn.ebe el funciona-niemo
1:
<APPLET>:
import java.awt.1
2:
3:
SB widtn=i75>
4:
<.ppl.t
5:
6:
7:
.Hardllnerr se coloca en el
8:
9:
10:
11:
12:
Figura 11.2
El applet Labels.
SE3E
1.3:
321
14:
15:
BUcdlnfl hcartl
16:
add(rewind);
add(play);
add(ff);
add(stop);
add(eat);
17:
HTML:
width=300>
1J ., a
"
olones.
^ do
l,"
3PP ' dC 50 PXd" dC "nch0 C" V" dc 30. " neo botones estarn
275|
Escriba
Figura 11.3
1:
El tip/ilei VCR.
2:
publie class
4:
Checkbox
5:
Checkbox
6:
Checkbox
7:
Las casillas de
8:
9:
aU. So- P
Checkbox
Checkbox
10:
12:
c2.setState(true);
add(c3);
15:
add(c4);
16:
add(c5);
17:
18:
add(c2);
14:
ro) ca.fi//<M
add(d);
13:
</ /iV
11:
Figura 11.4
HTML,
import java.awt.*;
3:
Casillas de verificacin
La figura 11.5 muestra la salida de e.s.e nppiet, cuyo funcionamiento puede ser verificado con la
Figura 11.5
El npplcl
-lalx
HtM
r im>5im d
r i> i,^
Para organizar varias casillas de verificacin den.ro de un grupo, de modo que s,0 una pucda
El objeto CheckboxGroup se mantiene al tamo de >odas lus casillas de verificacin del eruno.
Usted usa este objeto como un afmenlo adicional ;ll construcior Checkbox.
Construccin de nterfaces de
Da 11
276
12:
add(pi);
13:
add(P2);
14:
add(P3);
add(p4);
16:
add(P5);
17:
18:
Precaucin
Figura 11.6
Elapplet PickAPole.
^.
^^ ^ ^ ^ una casllhl dc
^ verificacin Se,ec^dl
" ""
Listas de seleccin
Checkt*
sus:
http://www.mcp.com/personal/
illllili
Construccin de interfaces de
12-
kte?
Figura 11.7
sPan.addltem("Julio Iglesias');
add(span);
''
14.' }
E1 primer paso para crear una lista de seleccin es crear un objeo Choic. pangue contenga
I:, Lo. como se.muestra en la insiruccin siguiente:
Choice gender = new ChoiceO;
rin0> Cn el
=200 width=i50>
Figura 11.8
twuiiii'i'j IB
El applet
SelectASpaniard.
gender.addltem("Female") ;
Trecaucin
,,,.
lNl.Il,H.li,.i,,ii
Ia - - Posicin
;-r
import
java.awt.*;
6:
7:
8:
9:
10:
Campos de texto
span.addltemCXavier Cugaf');
),
dase TextField
el texto que no
U" CmponenIe
. a panir de la
construc.ores ,guiemcs:
Da 11
Escriba
para app,ets
1:
2:
3:
4:
La ins,rucc,n gueme crea un campo de ,cxto vaco con un espacio sulle,en,e para 30 carac-
6:
7:
8:
9:
IB:
11:
Se hubiera po lido miliar \, insirucein gueme si usted hubiera proporcionado el texto ini
17:
cial "Puddin N.
18':
add(address);
add(passwordLabel);
password.setEchoCharacter( )
add(password);
19:
20:
add(addressLabel);
15:
16:
X e >:; .ase TextFiel,. (En verdones subsecuentes de, lenguaje se debe usar
ll
dbl
com.llas
dobles.
comp;
diseo
add(site);
14:
");
12:
13:
teres:
5:
Figura 11.9
&<'PpleiOutOfSite.
campo,
lexio indicado.
Construccin de nterfaces de
! *
lrBi
reas de texto
el componente.
. TextAreaU.t, int) crea un rea de x,o vaca con .a camidadI indicada de hncas
(prinicr averno) y c. ancho de caracas (sequo argu.ncuo).
. Terrea (Strina) eren un rea de texto que connene la cadena ,nd,cad, de ancho y
alto no especificados.
i,
1:
2:
3:
4:
import
java.awt.
5:
6:
7:
8:
9:
16:
11:
12:
13:
14:
15:
16:
17:
18:
me the truth,\n"
TextArea lt;
Listas desplazables
283 i
Da 11
I 284
tjque[a
i siguiente:
Figura 11.11
indicada de elementos
Horario seleccionados.
remezo
para loH,
" 8el'"(i#It)
tnMJiin ^().C-temS() ,amb,n tiene e, m,s
remplazo para
los piogramas
Java 2: getltemCount
add(String).)
m,smo
.addl-..<euild.nst.rn ,-,
^
zable con siete . lementos.
Listad. >J_2JL
1: import jsva.awt.*;
2:
aza
3:
4:
5:
6:
7:
8:
9:
^ b- * despla.n.ento puede
c void init() {
im.addItem("Hamlef);
m.addItem("Claudius
);
,m.addItem("Gertrude"
,m.addItem("Polonius");
10:
,m.addItem("Horatio-);
11:
,m.addItem("Laertes");
12
im.addItem("Ophelia");
13
dd(hm);
K*Jo comn las harn.s de despla.a.nic,,,,, w m,m pccinculo los vata, mnunos y
Al
v'.
El appleiSlider.
Lienzos
" USan Planamente como un espacio en una interfaz
. E1 v:1lor mnimo de la barra de despcenlo.
f2:
de diseo.
ventana
1: import java.awt.';
'
2:
6:
7:
8:
9:
10:
4-
7:
8:
11:
5:
setLayout(gl);
9:
setLayout(gl);
add(can);
11:
12:
13:
14:
15:
16:
17:
18:
19:
barras de dcsplazam.enlo:
ac.ua. . U baua d,
desplaZamien,o
20:
21:
22:
23:
24:
g.drawLine(x+10,y,x+2,y);
g.drawLine(x,y-10,x,y-2);
g.drawLine(x,y+i0jX!y+2);
para app,ets
width=10C>
<3pplet code-crosshair.class"
Resumen
</applet>
El AWT
Figura 11.13
El applet Crosshair.
contenedor.
m
m
un,
Canvas.
- -* de estos
.Y, Hnea 4 crea un objeto Gri-L.yout que ser, crecido co.no c. adulador de
nara la clase en la lnea 8
Preguntas y respuestas
p^
.0.2,
S12e ()
im >d'
r
evUar .os avisos de desaprobacin cuando comp.lc
desaguadores de ^1^^
el cual hara poib.e ^^
te navegadores han
'"" Vereiones dd
libro-Microso/i
Mvmrox
r:lt*l ,,,,
=,
de Java.
Semana 2
Da
12
Organizacin de los
componentes en una
interfaz de usuario
Rara poder dar algn tipo de forma a una merfaz dlscld
ld
CQn
Da 12
292
_22f2fffldelos.componentes en
void lnit()
setLayout(lm);
Como aprendi ayer, una interfaz grfica de usuario diseada con el ANVT es algo muy flu-
#
una interfaz de usuario
do Redfmensionar una ventana puede causar estragos en su interfaz, a, moverse los componenies a posiciones que no tena consideradas.
Esi-. fluidez es por necesidad. Java se implcmenta en muchas plataformas distintas y hay
.Ufemias sutiles en la manen, en que cada piaufonna despea botones. ,,:,m,s ,1, dosp.:.,a-
los
iniiMili' y similares.
Con lenguajes de programacin como Visual Basic de Microsoft, una posicin de! compo-
Z"Je"una ventana esta definida precisamente por sus coordenadas x, y. Alguna, herra-
n.icn.as de desarrollo de Java penniten un control similar sohre un;, inicrla* a ,,-s de sus
propias clases de manejo de ventanas.
::
f
-pierdo o derecho d^
owLayout. RIGHT debena ser e, J
d7
del7constructor, como en lay instruccin
slSu
agregados a un contenedor.
Tfmtpd
1:
2:
L,s inscciones sieuien.es representan el punto de inicio para un applct que crea un admin rador de diseo y usa setLayout (), por lo que controla la d.spos.c.on de todos los com
ponentes que se agregarn a la ventana del applet:
public class Starter extends java.applet.Applet {
FiowLayout ln = new FiowLayout();.
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Butto
n cb =. new
ntw Butto
Butt0
-S
(>c-9la:
= MW Butt0"("Evidence-
f = new ButtonCFBiti
yout lm
add(a);
add(b);
'
2#
Da 12
i-
16:
"
add(d);
17:
add(e);
18:
add(f);
19:
do ;,,
28:
21:
ut(10,3);
se utiliz la
componed,
componed, coT^^ofadS^;,"1' eSPaC ^'^^ ** horijMn
horijMntal
vertical de 8 pixeles:
<applet cod.-Alph.b.t.cl.
''
</applet>
Figura 12.1
dis*
En :w,tl MP,t. el
^nL,
i^,
BUttcncaroI=newButto
Utton
newBuno
er);
Bul]""^"""onCMik.-?;
Button bobby = new Button(Bobby-,;
publie void init() {
setUyout(family};
add(marcia);
add(carol);
add(greg);
add(jan);
add(alice);
add(peter);
add(cindy);
(Maro
espacio
Listado
12.2. continuacin
los
La figura 12 2 muestra este applet en una pgina con
component)
</applet>
ws^CEE
Figura 12.2
Nuc\ e bolones ornan i-
-.ados e un diseo de
udreiilii de .5 x J.
diama .
u.
tj^M
addC'North", quitButton);
i
2:
import java.awt.*-
3:
4:
El administrador BorderLayout
5:
6:
8:
9:
10:
11:
Figura 12.3
'-.i'i.S-'Xi:^''-*!'-'/''[: -';':':
Oii<iiii:.iekin i e los
componentes 1. ::j<> el
diseo de bon es.
'*
12:
13:
14:
,^t
15:
16:
17:
*'i
18:
19:
7:-
add("Center
center);
<aPPlet
pane.add(dialogue);
</applet>
e|
, en- el
,.
' . E1 pane, se Lena con componentes antes de ser coloco en un con.cncdor mas grande
. El panel tiene su propio administrador de diseo.
Los pane,S se can con una simple amada al constructor a h Case Pane, como Se musira en el ejemplo siguiente:
heredan . 1 co
llamado >ane:
setLayout(cc)
add Strinn
^u
dor o componente que es el mitv'' ntain&r)- bl ^undo
argumento especilcy el c-omone-
#
interte Ce sunrio
13:
14;
runner.start();
15i
16:
17:
18:
puons
19:
runner
20:
21:
22:
23:
24:
25:
26:
27:
28:
31:
32:
"
-auei[
Divorce.")-
setLayout(card);
30:
29:
.
= nuil;
''
.'
add<"Card - + 1/iabfi]);
33:
34:
do ce:
35:
36:
37:
card.show(this, "Card
38:
current++;
39:
i-urrentj,
current)-
current
= 0;
repaint();
42:
try
43:
iri por
if (current > 5)
40:
41:
,-,
Thread.sleep(5000);
44:
} catch (InterruptedException e) {
45:
46:
47:
2:
. 3:
4:
5:
6:
7:
8:
9:
10:
12:
i iport
java.awt.*;
current = 0;
Thread
runner;
Une, 7 -Se crea el arrezo lab para que contenga las seis etique.as
Din 12
ios
L dd c,o *
"ne"
,.c Se coto.. I
p d .PPle, <** como c,r.
setLayoutfgridbag?;
Gri^agConstraints() ;
variable current.
constraints.gridwidth'= t
constraints.gridheight = -
Figura 12.4
Un naipe desplegado
en un diseo de mullnaipe.
,.,
, ,eTOr un ,,,
maneras.
iIUX| ,r llamada G
Grldagconstraints se dcHnen
ccUIr posicin, dimensiones, alineacin
;cslncLncsy cada componente, dcnnc
En w rom- n,s .enera,, ,a creacin de una cuadrcula de bolsa .mpl.ca los ^ >
"
entes:
ponen,e puede
^Xc^s I
PrPiaS CUadnCUlaS
c UMN
* V (como en el botn OK en el
Da 12
Figura 12.5
Un diseo de
cuadrcula de bolsa.
gbc.gridx = gx;
gbc.gridy = gy;
9bcgridwidth = gw;
Qbc.gridheight = gh;
gbc.weightx = wx;
Figura 12.6
El diseo de cuadrcu
gbc. weighty = wy
la de bolsa de la figu
ra 12.5, con una
cuadrcula impuesta.
^ ^ ffl ,,
constraints.fill = GriOBagConstraints.BOTH;
Figura 12.7
El diseo de cui drcu-
' * pci"i
nadas de celda.
^ ^^ cn la cuad,alla y
^ ^^ ^ marcadores
^ ^^ y definen dara.
// etiqueta de nombre
buildConstraintsfconstraints, 0, 0 i
Button labeli = new Buttoncla:
%ba9"nStrantSabl
i :-
100 1B(U.
100-100)-
,.
Da 12
307 i
Ahora auenda .os deulte Cules son los va.ores para .as resecciones que usted ha msertado en el mtodo buildConstraintsO?
mmmmm
^^Z^^
Los siguientes dos argumentos enteros son gridwidth y gridheight. No son anchos ni
nen.e cubre slo una celda, por lo que los valores para ambos son 1.
Los dos ltimos argumenlos enteros son para weightx v weiflhty. que se mitan para
Este botn esta en 1. esquina superior izquierda, por .o que su grid* y gridy dos primeros
exactas aqu, o asegurar que todo es. alineado De , "" PreCUparSe de ias ^porciones
c ,d
COmaceldas
* rcnS'Olieii
ColuranM^
L ""correcto,
Sliei yy Co
encimadas,
3S ^ luJr
y ese tipo
Figura 12.8
Diseo de cuadrcula
de bolsa, primer paso.
ambos valores a 100. Los pesos se vern en el paso tres.
ame '!'
I ''!'.>'
Password'
V .-."
.'.
OK
>
#
buildConstraints(constraints,
;:=::;;:
ce.da. Los valores de we m* weQ*" 1 "^ ' "'^ ^ Sd0 cslab'^ P"r o,i
sumar 100.
Da 12
308
porciones, se suman todos los valores en una direccin para que cada valor
individual est en proporcin al total. Para que este proceso sea ms sencillo
reS' (4
(4 P
Qu celdas tienen valores y cules tienen 0? Las celdas que ocupan varios renglones u
columnas deberan ser siempre 0 en la direccin en que se extienden. As, todo es simple
mente cuestin de elegir la celda que tendr un valor, y entonces las otras celdas en ese
rengln o columna debern ser 8.
J""Constraints(const.-aints 1'
La figura
buildConstraintsico,
>): //nombre
buildCon;traints(constraints, i, 8,
8 1.,
1 1,
1 100,
100 1).!
1)! //* nombre
buildConstraintsfconstraints, 0,
1, 1, 1,
100- Hl
//contrasena
Usted ten, Ir que cambiar los dos ltimos argumentos en cada llamada a buildConstraints.
Empiece on la direccin x (las proporciones de las columnas), que es el penltimo argumen
'
'
Proporciones correctas
Figura 12.9
Diseo de cuadrcula
de bolsa, segundo
paso.
to en la li.'ta anterior.
Si observa la figura 12.6 (la imagen del panel con la cuadrcula sobrepuesta), ver que la .segun
da columr 1 es mucho ms grande que la primera. Si fuera a elegir porcentajes tericos para esas
columnas, podra decir que la primera es 10 por ciento y la segunda es 90 por ciento. (Esto es
una esti.iv cin; y es todo lo que necesita hacer tambin.) Con estas dos supos.ciones, usted las
puede asi, .nar a las celdas. No necesita asignar algn valor a la celda con eP botn OK. porque
la celda .)' upa ambas columnas y all los porcentaje-, no luiwu.narn. Agregelos , las punierados celda', la etiqueta del nombre y la del campo de texto del nombre:
buildCoistraints(constr.aints, 0,
0, 1,
1.
//nombre
10,
budCo,straintsiconstraints, 1, 0, 1, 1, 90.
; Qu pas 1 con los valores de las dos celdas restantes, la etiqueta de contrasea y el campo de
texto? Pu to que las proporciones de las columnas han sido previamente establecidas por la
enqueta 1 e nombre y de campo, usted no tiene que volver a establecerlas aqu. Dle tanto a
estas cel as, como a la primera del boln OK, los valores 8:
1,1,1,1,0-
ena funcionar a ,a
//texto nombre
Observe aqu que un valor 0 no significa que la celda tenga un ancho de 0. Estos valores
son pro| orciones, no valores de pixel. Un 0 simplemente significa que la proporcin ha s.do
estiblec da a algo distimo; todo-lo que 0 dice es "organcelo para que llene el espacio".
Figura 12.10
Diseo de cuadrcula
d^ bolsa, casi lisia.
fiasswonii:,!
Da 12'
Lo que se .* olvidando son .as restricciones que organi,an los componentes dentro de la .
celda Hay dos de ellas: f ill y anchor.
CENTEfi
r-
f5
ir
componn
=.
pequeo.
cin lorizontal.
S 00,,,.
Nota
las
Por lo comn, mientras usted trabaja con sus propios programas y diseos de cuadrcula de
^,^1 diseo resullanle pide que se piense un poco en l.
d7
IT
Ahora ya be .o que hace. Para ,a verstn fina, de este apote, usted podra el.minar esa lnea
y aadir valores f ill para cada componente independiente s, as, lo desea.
ces es,
i noJ tener un diseo
casi linnles,
pfife
e'rl
co po e
co
po
Listado 12.5. El
1: import java.awt.*;
GridBa<Constraints.NORTH
GridBagConstraints.SOUTH
Gr.dBaiconstraints.NORTHEAST
GridBagConstramts.SOUTHWEST
GridBa Constraints.EAST
GridBagConstraints.WEST
GridBaConstraints.SOUTHEAST
GridBagConstraints.NORTHWEST
"
Da 12
'
312
8:
9:
gbc.gridx
gx;
gbc.gridy
ay;
gbc.gridWidth
10:
gbc.weightx
12:
14:
La sigui
wx;
XtCOd""
gbc.weighty = wy;
13:
gw;
gbc.gridheight = gh;
11:
* width-24t>
15:
16:
c^rrzrr'*dbi
17:
18:
setLayout(gridbag);
19:
20:
de nombre
21:
23:
25:
28:
29:
add(labeli);
ipadx agrega espacio a cualquier lado del componente, e ipady lo agreda arriba y abajo.
31:
32:
34:
35:
36:
,/ etiqueta de contrasea
, ,, e, )!
,lUUdConstraints(cons tr
41:
42:
43:
44:
47:
48:
49:
add(label2);
50:
51 :
52:
53:
54:
55:
Para incluir un inset para su diseo, tiene que sobreponer el mtodo insetsO para Java
1.0.2, o el mtodo getlnsets (, para Java 2. Estos mtodos hacen la misma cosa
ints).
gridbag.setconstraints(tfpass,
Dentro de los mtodos get Insets(, o insets (,. cree un nuevo objeto Insets, donde el
ons rucor de h, clase Jnsets tome cuatro v:,,o,cs enteros que representan los n.r.cnc,
upeor. quinto, mfenor y derecho de. pane,. El mtodo insets () deber entonces
add(tfpass);
botn OK
Los mrgenes determinan el espacio entre las orillas de un panel y sus componentes.
tfpass.etEchoCh.r.et.r{'>,
un nuevo administrador de
2T
;?e
e ipadyentre
en loscomponentes
dises de cuad*uia
bois^
* "'-"
p-
determ
nar ,a cantead
de espacio
en un panel.deLos
mrgenes,
sin emba,
pane, '^"P3ra
a^
45:
46:
S^;
Z Jo
38:
4B:
Mrgenes
Edd(tfname);
37:
39:
>
30:
33:
applcl p;l,, la
metian^^^
** un
mencin, V^TS
ipadx e ipady. T
Estas controlan elUad"CUla
rellena *
(el b1Sa'
espacioSadicional
-,|redlorde
24:
27:
1^
Relleno de celdas
22:
26:
<
2, 2, i, e. 2e>;
de
mpara'"T"
^ y^el inferior,
^ nfrmaci"
agriary dercho.
mrgenesL;,a unfigura
diseo
de cuadrT
adneula: 10
e, superior
y 30 para elP
izquierdo
12.11 muestra el resultado.
T3
vs
'-
o
C
S -).=
vi
ir
tj
>u
^J
-3
-^
x:
S| e
"=
5 -S ? ? =
i 5 t- 1
=
a | 5 -2 5
"a ,-: S S 3
C "3
r
**
8.
.a
-1
<v -a
-J-.
V-
^(
./:
r-
<r.
1>
cr
J <
.=
r3
a-
"2
-^
"S i 2
j=
'i x
:j
id
JD
'-
(y
3
CU
-j
?*-
">
o
-o
2
J=
S ,2 "
o
fc
;=
lili
s
t-
cu
D
a.
>.
e
O
<"
p.
S 1 -B
u
?3
tea
O
U
en
1 '
cu
3
C
3 'c
<-
te -S
0.
0 -
H 5" =: -o"
c " ~
S 3
So
a 1 g.
lis
11 1
i i i
" -i a
4j
>
fD
k-
D
en
cu
o.
>
>
Q.
Semana 2
Da
13
Respuesta a la entrada
del usuario en un applet
!-
reipj,u a
*C^
applcI
Da 13
1318
usuario en un applet
Manejo de eventos
Alf o de lo que aprendi al crear applets por primera vez es que, cada vez que se ejecuta el
programa hay fuerzas que trabajan "tras bambalinas". El sistema de manejo de ventanas de
,. ,ouseUp()
Java llama automticamente a mtodos como paint (), init () y start () cada vez que los
necesita, sin que usted intervenga.
Al igual que en la programacin de applets, el manejo de los eventos involucra mtodos que
son llamados en forma automtica cada vez que el usuario realiza uno de esos eventos.
Tipos de eventos
Un evento se genera en respuesta a casi todo lo que un usuario puede hacer durante el ciclo
de vida de un programa de Java. Cada movimiento del ratn, clic o tecla, genera un evento.
En sus programas usted no tiene que tratar con todos los eventos que pudieran ocurrir. En vez
de eso, maneja aquellos eventos a los cuales desea que e! programa responda, ignorando los
en cualquier parle de |a
dems. Por ejiMiiplo. si el usuario hace clic cu cualquier lugar cu la ventana <U'I appU'l. o piv
si'na una (cela, usted espera que el programa acte en respuesta a ese evento.
tos son algunos de los eventos que se pueden manejar en sus propios programas:
Ches del raan. Ratn abajo (botn presionado), ratn arriba (botn suelto) y clic del
ratn (oprimir y soltar en el mismo sitio).
Movimientos del ratn. Entradas o salidas del puntero del ratn a un componente de la
interfaz, o arrastre del ratn (movimientos del puntero que ocurren con el boln pre
sionado).
Tedas presionadas. Tecla presionada, tecla liberada y tecla digitada (presionada y libe
rada).
0
m
El mtodo handleEvent()
E manejo de eventos es el rea donde se han dado los cambios ms importantes entre Java
I J.2 y su presente versin 2. Los eventos se generan y fluyen a travs del sistema casi en la
rr.isma forma, independientemente de la versin del lenguaje que est usando al crear el prog ama. La diferencia estriba en la forma de recibir y procesar los eventos.
L n Java 1.0.2, lodos los eventos que ocurren durante el ciclo de existencia de su programa
f uyen a travs del mismo y son manejados por un mtodo llamado handleEvent(). Este
r ttodo est definido en la clase Component, heredada de java.applet.Applet.
Da 13
320
usuario en un applet
int
x,
y)
ejemplo: Spots
>
return
Figura 13.1
true;
f (tpplet Spots
Nota
import java.awt.Event,'
.ibu/ar, yn
s, applci. lisie inunU se parece al mouseDownl
, eoor.e-
Dio 13
Nota
A continuacin, agregue el mtodo init (), el cual hace una sola cosa: establecer el color de
i * actu
forma, cada vez que dibuje un pumo
fondo a blanco:
publie void init()
setBackground(Color.white);
Aqu usted establece el color de fondo en init (), en vez de en paint (), como lo haba
)os
hecho en ejemplos pasados, porque necesita establecer el color de fondo slo una vez. Puesto
que cada.vez que se aade un nuevo punto hay que llamar a paint (), establecer el fondo en
el mtodo paint () lo retrasara innecesariamente. Ponerlo en init () es una idea mucho
mejor.
jddspot(x.y);
-eturn
elsf
s"dol3' nos"
Escriba
import java.awt.Graphics-
true;
*Port java.a^t.Color
port java.awt.Event;
return false;
Cuando c :urre un clic del ratn, el mtodo mouseDown() verifica si hay menos de 10 puntos.
Si es as, lama al mtodo addspot() (que pronto escribir) y devuelve un valor true (el
evento rain abajo fue interceptado y manejado). En caso contrario, slo imprime un mensaje
de error y devuelve un valor false. Qu hace addspot()? Agrega las coordenadas del
void adespot(int x,
int y)
xspets[currspots]
x;
yspitslcurrspots]
y;
cun spots++;
rep; int();
addspot(x,y);
return true;
else {
<
Da 13
325|
Listado
ic boolean iiouseDown(Event
21:
evt
f
#
22:
23:
24:
25:
26:
27:
28:
xspots[currspots]
x;
yspots[currspots]
y;
Click count: 1
Click count: 2
Click count: 3
currspots++;
29:
repaint();
30:
31:
32:
33:
g.setColor(Color.blue);
34:
35:
g.fillOval(xspots[i]
36:
- 10, yspots[i]
10,
20,
20)5
37:
38:
39:
Usted pi ede cargar este applet en una pgina con el siguiente HTML:
doS ,po,
ratn
a, fc ,.
Doble clic
Qu s cede si en el evento de ratn que le interesa hay ms de un clic? 6O qu tul s, usted
Ir ,n clic doble o un clic uiple? La dase Event de Java le proporciona una variable
p, nio importan* que debe tener presente cuando busque clics dobles y triples, es que
1 DcwnO es llamado una vez por cada Ce de. botn. Considere e, ejemplo .gueme
**
Da 13
327 i
import java.awt.Graphics;
mport java.awt.Color-
import java.awt.Event'
import java.awt.Point;
PUb
anchor;
,,
ter"ini6n
currentpoint;
currline . ,; }
setBackground(Color.White);
public
bcolean m
' El arreg.0 ends man.iene ,os punIOS finaies de ,ns mlsmas ]fneas
funcionan cnio.
Figura 13.2
*>
Dibujo de lneas.
1grmVf.Mi,.AJKmtlSS3
i
de lneas (para
m""ener
en el arreglo).
m?
de 1* '" -r la si
siguien.e
son
para
para
evt
int
Da 13
I 328
Respuesta a /a entran* ^ i
return true;
return false;
-" He *,, cl 111|O(|O.painto^T^ " "nim-c'ln *> 'a "'"- en proceso, dblcljl
Mientras se arrastra el ratn para dibujar una lnea, el applet anima esa lnea. Al arrastrar
el ratn en el dibujo, las nuevas lneas se mueven con l desde el punto de anclaje hasta el
puntero del ratn. Cada vez que movemos el ratn, el evento mouseDragl) connene el
Junto actual, as que use este mtodo para rastrear ese punto (y pan volver a d.bujar cada
'TiVV1
movimiento, haciendo que la lnea se "anime"). Tenga en cuenta que si excede el numero
mximo de lneas, ya no podr hacer este trabajo. Aqu presentamos el mtodo mouseDrag()
para lodos esos trabajos:
l lneS-
true;
La .mea nueva no se agregar a los arreglos de las lneas viejas, has.a que se suelte el botn
del ratn \qu se muestra mouseUp (), con el cual se asegura que no haya exccd.do el max.-
else
Escriba
true;
return false;
1:
2:
En el meto lo addline() se actualizan los arreglos de los puntos de inicio y f.nal, y se dibuja
de nuevo e applet para que tome en cuenta a la lnea nueva:
void add.ine(int x,int y)
star- s[currline]
ends currline]
= new Point(x.y);
curr. ine++;
= anchorr
3:
4:
5:
6:
7:
8:
9:
10:
11:
iava.awt.Color:
port java.awt.Event-
import java.awt.Point;
^^
Z7 " '
1S l"'C 7 "^ Al <*' tpoint
r
Da 13
59:
Listado 13.2
12:
13:
#
#
14:
setBackground(Color.white);
ends[i].y);
63:
64:
16:
17:
19:
20:
if (currentpoint 1= nuil)
65:
g.drawLine(anchor.x,anchor.y
currentpoint.x,currentpoint.y,;
66:
67:
68:
return true;
21:
23:
24:
62:
15:
16:
:.
60:
61:
22:
_
// nmero de lineas
return false;
25:
26:
27:
28:
29:
30:
31:
return
32:
33:
35:
36:
37:
38:
39:
^^
true;
repaintO;
40:
return
41:
42:
else
43:
true;
return false;
44:
45:
46:
49:
currentpoint = nuil;
anchor = nuil;
51:
repaintO;
52:
54:
55:
56:
57:
COn eVentos
C'
. Poden con-
starts[currline] = anchor;
48:
53:
^r ;:r:tz:t teela
teela sese genera
gene un eventde
47:
50:
34:
addline(x,y);
enfoque a un
quit.requestFocusf)
'"
Puede asignar el enfoque a una ventana de apple, lla.ando a, mtodo request.ocus () de,
331
apple,
^^IlUSBTNDAR
Tecla inicio
;i fin
(char)key;
a la derecha
Tecla F]
.printlnCCharacter:
Tecla F2
+ (char)key)
Tecla F3
Tecla F4
Tecla F5
Tecla F6
Tecla F7
Tecla F8
Tecla F9
Teclas predeterminadas
Tecla FIO
Tecla Fl
Tecla F! 2
caracteres
if
(key == Event.UP) {
//
Lo
L C ,c los va,ores contenidos en estas variables de Case son enteros. lambin puede un
liz
l
ar la instruccin switch para probarlo
Da 13
Figura 13.3.
El applcl Keys.
este a
Pfband applets
s menos complicado que los c,ue utiliz ames, ya que slo nene ,rcs
java.awt.Graphics;
import
java.awt.Event;
import
java.awt.Font;
import
java.awt.Color;
case Event.DOWN:
curry
curry
char
currkey;
int
currx;
int
curry;
+=
5-
break;
case Event.UP:
.=
5;
break;
case Event.lEFT:
currx
-=
5;
break;
de6 puntos) y es.ab.ecer I, posicin mica, de. carcter (e, centro de la pantalla, menos
algunos puntos para ajustado ligeramente hacia arriba y a la derecha).
case Event.filGHT:
currx
+=
5;
break;
default:
currkey = (char)key;
repaintf);
return true;
currx = (size().width / 2) 8;
curry = (size().height / 2) 16;
setBackground(Color.white);
.imiiiivininitn ictbc
i i'ih ni:i instruccin en el nieiotio nii \) "- " >-
la
para que la ventana del applet recibiera entrada desde el tee .do. pod
enfocar la ventana haciendo clic en ella. Esto funcona todav.a en las ult.mas
Dh-13
336
2:
3:
4:
5:
6:
import
Java.awt.Graphi.es;
import
java.awt.Event;
import
java.awt.Font;
import
java.awt.Color;
48:
7:
8:
char currkey;
9:
int
currx;
10:
int
curry;
11:
12:
14:
15:
requestFocusO;
18:
21:
22:
switch
23:
case
(key)
break;
25:
case
Event.UP:
27:
curry
28:
break;
29:
case
eurrx
31:
break;
case
-= 5;
Event.RIGHT:
currx += 5;
33:
break;
34:
35:
-= 5;
Event.LEFT:
30:
32:
Event.DOWN:
curry += 5;
24:
26:
-16;
setFont(new Font("Helvtica",Font.B0LD,36));
17:
20:
(sizep .height / 2)
// predeterminado
setBackground(Color.white);
16:
19:
13:
default:
currkey =
36:
(char)key;
37:
38:
39:
repaint();
48:
return
true;
41:
42:
43:
44:
(currkey
!= 0)
Da 13
Java asignan internamente las acciones derecha y central a las teclas mod.ficadons Meta y
Control (Ctrl), respectivamente. Probando las teclas modificadoras, puede avenguar que botn
se us y ejecutar un comportamiento para esos botones, distinto al que usar.a para
el botn izquierdo. Para probar cada caso, use una instruccin if como sta:
public boolean mouseDown(Event evt, int x, int y) {
if
(evt.metaDownO)
// maneja un clic derecho
el&e if (evt.controlDownO)
// maneja un clic central
Observe que esta asignacin desde los botones del ratn a los modificadores del teclado se da
en forma automtica, no tiene que trabajar mucho para estar seguro de que sus apotos o aph-
cioncs funcionan en sistemas diferentes con d.stintos tipos de ratn. Como los ches ,^u,e,
oo derecho asignan los eventos a .as teclas modificadoras usted puede uuhzar as tecla
nidificado. reales, en sistemas con ratn de menos botones, para ^-ar exacta
e los
mismos resultados. As, por ejemplo en Windows, mantener pres.onada Mu* a Comrol
hacer clic con el ratn; o bien en el sistema Macintosh, mantener prestada la ted. Control
equivale a h; cer clic en el botn central de un ratn con tres botones; por su parte, s, en una
Mac mantien presionada la tecla Command (manzanita) y hace clic con el ratn. eS .gual a
hacer clic co > el botn derecho en un ratn de dos o tres botones.
Ten-a prese, te, adems, que usar ratones con botones diferentes o teclas modificadoras
podr no se, obvio de inmed.ato si su applet o aplicacin corren en un s.stema con
reTngir su nterfaz a un solo botn de. ratn, o dar informacin o ayuda que exphque e, uso
de su progra na.
-"'-case-Eyent.MOUSE DOWN:
Los mtodo: predeterminados que ha aprendido hoy para el manejo de eventos bs.cos en los
applets. son llamados por un mtodo genrico manejador de eventos denominado
.,;
': .
return true;
case Event.MOUSE_DRAG-
' '
>'
: System.out.printlnCMouseDrao>.:;,-,,.; evt.x + -,- + evt
,.
return true;
default:
.
'
pntlnCMouse
,-.
return false;
.
. .,:
"
.
J
Puede probar los siguientes eventos de teclado-
handleEver t (,. Cuando usted usa este mtodo, el AWT trata genr.camente con os e*o>
que ocurren entre los componentes de la aplicacin y los eventos basados en la, entradas de.
usuario.
fes -uHlo.. que aprendi hoy. Para manejar eventos dis.in.os a .os aqu, menaonados (como
ve os par. las barras de desplazamiento u otros elementos de la imerfaz de usuano), cam
biar elcom amiento del manejo de un evento predeterminado, o crear y pasar sus prop.os
ratn:
(igua, que en e.
Da 13
340
Respuesta a la entrada
. Event .MOUSEJJP se genera al liberar el botn del ratn (igual que en el mtodo
mouseUpO).
. Event .MOUSE_DRAG se genera al mover el ratn con el boln presionado (igual que en
el mtodo mouseDragO).
,
dc VMc
. Event. MOUSE_EXIT se genera cuando el ratn sale del applel. Tambin puede usar el
mtodo mouseExit ().
Sea en
que mediante ]. tecIa Tab. ..Qb
Por
" Pane de un dp,aniic
que le interesa y, si se^nocs el even.o. llame a super. handleEvent () para que la supeclase que define handleEvent () pueda procesar cosas. He aqu un ejemplo:
publie boolean handleEvent(Event evt) {
if
(evt. id == Event.M0USE_D0WN)
// procesa el ratn abajo
return
true;
else
return super.handleEvent(evt);
Asimi.mo observe que handleEvent () devuelve un valor booleano. igual que los mtodos
indivi. uales para eventos individuales. Aqu el valor devuelto es particularmente importante:
si usial pasa el manejo del even.o a otro mtodo, tiene que devolver alse (e! mtodo que
llame tambin devuelve true o f alse). Si maneja el evento en el cuerpo de este mtodo,
devuc Ive true; si pasa el evento a una superclase, ese mtodo devolver true o f alse; usted
no tif ne que devolverlo personalmente.
Las tcnicas que ha aprendido hasta aqu para el manejo de eventos, se han enfocado en las
nl facciones del usuario (hacer clic con el ratn, oprimir teclas, etctera,. Tambin hay eventos
mr. manejar otros eventos especficos que tienen lugar en componentes como botones, arcas de
c'v o v otros elementos de la mterfaz. Por ejemplo, los botones usan eventos de acc.n que son
dis .'irados al presionarlos. Usted no tiene que preocuparse por el ratn abajo o el ratn arriba, o
del -mimar dnde tuvo lugar la interaccin del raln; el componente lo maneja todo.
IV
i
<0 I
ID
a> <a
g
o
u
a
w
o -H
JJ
O11
a>
o
(0
m
^~
o *H
10
0)
IA
t.
-O
3
cr r-H
o> III
9 ch ?5
O c .
ai
5
c
a.
S*5
H
-a
=
c
*c
M
?i
51 l
o '-o
=
"i
'3
3 2 5
o ^
####+# #####
.5
"o
c
3
U
>
>
-n
^
C
O
-7.
5.
r3
O
O
C
w
"c
+-
t_
-^ 'ro
a
i)
3
o
<u
c
OJ
V)
"d.
";
V5
1>
>
-o
-3
i: 2. o-
w
a
-y.
^
2
u go
ra
I-
O.
5
"
8 1 s
a)
-=
H-
vi
Ji
2a-
<u | -3
3
y
= 5
t
<
5 2 '=
4J
=
5
II I |J
13
c
o. "o
-o --
c
*-
3 2 ..
5
g 3 5 3
2
2 ?
o (
5 H
*-*
=>
v-
*j
c. 3
i II!
y;
3 u- 5 5
_Ju(nu-J
Da 13
Para los evemos seleccionar l.sta y dese.eccionar lista, no es fcil obtener^mtodos^ que se
puedan sobreponer para su uso. Para esos eventos tiene que uul.zar handleEvent(,, de la
siguiente forma:
(evt.id == Event.LIST_SELECT)
ID de evento
SCROLL_ABS0LUTE
Lo que representa
SCROLL_LINE OOWN
handleSelect(Event);
SCROLL_LINE_UP
SCROLL_PAGE_OOIVN
SCROLL_PAGE_UP
^ircrior. cm- llamada pcrmi.c que los ros even.os pasen sin contranemp
al mtodo original handleEvent ().
r de
fondo
Figura 13.4
Fstas l.stas generan res tipos diferentes de eventos: seleccionar o defeccionar un etanento
^vidual de una Hsta da como altado un evento de seleccon o cancc.ac.on d. hsta. >
doble clie en uno de los elementos da como resultado un evento de acc.on.
S, le -usu, manipular los even.os, us.ed va a adorar las barras de desplaxamiemo. Ha, lo o
r p
t
3)
-1
O.
a.
ca
m
>
CO
01
o
-
O
c
XJ
-i
01
3
O
>i
ra
_j
U.
r-i
01
ce
T3
c
o
L~
-l-
T3
^-
jO
ii
/-i
t_
+^
c
o
3
O
3
o
Oi
O)
l_
13
CO
co
o
ra
o
n
* **
01
3
r-t
;_
+*
+-*
c
o
ii
CO
a>
3
ca
II
01
c
+-<
o
CO
c
o
cu
0)
r\
H
c
CQ
II
01
c
+j
x:
CO
T>
*^
ti
+-
Resumen
1:
import
2:
3:
4:
java.awt.
5:
6:
7:
8:
reuTcB
!
in
9:
add(redButton);
12:
13:
add(blueButton);
14:
15:
add(greenButton);
16:
17:
add(whiteButton);
18:
19:
add(blackButton);
20:
21:
Object arg) {
24:
changeColor((Button)evt.target);
25:
return
26:
true;
27:
30:
31:
void changeColor(Button b) {
d,.
if h redButton) setBackground(Color.reci),
32:
33:
34:
35:
36
37
b - areenButton) setBackground(Color.green);
setBackground(Color.black);
repaint();
38
39
Preguntas y respuestas
P
para
ejec"te un '"dtod>
-;
;
funcin-En 's
"*
^^ e ! T" ^ *"
28:
29:
11:
23:
"*
ion-
1C:
22:
Semana 2
Da 14
Desarrollo de interfaces
de usuario avanzadas
con el AWT
* awt <ki *
apren-
aun. , , ,,
Mens.
. tanfa M
Da 14
35,
^
Tn :"ewFrame<"My Cool Window)
r:::;:s;r:,- * - - -
- - -
in.setLayout(new BorderLayo
Corth, !!ne B?
in.atdCNorth-
n..ddccnt.r-,
r^pT
pendientes de Java.
B. U-- -
"CXiJa" muy
n b>en con una, podran serlamail0
muy graildes
Ei
Aerando J^^S^^Z
C h venlana' dd
S8Uenle crea
tarna.0, botones de
win.pack();
i
lenido de esa a dicacion.
win.showf);
win.add(ok);
win.add(cancel);
s de.
ios
Da 14
con
e(
3551
20:
21:
22:
23:
else
24:
} else
29:
is window. Nos
return false;
30:
31:
y"
return true;
28:
^ J^ ^ Jc
window.hde();
26:
27:
Window-),
(window.isShowing/))
25:
errores y seguridad".
.isShow
window. showM;
Escriba
1:
FI6URA 14.1
2:
3:
4:
que produce.
5:
import java.awt.;
6:
7:
8:
setLayout(new BorderLayout())
10:
11:
12:
13:
Escriba
1:
2:
3:
4:
5:
BaseFramel(String title, {
super(title);
9:
Labei-
14:
15:
import java.awt.*;
Insets getlnsets() {
18:
Fratne window;
Button open,
16:
17:
19:
cise;
6:
7:
8:
9:
11:
12:
13:
14:
add(open);
height=200 width=200>
add(close);
window.resiie(150,i58);
15:
16:
17:
18:
19:
""'
Da 14
J^rrollode nterfaces de
Objetos de dilogo
-culado a. marco
OlalogiFrnme, String
ho 1
modo ms convencional.
i venlana de) i
Cuadros de dilogo
Figura 14.2
cin cspccJica. etctera.
cierren.)
cionar
Da 14
1358
359 i
s:
TextDialog di;
6:
En el mtodo del constructor BaseFrame2 puede crear el cuadro de dilogo (una instancia
de la nueva clase TextDialog que crear en un momento ms), asignarlo a la vanable de
nsemcia di y rcdimcnsionarlo; el nuevo rcdimcnsionamicnio se muestra en las dos lincas
9:
10:
siguientes del cdigo. An no querr mostrarlo porque slo debe aparecer cuando haga che
12:
13:
14:
dl.resize(i5Q,i58);
15:
Cree ahora el botn Set Text, el cual tendr un funcionamiento semejante al de los otros
botones, y lo agregar al BorderLayout en la posicin "South" (que lo coloca directamente
debajo de la etiqueta).
21:
Insets insets() {
22:
Despus .le haber agregado el TextDialog y un bouSn Scc Tcxi i la clase BaseFrame2. nece
sitar agregar el siguiente mtodo manejador de eventos:
publie boolean action(Event evt, Object arg) {
(evt.target instanceof Button)
dl.show();
}
17:
16:
19:
b);
return
16:
20:
if
(BaseFra.,e2)p,renf
11:
add("South",
BaaeFrae2 theFrame;
i 7:
'8:
true;
else
return false;
23:
24:
25:
26:
27:
(label ==
hide();
28:
29:
"0K")
30:
31:
return true;
32:
} else
33:
Al hacer clic en cualquier botn del marco, este mtodo despliega el objeto di del
34:
35:
return false;
}
ste es el f.nul del comprtamelo que debe agregar a la ventana de aparicin sbiia para crear
iraport
java.awt.*;
2:
TextField
tf;
ame2. Ob
cons^
?me- *ms *
lba" al co'r de la
* 8 y 10 dci iisIado '4.3. La
Da 14
361
I--I rosto tlcl c..sl.m-l,.r del TextDinlo simplemente cslal.kvc U. ,<" li.ll:. Jd '-: "
campo de texto y un botn en un diseo de borde. El mtodo getlnsets () agrega algunos
mrgenes y el mtodo' action(), que maneja la accin del botn OK del dialogo. El mtodo
action() hace dos cosas: oculta el dilogo en la lnea 28 y lo retira, y en la lnea 29 cambia
el valor de la etiqueta del marco ancestro y lo convierte en el nuevo valor del texto.
Tantas clases para un simple applet! Las diversas ventanas y las clases de eventos asociados
hacen complicado al applet. Aunque, en este punto, debe estar tranquilo de cmo cada parte
de un applet liene sus propios componentes y acciones, y por la forma en que se ajustan todas
sus parles.
Los d>logos slo se pueden adjuntar a los marcos. Para crear un dilogo, .tiene que pasar una
instancia de la cas, Frame a uno de los mtodos constructores del dilogo. Esto implica que
no puede crear cuadios de dilogo que estn adjuntos a los applets. Como los applets no
enen marcos explcitos, usted no le puede dar un argumento de narco a la clase Dialog. S.n
embargo recurriendo a una trampa de cdigo puede acceder al objeto frame que cont.enc ese
applet (normalmente, el navegador o la ventana misma del visor del applets) y usarlo como V
el
Este cdio uiilba el mtodo getParent () definido para todos los componentes del AWT. l-l
mtodo g'tParent () devuelve el objeto que contiene este objeto. Por lo lamo, el ohje.o
nrchiro
ancestro (dentro de todas las aplicaciones del AWT) t.ene que ser un marco. Los applets se
comportan del mismo modo. Llamando repetidamente a getParent(). estar en posibilidad
de tener a.xeso a una instancia de Frame. ste es el cdigo que puede poner dentro del
applet:
while (!
anchorpoint = (
En la primera lnea de este cdigo, usted crea una variable local llamada anchorpoint para
que con., nga el futuro marco para este applel. El objeto asignado a anchorpoint puede ser
de much; s clases, por lo tanto declare su tipo como Obj ect.
Las dos Ineas siguientes del cdigo son un ciclo while que llama a getParent () en cada
objeio dit .-reme de la cadena hasta llegar a un objeto Frame. Observe aqu que, para que el
mtodo g -tParent) funcione, y ya que este mtodo est definido solamente en los objetos
f-
nmbe'd'el ^^ ^
"
Eventos de ventanas
que lo he.cdan de Component, tiene que convertir por cas. el valor de anchorpomt a
Componer t cada vez.
Despus c , h salida del ciclo, el objeto contenido en I;, variable anchorpoint ser una insuman
de h di* Frame (o una de sus subclases). Entonces, podr crear un objeto Dialog adjunto a ese
marco ye ivertir anchorpoint una vez ms para est.tr seguro de que tiene un objeto Frame:
TextDia.og di = new TextDialog((Frame)anchorpoint,
En :er Texf,
true);
Da 14
1362
363 i
Tabla 14.1.
Eventos de ventanas.
Cundo se presenta
WINDOWJJESTROY
WINDOW_EXPOSE
al frente.
WINDOW_ICONIFY
WINDOW_DEIC0NIFY
WINDOW_M0VED
disable 0 ;
habilitarlo de nuevo):
Elementos de men
Mens
Slo nos queda hablar de un elemento de la interfaz de usuario en el AWT: los mens
Una barra de mens es una coleccin de mens. Un men, a su vez, contiene una coleccin de
elementos, los cuales pueden tener nombres y, algunas veces, mtodos abreviados de teclado
opcionales. El AWT proporciona clases para todos estos elementos de men, entre ellas
MenuBar, Men y Menultem.
no puede crear barras de mens en los applets (pero si ese applel tiene una ventana indepen
diente, la ventana puede tener una barra de mens).
Para crear una barra de mens en una ventana especfica, debe crear una nueva instancia de la
clase MenuBar:
Para establecer esta barra de mens como el men predeterminado para la ventana, utilice el
mtodo setMenuBar() (definido en la clase Frarae), de la siguiente forma:
window.setMenuBar(mbar);
limibin puede aadir mens individuales (Archivo, Kdiiur. ele.) i la hami de mens, cren
dolos y agregndolos con add(). El argumenio para el constructor Men, es el nombre del
men lal como deber aparecer en la barra de mens.
Men myMenu =
La clase CheckboxMe
new Menu("File");
mbar.add(myMenu);
lar:
Da 14
1364
rrss
myMenu.add(coords);
llc pin agregar un separador al men (una lnea que se usa para separar grupos de
Rnalmen.c. P
myMenu.add(msep);
(item);
item.csable();
Eventos
de menu
men
venio: uc
. hecho de seleccionar un elemento de men con el ratn, o con un mtodc, abrev,a o desde
I Sado. ucncra un evento de accin. Puede manejar ese evento a .raves de, mundo
action(). como lo ha estado haciendo durante los ltimos dos d,as.
Creacin de aplicaciones
AWT independientes
L-acin de Java 1.0.2.
u.i,ar de la misma
Da 14
1366
win.hideO;
win.destroyO;
System.exit(0);
1 diseo de/applet
Como una oportunidad para darle otra utilidad al material de das anicriorcs, presentamos un
ejemplo de applet que nos muestra la creacin del diseo, los paneles anidados, la creacin de
la interfaz y el manejo de los eventos.
La figura 14.3 muestra el applet que usted crear en este ejemplo. El applet ColorTest le
permite tomar colores de los espacios de color sRGB y HSB. los cuales describen los colores
basados c. el contenido de rojo, verde y azul, o los valores de tono, saturacin y brillante/.
respectivamente.
Figura 14.3
Eluplcl Color
Test.
El applet ColorTest tiene tres parles principales: un cuadro de color en el lado izquierdo y
dos grupos de campos de texto en el derecho. El primer grupo indica los valores sRGB; el
segundo los HSB. Si cambia cualquiera de los valores en cualquiera de los cuadros de texto,
actualizar el cuadro de color con el color nuevo, con los mismos valores del otro grupo de
cuadros de texto.
ColorControls, que hereda de Panel. Esta clase se crea para representar un grupo de
tres campos de texto y para manejar las acciones desde ellos. Se crean dos instancias
de esta clase, una para los valores de sRGB y otra para los de HSB, y se agregan al
z^
applet.
Por su complejidad, y porque puede crear confusiones, trabaje en este ejemplo paso a paso.
Da 14
swatch;
Ahora puede avanzar a. mtodo init (), donde tiene lugar toda la iniciacin bsica y el
diseo del applet. Para inicializar el applet siga estos tres pasos:
, Gree el diseo de las partes grandes del applet. Aunque aqu funcionara un diseo de
' flujo es mejor crear una cuadrcula con una fila y tres columnas.
2. Cree e inicialice los tres componentes de este applet: un lienzo para el cuadro de color
con el AWT
369 I
heredarla de Panel;
1 Import java.awt.*; .,,-.'...
**
El paso 2 es la creacin de los componentes, primero el lienzo. Tiene una variable de instan
*-
swatch.setBackground(Color.black);
Tambin necesita crear aqu dos instancias de los paneles ColorControls inexis.cn.es hasta
ColorTest applet;
^ZZo. Pues* qul todava no ha creado ,. Case, usted no sabe cmo se .ra el eons-
<
U"
T.tFi.
El paso 3 es agregar los tres componentes ai panel del appleu en esta forma:
add(swatch);
add(RGBcontrols);
add(HSBcontrols);
M.n.ras trabaja en el diseo, agregue ios mrgenes para el apple. 00 puntos a lo largo de
todos los bordes):
]- y, Uce hasta ah? En este punto usted debe tener tres variables de instancia, un mtodo
init () con dos constructores incompletos y un mtodo getlnsetsO en su clase
CoTo^est. Contine la creacn de. d,seo de. subpane, en .a Case ColorControls, para
que pueda llenar estos constructores y terminar el d.seno.
constructor.
lrUctor de dicha clase. En ese caso, coloque algunos constructores vacos, desPu,> podra
llenar los detalles.
''
entos de)
ColorControls(ColorTest parent
'
Da 14
1370
1 i
Inicie esle constructor estableciendo primero el valor de parent a la variable de instancia
applet:
applet
parent;
constructores:
a estos
A continuacin, cree el diseo de este panel. Tambin puede usar un diseo de cuadrcula
para estos subpaneles, como lo hizo para el panel del applet, pero esta vez la cuadrcula lendr tres filas (una para cada uno de los pares de campos de texto y etiquetas) y dos columnas
(una para las etiquetas y otra para los campos). Tambin debe definir un espacio de 10 puntos
entre los componentes de la cuadrcula:
setLayout(new GridLayout(3,2,10,10));
= new TextField("0");
^^^ontrois para
Manejo de eventos
Agregue estos campos y las etiquetas apropiadas al panel, medanle los tres parmetros
restantes del constructor, como texto para las eiiqueias:
add(new Label(H,
'"-alizar
apropiadas:
tfieldi
Ahora, ya puede crear y aadir los componentes al pane!. Primero debe crear los objetos
campo <lc lexlo (inicializados con la cadena "0") y asignarlos a las variables de inslaiuia
Label.RIGHT));
add(tfieldi);
add(new Label(12,
Label.RIGHT));
add(tfield2);
add(new Label(13,
Label.RIGHT));
add(tfield3);
-*
Insets getlnsets()
10,
0i 0);
j Ya casi termina! Ahora tiene colocado el 98 por ciento de la estructura bsica y est listo para
seguir, pero le falta un paso: regresar a ColorTest y arreglar los constructores vacos para el
.update(this)-
return true;
En el mtodo action (i u
El constructor que acaba de crear para ColorControls tiene cuatro argumentos: el objeto
ColorTest y ires diquelas (cadenas). Recuerde cuando cre el meuxlo init () para ColorTest.
Aareg dos marcadores de posicin para crear nuevos objeios de ColorControls. Ahora
cambie esos marcadores de posicin por las versiones correctas. Asegrese de agregar
los cuatro argumentos que el constructor necesita para trabajar: el objelo ColorTest y
disPonib)es
d
aPP'et'
de ,cxro.
"acer ,oda
"ue Pueda
Da 14
con el AWT
Ahora viene la parte difcil: hacer la actualizacin basndose *n los nuevos valores de
cualquier campo de texto que haya cambiado. Para este paso, necesita definir el mtodo
update () en la clase ColorTest. Este mtodo toma un solo argumento: la instancia
Colorcontrols que contiene el valor que cambi. (El armenio !o toma de los mtodos de
evento en el objeto Colorcontrols.)
y actualizar el lado HSB del nwi p" "'""" ^^^()'Necesila crear un nuevo objeto Color
puede crear un nuevo obipm mi/,~
Mota
,
i
Recuerde que los mtodos pueden tener I mismo nombre, pero eferentes
firmas y definiciones. Debido a que este uadate () tiene un solo argumento
El mtodo update () tiene la responsabilidad de actualizar todos los paneles de! app!ei..Ba.ra
saber qu panel actualizar, necesita saber cul es el que cambi. Es,o lo puede avenguar
probando si el argumento que recibi del panel es el mismo de los subpaneles que guardo en
las variables de instancia RGBcontrols y HSBcontrols:
void update(Colorcontrols controlPanel)
if (controlPanel RGBcontrols) {
II..
else
Esta prueba es el corazn del mtodo update(). Empiece con el primer so, se ha camb.ado un nmero en los campos de texto RGB. Ahora, basndose en esos nuevos valores de
RGB tiene que -enerar un nuevo objeto Color y actualizar los valores en el panel HSB. I a...
rt
..horrar* alan de" escritura de cdigos, puede crear algunas variables lcale, para contener
-- -
,|,uos valores bsicos. En particular, los valores de los campas de texto son cadenas cuyos
v Les puede obtener utilizando el mtodo getText () definido en los objetos TextField
del objeto Colorcontrols. Como la mayor parte del tiempo habr de considerar esos valores
ceno enteros en este mtodo, puede obtener los valores de estas cadenas, convenirlos a
enteros y fardarlos en las variables locales (valuel, value2, value3). He aqu el cdigo
que se i-.icar.j;ir de este trabajo (se ve ms complicado de lo que es):
int valuel = lnte0er.parseInt(controlPanel.tfieldi.getText());
n lilil = lnteger.parseInt(controlPanel.tfield2.getText<));
P.doS y re3!enJo | ,2 ,
HSB|e] = 368;
HSBJ1] '=108;
HSB[2) = 108;
los , .pro-
Da 14
Ahora ya tiene los nmeros que quiere. La ltima parte de la actuaban pone nuevamente
estos valores en los campos de texto. Desde luego, ?s.os valores son aun nmeros de punto
con el
"otante de modo que tiene que convenirlos a ints antes de convertidos en cadenas y
HSBcontrols.tfieldi.setText(StrinQ.ValueOf((int)HSBW));
HSBcontrols.tfield2.setText<Strin0.value0f
int HSB 1
guardarlos:
HSBcontrols.tfield3.setText(String.value0f((int)HSB[2])),
Ya estamos a medio camino. La siguiente parte del apple, es la que actualiza los valores RGB
cuando cambia un campo de texto en el lado HSB. Esta parte es el else en el gran
if...else c,ue define este mtodo y determina qu es lo que se debe ae.ualuar. una ve
dado el cambio.
Es ms fcil generar va.ores RGB, tomndo.os de los valores HSB, que hacer todo proceso
a la inversa Un mtodo de la clase Color, getHSBColor(), creu un nuevo obje.o de Color a
partir de .res valores HSB. Una vez que obtiene un objeto Color, puede extraer laclmenle los
vires RGB III inconveniente, desde luego, es que aetHSBColor ,o,a .res armemos Je
punto Dotante y que los va.ores que usted nene son los va!ores enteros que pre.en.uuhzar A,
Samar a getHSBColor, tendr que convertir por cast los valores enteros de os campos de
setUyout<new GrldLayoutM
' '
'
/ 360,
Una vez estableado d objeto Color, oetuazar los valore de RGB implica h extraen de
esos valores desde ese obje.o Color. Los mtodos OetRed(). SetGreen() y oetBlue(),
BGBcontrols.tfield2.setText(String.valueOf c.oetGreen
),
RGBcontrols.tfield3.setText(String.valueOf(c.getBlue())),
Por ltimo, y
sv/atch. repaint();
Ya est! Lo logr. Ahora, compile las clases ColorTest y ColorControls. cree un arehivo
HTML para cargar el applel ColorTest, y verifquelo.
floatrj
HSB = Colop.BGBtoHSBv.Sei ' '
vales, (new floatf31))-
HSB[0J .= 36e.
HSB[1]
.=
10e.
HSB[2]
= 180;
l >>>
32:
}.'
33:
35:
return true;
41:
42:
43:
una pgi-
= 100>
44:
45:
swatch.setBackground(c);
46:
swatch.repaint();
47:
Resumen
48
49:
1:
TlT
import java.awt.*;
2:
3:
4:
5:
6:
,,,.,.
7:
parent
8:
9:
y(llridL.yoot(1,,
10:
11 :
12:
14:
15:
add(tfieldi);
16:
OTrn-m
17:
add(tfield2);
18:
add(new Label(13,
19:
Label.
21 :
24:
25:
26:
27
30
m.entos para construir los componentes, desplegarlos y manejar los eventos. Dejando
23:
29
R Dentro del AWT, tanto los app.ets como las aplicaciones siguen los mismos proced-
lolo nTr
h
Cmre 'OS aPP'CtS y l3S aPlicacio". ^1 99
99 por
por ciento
ciento de
de
que ha aprend.do sobre los apple.s se puede utilizar con bs aplicaciones. De hecho,
22:
28
ligeramente de lado las restricciones de seguridad, la nica diferencia est en que las
apl.cac.ones* iniciad desde nain,> y se despliegan en sus propias ventanas, y los
applets se .maal.zan y arrancan desde init () y start (,, respectivamente. Debido a '
add(tfield3);
20:
Preguntas y respuestas
13:
Obj.cit ,rB) {
. nr.
deb.de a que los applets ignoran el mtodo rcain (), si es que ste existe en una clase,
no hay razn por la que no pueda crear un programa sencillo que se ejccu.e ieualmeme
W m
'Si
w
m
378
Da 14
1.0.2. Como respuesta a ese evento, llame a hide(), si abrir la ventana ms tarde, o
Semana 3
llame a destroy() para deshacerse de ella para siempre. Si el evento cerrar ventana da
como resultado la salida de todo el programa, llame tambin a System.exit().
Afine sus
conocimientos
de Java
15 Funciones de las clases: paquetes
17
18 Comunicacin a travs de
Internet
19
20 Diseo de una interfaz de
usuario con Swing
21 con
Manejo
de eventos de usuario
Swing
caractersticas
cambiar sufsignificado.
Acceso predeterminado
protected,y prvate.
return true'
para usarlos.
Da 15
i 384
caractersticas
Acceso privado
P,r, ocultar totalmente un mtodo o yariablc.y evitar que sea usado por otras clases, u.uVc e.
mod.ncador prvate. El nico lugar en que se podrn ver estos mtodos o vanables, se.a
dentro de su propia clase.
Por ejemplo una variable de instancia privada puede ser utilizada por los mtodos de
u , pufclase, pero no por los objetos de cualquier otra clase. Asimismo,. meto os pnvao oLen ser .amados por otros mtodos de su misma dase, pero no por lo. de otras. Esta
Astriccin tambin afecta a la herencia: ninguna variable o mtodo pnvado son heredados por
. cando ,,ra clase pudiera causar estragos cambiando la variable en fon*. inaprop,:ul.
Acceso pblico
^^rrlic-n
escenano.
Tas subclases.
es fiante eI modincador
de clasc black de la
System.out.println("Touchdowni")-
siguiente:
: ;r**
son
Acceso protegido
y una variabie a ,
385
Da 15
387|
Nota
3 ava awt. Panel pero en realidad est en su propio paquete, j ava. applet.
P.sic nivel de control ele acceso es til cumulo |uiere lacilin.r cjuc mu subclase se .inplemcnie
a s misma. Su clase podra utilizar un mtodo o variable para ayudar a la clase a que haga su
trabajo Debido a que una subclase hereda mucho del mismo comportamiento y atribuios,
podra tener la misma tarca por hacer. El acceso protegido le da a la subclase una oportunidad
De la misma clase
De cualquier clase
. en el mismo paquete
De cualquier clase
fuera del paquete
De una subclase
en el mismo paquete
s
no
sr
si
de usar un mtodo o variable de ayuda evitando, al mismo tiempo, su utilizacin par una
clase no relacionada.
Considere el ejemplo de una clase AudioPlayer, la cual reproduce un archivo digital de audio.
AudioPlayer tiene un mtodo llamado openSpeaker(). un mtodo interno que intcraciu
con el hardware para preparar las bocinas para que reproduzcan el sonido. openSpeaker() no
es importante para los que estn fuera de la clase AudioPlayer, de modo que, a primera v.sia,
comral de ,raso
tacer
ic en las subclases;
de aceeso
r
de acceso
Las diferencias entre los diversos tipos de proleccin se pueden volver muy confusas, particu
larmente en el caso de los mtodos y variables protected. La tabla 15.1, que resume con
exactitud lo que est permitido y dnde, ayuda a aclarar las diferencias entre las lormas de
proteccin, desde las menos (publie) hasta las ms restrictivas (private).
rabie de
En Estados Unidos, un cd^ po17^7
postales.
r ""
Da 15
388
Para evitar que una clase extema establezca la variable zipCode en forma incorrecta, puede
otras clases a una variable privada, a travs de un mtodo de acceso dentro de la misma clase
que contiene a zipCode.
Los mtodos de acceso toman este nombre porque proporcionan el acceso a algo que, de otra
forma, estara lucra de los lmites. A travs de un mtodo para proporcionar el a.-ceso a una
variable privada, usted puede controlar cmo se utilizar esa variable. En el ejemplo del cdi
go postal, la clase podra evitar que alguien ms estableciera zipCode en un valor incorreclo.
Suele haber mtodos de acceso separados que pueden leer y escribir una variable. Los mto
dos que leen tienen un nombre que comienza con get, y los que escriben tienen un nombre
que comienza con set, como en setZipCode(in) y getZipCodefmtj.
Nota
Esta convencin se est haciendo cada vez ms estndar con cada versin de
Java Usted debe recordar cmo ha cambiado el mtodo size() de la clase
Dimensin a getSize() a partir de Java 2. Tal vez quiera utilizar la misma con
vencin de nombramiento para sus propios mtodos de acceso como un
1:
2:
3:
4:
5:
Es una tcnica comn, en la programacin orientada a objetos, utilizar estos mtodos para
acecsar a variables de instancia. Esta tcnica hace que las clases sean ms reui:^:.b!cs
porque las protege contra un uso inapropido.
6:
7:
8:
9:
10:
-Creacin de clases". El modificador static sirve para crear mtodos y variables de clase,
publie class Circle
11:
12:
18:
area(float r)
pi
r;
19:
;
21:,
22:
23:
24:
^""""^"s.addlnstanceo;
publie
.20:
return
14:
15:
17:
Countlnstances() {
13:
16:
ei
" Cl0r-&lack "rcle.pi
Da 15
Salida
10
Variables
instances
Este ejemplo tiene un cierto nmero de caractersticas, de nudo que tmese su tiempo para
leerlas lnea por lnea. En la lnea 2 usted declara una vanable de clase prvate para con-
se
""""*eambian SU Va'Or-
ia constante ^
Observe la iniciacin de nunnstances a 0 en esa misma lnea. Del mismo modo en que
se inicializa una variable de instancia al crear la instancializa, se inicializa una variable de
clase al crear la clase. Esta inicializacin de la clase se da esencialmente antes de que suceda
cualquier otra cosa en esa clase, o en sus instancias, de modo que la clase del ejemplo trabajar tal como se plane.
En las lneas 4-6. usted crea un mtodo get para esa variable de instancia privada con el fin de
obtener su valor (9etNumInstances()). Este mtodo tambin queda declarado como un mtodo
de ch.se" y:, que se aplica dircca.ncme la variable do clase. Hl ,,ilhIo 0CtNumInStanccs()
Mtodos
se declara protectefj, en oposicin a public. porque slo esta clase, y quizs las subclases,
estarn interesadas en ese valor; por lo tanto, las dems clases no lo pueden ver.
Observe que no tiene un mtodo de acceso para eablecer el valor. La razn es que el valor
de I-. variable se debe incrementar slo cuando se crea una nueva instancia; no se debe
establecer en cualquier valor aleatorio. Por lo tanto, en vez de crear un mtodo de acceso, lo
que crea es un mtodo privado especial llamado addlnstance) en las l.neas 8-I0 que mc.t-
Las lneas P-14 crean el mtodo constructor para esta clase. Recuerde, los constructores
se llaman cada vez que se crea un nuevo objeto, lo cual hace que ste sea el lugar log.co para
llamar a addlnstance() e incrementar la vanable.
Por ltimo, el mtodo nmin() indica que lo puede ejecutar como una aplicacin de Java y
probar todos los dems mtodos. En el mtodo main(). usted crea 10 instancias de la clase
Countinstances. reportando el valor de la vanable de clase numlnstances al terminar M
cual, podemos predecir, ser 18).
El modificador final se utiliza con las clases, mtodos y variables para indicar que no cam
biarn. Tiene un significado diferente para cada cosa que pueda finalizar, de acuerdo con lo
siguiente:
Po stguiente:
7 ^ """ etUxmttar ei
y facilidad de desarrollo.
o,
muchas
pa
ms
e'imina la "Osibilidad
Da 15
1392
Nota
ejemplo siguiente:
una clase
final no se pueden derivar subclases. Al igual que con los mtodo, finales, este
duce algunos
i introduce
algunos beneficie de velocidad en el lenguaje de Java, a expon** ^ la
flexibilidad.
Las c,ases abstraes tambin pueden conten Iodos TT^ * ^ "" "llOdS-
ta. Los mtodos abstrac.os se decLn on"l ^dT T'3" '" SUbdaSeS de la clase ^c
Paquetes
empezar desde el principio.
No tendr muchas razones pan, hacer que sus propias Cases sean finales porque las Cases
que pueden legar su comportamiento y atributos a las subclases, son mucho m-. unles.
v>>*
ser
Lo, p,,ntle, , la
amp|aI
Estas cta.es se Laman Cases abstractas, y se crean utilizando el mod.ficador a.stract. Este
es un ejemplo:
"=
E
a.
1/1
a _
-O
J-s
o -.2
f a
o-
o>
fo'
flj
3 g.
OJ
SM-i
<U -o
1 2
o.fe
g?
cr
a.
so
5P '
p
-
i
p
.-
3
3 =
Ti
.c
IIII
._
>
.2
1/1
g
*
" 5
<
u
"
a.
SJ I
-o
a s
i | o .
i 11..
8. u
a "2
3-^2 8
"
-^
3. g s E." .
1 3 E - '
-c
2 "^
i iI
'.a. .2
^
5
= -o
1=1
S.
. = -.o
<3 o
11 i -s -i 2 3 3.|-3
.5 =-S
.2
"o ^ 3
o"
3 s s-
6.
'i "
1
cd
ia.a2 I
ti
^1
Z. * S
3
s
^
"H
^3
'>
c:
<u
en
J
C
=3
O
a.
a.
.E
o
c
por-
O
c
5
o
3:
S. t
.
2-
=
u
a.
s
Ti
O
a
f
If
-S
o.
cu
s ^
<u
T3
c
3
ai
i
0.
(O
'5.
0
5
c
o.
"S
-o
*~*
o-
**
.5
O-
ni
01
"a
OJ
8.1
Q.
(0
+-
re
0/
(0
3.'
I I.
ai
5.'
5 o
E-SI;
cu
o.
L.
~q
ra
o
a.
E
flj
0
c.
<u
zr
a.
"3
II
U
& 3
o
-
1 5
1 3-
+5 S
0)
/i
-y.
2
E.
O,
3
cr
..
a z
t.
-H
8.
I-5-
o-
-o
a-
3 " -S
cr
55
3 c S
.2, S. .s "
E "-.
11
CL. _O
II
" t
CL T3
l!
>
3 S
^S
Cu
CJ
5 'B .2
396
Da 15
^!ii^^
Las instrucciones import en su definicin de clase van en la parte superior del archivo, antes
de cualquier definicin de clase (pero despus de la definicin del paquete, tal como ver en
la prxima seccin).
De modo que, se deber tomar su tiempo para importar las clases en forma individual, o
simplemente las Importa como un grupo? La respuesta depende de qu tan especfico quiera
ser. Importar un grupo de clases no va a retrasar su programa ni va a hacerlo ms largo; slo
se cargarn las clases que utilice en su cdigo conforme las vaya necesitando. Pero importar
un paquete dificulta a los lectores de su cdigo averiguar de dnde provienen sus clases. Usar
comandos import individuales o importar paquetes, es ms una cuestin de su propio estilo
de codificacin.
Nota
es el caso; import slo indica dnde se puede encontrar una clase. No incre
menta el tamao de la clase.
Conflictos de nombres
Por o regular, despus de importar una ciase o paquete de clases, usted se puede referir ;i un;i
clase simplemente por su nombre, sin el identificador del paquete. En un solo eso tendra la
necesidad de ser ms explcito: cuando tiene varias clases con el mismo nombre, pero de
diferentes paquetes.
Me aqu un ejemplo. Digamos que usted importa las clases de dos paquetes de distintos programadores (Jonalhan y Bourne):
import
jonathanclasses.*;
import
bourneclasses.*;
Dentro del paquete de Jonathan hay una clase llamada Def enestrate. Lamentablemente, dentro
del paquete de Bourne tambin encontrar una clase llamada Def enestrate, que tiene un
significado e implementacin totalmente distintos. Usted se preguntar qu versin de Def enes
La respuesta es, ninguna de las dos; el compilador de Java se quejar de un conflicto de nom
bres y rehusar compilar su programa. En este caso, y a pesar de que usted haya importado
ambas clases, todava tiene que referirse a la clase Defenestrate apropiada con el nombre
completo del paquete, tal como sigue:
acerca de cussMTHydnde
Da 15
quiera alargar el nombre con algo que describa las clases del paquete, como
com. prefect. canasta, o alguno de los cdigos de dos letras que dent.fican a un pa.s.
| ., idea es estar scuro de la exclusividad del nombre para el paquelc. Aunque los paquetes
rl-dcn ocultar nombres de clase conflictivos. la proteccin ermina ah. Usicd no puede cs.ar
seguro de que Su paquete no causar conflictos con el paquete de alguien ms. s. ambos un,,6ro
Por convencin, los nombres de los paque.es tienden a comenzar con una letra minscula, para
dis.in-uirlos d los nombres de clase. As, por ejemplo, en el nombre completo de la clase
inteerada String. i ava. lang. String. es ms fcil, a simple vista, separar el nombre del paque
te del nombre de la clase, lisia convencin ayuda a reducir los amlicos con los nombres.
* -* - ,:;
que corresponda al nombre del paquete. Si su paquete liene un solo nombre (mypackafle). debe
crear una carpe.a para ese nombre. Si el nombre del paquete consta de vanas panes, debe crear
carpetas dentro de las carpetas. Por ejemplo, para el nombre de paquete co*. pref ect. canasta,
necesita crear una carpeta con, una carpeta pref ect dentro de com, y otra carpeta canasta
dentro de pref ect. Entonces, sus archivos de clases y de cdigo fuente podran ,r en el d.recto-
instruccin package se usa junto con el nombre del paquete, como aparece a commuac.on:
package com.prefect.canasta;
paque(e.
nsiderar .odL
Fl cenando sencillo package, si lo hay, debe ser la primera lnea del cdigo en su .chivo fuente,
despt.es de cualquier comentario o lneas en blanco y antes de cualquier comando import.
Despus de iniciar el uso de los paquetes, deber asegurarse de que todas las clases
pertenecen a algn paquete para reducir la posibilidad de confusin sobre a donde pertenecen
sus clases.
Us.ecl ha aprendido acerca de los modificadores para el conirol de utcso :. los mendos y
vrlables Tambin puede controlar el acceso a las clases, como ya habr notado cuando u..liz el modificador publie en algunas declaraciones de clase en proyectos amenores.
nadlo cual significa que la Case est disponible para las dems Cases en el m.smo paque,.
Escriba
collections;
*;
9=
prvate Node
//
...
root;
"_^~
'
399 i
Dte 15
401, #
Listado 15.2. continuacin
10:
11 :,
12:
class
13:
14:
15:
16:
17:
"18:
Node {
prvate
//no pblico
Object
prvate Node
next;
Node(Object o,
contents
next
contents.;.
Node
o;
.=
n;
n)
19:
20:
21:
Nota
En cada archivo, usted puede incluir todas las definiciones de clase que
desee pero slo una podr ser declarada como poblic. y ese nombre de
archivo deber tener el mismp de una clase pblica. Cuando Java compile
rrr- - -
immmm
La clase pblica LinkedList proporciona un grupo de mtodos pblicos muy ui.lcs (eo.no
add ()) a cualquier otra clase que quisiera utilizarlos. Esas otras clases no ncce^an saber
sobe cualquier clase de apoyo que necesite LinkedList para hacer su trabajo. Nod.. que
una de esas clases de apoyo, est decan* sin un modificador publie >' no .pateen, como
pane de la imerfaz pblica del paquete collections.
El hecho de que Node no sea pblica, no significa que LinkedList no tenga accedo a ella
mucho
s que
despus de ser importada a alguna otra clase. Cuando piense en proiccc.ones. nc p.ensc en
dls totalmente ocultas sino, ms bien, en V, verificacin de los permisos de -a clase de aminada para usar otras clases, variables y mtodos. Cuando usted importa y^.un e Lr t.
tambin cargar la clase Node er, el sistema, pero solo las ns.anc.as de LxnkedL^t tendrn
permiso para usarla.
Interfaces
Las in.eraces. al igual que las clases y mtodos abstractos, proporcionan plani.llas de con.non no que se espera sean imp.emen.adas por las otras Cases. Sin embargo, las ,nu.-
Da 15,
Interfaces y clases
Lis chscs e mterfaces, a pesar de sus definiciones diferentes, tienen mucho en comn. Las
m re" como ,as Cases, estn declaradas en los archivos fuente, una interlaz por archwoA.
ellas).
variable, como resultado de una conversin, etc.). tambin puede ,,.l.r una ,n.c.1i7..
* Pr
interface
Donde quiera que este libro tenga un nombre de clase en cualquiera de sus ejemplos o
void
void
Fruitlike {
decayf);
squish();
Hay dos cosas que puede hacer con las interfaces: usarlas en sus propias clases y dehmr sus
interface
propias
interfaces. Por ahora, comience con la primera.
prp
void
void
Pan, usar una imerfaz. debe aadir la palabra Cave i.ple.ents como parte de su
I se. Esto ,o hizo el da 10, "Ad.cin de imgenes, animacin y son.do cuando aprend.o
acerca de los subprocesos e incluy h, inierfaz unnable en su Jel.n.con del .W)ei.
Spherelike {
toss();
rotate();
dos que hay en la in.erfaz. Observe que una vez incluida una m.erfaz t.cne que - u
Uni ve, que su Case implementa una nterin las subclases de su clase heredar,, losnuevos
\"
// extiende Object
componamiemo conibi-
Da 15
nado de todas .as interfaces incluidas.' Para incluir interfaces mltiples en una Case, slo
separe los nombres con comas:
Observe que al implemen.ar mltiples nierfaces. pueden surgir complicaciones. .Qu sucede
^"interfaces diferentes definen e. mismo mtodo? Hay tres formas de resolver este problema:
. Si lo. mtodos en cada una de las interfaces tienen firmas idnticas, imponente un
m-odo en su clase y esa definicin satisface a ambas interfaces.
'
. Si los mtodos tienen las mismas listas de parmetros, pero difieren en e, upo devueho.
y(): /; des^P0Sicin
..qul8h0. y aplastado de la fruta
aFruitlike.tossn //
.sph.r.iik..to,.(;;
anOrange.ciecay()
.anOrange.squisno';
// i
'anOrange.toss();
anOrange.rotate(};
mtodo s acciona por las listas de parmetros, no por el upo devuelto). En te en,
ratar de compilar una clase que implcmente ambas mterfaces produce un erro de com-
p-Sl incurrir en este tipo de problema significa que sus interfaecs uenen algunas
fallas de diseo que debera examinar de nuevo.
,,
Cuando una vanab.e es declarada como un tipo de interfaz, sign.fica simplemente que
l punto imponante que debemos captar es que aunque se espera que aRunnableObj ect
Interfaces nuevas
Para crear una inIerfa2 nueva, dec]are ,o si
sigllienle.
Da 15
406
En realidad, esta declaracin es igual a una definicin de clase, excepto que la palabra
interface remplaza a la palabra class. Dentro de la definicin de la interfaz, usted tiene
par.
cearr parme.ras
genricos
mtodos y constantes. Las definiciones de mtodo dentro de la interfaz son mtodds publie
y abstract: usted puede declararlos como tal en forma explcita, o se convertirn en mto
dos publie y abstract si no incluye esos modificadores. Usted no puede declarar un mlodo
como prvate o protected en una interfaz. Por ejemplo, aqu tenemos una interfaz
y .,ui.(). Tamban
voi.d growItBigger();
>.
como
Observe que, I igual que con los mlodos abstractos en las clases, los mtodos dentro de las
inicrfaces no tienen cuerpos. Recuerde, una interfaz es diseo puro; no involucra ninguna
9er"'i
que s
t. De qu lipo w a
I^^J^racesyotrasc^Kterstics
interface Fruitlike {
self)
implcmentacin.
Adems de los mtodos, las interfaces tambin pueden tener variables, pero dichas variables '
deben ser declaradas como publie, static y final facindolas consumles). Al igual que
con los mlodos, usted puede definir en forma explcita una variable para que sea publie.
static, y final, o sta ser definida implcitamente como tal si no utiliza esos modilieadores. Aqu tenemos la misma definicin Growable con dos nueuis variables:
9erminate(Fruitlike self) /
,, "9e the0^9e = (Orange,self;
'
I as inierfaces deben tener proteccin pblica o de paquete, igual que las clases. Observe, sin
embar-o que las interfaces sin el modificador publie no convienen sus mtodos auiomauca-
mcnie'a publie y abstract ni sus constantes a publie. Una interfa/ no-public tambin
licnc mtodos y constantes no-public que puedenser utilizados nii-amcmc por las clases y
defDCOn' >'
Las interfaces como las clases, pueden pertenecer a un paquete si usled agrega la instruccin
package a la primera lnea del archivo de clase. Al igual que las clases, las mcrlaces ta.nb.cn
pueden imponar otras interfaces y clases de olios paquetes.
esos mtodos'.' ;Usled no sabe qu clase los estar utilizando! La ivspucsla reside en el IiccIm
de que, como ya aprendi con anterioridad, usled utiliza un nombre de inierfaz dondequiera
de imerf"ces no
c. o
*n existir en
^TjrC
SenClla M PUCde
i 408
Da 15
Growable,
Fruitiike,
.
i
En las interfaces con herencia mkiple, las reglas para manejar los conflictos de nombre de
mtodo son las mismas que para las clases que utilizan mltiples interdices; los mtodos que
difieren solamente en el tipo devuelto, dan como resultado un error de compilacin.
cin de paquete y define una clase que Diplmenla la nierl'a/. Enumera t ion (que es parle del
paquete java. til). El listado 15.3 nos mueMra el cdigo.
nH
jy02?
1 :
package
collections.
_
collections;
2:
3:
4:
public
class
prvate
LinkedList
Node
root;
5:
6:
7:
8:
new LinkedListEnuraerator(root);
9:
0:
11 :
12:
class
Node
13:
private
Object
14:
prvate
Node
contents;
next;
15:
16:
17:
18:
contents;
19:
deJ ob
20:
21:
22:
Oases internas
23:
24:
25:
26:
27:
28:
29:
30:
31:
rango de snuaciones.
next;
Node
currentNode;
LinkedListEnumerator(Node
currentNode
= root;
root)
. Las
superior-
penenee
un
de
S mife
como
chses 2
Da 15
r
411
A'p-irtir de Java 1 1, usted poda definir una clase dentro de otra clase, como s. fuera un
mtodo o una variable. Estos tipos de clases se conocen como clases internas. El lisiado 15.4
contiene el npplcr Inner, el cual utiliza una clase interna llamada BlueButton |ra represen
El nombre de u
1:
2:
3:
4:
import
java.awt.Button;
import
java.awt.Color;
'
5:
6:
7:
8:
9:
add(>1);
10:
add(b2);
11:
e deben incluir
el aPP,et
12:
BlueButton(String label)
13:
super(label);
this.setBackground(Color.blue);
14:
15:
16:
17:
18:
Figura 15.1
El apiilel hmcr.
!*_
En este c :mplo, la clase BlueButton no difiere de una clase de ayuda que esta inclu.da en el
mismo ar -ivo fuen.e que la clase principal de un programa. La nica diferencia cons.sie en M
la clase d: ayuda est definida dentro del archivo de la clase, lo cual tiene vanas ventajas:
.la. clases internas son inasibles para .odas las dems clases, lo cual significa que usted n
lie ic que preocuparse por los conflictos de nombres entre las clases internas y las dems
el: es.
. La cl-iscs internas pueden tener acceso a las variables y mtodos que estn dentro del
al< anee de una clase de nivel superior, acceso que no tendran si fueran una clase separad
Da 15
1412
Semana 3
Preguntas y respuestas
P Utilizar mtodos de acceso en todas partes, no har ms lento mi cdigo de Java?
R No siempre. Conforme los compiladores de Java mejoren y puedanjerear ms opiiiniwiciones, estarn en posibilidad de hacer que los mtodos de acceso ^.-an automtica
mente rpidos, pero si est preocupado por la velocidad, siempre ejar en posibilidad
de declarar los mtodos de acceso como final y sern tan rpidos^como los accesos
directos a las variables de instancia.
P Se heredan los mtodos de clase (static) igual que los mtodos de instancia?
R No. -os mtodos estticos (de clase) ahora esln predetermmadosieomo final.
C.no, entonces, puede declarar un mtodo de clase no final? La respuesta es que no
Da
I> Has ndome en lo que he aprendido, los mtodos prvate abstract y los mtodos
o el ises final abstract no parecen tener sentido. Son legales?
R No. como ya se figur, son errores de compilacin. Para que sean tiles, los mtodos
ab: tract deben ser sobrepuestos, y de las clases abstract se deben derivar subclases,
per) ninguna de esas dos operaciones seran legales si tambin fueran prvate o
f ii al.
Circunstancias
excepcionales: manejo
de errores y la seguridad
g
Los
Los
Los prod
prognmudores de cualquier lcm-u-.i de errores, programas que nunca se de,"
--iones
co
M anonrates
n yr
se imagine.
^d ^^ ** ""*
/^
^ "
l^\?\'
asad?
DUi 1G
14
En Java a este tipo de eventos extraos, que pueden hacer que un programa falle, se les
llama excepciones. Java define un cierto nmero de carac.erslicas del lenguaje que imian con
esas excepciones, incluyendo las siguientes:
. Cmo decirle a Java, y a los usuarios de sus mtodos, que usled espera que se presente
una excepcin potencial-.
. Cmo creai una excepcin, si es i|ue la delecta.
Adems de las excepciones, aprender el sistema establecido para Java 2, que permite a los
applels hacer cosas en un programa que normalmente causaran excepciones de seguridad.
crear una estructura de instrucciones muy confusa, similar en funcionalidad a los blooues de
Java if . . . else y switch. para manejar los errores que se pudieran presentar.
Como un ejemplo, supona las instrucciones siguientes, que muestran la estructura de cmo
se podra cargar un archivo desde un disco. Cargar un archivo es algo que puede convenirse en
un problema debido a mltiples circunstancias: errores de disco, errores desarchivo no encon
trado, y otros similares. Si el programa necesita los datos de ese archivo para lunc.on.tr ade
cuadamente, dube tratar con cualquiera de esas circunstancias ames de continuar.
sla es la eslru:tura de una posible solucin:
int
if
status = loadTextfile();
(status
!= 1)
switch
(s
case
cas<
case
atus)
2:
// no se encontr el archivo
3:
// error de
disco
4:
II
archivo
corrupto
def;.ult:
//
otro
error
}
// arcr-ivo cargado,
Da 16
I 416
Exception es
^Sc >'rde^
la ciase NuilPoi^erExcePtion
cui-txceptionyMalformedURLEx
;ir;i
c M, ,,,,,
Precaucin
^ordrdas j
(EOFException, FileNotFo
i
imcrnos , d ambieme de la u,
mucho
de comunicaciones
de ^'la y salid.
Manejo de excepciones
que usan excepciones, el compilador
1418
Da 16
de Java obliga al manejo de esas excepciones; necesita manejar esas excepciones en su propio
cdigo, o simplemente no se va a compilar. En esta seccin aprender acerca de esa verifi
cacin de la consistencia y la forma de utilizar las plabras clave de lenguaje try, caten y
f inally, para manejar las excepciones que se puedan presentar.
Exception
java.lang.InterruptedException
this
metliod.
Qu quiere decir esto? En Java, un mtodo puede indicar los tipos de errores que podra lan
zar. Por ejemplo, los mtodos que leen desde archivos podran, potencialmente, lanzar errores
IOException, de manera que esos mtodos se declaran con un modificador especial que
indique errores potenciales. Cuando usted utiliza esos mtodos en sus propios programas de
Java, tiene que proteger su cdigo contra esas excepciones. La regla es impuesta por el mismo
compilador, de la misma forma en que el compilador hace verificaciones para estar seguro de
que usled est utilizando mtodos con el nmero correcto de argumentos y de que todos sus
tipos de variables concuerdan con lo que les est asignando.
Por qu tiene lugar esta verificacin? Hace que sus programas tengan menos probabilidades
de chocar con errores fatales porque usted sabe, de inmediato, el tipo de excepciones que
pueden ser lanzadas por los mtodos que utiliza un programa. Ya no tendr que leer cuida
dosamente la documentacin o el cdigo de un objeto que va a utilizar, para estar seguro de
que trat con todos los problemas potenciales. Java hace la verificacin por usled. Por otro
lado, si usted define sus mtodos de forma que indiquen las excepciones que pueden 'lanzar.
Java le puede decir a los usuarios de sus objetos que manejen esos errores.
Proteger el cdigo que contiene el mtodo que podra lanzar una excepcin dentro de
try
} caThread-SIeePd000)
un bloque try.
Influjos de W\ La
Da 16
1422
void readNumbers(int[]
14:
inticount = 6;
numArray)
int|lastNum = 8;
15:
try{
16:
while
17:
18:
'
19:
lastNum = numArray[count++];
{'
if (lastNum == -1)
return;
20:
21:
22:
finally
23:
{
System.out.println("Last
24:
25:
return;
number
read:
lastNum);
26:
27:
array:
Last
-1
'^
array:
number
read:
13
El bloque try. . . finally, en las lneas 16-24, hace que suceda algo anormal cuando se
llega a la instruccin return en la lnea 20. Cabra esperar que return hiciera que el mtodo
saliera inmediatamente.
Debido a que estn dentro de un bloque try. . .finally, las instrucciones dentro del bloque
finally se ejecutan sin que importe la forma de salida del bloque try. El texto "Last
number
te Java hace verificaciones para estar seguro de que usted ha manejado, de alguna forma, los
errores de un mtodo; pero, cmo sabra sobre qu errores informarle en primer lugar?
I.a R-sptkM;i es que el mtodo original, indicado en su firma, contiene las excepciones que
podra lan/ailc. Puede utilizar este mecanismo en sus propios mtodos; de hecho, es bueno
hacerlo para asegurarse de que los dems usuarios de sus clases estn alertas ante los errores
que pudieran producir sus mtodos.
Da 16
idea bsica es que puede abrir una conexin con un archivo y usar el mtodo read () para
obtener a.Os de l Esto puede causar vanas excepciones, como un error de d.sco, o un ,men-
to de er ms datos de los que contiene e. archivo. En cua.quiera de los dos casos, el mtodo
read()"-a una lOException la cual, si no .a captura, hara que c. programa devora su
""tas clusulas. En un bloque mltiple catch el l" hl "^ * "^ mUc las dls-
ntro de un bloque catch. Podra hacer la .impieza despus del erro, y vo.ver a algn esta
do de seguridad, arreglando .as cosas lo suficiente para que el programa pros.ga, o s, todo
que
P''
esto falla, guardar lo ms posible del estado actual del programa y sahr.
El siguiente ejemplo trata de leer de un archivo y atrapar los errores, en caso de que sucedan:
pnu ,xMr 1
de ese cod.go dentro de una panf opcio^i
S1* E
u estruaurado un bloque
mylnputStream.reacl(myBuffer);
")_
try
Tr3 I
closeTextfile();
Agrama uuHzando ,a .formacin parcia. que sac del arch.vo. o quiz desee dcsp.egar un
TJSL de ccpcioncs estn organizadas un una jerarqua y usted puede uuh.ar una su*
Qu pasa si usted quiere atrapar excepciones de ..pos muy diferentes que no es.n relaciona-
dos por herencia? Puede utilizar mltiples bloques catch para un solo try. as,:
Escriba
1:
2:
3:
4:
5:
6:
t rv i
II cdigo que puede generar excepciones
7:
\ catch (lOException e) {
8:
9:
10:
11:
12:
class Final {
intf]
10j 8j
_^ 7
= { 1. 5, 20, 8, 1, 13 );
an
P^ utilizar
co. Para
das. dondequiera que se espere unn suprelas, puede atrapar grupos de excepco.es dentro
Como un ejemplo, hay varios tipos diferentes de excepciones lOExc.ption tato como
-a cop,
Aqu el "otro cdiao de limpieza" puede ser lo que usted quiera; puede seguiradelante con el
Los ejemplos que ha visto hasta aqu, atrapan un tipo especfico de excepcin Debido a que
esIra
ddc
readTextfilet);
La clusula finaliy
Al poner su mtodo read () dentro de un bloque try, podr manejar tranquilamente ese error
numBytes++;
in = new Finalf)-
fin.readNumbersrin.numi)''
Systen,.oUt.println(SecOn<; array. ...
fln-'-eadNurabers(fin.num2);
''
Circur
[la -16
yer.length)
,;
mylnputStream.read(myBuffer) '
numBytes;++
RuntimeException (o
"
...
'
dc Jl,vu.
,,.,, ,>
2=s=ss=
W^w^/fcto.pc
no
^^
Nota
NBta
ella. En
throws y herencia
de ejecucin.
0
..
!
e,,K es n.
"
Da 16
I 426
ii^^fi^epciona/es:
^S^if^ores y la seguridad
a su melod0,
'Coda excepcin licu dos lados: el que lanza la excepcin y el que la atrapa. Una excepcin
se puede lan/ar varias veces hacia varios mlodos mies de que la alrapen. pero a la larga ser
capturada y manejada.
Quin hace rcalmei|e el lanzamiento? De dnde vienen las excepciones? Muchas de las excep
ciones son lanzadas |kr la unidad de tiempo de ejecucin de Java o por mlodos dentro de las mis
mas clases. JJsied tafiibin puede lanzar cualquier excepcin estndar definida en la biblioteca de
clases de Java, o puede crear y lanzar sus propias excepciones. Esla seccin describe lodo eslo.
Pe
al compilador de Java, el cual hace una verificacin para asegurarse de que todas sus excep
ciones han sido manejadas, pero la declaracin en s no hace nada para lanzar esa excepcirrp
eso lo tendr que hacer usted mismo en el cuerpo del mlotlo.
Recuerde que todas las excepciones son instancias de alguna clase de excepcin, de las
cuales hay muchas definidas en la biblioteca estndar de clases de Java. Necesita crear una
nueva instancia de una clase de excepcin para poder lanzar una excepcin. Una vez que
tenga esa instancia, ulilice la instruccin throw para lanzarla. La forma ms simple de lanzar
una excepcin es la siguiente:
NotInServiceException()
Poner en sus
throw nis;
^^
class SunSpotException
Slo puede lanzar objetos que sean subclases de Throwable. Esto difiere de
Nula
Dependiendo de la clase de excepcin que est utilizando, sta podra tener tambin argu
problema real con mayor detalle (lo cual puede ser muy til para propsitos de depuracin).
He aqu un ejemplo:
NotInServiceException()
nis
new
NotInServiceException("Exception:
throw nis;
Datbase
Not
in
Service"
y throw
Da 16
429
try {
}
mr.loadHeader();
catch
(lOException e)
' Esto funciona Po,que los manejadores de excepciones se pueden anidar. Usted maneja la
excepcin haciendo algo responsable con ella, pero decide que es dentado nponan e
como para no darle la oportunidad a un manejad*, que podra estar en el mtodo que IUu.
de manejada a su ve.,. De esta forma, las excepciones flotan todo el cam.no a lo argo
**
Tndiente pero en un applct podra hacer que se detenga el navegador. La mayona de los
adobes se protegen'a s mismos de es.e desastre, atrapando .odas las excepciones cada
ve/, que ejecutan un applet, pero nunca se puede estar seguro. S, le es pos.blc amp.u una
excepcin y hacer algo inteligente con ella, hgalo.
Dado que lanzar, atrapar y declarar excepciones son concentos reh.c.onados y pueden llegar a
ser muy confusos, aqu damos un resumen rpido de cundo y que hacer.
. Realizar los dos mtodos anteriores, atrapando la excepcin mediante catch y lanzn
dola de nuevo en forma explcita mediante throw.
En casos en los que un mtodo lanza ms de una excepcin, puede manejar cada una de ellas
!n Za disnma Por ejemplo, podra atrapar algunas de esas excepciones m.entras pernee
el paso de otras hacia la cadena que hace la llamada.
lnVolut-r:'d;ls- No es
^ *" '^
Da 16
1430
El sistema de excepciones de Java fue diseado de modo que, si existe la posibilidad de que ,
ocurra un error se le avisa de inmediato. Si no hacemos caso de esos avisos, o simplemente
les damos la vuel.a. es probable que sucedan errores fatales en nuestro programa, errores que
se hubieran podido evitar con unas cumias lincas de cdigo. Peor iin. agregando nstr.ieciones throws a sus mtodos para evitar las excepciones, significa que los usuarios de ellos
(objetos que estfn ms all en la cadena de' llamada) tendrn que manejarlos. Lo nico que
logra con esto e> hacer que su mtodo sea ms difcil de utilizar.
z.
Los errores delLmpilador referentes a las excepciones estn ah para recordarle que medite
sobre estos aspectos. Dse el tiempo suficiente para manejar las excepciones que pudieran
afectar su cdigo. Este cuidado extra le recompensar ampliamente cuando vuelva a utilizar
sus clases en proyectos futuros y en programas ms y ms grandes. Desde luego, la biblioteca
de clases de J-a se ha escrito con este grado de cuidado, y es una de las razones por las
#
*
cuales tiene lajfuerza suficiente para ser utilizada en la construccin de todos sus proyectos
en Java.
"nBS:""rt!-"P.. ~./cli,nt.t.1
que usted no puede confiar en nadie en World Widc Web. Ese pensamiento podna sonar alpo
cnico pero en la prctica significa lo siguiente: la seguridad de Java da por he.no que
alguien tratar de escribir applets maliciosos, de modo que se previene contra cualquier in.cn-
, ;,| respecto. En consecuencia, cualquier curaclcrsca del lenguaje que pudiera m usada
con abuso, ha sido bloqueada en los applets. Las caractersticas prohibidas son las siguientes
. Conectarse a cualquier mquina distinta a la que entreg la pgina Web que contiene c;
applet.
. Desplegar una ventana que no incluya el aviso estndar "Ventana de un apple, de Java-
que el programador es confiable" "_ "' * * UUari PlSe a lravs de) Proc Para
java 2 permite que los applets realicen lodo lo que puede hacer cualquier aplicacin de Java, poro
slo si vienen de un proveedor de applets confiable y contienen la tirina digital para
verificar su autenticidad. Una firma digital es un archivo encriptado que acompaa a un pn -
grama, indicando exactamente de quin viene. El documento que representa esta firma d.g.i.'
gnatures
se llama certificado.
.R.
appiei s*utijj2
de Java
Da 16
1432
viable con un applet, ya que el acceso al disco es un no definitivo. Para que el juego se pueda
realizar, Fishhead debe firmar el applet digitalmente y permitir que el usuario lo establezca
ventaja de una firma djgital
ase
1. Fishhead Software utiliza keytool, una herramienta que viene con el JDK, para crear
dos archivos encriptados denominados: clave pblica y clave privada. Juntas, estas
claves constituyen una,tarjeta de identificacin electrnica que identifica totalmente a la
compaa. Fishhead se asegura de que su clave privada est oculta a cualquier otra per
sona. Como una forma parcial de identificacin puede, y debe, poner su clave pblica a
disposicin de cualquiea.
2. Fishhead Software necesita alguien que pueda comprobar su identidad. Manda su clave
pblica y un archivo descriptivo acerca de Fishhead Software a un grupo independiente
en el que podran confiar los usuarios de Java, Sijnatures "R' Us.
4. Fishhead crea un archivero de Java que contiene su applet de juego y todos los archivos
relacionados. Con una clave pblica, una clave privada y un certificado, Fishhead
Software ya puede utilizar la herramienta jar para firmar digitalmente el archivero.
5. Fishhead coloca cl archivero firmado en el sitio Web, jumo con las instrucciones para
:*^cuaiqui
p^^Zzl!;ZVe podra -quedar un poco """.
tennfcar* alguien. ,,cmo se puede u , T t ^^ MU en cnjumo para
un rasiro
F'shhead?
e' o We,
We, Como
Como par,e
par,e de
dee ssusu pp^
^
;sr
^"^ rea'menle a la
^^7
^^7 ^^
^^ ^
^ "
"< -
^o '' t^t"*'
^puede
P"M^'>erau.sado^~,on
C'JVe Puhl<, el^
cual'" s|o
Este proceso es todo o que necesita Fishhead Software para poner su applet a disposicin de
quienquiera que confe en la compaa io suficiente como para ejecutarlo en Web. Una de las
personas que decide confiar el Fishhead, es un usuario de Web llamado Gilbert, quien tiene
^ *'
2. Despus de decidir que Fishhead es una organizacin confiable, Gilbert utiliza otra he
rramienta de seguridad del JDK, j arsigner, junto con la clave pblica de Fishhead.
para agregar a la compaa a su lista de programadores confiables.
Ahora, Gilbert puede jugar el applet de Fishhead con absoluta confianza. Dependiendo de
cmo estn establecidos los permisos dentro del applet, ste podra leer y escribir archivos >
abrir conexiones de red, as como otras cosas no muy seguras. Esto significa que el sistema
nttp://wvw.sun .com
Da 16
134
!^2f!!^fiexcepconaleS:
^fi^es V la segundad
435 |
a visin general de la
w,,, , , ,
Resumen
Hoy aprendi cmo Je avud
https://certs.netscape.com/client.html.
.' El software Netscape Signing Tool, el cual est disponible en la pgina Web
http://developer.netscape.com/software/signedobj/jarpack.html.Signr
Tool tiene una caracterstica para utilizar un certificado de prueba antes de darle la
identificacin digital.
Nota
e su
Adems de la informaci
http://www.suitable.com/Doc_CodeSigning.shtn
Polticas de seguridad
Antes de Java 2. haba la creencia implcita de que se deba confiar en todas las aplicacin^
y se les permita usar todas las caractersticas del lenguaje.
Para facilitar la creacin de aplicaciones ms limitadas, ahora las aplicaciones tienen que
pasar por el mismo escrutinio de seguridad de los applets.
norma,
na onm
appleI C0|)
Peguntas y respuestas
En la prctica general, esto no cambia la forma en que se escriben o ejecutan las aplica-
ciones- las que usted haya creado durante la lectura de este libro no deben encontrar mngun
^'
t ^^
Da 16
1436
cdigo cometida por el programador, y por lo tanto slo necesitan imprimir un error
para indicar esalequivocacin. Las excepciones que no son de liempo de ejecucin
(excepciones IOException, por ejemplo) son condiciones que, debido a su naturaleza,
deben ser manejadas explcitamente por cualquier cdigo robusto y bien desarrollado.
Semana 3
La biblioteca de clases de Java se ha escrito utilizando slo unas cuantas de stas, pero
son de extrema importancia para utilizar el sistema con seguridad y correccin. F.l com
pilador le ayuda a manejar estas excepciones apropiadamente, mediante la verificacin
y restricciones de throws.
>"
P Hay alguna forma de evitar las restricciones tan estrictas colocadas en los mto
dos por la clusula throws?
R S. Suponga que lo ha pensado durante mucho tiempo y ha decidido que necesita evitar
la restriccin. Casi nunca se presenta este caso porque la solucin correcta es regresar
y redisear sus mtodos para que muestren las excepciones que necesita lanzar. Sin
embargo, imagnese que por alguna razn una de las clases del sistema lo tiene amarrado
' con una "camisa de Cuera". Su primera solucin ser extender la clase RuntimeException
para hacer una nueva excepcin exenta. Ahora la puede lanzar porque la clusula
Da
throws que le estaba molestando no necesita incluir esta nueva excepcin. Si necesita
muchas excepciones de ese tipo, un enfoque elegante seria mezclar algunas nuevas interfaces de excepciones en sus nuevas clases Runtime. Usted est en libertad de escoger
cualquier subconjunto que quiera atrapar de estas nuevas interfaces (ninguna de las
excepciones normales de Runtime necesita ser atrapada), mientras que a cualquiera de
las excepciones sobrantes de Runtime se les permite ir a travs del. de otra forma
molesto, mtodo estndar en la biblioteca.
M;/';;^--
Da 17
1438
439
Puede manejar todos los datos en la misma forma una vez que aprenda a trabajar con un flujo
de entrada, ya sea que venga de un disco, de Internet, o incluso de otro programa. Lo con
'
C1OM,,
Los flujos son un mecanismo poderoso para manejar datos, pero usted no pagar por esa
es I*
En Java,,lodos los datos se escriben y leen usando flujos. Los Mujas, ni igual que los cuerpos
de agua que eomp.inen el misino nombre, llevan algo de un lugar .1 olio.
Trmino Nuevo
Un flujo es una rula seguida por los dalos de un programa: Un flujo de enmiela
enva datos desde una fuenie a un programa, y un flujo le salida enva dalos
Como m
Hoy tratar con dos lipos diferentes de flujos: flujos de byles y flujos i\c caracteres. Los hylr\
un flujo
llevan culeros con valores que van desde 0 a 255. Hay una extensa variedad de datos que se
Trmino Nuevo
Los flujos de caracteres son un tipo especializado de flujo de byles que slo
maneja datos de texto. Se distinguen de los flujos de bytes porque el conjunto de
caracteres de Java sopona Unicode, un estndar que incluye muchos ms caracteres de los
>-
Cualquier clase de dalos que comprenda texto debera utilizar flujos de caracteres, incluyendo
archivos de lexto. pginas Web y otros tipos comunes de texio.
Sn fi""-
elases java. io. sera til dar algunos pasos a travs del proceso de crear y utilizar flujos.
I'ara un flujo de entrada, el primer paso es crear un objeto que est asociado con la fuente- de
dalos. Por ejemplo, si la fuente es un archivo en su disco duro, se podra asociar un objeto
FilelnputStream con este archivo.
Ya que Icnga un objeto de flujo, podr leer informacin de ese flujo con alguno de los mto
dos del objeto. FilelnputStream incluye un mtodo read() que devuelve una lectura de
bytes desde el archivo.
dolasesto
suena confuso en lo h
siguien(es ^^
,0. ,e,u,: ,_
Da 17
1440
*
m
Flujos de bytes
Todos los flujos de bytes son una subclase de InputStream o OutputStream. Estas clases
son abstractas, de modo que no puede crcaMinJIujo creando objetos de estas clases directa
mente. En vez de eso, usted crea flujos a travs de una de sus subclases, como la siguiente:
FilelnputStream y FileOutputStream
int newByte = 0;
newByte = df.readf)-
System-O"t.Print(newByte
);
" '"
; ;
Flujos de archivo
La mayora de los flujos de byles con que trabaja, es probable que sen flujos de archivo, los
cules se utilizan para intercambiar datos entre sus discos, CD-ROMs, u otros dispositivos
de almacenamiento a los que se pueda referir mediante una rula de carpeta y un nombre de
cada
archivo.
Usted puede enviar bytes a un flujo de salida de archivo y recibir bytes de un flujo de entrada
1:
2:
de archivo.
3:
4:
5:
Despus de crear un flujo de entrada de archivo, podr leer byles desde el flujo llamando a su
mtodo read (). Este mtodo devuelve un entero que contiene el prximo byte (carcter) en
el flujo. Si el mtodo devuelve un -i, lo cual no es un valor de byte (carcter) posible, esio
significa que ya lleg al final de! flujo.
6:
7:
9:
10:
11:
12:
13:
14:
15:
16:
17:
16:
19:
20:
F.l elemento dentro del arreglo donde se debe guardar el primer byte de los datos.
.
P->lJC.tl
FilelnputStream file =
8:
Para leer ms de un byte de dalos desde el flujo, llame a su mtodo rea(byte[), int,
Un arreglo de byles donde se guardarn los dalas.
import java.io.*;
int count = 0;
while (eofj
System.out.Print(input .
}f (input == -1)
else
eof = true;
count++;
file.closefj;
21:
22:
23:
24:
A diferencia del otro mtodo read(), ste no devuelve dalos desde el flujo. En vez de ello,
devuelve un eniero que representa el nmero de byles que se han ledo, o -1 si no se le>o
ningn byte ames de llegar al final del flujo.
Da 17
Sy-
tracin.
Filtros de bytes
Despus de ejecutar este programa, puede desplegar el archivo pie. gif en cualquier nave
Figura 17.1
por milizario.
" -^i
Filtrado de un flujo
FilterOutputStream.
disponible, devolver -i
'
by.es ?
5.
Da 17
Un flujo de salida almacenado en bfer se crea con alguno de los dos constructores si-
10:
11:
guenles:
e,
12:
13:
14:
15:
16:
17:
18:
El mtodo rite (int) del flujo de salida se puede usar para enviar un solo by.e al flujo, y el
19:
mftodo writ.<ftyt./J. int, int, escribe mltiples by.es desde el arreglo de by.es pen
cado. Los argumentos para este mtodo son el arreglo de bytes. el punto de m.c,o del arreglo
21:
22:
23:
20:
24:
25:
26:
Nota
27:
ser desde 0 a 255 Si usted especifica un nmero mayor que 255, sera guar
28:
30:
dado como el residuo del nmero dividido entre 256. Esto lo podr probar
29:
31:
class ArgStream {
int start = O;
boolean wrlteStream) /
try {
34:
41:
java.io.*;
5:
int
6:
7.
'i
;;
= 6;
if (argunents.length > 1) {
start = integer.parselnt(arguments[ej);
finish = integer.parselnt(arguments[1]);
P"on.
e.getMessage());
45:
46:
48:
51:
System.out.println("Exception
return false;
44:
50:
2:
"tch (lOException e) {
43:
49:
start
return true;
42:
47:
4:
buff.cise();
40:
en bfer desde el archivo y vuelve a leer los bytes. El listado 17.3 conuene el cod.go fuente.
out =
System.out.'printf- + out).
38:
t;
39:
java BufferDemo 7 64
import
fUf!eredOutPtsf
35:
37:
en la siguiente instruccin:
1:
FileOutputStreamf-numbers.dat")
BufferedOutputStream buff = ne
33:
36:
En el proyecto siguien.e, la aplicacin Buf f erDe.o escribe una sene de by.es en un flujo
de salida almacenado en bfer, ociado con un archivo de texto. El pr.mero y e ulumo
enteros de la serie, estn especificados como dos argumentos de lnea de comandos, como
'
32:
Cuando los datos se dirigen hacia un flujo almacenado en bfer. no sern enviados a su des,ino has.a que el flujo se llene o se llame al mtodo f lush() del flujo almacenado en bufer.
finish = fin;
52:
53:
54:
55:
56:
57:
58:
boolean readStream() {
try
int in = e;
do
in = buff.readM;
-T (in != -1)
Systera.out.print(" +in)
(in != -1);
'
Flujos de datos
catch
true;
(IOException _,
System.out.println("Exception:
e.getMessage())
.C""S'r"CIOr0ataInPutStream(^/'"Sfreafli). Kl
O.t.OutptStr.,flUfpl/tSt/,M). t, cua|
Writing:
4 5 6 7
Reading:
6 7
10
11
12
13
8 9
18
11
12
13
de en,,-
readBoolean(),wrteBoolean(to0jean)
readByte(),writeByte(i/7eeer)
readDouble(),writeDouble(doWe)
readFloat(),writeFloat(fioar)
constructor ArgStream().
readlntf), writelnt(iV))
readLong(),writeLong(Jon5)
linca 16 para volver a leer esos bytes.
readShort(),writeShort(nr)
.....
o,,,
d.,
en Mte .
Da 17
1450
Como una alternativa, puede esperar que una EOFException (excepcin de fin de archivo)
36:
sea lanzada cuando el mtodo de lectura alcance el final del flujo. El ciclo encargado de leerj
37:
for
38:
los dalos se puede encerrar en un bloque try, y la instruccin asociada caten slo debe
(checkNumber % i ==
return false;
39:
mnnejar objetos EOFException. Uamc :i cise () en el flujo y cuide otras tarcas ile limpieza
40:
return true;
41:
42:
Esto queda demostrado en el prximo proyecto. Los listados 17.4 y 17.5 contienen dos pro
451
gramas que utilizan flujos de datos. La aplicacin WritePrimes escribe los primeros 400
nmeros primos como enteros, en un archivo llamado 400primes.dat. La aplicacin
ReadPrimeSslee los enteros de este archivo y los despliega.
Escriba
1:
Escroa
1:
2:
inporf
3:
4:
java.io.*;
3:
6:
class WritePrimes
5:
int[]
6:
int
7:
numPrimes
candidato:
//
int candidate = 2;
9:
while
if
11:
primes[numPrimes]
12:
numPrimes++;
11:
13:
14:
candidate;
15:
19:
20:
18:
19:
20:
21:
BufferedOutputStream
DataOutputStream
23:
while (true)
buff
data
} catch (IOException e) {
22:
23:
24:
new
25:
= new
DataOutputStream(buff);
24:
25:
for (int i = 0;
26:
i++)
data.closef);
28:
30:
i < 480;
data.writelnt(primes[i));
27:
29:
System.out.print(in + '
21:
BufferedOutputStream(file);
22:
try
int in = data.readlnt();
18:
16:
try
17:
candidate++;
15:
17:
Bufferedlnputstrea
dl
16:
13:
14:
10:
12:
(isPrime(candidate))
ril!InPUtStre<"
ni<10<)P'i'"es
9:
0;
8:
FilelnputStream me = new
8:
7:
10:
class ReadPrimes {
5:
2:
4:
import java.io.*;
catch
(IOException e)
System.out.println("Error
--
+ e.toStringO);
31:
32:
33:
34:
35:
de sa,ida a,macen;,do
' II
=
FileReader("index-
'
;KK|,>s incluidos en
gj slguiente caraciei c
^/e! nmero de
d
. re^cnarl, Z^;.,^^hmero
caracteres u leer.
to
inicial
md.cado
V
^.^ ^
el ponto inicial
de bytes. En vez
vez de
de ^
^
,e,eron. o devuelve-1M
.specficudo con
^
carac,rcs anus
, ^^^
^^^^ y
^.^ el bje,o
int
do {
inByte;
_ text.read0".
t,t
*.....?..-
*<
Da 17
1454
de Java
28:
21:
22:
23:
8yt..,out.prlntln("Error -. + e.t
tb5tring());.
Un flujo de caracteres almacenado en bfer se puede leer utilizando los mtodos r:ead () y
readSTr,], int, int) descritos en FileReader. Puede leer una lnea de texto usando el
de bfer se
mtodo readLine().
El mtodo readLine() devuelve un objeto String que con.iene la prxima lnea de texto
TC.* ncluiri carcter o caracteres que representan el fina, de una lnea. S, se llega
- - * dc entrad.,. c. ohJ,
El proyecto contenido en el listado 17.6. es una aplicacin de Java c,ue .ec su propio arch.vo
fuente a travs de un flujo de caracteres almacenado en buler.
1 :
3:
4:
5:
7:
6:
8:
9:
10:
11:
#
#
eof
14:
else
15:
18:
19:
(!eof)
13:
17:
);
12:
16:
java.io.*:
true;
System:out.println(line);
buff.cise();
} caten (IOException e)
import
de
Unicode en bytes.
Escriba
2:
,. aplicaciI1 ReadSource es e) a
,de,
455 i
1:
import
java.io.*;
Da 17
|458
459,
Listado 17.7. continuacin
cap.convert();
6:
7:
8:
9:
10:
11:
class AllCaps {
String
sourceName;
12:
13:
14:
sourceArg;
15:
16:
17:
void convert)
try
18:
20:
la lnea de comandos, al
19:
21:
+ sourceName +
".tmp")
22:
23:
24:
FileReader fr = new
Resumen
FileReader(source);
25:
BufferedReader
26:
in =
new
BufferedReader(fr);
27:
=---=
28:
29:
//
30:
FileWriter
new
Filewriter(temp);
31:
BufferedWriter
32:
out
new
BufferedWriter(fw);
33:
34:
35:
boolean eof
36:
int
37:
do
inChar
=
=
false;
8;
38:
inChar = in.read();
39:
if (inChar != -1) {
char outChar = Character.toUpperCase(
40:
42:
else
eof
43:
44:
} while
45:
in.close();
46:
out.close();
true;
(!eof);
, t, ^ it
47:
48:
boolean deleted
49:
if
54:
caten
(IOException e)
SysteiJ!.out.println("Error
52:
53:
(deleted)
temp.renameTo(source);
56:
51:
(char)inChar
out.write(outChar);
41:
catch
(SecurityException se)
System.out.println("Error
{
-
, ^ e
*j
Ola 17
1442
--
java.io.FileNotFoundException:
class.dat
lida de archivo
Este mensaje d error se ve como el tipo de excepciones generadas por el compilador, pero en
realidad viene del bloque caten en las lneas 21-23 de la aplicacin ReadBytes. La excep
cin es lanzadapor las'lneas 6 y 7, porque no se pudo encontrar el archivo class.dat.
Usted necesita|in archivo de bytes en el que pueda leer. ste puede ser cualquier archivo, una
eleccin adecuada es el archivo de clase del programa, el cual contiene las instrucciones del
cdigo de bylef ejecutado por la mquina virtual de Java. Cree este archivo haciendo una
copia de Readlytes.class y volviendo a nombrar la copia class.dat. No renombre el
class.dat
.\
ReadBytes.class
S:t:r rva ^
Tip
rrarlo.
El mtodo write (byteI] i t
" d
class.dat
de
del nmero total de bytes. Si utiliza ReadBytes.class para crear class.dat. el resultado
las ltimas lneas ser algo as:
49
2
28
82
cla,s wnteBytes
0 8 0
7 0
0
53
12 0 9 0
13 0 60 0
93
Bytes
000
14
90
10 0
16 0 63 0
0 96 0
read:
0
21
97
22
17 0
0005000604070606010
11
0 23
10 0 67 0
0
22
12
18 0 71
122
0 49
13 0 55
14
0 5
19 0 83 0 20 0 90 0 1?
58
57
-1
1121
185, 285, 84
254, 105, 33
La cantidad de bytes desplegados en cada lnea depende de! ancho de la columna que pueda
ocupar el texlo en su sistema. El nmero de bytes que aparezca, depende del archivo
lJ
yte..out.println(-Error - ^,
460
Da 17
Preguntas y respuestas
Semana
enteros en la misma fcrma que lo hace un programa de Java. Como recordar, todos los
programas se pueden representar como un byte individual, o como una serie de bytes.
En Java, un entero se representa utilizando cuatro bytes organizados en lo que se
conoce como un orden big-endian. Puede determinar el valor del entero combinando
los bytes de izquierda a derecha. Un programa en C implementado en una PC Iniel. es
probable que represente enteros en un orden little-endian. lo cual significa que los byies
deben arreglarse de derecha a izquierda para determinar el resultado. Para poder utilizar
un archivo de datos creado con un lenguaje de programacin distinto al de Javu. tendra
que aprender tcnicas avanzadas, como corrimiento de bits.
Da
Comunicacin a travs de
Internet
Da 18
1462
Hoy podr escribir algunas aplicaciones de Java para Web y aprender por qu es ms difcil
hacer lo mismo con un applet. Crear un programa que pueda cargar un .documento de Workl
Cnectivdad en Java
Termino Nuevo
=r~ rr
la mquina en que est corriendo el navegador, ni se pueden conectar a oros sistemas distin
tos al sistema en que fueron guardados originalmente. Aun con tales restricciones, usled
podr lograr mucho y sacar ventaja de Web para leer y procesar informacin en la Red.
-* - -
Esta seccin describe dos formas sencillas de comunicarse con oros sistemas de la Red:
getInputStream() es un mtodo que abre una conexin a un URL y le permite sacar
datos de esa conexin.
En vez de pedirle al navegador que slo cargue el contenido de un archivo, sera mejor sacar
proveera-del contenido de ese archivo para usarlo en su applel. Si el archivo que desea abrir
esl guardado en Web y se le puede accesar a travs de las formas ms comunes ilc URL
(htlp. F-TP y ms), su programa Java puede usar la clase URL para obtenerlo.
Por la/.ones de seguridad, los applels slo se pueden conectar al mismo dosis del que
provienen originalmente. Esto significa que s ha guardado sus applels en un sistema llumadn
www. pref ect. com, la nica mquina con la que su applet puede abrir una conexin ser con
ese mismo host. y con el mismo nombre, as que tenga mucho cuidado con los "alias". Si el
archivo que quiere recuperar el applet est en el mismo sistema, la forma ms fcil de obte
nerlo es mediante las conexiones URL.
Esta restriccin de seguridad cambiar su forma de escribir y probar applels que cargan
archivos a travs de sus URLs. Puesto que usted no ha manejado conexiones de red. le ha
Da 18
1464
Hay una gran interaccin entre el punto A. que es el documento Web, y el ponto B, su progra
ma Java Con el URL se establece una conexin URL. que se utiliza para establecer un lector
de Huios de entrada, el cual a su vez sirve para establecer un lector de flujos de entrada alma
cenados en bfer. La necesidad de capturar las excepciones que ocurran durante el proceso lo
23:
24:
25:
26:
27:
hace ms complejo.
System.exit(e);
28:
Este proceso es muy confuso, por eso es til seguir los pasos a travs de un programa que lo
29:
30:
molemente El siguiente es un ejemplo'de una aplicacin que utiliza la tcnica de los cuatro
pasos para ahrir una conexin con un sitio Web y leer un documento IITML. dundo el docu
32:
33:
frane.addWindowListener(l); "
31:
frame. pack(-);
frame.setVisible(true);
34:
El listado 18.1 nos muestra el cdigo; la figura 18.1 nos da e. resultado de la lectura del
if (frame.runner == nuil) {
35:
36:
archivo.
frame.runner.start()i
37:
38:
39:
Figura 18.1
La aplicacin
40:
Ge t File.
41:
UN"-MI00r
42:
43:
.HJAUON*RtOKTWO 6S
BufferedReader data;'
44:
String line;
45:
46:
47:
conn = this.page.openConnectionf)-
48:
conn.connect();
49:
1 :
2 :
import
import
java.awt.*;
java.awt.event.*;
import
java.net.*;
52:
import
java.io.*;
53:
3
4
5
6
Thread
URL
12
page;
58:
try
18:
catch (IOException e)
59:
14
17:
box.setText(buf.toString());
57:
);
publie GetFile() {
super("Get File");
add(box);
16:
bf.appendfline + "\n");
56:
13
15
box.setText("Reading data
')
while ((line = d.ta.re.dLine())'!= nuil, {
55:
runner;
)-
in = new InputStreamReaderfconn.getlputStreamM
)
data = new BufferedReader(in) r
"iream(j),
SU:
10
11
box.setTextC'Connection opened
50:
51:
60:
61:
62:
{
page
new
"URL(-http://www.prefect.com/java21/index.html
catch (MalformedURLException e) {
System.out.println("Bad URL: "
);
+ page);
19:
26:
21:
22:
e venZas d
V "ecib 7 T ^
l proce-
Da 18
1466
El mtodo constructor GetFile(), de las lneas 11-20, establece el objelo URL y el rea de
lextoen que se lesplegar el documento. El URL en este ejemplo es http://www.pre-
Sockets
Puralasaplicacioncsdeconectividaddcredmisill.il.
fect.com/java2f1/ index.html, el cual constituye la pgina principal del sitio Web de l;i
versin en ingls lie este libro. Tambin podra ser cualquier otra pgina Web que usted
-d ms oCnerale }P J;lv, Z2 r
Para ap'CaCOnes"* conectividad de
* ,S tcnicas de ^Z^^"* ~ un, abstrae
Nota
Las lneas 47 y 48 abren una conexin URL, la cual es necesaria para obtener un flujo de
j ava. net.
La lnea 50 utiliza el mtodo de conexin URL getlnputStreamf). para crear un nuevo lec
tor de.flujos de entrada.
La linca 51 aprovecha ese lector para crear un nuevo lector de flujos de entrada almacenados
rn hiilVr: un nbjclo Buierccinender llamado (lata.
Una vez que tenga este lector de entrada almacenada en bfer, puede usar su mtodo
."">
readLine() para leer una lnea de texto del flujo de entrada. Conforme van llegando, el lec
tor pone los caracteres en un bfer y los saca cuando se le pide.
Ll ciclo while, de la\ lneas 53-55, lee el documento Web lnea por linca anexando cada una
al objeto StringBuffer, que fue creado para guardar el texto de la pgina. Se utiliza un
bfer de cadena, en ve/, de una cadena, porque la cadena no se puede modificar de esa forma
en tiempo de ejecucin.
Una vez luidos lodos los dalos, la lnea 5b utiliza el mtodo toString( ) para convertir c\
bfer de cadena en una cadena simple, y pone el resultado en el rea de texto del programa.
I lay algo que debemos notar c.i este ejemplo, y es que la pane del cigo que abri la cone
BufferedlnputStream bis =
xin a la red, ley el archivo y cre una cadena, est rodeada por las instrucciones try y
catcli. Si ocurrieran errores durante la lectura o procesamiento dol archivo, estas instruc
ciones le permiten recuperarse de ellos sin anular lodo el programa. (Un este caso, el progra
ma saldra con un error porque, si la aplicacin no puede leer el archivo, no hay nada ms que
hacer.) El try y caten le dan la oportunidad de manejar los errores y recuperarse de ellos.
connection.closef);
Nota
eventos que aparece en las lineas 25-30. Este cdigo es necesario para que
dlos en
t.
Da 18
Para crear un socket de servidor y unirlo a un puerto, debe crear una nueva instancia de
^ T
"-
Par, escuchar en ese puerto (y aceptar una conexin de clicn.es. si llegan a hacerse) utilice el
mtodo accept():
sConnection.accept();
Una vez hecha la conexin del socket. puede utilizar flujos de entrada y salida para leer de y
escribir al cliente.
En la prxima seccin, "Trivia: un socket simple tipo cliente-servidor", trabajar con algunos
Para ampliar el entorno de las clases para sock.ts (por ejemplo, para permitir que las conex o es de red trabajen a travs de una firewal. o de un proxy) puede utilizar la c ase abstraen,
S cketl.pl y la interfaz Socketl.plFactory para imp.ememar un nuevo socke. de capa de
que esas Cases se puedan tras.adar a otros sistemas que tengan mecan.smos de transport disuntos El problema con este mecanismo es que si bien es cierto que tunc.ona en los caso
e c lio no le permite agregar otros protocolos encima del TCP (por ejemplo, para imple-
Por estas razones, se ampliaron los socke.s a partir de Java 1.0.2 de modo que las clases
So k t y S rve Socket no fueran finales y s susceptibles de ampliacin. Puede crear sub
. Nuevas opciones para socke.s. basadas en las opciones BSD (por ejemplo. TCPJWDE
LAY
IP_MULTICAST_LOOP,
SO_BINDADDR).
Trivia:
ivia: un
un socket
socket simple
p tipo
p cliente-servidor
Para terminar el comentario
b
sobre
' l-i -I>-Ma de. usuano y ten,,,,,:, !,,s ,, lillv:ls dcl t,icill, co,lsisU.n cl>.
xidad en
Java aqu
conexidad
en Java,
aqu est
est un
un ejemplo
ejemplo de
de un^gran
un^
de Java que utiliza las clases para socke.s para imp.ememar una apl.cac.n s.mple basada
la red, denominada Trivia.
Da 18
State = WAITFORCONFIRM
break;
os.println(outLine);
os.flushf);
if
'
'
case WAITFORCONFIRM
(outLine.equals("Bye."))
break;
//
State = WAITFORANSWER;
limpia todo
os.ciosef);
else {
is.close();
clientSocket.closeO
catch
(Exception e)
outStr = "Bye.";
}
System.<?rr.println(" Exception:
'
state = WAITFORCLIENT;
break;
+ e);
e.printSt3CkTrace();
return outStr;
mtodo run
continuacin aprender acerca de processlnput (). ste procesa constantemente las respuestas
de! cliente y hace nuevas preguntas hasta que el cliente decide no recibir ms preguntas Esto
se hace evidente porque el servidor enva la cadena -Bye. V Entonces, el todo run()
limpia los flujos y el socket del cliente.
El mtodo processinput () mantiene el estado del servidor y maneja la lgica de todo el piuceso pregunta/respuesta. El cdigo fuente para processinput es el siguiente:
String processInput(String inStr)
(state)
case WAITFORCLIENT:
//
hace una
pregunta
outStr = questions[num];
state = WAITFORANSWER;
break;
case WAITFORANSWER:
// verifica la respuesta
if (inStr.equalsIgnoreCase(answers(num]))
"se
prtguma!,.
re,p,,enas
,.neai
Da 18
de su respuesta en la lnea siguiente, la cual, a su vez, est seguida por la siguiente pregunta.
index++;
239000
93
catch (FileNotFoundException e, {
quesUon
catch (IOException e) {
no
?)S;em-err-P
9000
error
trying
return false
El miodo initQnA() maneja el trabajo de leer las preguntas y respuestas del archivo
de texto, y su almacenamiento en arreglos de cadenas separados, como se muestra a conti
return true-
nuacin:
prvale
try
boolean
initQnA()
{
File
byte[)
- *-
ha(11
,,
*. .
l|os;ir ;i|
lijBj
if
(inStream.read(data) <= 0) {
System.err.println("Error: couldn't
read questions
and
arguments)
answers");
serven, start M-
return false;
TriaServer() ;
(int
i = 0;
if
i < data.length;
(data[i)
==
numQuestions++;
numQuestions /= 2;
questions = new String[numQuestions];
answers
^^
i++)
(byte)' \n' )
new String[numQuestions;
Escriba
1 :
2:
3:
start
boolean
for
= 0,
ndex = 0;
6:
i++)
if
if
(isQ)
7:
8:
9:
18:
11:
12:
else {
13:
true;
import java.til.Randoro;
5:
isO = true;
4:
import java.io.*;
import java.net.*;
'
'
\\
Da 18
476
19:
20:
24:
25:'
65:
caten (IOException e) {
System.err.println("Exception:
31:
32:
70:
72:
73:
37:
38:
39:
40:
41:
44:
45:
46:
47:
52:
53:
56:
57:
58:
59:
if (outLine.equals("Bye "))
78:
break;
79:
80:
81:
82:
(linitQnAO)
System.err.println("Error:
and answers");
// limpia todo
83:
os.close();
84:
is.close();
85:
clientSocket.closef)
86:
87:
return;
catch (Exception e) {
88:
Systeni.err.println("Exception-
89:
if
try
94:
95:
clientSocket = serverSocket.accept();
catch (IOException e) {
Systei.err.println("Exception:
couldn't connect to
sockef);
97:
try {
W *
File inFile = new FileCQnA.txt");
99:
100:
101:
en un arre9ide bytes
102:
}
// ejecuta el procesamiento de pregunta/respuesta
{
InputStreawReader
96:
98:
System.exit(i);
try
91:
93:
(serverSocket == nuil)
client
e-printStackTrace();
90:
92:
return;
54:
55:
os.fiush();
77:
server.start();
50:
51 :
os.println(outLine)-
76:
48:
49:
outLine = processInput(inLine);
75:
42:
43:
if (inLine.length() > 0) {
74:
34:
36:
71:
System.exit(i);
33r
35:
'
OS.flush();
69:
28:
30:
os.println(outLine);
68:
27:
29:
e1"8
" la SliCtud
e
processlnput(null)-
66:
67:
...");
6:
String outUne;
64:
= "ew PrintWriter(new
BufferedOUtputStream(clientSocket.8etOutPutStrea1(J,1
63:
public TriviaSorver() {
super("TriviaServer");
try
Buffl ,
62:
22:
23:
60:
61:
21:
477
isr
new
InputStreanReader(clientSocket.getlnputStreain());
103:
104:
105:
return false;
I 470
't
Dla 18
471
2.
3.
4.
5.
caten (IOException e) {
System.err.Drintin/c
6.
7.
r()
- :::
Triylltm.r
^'
F.l corazn del ejemplo Trivia csi en el servidor. El programa del servidor Trivia se llama
TriviaServer. Las variables de instancia definidas en la clase TriviaServer son:
private
static final
int
private
static final
int WAITFORCLIENT =
PORTNUM =
1234;
0;
private
static final
int WAITFORANSWER =
1;
private
String[]
""">
answers;
private ServerSocket
.,,
espera a un cliente
if (serverSocket == nuil)
serverSocket;
private
int numQuestions;
prvate
int
num = 0;
prvate
int
state = WAITFORCLIENT;
try
>
return-
ClentSock = serverSocket.accept,,;
catch (IOException e) {
kW oslado i|iie definen los diferentes estados del servidor; en un momento m.i.s \cr.i oslas
constantes en accin. Las variables de pregunta y respuesta son arreglos de cadenas que se
socket");
SySt
connecr
System.exit(i);
ulili/an para guardar las presuntas y sus respuestas correspondientes. La variable de instancia
serverSocket mantiene la conexin con el socket del servidor. Para guardar el nmero lolal
de preguntas se utiliza numQuestions, en tamo que num es el nmero de las preguntas
^ P-nto de PregUnta/resPuesta
hechas. L; variable state contiene el estado actual del servidor, como est detmido por las
lies constanles de estado (WAITFORCLIENT, WAITFORANSWER y WAITFORCONFIRM). Finalmente,
la variable rand se utiliza para escoger preguntas al azar.
TriviaServer()
super("TriviaServer");
try
{
serverSocket
= new ServerSocket(PORTNUM);
System.out.println("TriviaServer
up
and
running
...");
entrada del
usuari0
.v.!,i.\;-;'P
Da 18
|478
149:
109:
110:
111:
112:
113:
151:
108:
(data[i]
==
153:
numQuestions++;
115:
int start = 0,
116:
boolean
117:
if
118:
i < data.length;
if
120:
(byte)'\n')
(isQ) {
questions[index]
start
i++)
163:
else
166:
124:
start
125:
isQ
126:
index++;
131 :
132:
170:
true;
start = i + 1;
174:
(FileNotFoundException e)
System.err.println("Exception:
136:
catch
(lOException e)
System.err.printlnC'Exception:
return
144:
147:
148:
mtodo dennido en
145:
146:
de los eventos de
clie_n,e se llama
true;
141:
143:
comandos. Ta, ve
139:
142:
178:
return false;
138:
140:
177:
return false;
questions");
137:
break;
}
return outStr;
176:
"Bye."j
state = WAITFORCLIENT;
175:
catch
outStr =
172:
173:
134:
135:
else
171:
i
file");
133:
169:
1);
129:
130:
outStr = questionsnuml;
State = WAITFORANSWER;
168:
start,
127:
128:
:ztZ,;,r
167:
= new String(data,
' '
165:
1);
answers[index]
(.y/nr;
case WAITFORCONFIRM
164:
start,
122:
123:
break;
162:
isQ = false;
121:
state = WAITFORCONFIRM;
161:
= new String(data,
Want anotner?
160:
true;
(data[i] ==
119:
159:
ndex = 0;
(int i = 0;
strequ"r
158:
cadenas
for
// verifica la respuesta
156:
157:
114:
'
case WAITFORANSWER:
154:
155:
isQ =
break;
152:
(byte)'\n')
numQuestions /= 2;
questions = new String[numQuestions];
//
outStr = questionstnumj;
state = WAITFORANSWER-
150:
switch
(state)
case WAITFOHCLIENT:
//
hace
una
pregunta
ncluveene, Ido 8
;isc Trivia m
de.
Da 18
480
481
47:
46:
1:
import
java.io.*;
49:
2:
import
java.net.*;
50:
5:
6:
7:
8:
52:
1234;
arguments)
57:
58:
11:
59:
12:
String
60:
13:
in
nuil;
address;
14:
lnea de comandos
15:
if
(arguments.length != 1) {
System.out.println("Usage:
16:
21:
22:
//
try
24:
27:
29:
3e:
PORTNUM);
new lnputStreamReader(socket.getInputStream());
caten {lOException e) {
System.err.println("Exception:
31:
socket "
+ e.getMessageO);
32:
System.exit(i);
couldn't
crate
stream
35:
36:
try
37:
38:
String inStr;
39:
int
40:
41:
42:
43:
44:
45:
46:
?f
o. iDe ah e, argumenl0
lgn can.
c;
!= nuil)
"
+ inStr);
(inStr.equals("Bye."))
break;
el nomore de dorninio
33:
34:
in = new BufferedReader(isr);
out = new PrintWriter(socket.getOutputStream(),true);
26:
28:
25:
^ coudos. S cod a
el ^ Ce ,fmM
address = arguments[0];
23:
^1^
else
20:
* con,
18:
19:
61:
catch (lOException e) {
return;
17:
in.close();
socket.cise();
55:
BufferedReader
9:
out.close();
56:
10:
9
m
// limpia todo
53:
54:
''
str.setLength(e);
51:
3:
4:
out.println(str.tostringo)';
out.flush();
!=
'\n')
hadend
:-
>
Da 18
1482
Comuna.,<,, .,
Hoy hemos aprendido a utilizar URLs y conexiones URL, jumo con flujos de entrada para
Trivia en accin
Al igual i|iic en fortune, el servidor Trivia debe estar en ejecucin par;i que el cliente
pueda trabajar, fara iniciar todo, primero debe ejecutar el servidor por medio del intrprete de
ma scmdor se sita en un puerto de Internet, esperando un cliente que haga contacto con*I.
java TriviaServer
El cliente Trivia tambin se ejecuta desde una lnea de comandos, pero debe especificar la
direccin de un servidor como nico argumento. El siguiente es un ejemplo de cmo ejecutar
el cliente Trivia y conectarse al servidor localhost:
java Trivia
"localhost"
"127.0.6.1"
Despus de ejecuiar el cliente Trivia y responder algunas preguntas, el resultado que debe
ver es similar :t ste:
Client:
Wrong,
Client:
Client:
93
Client:
Server:
Server:
(y/n)
(y/n)
(in degrees
F)?
Client:
9008
Client:
Server:
Bye.
para imitar un formulario, obtener la entrada del usuario y construir un nuevo obje.o
URL con los datos incluidos al final: despus, slo pase ese URL al nave-ador por
mJio de getAppletContext(). showDocument () y ste enviar los restados del
K Tiene que imitar lo que hace lu navegador para enviar formularios por medio de POST.
Server: Wrong,
Puesto que la informacin est codificada en el URL. puede escribir un applet de Java
meteorites
Server:
Los formularios HTML se pueden enviar de dos maneras: mediante la solicitud GET o
El comando es el siguiente:
5AUJJA
I* Cmo puedo imitar el envo de .... formulario HTML cu un :,,,>le di- Java?
R En realidad, los ppiets dificultan esto. La mejor manera (y la ms fcil) es utilizar la
notacin GET para hacer que el navegado,-enve la informacin del formulario.
Tambin puede tratar de ejecutarlo con la dileccin 1P que representa el pueno "localhost".
java Trivia
Preguntas y respuestas
Abra un sockel en el servidor y enve los dalos, lo cual se ve como lo siguiente, (l-l fr
malo exacto est determinado por el protocolo HTTP; eslo slo es un subcon.junlo.)
Contentype: application/xwww-formuriencoded
Content-lengtn: 36
(y/n)
Resumen
La.concctividad de redes tiene muchos que usted puede aprovechar en sus propias aplica
ciones. (Juiz mi se ha dado cuenta, pero el proyecto GetFile l'ue un navegador Web rudi
mentario. Captur una pgina de texto de Web y la despleg en un programa de Java. Desde
luego que la colocacin de HTML es lo que convirti un cmulo de diquelas en una pagina
Web real. Sun escribi todo un navegador Web en Java: Hoava.
Semana
Da
19
JavaBeans y otras
caractersticas avanzadas
TJZkTJT
T quen rpid0
Java-esnuevafcilversin
semirsedelaber^uajeL
la gran cam.dad de clases
ofrece como
Sun. Cada
unnecm iiy y
Por fortuna, para estar en posibilidad de crear programas tiles no tiene que domi
nar todas las panes de la biblioteca estndar de clases de Java. Puede enocar 7
Jiiviillriins.
D.i 1!)
487
En general, el objetivo de hoy es familiarizarlo con el tema como un primer paso hacia el uso
de estas clases. fin embargo, tambin tendr la oportunidad de trabajar con transferencia de
'ii
JavaBeans
Una tendencia creciente eivelxampo del desarrollo de software es la idea de componentes reutiliwihles: elementos de un pmgrama que se pueden utilizar con ms de tui paquele de soltware.
Trmino Nuevo
::.Trr
nij-nu- ivulilizahle.
Si desarrolla partes de un programa de forma que sean independientes, sera posible ensam
>
<
blar esos componentes en programas con un desarrollo mucho ms eficiente, lista idea de
volver a utilizar software cuidadosamente empaquetado se lom prestada, hasta cierto punto,
de la ide i de las lneas de ensamble tan popular en Eslados Unidos durante la Revolucin
Industrial, mucho ames deia era moderna de la computacin. La idea, tal como se aplica al
software es fabricar componentes pequeos y reulizables una sola vez. y volverlos a usar
-:~,
El objetivo de JavaBeans
; r; ;is;idos-cn
Rededor
'an>bin tiene el efec
. Eslo
Nota
especficas
vlcXi
"" n!?O r'"1S ll bcnefit'ilis '^''"^ aplicables a
c ensiR.is un, imponamcs de Java, aunque poco mencina
''"
s S!,ir' r^;"rs"eictia
de ia ^^^ * *, es ,a ,,,,.
' \''P'""' '' ie "" nbJe|0 para guardar y recuperar su csiado
Da 19
1488
489 |
lin JavaBeans la computacin distribuida se lia resumido limpiamente para mantener las cusas
Trmino Nuevo
componentes de JavaBeans.
*' AWT Cm
"
"***" *
X2e ^
siten soporte distribuido. La meta final en el diseo de JavaBeans tiene que ver con los lemas
de tiempo de diseo y la forma en que los programadores construyen aplicaciones utilizando
desarro.,0 de componen^, ~ ^^
ajustadas, sin dejar de ofrecer una amplia gama de opciones a los programadores que nece
- * -,bi,,dad y
' el * * tos
- o, de
componentes muestran
-, .ener que
La API de JavaBeans
u OCX. De esta forma, los programadores especifican cmo se van a utilizar y manipular los
componentes en un entorno de desarrollo.
"da la funcionalidad
conjunto de AP,,
sta de los
Aunque la naturaleza orientada a objetos de Java proporciona los medios para que los objetos
trabajen en conjunto, hay reglas o estndares que gobiernan la forma en que se conduce esta
interaccin. Estos tipos de reglas son necesarios para obtener soluciones robustas para los
componentes de software, y estn disponibles a travs de JavaBeans.
JavaBeans especifica un amplio conjunto de mecanismos para la interaccin entre los objetos,
junio con acciones comunes de soporte necesarias para la mayora de los objetos, como la
persistencia y el manejo de eventos.
* Introspeccin
JavaUeans proporciona el marco de trabajo que hace posible la comunicacin del compo
Da 19
1490
Las APIs de combinacin de interfaz de usuario proporcionan los medios para que un compo
nente una sus elementos con los de un contenedor. La mayora de los contenedores tienen
mens y barras de herramientas que necesitan desplegar cualquier caracterstica especial
http://www.sun.com
proporcionada por l componente. Las APls de combinacin de imerfaz permiten que los
componentes acrecen caractersticas al men y a la barra de herramientas del documento
del contenedor. Taijibin definen el mecanismo que facilita el diseo de la interlaz entre los
componentes y sus|contenedores.
Las APls de persistencia especifican el mecanismo por el cual se pueden guardar y recuper
los componentes ditro del contexto de un documento contenedor. En forma predeterminada, los
componentes heredan el mecanismo de sealizacin automtica proporcionado por Java.
El mtodo showstatus()
ElmtodoshowStatuso delaclase
Las APIs de manejo de eventos especifican una arquitectura que define la forma en que interactan los componentes entre s. El AWT de Java incluye un poderoso modelo para manejar
eventos, el cual sirve de base para las APIs que manejan los eventos de los componentes,
Este mtodo puede ser llamado con una instruccin como ,a sigu.ente-
listas APls son muy importantes para darle a los componentes la libertad tic interaciuar entre
ellos de manera consistente.
Las APls de introspeccin definen las tcnicas por las cuales los componentes hacen
disponible su estructura interna al momento del diseo. Estas APls tienen la funcionalidad
necesaria para permitir que las herramientas de desarrollo le pregunten a un componente por
su estado interno, incluyendo las interfaces, mtodos y variables de los miembros de que
consta el componente. Las APIs estn divididas en dos secciones diferentes basadas en el
nivel en que se utilizan. Por ejemplo, las APls de introspeccin de bajo nivel le permiten a las
herramientas de desarrollo el acceso directo a las paites internas del componente, la cual es
una funcin que usted no querra en manos de los usuarios. Esto le lleva a las APIs de nivel
:M 1
proporciona, i
superior. stas utilizan a las APIs de nivel inferior para determinar qu panes del componente
cin.
se han de exportar para ser modificadas por el usuario, de modo que aunque las herramienta*de desarrollo utilicen ambas APIs. slo utilizarn las APIs de nivel superior cuando propor
cionen informacin del componente al usuario.
una aplicacin, las herramientas de desarrollo visual utilizan estas APIs para proporcionar un
medio visual para el diseo y edicin de los componentes. La seccin de un componente con
capacidades visuales de edicin, est diseada para estar separada fsicamente del compo
nente, listo se debe a que los componentes autnomos de tiempo de ejecucin pueden ser lo
ms compacto posible. En un enlomo puro de tiempo de ejecucin, los componentes se trans
fieren slo con el componente de tiempo de ejecucin necesario. Los programadores que
quieran utilizar las facilidades de tiempo de diseo del componente, pueden adquirir con
facilidad la porcin de tiempo de diseo del componente.
i .,
'
"
T" mW:in'S"U>
r::rera
::r crear----- ^:;t:~;:l
1492
Da 19,
'
4931
Crear una nueva instancia de la clase UfiL para vincularla a una pgina nueva, aunque aqu es
mucho ms fcil trabajar con esa instancia que en el proyecto de ayer.
Para crear un nuevo objeto URL, utilice uno de estos cuatro distintos constructores:
Figura 19.1
El applet B'ittonLink.
BMS
URL(String) crea un objeto URL desde una direccin completa de Web, tal como:
;
http://www.prefect.com/java21 oftp://ftp.netscape.com.
URL(URL,
String) crea un objeto URL con una direccin base proporcionada por el
URL especificado y una ruta relativa dada por String. Utilice getDocumentBase()
para el URL de la pgina que contiene su applet, o getCodeBase () para el URL del
archivo de clase de su applet. La ruta relativa se aadir a la direccin base.
URL {String, String, int, String) crea un nuevo objeto URL, con un protocolo
(como http, o ftp), el nombre de host (como www. pref ect. com o ftp. netcom. cora),
un
puerto.
try {
theURL = new URL("http://www.mcp.com );
} catch (MalformedURLException e) {
System.out.println("Bad URL: " + theURL);
Una vez obtenido un objeto URL, todo lo que tiene que hacer es pasarlo al navegador, con lo
que el navegador cargar esa direccin:
getAppletContextO .showDocument (theURL);
El navegador que contiene el applet de Java con este cdigo, cargar y desplegar el docu
4:
5:
6:
7:
8:
"http://www. prefect.com/java2r)
El listado 19.1 contiene dos clases: ButtonLink y una clase de ayuda llamada Bookmark. El
applet ButtonLink despliega tres botones que representan posiciones importantes en Web;
los botones se nuestran en la figura 19.1. Haciendo clic en los botones, se carga el documen
to de las posiciones a las que se refieren los botones.
return true;
ft
Da 19
1494
29:
30:
void|linkTo(String ame) {
IJRL theURL = nuil;
31:
32:
33:
|6r
(int
if (ame.equals(bmList[i].ame))
34:
if
36:
(theURL
37:
i = 0;
i< bmList.length;
i++)
{.
'*.* de su ap ,,".,,
"
C" Va
theURL = bmList[i].url;
35:
495
applei
!= nuil)
getAppletContext().showDocument(theURL);
38:
39:
40:
41:
class
Bookmark
42:
String
43;
URL
rr~
ame;
url;
44:
45:
Bookmark(String ame,
46:
this.name
47:
try
48:
49:
50:
String theURL)
ame;
catch
(MalformedURLException
e)
System.out.println("Bad URL:
"
+ theURL);
51:
52:
53:
HEIGHT=120 WIDTH=240>
</APPLET>
Hay dos clases que constituyen a este applet: la primera, ButtonLink, implementa el applet
actual, la segunda, Bookmark, es una clase que representa un marcador. Los marcadores
tienen dos parles: un nombre y un URL.
Este applet en particular crea tres instancias de marcadores (h'neas S-13) y las guarda en un
arreglo de marcadores. El applet se puede modificar fcilmente para que acepte marcador
como parmetros de un archivo HTML. Para cada marcador, se crea un botn cuya etiqueta
es el valor del nombre del marcador.
Al presionar los botones se llama al mtodo linkTo(). ste, tal como se define en las linea
30-38, extrae del evento el nombre del botn, lo utiliza para ver el URL del objeto Bkai
y le dice al navegador que cargue el URL nombrado por ese marcador.
apple,
;..'a clase MyAppletSubclass).
"" "*' ""* ^
p (e
(en Le
esle ca
cas.
conQCCCSO
una-de
ios
;l cada e'cmento dl
Dia 19
496
nombre a sus app.ets y luego refirase a ello, por nombre dentro de. cuerpo de.
^ * pudieran tr;"ltifa
Para darle nombre a un applet, utilice el atributo^AME para <APPLET> en su archivo HTML:
NAME="receiver ">
</APPLET>
Para referirse a otro applet en la misma pgina, use el mtodo getApplet () del contexto del
apoto con el nombre de ese applet. Esto le da una referencia para el applet de ese nombre.
Entonces se podr referir a ese applet como si fuera otro objeto: llamar a mtodos, establecer
sus variables de instancia y as sucesivamente. He aqu un cd;go que hace eso:
// saca provecho del applet receptor
valu);
En csic ejemplo, usted utiliza el nilodo getApplet () pan, obicncr una referencia del appici
denominado "receiver". Observe que el objeto devueho por getApplet () es una mstancia de
la clase genrica Applet; probablemente tendr que convenir ese objeto en una instancia
de su subclase. Una vez dada .a referencia a. apple, nombrado, puede llamar mtodos en ese
applet como si fuera otro objeto en su propio entorno. Aqu, por ejemplo, s, ambos applets
tienen un mtodo update(), puede decirle al receptor que se actualice a si Husmo por mecho
de la informacin que tiene el applet actual.
Si le pone nombre a sus applets y se refiere a ellos por medio de los mtodos descritos en esta
seccin, permitir que sus applets se comuniquen y permanezcan en sincrona entre ellos,
proporcionando un comportamiento uniforme entre todos los applets de su pagina.
En |, versin I. I de Java, se agreg el soporte para las operaciones de cortar, copiar y pega,
entre los componentes de una interfaz de usuario del AWT y otros programas que se ejecu.en
en la misma plataforma, aunque no se hayan implementado en Java.
Con anterioridad, en el AWT slo poda copiar y pegar datos entre componentes que tenan
CZ funcionalidad incluida en sus plataformas nativas (por ejemplo, se poda cop.ar texto y
at
Flavo
Da Piavor
^ "" ^"^"^
^"^"^ bor
bor ".egiblc".egiblc- EEl objeo
? ^ '*'* ^
resultante .endrd un Upo MIME de .pplic.tion/,-,.v.
,.v.,.ri.Uz..
1498
DataFlavor{String,
Da 19
puede mili, ,
Cualquier com
Con ese objet de sabor de datos, y para negociar la forma en que se transferir la informa
ue desee milb-,
cin, puede pjegunlai por sus valores o comparar los lipos MIMI: con oros objetos tic salior.
Los sabores d dalos son utilizados por los objelos transferibles, los cuales se definen por medio
de la interfaz transf erable. Un objeto iransfcrible deber incluir l:i informacin que se va a
transferir y \ai instancias de cada sabor que represente a ese objeto. Para que su objeio se pueda
negociar y transferir, tambin liene que implementar los mtodos getTransf erDataFlavors(),
,,,
"7 71"'- ~-
Sr"" * - *
del portapapelex).
inipleinenla ji objeio simple iransfcrible para transmitir cadenas de texto. Si su inters principal
es copiar texto, StringSelection es un lugar excelente para comenzar (y, de hecho, quiz es el
nico objeto iransfcrible que necesita).
Observe que los objelos transferibles se usan para encapsular datos y para describir su lonnalo; no hacen nada en ninguno de los extremos para formaiear esa informacin. Esa es respoTV
sabidad de su programa, al utilizar el ponapapeles (Clipboard) para obtener dalos de una
El portapapeles
.,
' ^:
Cuando tenga un objeto transferible, utilice un ponapapeles para transferirlo enire componentes
y desde Java a la plataforma nativa. Java 2 proporciona un mecanismo de ponapapeles de uso
fcil que le permite colocar dalos en el ponapapeles y recuperarlos del mismo. Puede utilizar el
: .
3
4
,;
fuente.
:.,
' *"
,, ,-, ,, ,,f,
ponapapeles estndar del sistema para mover informacin hacia, y desde, oros programas que
se ejecuten en la misma plataforma nativa, o bien utilice sus propias instancias del ponapapeles
""t
parte del paquete java .awt .datatransf er. Puede acceder al Clipboard estndar del sis
Una observacin importante en relacin con el portapapeles del sistema, es que los applels no
tienen aceefso al sisiema por razones de seguridad (podra haber informacin confidencial en
ese portapapeles). Esio evita que los applets puedan copiar y pegar cualquier cosa en, o desde.
Figura 19.2
El applc CopyPaste.
Da 19
500
2:
import java.awt.event.*;
3:
4:
5:
6:
import
50:
java.awt.*;
52:
53:
java.awt.datatransfer.*;
54:
55:
9:
TextField tfCopy,
10:
11:
12:
copy,
58:
paste;
59:
tfPaste;
60:
63:
64:
System.exit(O);
16:
test.addWindowListener(l);
20:
test.setSize(200,
21:
test.showf);
it (e.getSourcef) == COpy)
70:
150);
docopy();
71:
72:
doPaste();
73:
23:
CopyPaste()
74:
25:
26:
27:
28:
setLayout(flo);
29:
30:
31:
32:
paste =
33:
35:
copy.addActionListener(this);
36:
paste.addActionListener(this);
37:
paste.setEnabled(false);
add(copy);
46:
add(tfCopy);
41:
add(paste);
42:
add(tfPast);
76:
contents)
77:
78:
ani un
44:
47:
48:
49:
void
doCopy()
if (tfCopy.getText()
43:
46:
38:
39:
75:
cacioncs de Swino
34:
45:
j.
69:
22:
24:
#.toStrlng(
66:
68:
};
19:
65:
67:
17:
18:
62:
15:
.setText(txt)-
61:
14:
56:
Clipboard clip;
13:
void doPaste()
57:
7:
8:
paste.setEnabled(true);
51:
1:
avanzadas
!= nuil)
this);
ei
Cl b'n C^ Fr-- * "na .11 m-o-
Da .19
1502
campo en la lnea 47, se utiliza para crear ua,nuevo objeto transferible en la lnea 48 y
se coloca en el ponapapeles en la lnea 49. Despus, se activa el botn Paste To.
La arquitectura de la RMl
Lneas 54-66 Cuando se hace clic en el botn Paste To, se llama al mtodo
doPaste () . Pura verificar el contenido del ponapapeles. se tnili/a el objelo
Transf erable. Si noesta" vaco, se recupera la informacin (lineas 58 y 5V) y se
coloca en el campo de texto Paste To (linca 60), Una vez hecho esto. Paste To queda
desactivado.
Lneas 75-77
usted se comunica entre objetos est definido y estandarizado en la RMl. sta es un mecanis
pa s de oLr
^ J0S ~S C" el fi" * P- objetos completos o
Zlos
12121"
?
^
"i"""3ocurrir
^ durante
VUlOr''"'laC01"
^o
jar los errores de la red que pudieran
operacin
remota. accinales para mane
de estas capas para llegar a su dest.no (consulte la fio,,,,, ,;..-,,. E|| a,l|u|;lJ ,,., |a.s ^^
Figura 19.3
Las capas de la RMl.
CI ion lo
Capa de relerencia
Capa de transporte
Aunque el concepto de la RMl pudiera presentar visiones de objetos repartidos por todo el
mundo comunicndose alegremente entre s, en realidad se utiliza en situaciones ms tradi
cionales cliente/servidor. Una sola aplicacin de servidor recibe conexiones y solicitudes de
un cieno nmero de clientes. La RMl slo es el mecanismo de comunicacin entre el cliente
y el servidor.
Aplicacin
Capa de stubs
mo ms sofisticado para comunicarse entre objetos de Java distribuidos, que una simple
conexin de socket. Usted le puede hablar a olio programa de Java, por medio de la RMl. sin
Nota
Servidor
Aplicacin
Capa de esqueletos
remota
remola
Red
Capa de transpone
k:H(M
con los locales: el objeto siub es un sustituto local del objeto remoto.
con
o t )os objelos
W y coneSq"que (ralan
S PCmiiten
;' 'aS d!'SeS
dd ClC"le
y el *"*<*
como
ruma |ocu|cs
y ml.z;ii
cxociaincnic
f;is n comportarse
,sm;fc;i|.;ic_
.en ,.cas del lenguaje de Java para accesar a esos objetos. La capa.de referencia remota separa el procesamiento de los objetos remotos en su propia capa, la cual se puede optimizar o
volver a tmplememar, independientemente de las aplicaciones que dependen de ella Por lti
mo, la capa de transpone de red se utiliza en forma independiente de las otras dos de modo
o
i
Da 19
504
que usted puede usar distintos tipos de conexin de sockets para la RMI (TCP, UDP o TCP
con algn otro protocolo, como el SSL).
Cuando una aplicacin clienle hace una llamada a un mtodo reinlo. l;i llamada se pasa ni siub
y de ah a la capa de referencia, la cual empaqueta los argumentos en caso necesario y los pasa
al servidor por medio de la capa de transporte; una vez en el servidor, la capa de referencia
desempaca los argumentos y los pasa al esqueleto y de ah a la iinplementacin del servidor.
servidor,
^^^
lado del
el administradora
"^ ""**
I^ T
Luego, los valores devueltos para la llamada al mtodo emprenden el viaje de regreso hacia el
"* Cln"CT
Trmino Nuevo
Puesto que los objetos se deben convertir en algo que se pueda pasar por la red,
la caracterstica de empacar y pasar argumentos de mtodo es uno de los aspec
r .1 servido, ,,, ,,
objeto se pueda sealizar, la RMI lo puede utilizar como un parmetro de mtodo o un valor
devuelto. Los objetos susceptibles de sealizacin incluyen todos los tipos primitivos de Java,
objetos remotos de Java y cualquier otro objeto qi'e mplemente la inierfaz Serializeable
(la cual incluye muchas de las clases del JDK 1.2 estndar, como iodos los componentes del
AWT).
Los objetos remotos de Java, utilizados como parmetros de mtodo o valores desuellos, se
pasan por referencia tal como lo haran en forma local. Sin embargo, todos los dems objeios
son copiados. Tome nota de que este comportamiento influir en la forma en que escriba sus
programa: cuando stos utilicen llamadas a mtodos remotos; por ejemplo, usted no puede
pasar un aTeslo como un argumento a un mtodo remoto, hacer que el objeto remoto cambie
ese arregle y esperar que el cambio se refleje sobre la copia local. sta no es la forma en que
se compouan los objetos locales, en donde todos los objetos se pasan como referencias.
java.activation
java.rmi.server
Para imp ementar una aplicacin cliente-servidor, basada en la RMI, primero debe definir
una inier az que contenga todos los mtodos que soporte su objeto remoto. Todos los mtodo-
de esa inierfaz deben incluir una clusula throws RemoteException, la cual manejar los
problem; s potenciales de la red; esto podra impedir la comunicacin entre el clienle y el
servidor.
Da 19
506
La API de JDBC incluye clases para las construcciones comunes de bases de datos SQL,
incluyendo conexiones, instrucciones SQL y conjuntos de resultados. Los programas Java que
uliMzan JDBC tienen la capacidad de usar el modelo de programacin SQL para emilir
instrucciones SQL y procesar los datos resultantes. La API de JDBC depende en gran parle
de un administrador de controladores que soporte la conexin de mltiples consoladores a
diferentes bases de datos. Los controladores de bases de datos JDBC se pueden escribir lotalmente en Java o implementar a travs de mtodos nativos para unir las aplicaciones de Java
con las bibliotecas de acceso a la base de dalos.
JDBC tambin incluye un puenle entre JDBC y ODBC, la imertaz comn de Microsoft para
acecsar a las bases de dalos SQL. El puente JD13C-ODI5C permite que los controlados
JDBC se usen como controladores ODBC.
Las clases JDBC son parle de Java 2 como el paquee j ava. sql c incluyen clases para mane
jar coniroladores, establecer conexiones con las bases de datos, construir consullas SQL y
procesar los resultados.
Preguntas y respuestas
1'
showStatus(,
nfor
"Mr,, el estado ele su iipp|c, cree un, c,,|llL,:i (lc ,s,,do cn c( lnis|n()
...formado,, actualizada que neccsi.c prcsenl.-.r
|c| C()n |a
TT??
t se des.ruven con
Resumen
Cuando se public la versin I de Java, en 1995, el lenguaje se adaptaba ms a la progra
macin de applets que al diseo kilal de la aplicacin.
Eso ya no sucede con Java 2.. porque ahora el lenguaje ofrece un soporte slido para las
caractersticas como diseo de componentes para software, invocacin a mtodos remolos,
coneclividad con bases de dalos y sealizacin de objetos.
El material que hemos cubierto hoy es un trampoln para mayores exploraciones de los
paquetes y clases que ofrecen soporte para estas caractersticas. Una vez que domine las bases
del lenguaje Java, estar listo para atacar estos temas avanzados en libros, cursos y en su
propia exploracin de la API de Java.
Durante los prximos dos das se concluir su introduccin al lenguaje Java. Aprender a
crear nterfaces grficas de usuario por medio de Swing, la nueva solucin de manejo de venlanas que ofrece Java 2, y cmo convertir esas interfaces en aplicaciones funcionales.
Semana 3
Da
Swing utiliza la misma infraestructura de clases que el AWT, lo cual hace posi
ble combinar los componentes de ambos en la misma interfaz. Sin embargo, en
algunos casos los dos tipos de componentes no se comportarn correctamente
Precaucin
El primer paso para crear una aplicacin simple de Swing es crear una clase que sea una sub
clase de JFrame. La clase JFrame es una extensin de Frame, y se puede utilizar de manera
sa con r
similar.
El cdigo que aparece en el listado 20.1 puede ser una estructura para cyalesquier aplica
2:
^ ^ ^ ^
3:
u ^ui
^dowsoSolan.ounnuevoesu.oun.eodeJa
^ ^ ^^.^ M(uiL
iraport java.awt.GridLayout;
import java.awt.event.;
import javax.swing.*;
4:
5:
6:
7:
8:
publie
Framework()
super('Application Title");
9:
10:
11:
12:
13:
14:
args)
15:
16:
siguiente:
17:
18:
19:
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
511
513|
El programa del listado 20.2 usa la estructura de ja aplicacin y agrega un boln al panel de
contenido del marco. El boln se crea desde la clase JButton, la versin Swing de un botn
seleccionable. Este programa es similar al proyeelo Slacker del da 11, "Construccin de
m
m
m
import
java.awt.GridLayout;
2:
import
java.awt.event.*;
3:
import
javax.swing.*;
publie
class Swinger
4:
5:
extends JFrame
6:
7:
8:
9:
10:
publie
11:
12:
Swinger()
super("Swinger");
JButton
hotButton
new JButton(note);
13:
Setvisit>le(.ooleano). S. el
14:
15:
pane.add(hotButton);
16:
aniumen,o
17:
setContentPane(pane);
18:
19:
..
20:
21:
gar ant.s c
Los componemes se enen que ag&
args)
22:
23:
WindowListener
1 = new WindowAdaper()
a-al.
e)
System.exit(0);
25:
26:
27:
28:
};
frame.addWindowListener(l);
29:
30:
frame.pack();
31:
frame.setVisible(true) ;
32:
33:
Reuni ad(conponente).
fe
"
Da 20
514
5151
El nico material nuevo en el listado 20.2 son las lneas 10-17, en las que tiene lugar lo
siguiente:
Lneas 12 y 13
Lneas 14 y 15
Lnea 17
Una vez que haya establecido el panel de contenido para un marco, utilice mtodos como
setLayout (AdministradorDeDiseo) y a(Coitiponente) en ese panel. Usted no llama a
pane.add(button);
setContentPane(pane);
Figura 20.2
Un cuno en un
JButton.
Nota
Esto tambin es vlido para los applets, los cuales se mplementan en Swing
a travs de la clase JApplet. Tiene que crear un objeto JPanel, agregarle
componentes, y hacer que ese panel sea el panel de contenido para el
applet. Tome nota de que cualquier applet que cree con Swing y Java 2 no
funcionar en navegadores Web que nicamente soporten Java 1.0.2.
Tambin tiene que encontrar la forma de que las clases de Swing estn
disponibles para el applet; tomar mucho tiempo descargarlas en la pgina
Tambin hay constructores para iimclios de los coni|xmenies que loman un obje
to I con como argumento. Un icono es un grfico pequeo, normalmente en
formato G1F, que se puede utilizar en un botn, etiqueta u otro elemento de la interfaz, como
un medio visual para identif.car al componente que representa. Usted ve iconos todo el tiem
Etiquetas
h aneadn de una etiqueta
Swino.Constants: LEFT^S
loma el nombre de archivo o URL de un grfico, como argumento nico. El ejemplo siguiente
carga un icono del archivo unabom.gif y crea un JButton con el icono como su etiqueta. La
figura 20.2 nos muestra el resultado.
? clarjLabei-La fum>^ -
Algunos de los mtodos constructores que puede usar, incluven ,os siguien.es-
nt) Es una
po en las carpetas de archivo de los sistemas operativos grficos como Windows 95 y MacOS.
La creacin de un. Icn se hace de la misma manera que con un objeto Image. El constructor
j con el
Botones
pc:rLr
combinacin de ambos.
517
Da 20
,16
JCheckBox( Icono)
icono especificada, que se selecciona en caso de que el segundo argumento sea true.
JCheckBox(Cadena,
jButton
Icono)
jButton(Cadena,
Icono)
tas especificadas de lexto e icono, que se selecciona en caso de que el segundo argunienid sea true.
lin Swing, los grupos de casillas de \erilicacion se iiiiplenieiiiun con la clase ButtonGroup.
Como ha visto, en un grupo de casillas de verificacin slo se puede seleccionar un compo
nente a la vez. Para agregar un componente al grupo debe crear un objeto ButtonGroup y
a-o
L0i
-* *<*
w
Ikaclos.
iw. unc;h
Listas de seleccin
Las listas de seleccin, que se crearon en el AWT por medio de la clase Choice. son algunas
de las implementaciones posibles con la clase JComboBox.
2. Para agregar eiemenios a la lista, se usa el niciodo addltem( Objeto) de los cuadros
combinados.
jTextArea(int
columnas.
JTextArea(Cacena,
^ de lexlo con
el nmero especificado de
Este ltimo mtodo convierte el cuadro combinado en una lista de seleccin: las nicas selec
Casmas de verificacin v^
mento f alse.
deopc,on
ciones que puede hacer el usuario son los elementos agregados a la lista.
Barras de desplazamiento
En Swing, las barras de desplazamiento se implememan con la clase JScrollBar. El tuncionamiento es idntico al de las barras del AWT, y puede utilizar los siguientes mtodos
Da 20
I 518
JScrollBar(in)
Diseo de una
29
30
orientacin, valor inicial, tamao del cuadro ele desplazamiento, valor mnimo y valor
31:
32:
mximo especificados.
33:
35:
SwingConstants.
36:
37:
38:
39:
Si recuerda bien, uno de los proyectos del da 14, "Desarrollo de interfaces de usuario avan
41:
42:
43:
49:
java.awt.*;
2:
import
java.awt.event.*;
3:
import
javax.swing.*;
4:
5:
6:
7:
8:
9:
18:
11:
12:
13:
14:
15:
16:
17:
18:
JPanel
"Blue");
27:
28:
SwingColorControls(SwingCoiorTest parent
String 11, string 12, String 13) {
frame = parent;
add(tfield2);
62:
add(tfield3);
63:
64:
"'
65:
"Red",
"Hue ,
66:
67:
68:
69:
10, 0, 0);
pane.add(RGBcontrols);
pane.add(HSBcontrols);
setContentPane(pane);
25:
26:
18) 10).
61:
add(tfleldi);
68:
59:
super("Color Test");
Saturation",
24:
56:
57:
58:
publie SwingCoiorTest()
frane.pack();
! frame.setVisible(true);
setLayoutfnew GridLayout(3,2,i0)le),.
tfieldi = new JTextFieldf"0")
55:
swatch;
pane.add(swatch);
23:
53:
19:
21:
52:
54:
20:
22:
50:
51:
inport
fraine.addWindowListener(l) ;
45:
46:
47:
1:
'
44:
48:
Listado 20.3. Texto completo de swinocolortest.java.
System.exit(0);
40:
zadas con el AWT". era el applet ColorTest, el cual permita seleccionar un color a travs de
de eventos.
34:
El siguiente proyecto crea la interfaz grfica de usuario para este proyecto mediante Swing, y
la conviene en una aplicacin en vez de un applet. Maana crear los mtodos para manejo
i-'-l
Da 20
520
Figura 20.3
La aplicacin
SwingColorTest.
Este programa se compone de tres clases: la clase principa] SwingColorTest, la clase auxi
liar privada SwingColorControls y la clase interna definida en las lneas 30-34.
nmero designado de pixeles. Al igual que muchos otros aspectos de Swing, sie liene el
Swing, al convenir los campos de texto y las etiquetas de los componentes del AWT en com
ponentes de Swing. No se necesitaron ms cambios.
JPanel en vez de un Canvas. De hecho, no hay objetos Canvas en Swing, por lo que
se deben usar paneles en su lugar.
Se crea un objeto JPanel para que sea el panel principa! ele contenido del marco.
En muchos casos, se puede implementar una interfaz creada para el AWT utilizando Swing
con pocos cambios mayores. Si est conviniendo un applet escrito para Java 1.0.2 en un pro
grama de Swing para Java 2, tendr que ejecutar cambios ms importantes en los mtodos de
manejo de eventos, los cuales comentaremos maana.
UnsupportedLookAndFeelException.
"
ciones siguientes:
try
programa, se debcrn ,, ,
UlManager.setLookAndFeel(
} caten (Exception e) {
...
t'U''
e)r
'
1522
Da 20
Diseo de unajnterfaz de
Mtodos abreviados
Un mtodo abreviado de teclado, llamado tambin teclas aceleradoras, es una
secuencia de teclado con la que se puede controlar un componente en una inter
faz de usuario. Ofrece una forma de utilizar un programa sin el ratn, y forma parte del
soporte para la accesibilidad de Swing: nuevas clases que facilitan la ejecucin de un progra
del componen
Cuando se utilizan los mtodos abreviados de teclado, simulan la accin del ratn, y la Corma
de uso vara segn la plataforma en que se utilice. En una computadora que ejecute Windows
95, un mtodo abreviado de teclado se ejecuta manteniendo oprimida la tecla Al! en combi
argumento char es la tecla que se debe usar como parte del mtodo abreviado. El ejemplo
infoButton =
new JButton("Information");
infoButton.setMnemonic('i');
sibleConttO
cin sobre herramientas con los componentes de una interfaz. Es probable que ya est familia
rizado con la informacin sobre herramientas, pues son los textos que aparecen en algunos
programas cuando detiene el puntero del ratn durante unos segundos en un componente.
La informacin sobre herramientas describe el propsito del componente. Cuando est apren
diendo a usar un programa por primera vez, la informacin sobre herramientas es un recurso
excefente para su aprendizaje.
do para el objeto *^
siguiente crea un objeto JButton y asocia el carcter ' i' con el botn:
JButton
Proporcionan un nL^n
: rros
que se pucden
TTE'"S *
Un cuadro de dilogo
estndar.
. m amm*.*.mMmtmmmiml,
-i.
El texto de una informacin sobre herramientas slo puede tener un rengln de longitud, por lo
que no puede utilizar el carcter (' \n') de nueva lnea para dividir el texto en varios renglones.
manejan auiomticamenie.
'I(L I
Da 20
524
. inputDialog
,. MessageDialog
. optionDialog
. .. ,,
...
JOptionPane.ERROR_MESSAGE)
^,
.. ,
''
'
'
Figura 20.5
Un cuadro de dilogo
de confirmacin.
El segundo argumemo puede ser una cadena, un componente o un objeto Icn. Si es una
Figura 20.6
Un cuadro de dilogo
Este mtodo devuelve uno de tres posibles valores enteros, y cada uno es una variable de
'.
525i
de entrada.
mtsms
response;
response = JOptionPane.showConfirmDialog(nuil,
"Should I delete all of your irreplaceable personal files );
La llamada al mtodo de dilogo de entrada devuelve una cadena que representa la respuesta
del usuario. La instruccin siguiente crea el cuadro de dilogo de emrada que aparece en la
figura 20.:
'
son:
. Un entero que describe el tipo de cuadro de dilogo, por medio de las siguientes varmblcsilc cbse: EnROR.MESSAGE, INFORMATION.MESSAGE, PLAIN.MESSAGE, QUES-
Input
Error",
son iguales los de la llamada abreviada del mtodo, y los dos restantes son los siguientes:
El ttulo que se va a desplegar en la barra de ttulo del cuadro de dilogo.
Una de las cinco variables de clase que describen e! tipo de cuadro de dilogo:
WARNING_MESSAGE.
JOptionPane.QUESTI0N_MESSAGE);
'
Da 20
'El icono que va a desplegar, con las variables de clase ERROR_MESSAGE, INFORMATION MESSAGE, PLAIN_MESSAGE, QUESTION^ESSAGE, WaWnG MESSGE ola
Un objeto Icn, para desplegarlo en lugar de los iconos del argumento anterior.
S. no se utilizan las opciones YES_NO_OPTION y YES NO CANCEL OPTION, un arre
glo de objetos que contenga los componentes u otros objetos que representen las
Figura 20.7
le mensaje.
Los dos ltimos argumentos le permiten crear un amplio rango de opciones para el cuadro de
dilogo. Usted puede crear un arreglo de botones, de etiquetas, de campos de texto, o bien
desphegan por med.o de. administrador de diseos de flujo, porque denuo del dilogo no hay
El ejemplo siguiente crea un cuadro de dilogo de opcin que utiliza un arreglo de obje.os JButton
para las opc.ones del cuadro y el elemento 0ender[2] como la seleccin predeterminad*
JButton[) gender = new JButton3];
gender[0j = new JButton("Male") ;
genderp) = new JButton ("Female")
devuelve un valor.
0,
rsir
Asteroid Destruction
JOptionPane.INFORMATlON MESSAGE
nuil,
Alert ,
joptionPane.WARNING.MESSAGE);
gender,
.. gender[2]);
La figura 20.8 nos muestra el cuadro de dilogo resultante con la apariencia de Motif.
Figura 20.8
Un cuadro de dilogo
de opcin.
Objeto).
Da 20
47:
pane.add(typeLabel);
48:
pane.add(type);
49:
50:
setContentPane(pane);
51:
1:
import java.awt.GridLayout;
52:
2:
import
53:
java.awt.event.*;
3: import javax.swing.*;
l\
7".
I
1B
12:
13:
14:
15:
16:
17:
18:
19:
20:
21 :
22:
23:
24:
25:
26:
27:
57:
__
59:
Information
34:
35:
36:
37:
38:
39:
40:
41 :
42:
43:
44:
45:
46:
"
+ e);
63:
64:
65:
p.
Systera.exit(O);
67:
-,;
68:
69:
nrres:o:s:P
frame.addWindowListener(l);
70:
71:
frarae.pack();
72:
frame.setVisible(true);
73:
74:
in8respns:2p
"Enter the site address:");
address = ne* jTextField(response2, 20);
La figura 20.9 presenta la ventana principal de esta aplicacin con la apariencia del sistema
(er. ssta pantalla s w incows). Hay res campos de exio con valores proporcionados por los
'
30:
33:
66:
62:
SwingConstants.RIGHT);
super("Site
(Exception e)
60:
public Info()
UIManager.getSystemLokAndFeelClassNameO);
61:
29:
32:
} catch
58:
UIManager.setLookAndFeel(
56:
SwingConstants.RIGHT);
28:
31 :
try
55:
SwingConstants.RIGHT);
11:
54:
cuadros de dilogo.
Figura 20.9
La ventana principal
"Site Type",
de la aplicacin Info.
JOptionPane.QUESTION_MESSAGE,
nuil,
Mucho de esta aplicacin es el cdigo del modelo de texto que se puede utilizar con cualquier
cholees,
choices[e]);
pane.add(addressLabel):
pane.add(address);
aplicacin de Swing. Las lneas siguientes se relacionan con los cuadros de dilogo:
Lneas 19-22
un ttulo de sitio. ste se utiliza para el constructor del objeto JTextField, el cual
pone el ttulo en el campo de texto.
Lneas 24-27
529 I
Da 20
530
Lnea 30
Semana 3
Lincas 3 1-38 Se usa un cuadro de dilogo opcional para pedir el lino do sino, l-.l
arreglo choices es el sptimo argumento, el cual establece los lies bolones del dilogo
con las cadenas del arreglo: Personal, Commercial y Unknown. El ltimo argumento,
Figura 20.10
El cuadro ele dilogo
Resumen
Da
21
Despus que varios cientos de miles de prograniadores tuvieron la oportunidad de usar las
primeras versiones de Java, una de las quejas principales se refera al AWT. Aunque permile
crear una interfaz funcional, haba algunos problemas para hacer que todas las inierfaccs tra
bajaran en plataformas diferentes y algunos elementos de una imerfaz grfica de usuario no
estaban soportados por el AWT.
Swing es una respuesta efectiva a todas eslas crticas por medio de un sofisticado sistema de
ventanas que se adapta a muchos tipos distintos de programas de Java. Si Je echa una mirada
Manejo de eventos de
Maana llevar a cabo un ejercicio para convertir una interfaz en una aplicacin completa.
Preguntas y respuestas
P Se puede crear una aplicacin sin Swing?
R Desde luego. Swing es slo una ampliacin del AWT, y puede seguir utilizando el
AWT para las aplicaciones con Java 2. En vez de usar las lcnicas disponibles para los
applets de Java 1.0.2, debe utilizar las tcnicas de manejo de eventos, sobre las que
hablaremos maana. Acerca de si debe crear una aplicacin sin Swing, ese es otro
punto. No hay comparacin entre las posibilidades que ofrece Swing y las del AWT.
Con Swing, puede utilizar muchos ms componentes y controlarlos de manera ms
sofisticada.
3i
a 21
El evento principal
En el sistema de manejo de eventos que aprendi la semana anterior, los eventos se maneja
ban i travs de un conjunto de mtodos que estn disponibles en todos los componemos.
Puesto que las versiones subsecuentes del lenguaje ofrecen soluciones muy mejoradas para
los eventos, este sistema de manejo de eventos se aplica solamente a Java 1.0.2.
Para crear aplicaciones de Swing, utilice el nuevo sistema.
import java.awt.event.*;
Escuchadores de eventos
Dentro del sistema de manejo de eventos de Java 2, si una clase desea responder a un evento
de usuario debe implememar la interfaz que maneje los eventos. Estas interfaces se llaman
escuthadores de eventos.
Cada escuchador maneja un tipo especfico de evento, y una clase puede implementar tamos
escuchadores de eventos como sea necesario.
7Zrd
P
mtodos Hr
del componente:
ActionListener
. AdjustmentListener
. itemListener
KeyListener
teclado.
. MouseListener
JRadioButton.
. MouseMotionListener
'" windowListener
Precaucin
os y maneja, cual
Da 21
1534
Manejo de eventoide
JButton zap = new JButton("Zap");
if (src == quitButton)
zap.addActionListener(this);
quitProgram();
Todos los mtodos agregados toman un argumento: el objeto escuchador de evento de esa
clase. Por medio de this, usted indica que la clase actual es el escuchador de evento.
Tambin puede especificar un objeto diferente, siempre y cuando la clase de! objeto imple-
'
sortRecords();
sortRecords ()
Cuando usied asocia una interfaz a una clase, la clase debe manejar lodos los eventos con
tenidos en la interfaz.
lee,
En el caso de los escuchadores de eventos, cuando tiene lugar el evento de usuario correspon
diente, el sistema de ventanas llama a cada mtodo en forma automtica.
La interfaz ActionListener tiene un solo mtodo. Todas las clases que Actior.Listener
publie void actionPerformed(ActionEvent evt)
iodo de
*e podra usaran
^> t"--'rar,a,, un
evento de accin:
voidactionPerformed(ActionEvent evt)
Object src = evt.getSource();
if (src mstanceof JTextField)
calculateScoref);
escuchador de evento para lor eventos de accin, utilice el mtodo actionPerf ormed() para
1 m"ia
El objeto ActionEvent y todos los otros objetos de evento son parte del paquete
java.awt.event.y a su vez son subclases de la clase EventObject.
Cada mtodo de manejo de eventos enva un objeto de evento de alguna clase. Para determi
nar qu componente envi el evento, utilice el mtodo del objeto getSource(), como en el
ejemplo siguiente:
Escriba
1:
2:
3:
4:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
5:
6:
7:
8:
9:
10:
El objeto devuelto por el mtodo getSource () se puede comparar con los componentes si
11:
12:
usa el operador == . Las instrucciones siguientes se podran utilizar dentro de! ejemplo
13:
14:
2 = new JButton("Gulldenstern'j;
publie ChangeTitle() {
super("Title Bar");
bi.addActionListener(this);
b2.addActionListener(this);
Da 21 "
536
pane.add(b1);
16:
pane.add(b2);
17:
setContentPane(pane);
18:
19:
28:
public
21:
JFrame fraroe
22:
args)
new ChangeTltle();
23:
Windowlistener 1 =
24:
public
25:
new WindowAdapterf)
void windowClosing(WindowEvent
e)
System.exit(O);
26:
27:
Eventos de accin
};
28:
frame.addWindowListener(l);
29:
30:
31':
frame.pack();
JRadioButton.
frame.setVisible(true);
32:
33:
34:
public
35:
void actionPerformed(ActiortEvent
36:
Object
37:
if
evt)
souree = evt.getSource();
(souree == b1)
setTitle("Rosencrantz");
38:
else if
39:
(souree
=-
ese componente.
'
it
b2)
setTitle("Guildenstern");
40:
repaint();
41:
42:
43:
,, , su
dc,
* -
En esta aplicacin slo se necesitan 12 lneas para responder a los eventos de accin de esta
aplicacin:
II
rauf i.
Las lneas 35-42 responden a los eventos de accin derivados de los dos objetos
Jbutton. El mtodo getSource () del objeto evt se utiliza para determinar la fuente
\"
.Da 21
Nota
import java.awt.event.*;
Un ejemplo de esto seria un programa con un botn Quit y una opcin Quit
en un men desplegable. Si en un mtodo de manejo de eventos le da el
mismo comando de accin a los dos componentes, los podra manejar con
el mismo cdigo.
' 7:
Eventos de ajuste
Los cven.os de ajuste se dan cuando se mueve un componente JScrollBar por medio de las
flechas de la barra, el cuadro de desplazamiento o haciendo clic en cualqu.er pane de la barra.
11:
16:
bar.addAd]ustmentListener(this)
15:
17:
1B: ,
..
19:
UNIT INCREMENT
. BLOCK_INCREMENT
. BLOCK_DECREMENT
21: '
22:
pane.add(valu, "South",;
pane.addfbar,
"Center");
setContentPane(pane,;
23:
24:
25:
26:
27:
28:
2S:
30:
31:
' X
32:
33:
frame.addWindowListener(l);
34:
35:
frame.pack(,;
36:
frame.setVisible(true,;
37:
38:
,.
20: '
Par, ver cul es el valor actual de JScrollBar, dentro de este melado de manejo de eventos,
mienio.
super("Well Adjusted");
13:
14:
public WelUdjusted() {
12:
//
9:
10:
Para manejar estos eventos, una clase debe implementar la interfaz Adj ustmentListener.
"eW Td.rL.yout
8:
40:
41:
source = evt.getSource();
if (source == bar, {
42:
43:
44:
45:
repaint();
46:
47:
'
evt,
Da 21
540
' 1 Iw
Im xalitla (/ l i'l'H-
!ul
541
Eventos de elemento
elmmo
, Trmino Nuevo
j
cucin WellAdjusted.
TRiyilNf?,.NUEVO
.
voi^itemStateChangeddtemEvent
^
evt)
una cadena nuil, y estn concatenadas al entero newValue para convertir el argumento
en una cadena. Como podr recordar, si concatena una cadena con un tipo diferente, Java
siempre manejar el resultado como una cadena. La cadena nuil es un mtodo abreviado
para cuando quiera desplegar algo que todava no es una cadena.
oa>"6
Eventos de enfoque
o a la ItemEvent.
componente i|i.e cM; activo para recibir entradas desde el teclado. Si uno de los campos liene
el enfoque (en una interfaz de usuario con varios campos de texto editables), lo mostrar por
m
#
El enfoque se aplica a todos los componentes que pueden recibir una entrada. En un objeto
JButton, el botn con el enfoque aparece rodeado por una lnea punteada.
2:
3:
4:
b:
6:
7:
8:
9:
18:
11:
12:
13:
Para determinar cul es el objeto que gan o perdi el enfoque, se puede llamar al mtodo
getSourceO en el objeto FocusEvent enviado como argumento a Jos mtodos
focusGainedf) y focusLost().
import java.awt.event.*;
iniport javax.swing.*;
import java.awt.*;
14:
15:
16:
17:
18:
pick.addltemUstener(this);
pick.addltem("Navigator");
pick.addltein(-lnternet Explorer")
Pick.addItem("Opera");
pick.setEditable(false)
19:
20:
21:
22:
Pane.setLayout(bord);
pane.add(result, "South");
ItemLiStener
Da 21
543 |
21.3. CONTINUACIN
pane.add(pick,
23:
24:
"Center");
siguiente:
setContentPane(pane);
25:
26:
27:
28:
29:
30:
31:
32:
System.exit(B);
33:
34:
35:
evt)
frarae.addWindowListener(1);
36:
37:
frame.pack();
trame.setVisible(true);
38:
39:
40:
41:
Eventos de ratn
42:
43:
if
44:
45:
(source == pick)
46:
47:
repaint();
4B:
49:
56:
Un clic de ratn.
);
La fi-iirn-2 I 3 muestra osla aplicacin con el elcmcnio Opera como la seleccin acm.,1 cu el
cuadro combinado. El m.odo toString() del objeto se utiliza para recuperar el texto del
objeto devuelto por getltem().
Figura 21.3
Im salida de la apli
cacin Selectltem.
Eventos de tecla
uMomm
Los >"de Ieda ocurren cuand0 se presiona una tecla en el leclad0'
iMP^ Cualquier componente puede generar estos eventos y, para dar soporte a los
eventos se tiene que implementar una interfaz KeyListener desde una clase.
usuano:
21*
544
getClickCount ()
con el ratn.
getPoint()
Devuelve, como un objeto Point, las coordenadas x,y dentro del com
getX()
Devuelve la posicin x.
getY()
Devuelve la posicin y.
windowDeiconified(EventoDeVentana)
windowlconifiB(EventoDeVentana)
"indowOpene(EventoDeVentana)
Todos toman la misma forma del mtodo window0pened( )
void windowOpenedfWindowEvent evt) <
Los eventos de movimiento del ratn ocurren cada vez que se mueve el ratn en un compo
nente. Al igual que con cualquier otro evento de ratn, cualquier componente puede generar
eventos de movimiento del ratn. Para darles soporte, se debe implementar la interfaz
MouseMotionListener desde una clase.
En la interfaz MouseMotionListener hay dos mtodos: mouseDragged(Even:oDeMovi-
pa"
Un ejemplo: la aplicacin SwingColorTest
A diferencia de las otras interfaces escuchadoras de eventos que ha manejado hasta este
punto, la interfaz MouseMotionListener no tiene su propio tipo de evento. En vez de eso
utilizn objetos MouseEvent.
Debido a esto, puede llamar a los mismos mtodos getClick (), getPoint (), getx () y
getY(), que llamara para los eventos de ratn.
Eventos de ventana
Los evenios de ventana suceden cuando un usuario abre o cierra un objeto de ventana tal
"-
como un JFrame o un JWindow. Cualquier componente puede generar estos eventos y se tiene
que implementar una nterfa2 WindowListener, desde una clase, para dar soporte a los
eventos.
windowActivated(venroDeVentana)
windowClosed(EventoDeVentana)
windowClosing{EventoDeVentana)
despus de
Da 21 -
546
tfieldi.addFocusListener(this);
-'
tfield2.addFocusListener(this);
tfield3.addFocusListener(this);
1:
tfieldi.addActionListener(this);
2:
tfield2.addActionListener(this);
3:
tfield3.addActionListener(this);
4:
5:
Por ltimo, agregue todos los mtodos definidos en Jas dos interfaces que implemema esta
clase: actionPerformed(Vento0e/4ccin),
6:
ocuslostiEventoDeEnfoque) y
ocus6aine(EventoDeEnfoque).
7:
8:
9:
Los comiles de color se usan para registrar un valor numrico para un color, y esto hace
10:
que el color se dibuje en un panel. Tambin actualiza los otros controles de color para que
"nB0;:rCOTl "G
publie SwinflColorTest() {
super("Color Test");
12:
14:
Intro en un campo de texto, lo cual genera un evento de accin, o salindose del campo para
15:
swatch.setBackground(Color.black)
RCBCSrO1=e:^Cl
17:
18:
16:
19:
Saturation", "Brlghtness")
28:
instanceof TextField)
f rame.update(tfiis);
pane.add(swatch);
21:
pane.add(ReBcontrols);
pane.add(HSBcontrols);
22:
23:
24:
setContentPane(pane);
25:
evt)
26:
frame.update(this);
27:
.
28:
29:
Uno de ellos, f ocusGained(), no necesita manejo. Entonces, se debe agregar una definicin
36:
de mtodo ..vaco:
31:
{ }
Este mtodo no contiene ningn comportamiento para el manejo de eventos, slo actualiza
34:
35:
36:
37:
38:
39:
49:
33:
32:
la muestra del color y todos los controles para que reflejen un cambio de color. Es idntico
SwingColorControls.
13:
I lay dos formas para que un usuario pueda terminar una nueva eleccin de color: prcsionaiuli1
(evt.getSourcp()
inport jsvax.swing.*;
11:
if
iaport java.awt.*;
lmport Java.awt.event.*; .
41:
42:
43:
};
frame.addWindowListener(l);
frame.pack{);
frame.setVisible(true);
publie Insets getlnsetsf) {
ie);
44:
45:
46:
Da 21
548
47:
//
obtiene
48:
//
49:
int
los
valores
de
cadena
convierte
en
enteros
valuel
de
cadena de
los
campos
de texto
96: ;
Integer.parselnt(controlPanel.tfieldi.getText());
'99:
50:
int
value2 = Integer.parseInt(controlPanel.tfield2.getText());
100:
int
value3 = Integer.parseInt(controlPanel.tfield3.getText());
101:
tfieldi.addFocsListener(this)
tfield2.addFocusListener(this);
tfield3. addFocsListener (this )'
tfieldi.addActionListener(thisj
tfield2.sddActionListener(this)
tfield3.addActlonListener(this)-
102:
52:
if
(controlPanel ==
54:
//
RGB
55:
c =
ha
RGBcontrols)
cambiado,
actualiza
new Color(value1,
value2,
103:
HSB
104:
value3);
105:
106:
56:
57:
//
58:
floatf]
convierte
los
valores
RGB
en
HSB
107:
HSB - Color.RGBtoHSB(value1,
value2,
value3,
add(tfieldi);
108:
60:
HSB[0]
360;
110:
61:
rfSB[1]
*=
100;
111:
62:
HSE[2]
*=
100;
112:
113:
63:
restablece los
campos
114:
64:
//
HSB
65:
HSBcontrols.tfieldi.setText(String.valueOf((int)HSB[O]));
115:
66:
HSBcontrols.tfield2.setText(String.valueOf((int)HSB[1)));
116:
67:
HSBcontrols.tfield3.setText(String.valueOf((int)HSB[2]));
}
else
70:
//
71 :
cambiado,
Color.getHSBColor((float)value1
(float)value2 /
72:
100,
(float)value3
360,
100);
121:
122:
123:
73:
//
74:
restablece
los
campos
124:
RGB
frame.update(this);
125:
75:
RGBcontrols.tfieldi.setText(String.valueOf(c.getRed()));
76:
RGBcontrols.tfield2.setText(String.valueOf(c.getGreen()));
126:
77:
RGBcontrols.tfield3.setText(String.valueOf(c.oetBlue())) ;
127:
128:
78:
10, 0, 0);
117:
120:
actualiza RGB
add(tfield3);
119:
HSB ha
118:
66:
'
109:
(new float[3]));
59:
69:
= new JTextField("0")
98:
51:
53:
Uy"t(3,2,10,18) )
97:
79:
80:
//
81:
swatch.setBackground(c);
actualiza
la
muestra
82:
swatch.repaint();
83:
84:
Figura 21.4
85:
Im aplicacin
86:
87:
FocusListener
l JJBJ
SwingColorTest.
88:
89:
SwingColorTest frame;
90:
jTextField tfieldi,
tfield2,
Resumen
tfield3;
91 :
92:
93:
SwingColorControls(SwingColorTest
String
11,
String
94:
95:
frame
parent;
12,
parent,
String 13)
Por fuera el nuevo sistema tambin debe tener ms sentido, desde el punto de vista de un
/^
Da 21
1550
A cada componente que genere los eventos que ya a manejar se agrega un escuchador
de eventos.
Se agregan los mtodos, cada uno con una clase EventObject como el nico argumen
to para el melodo.
Los mtodos tic esa clase EventObject, como getSource(). se ulili/an para saher qu
de evcnios, conforme se vayan agregando a Swing junto con los nuevos compunenics.
Eslo nos lleva al evento principal: la conclusin de nuestro viaje de 21 das a travs del
lenguaje Java. Ahora que ha tenido la oportunidad de trabajar con la sintaxis y las clases
centrales que componen Java, ya est listo para la gran tarea: sus propios programas.
Ofrece
respuestas a las preguntas ms populares de los lectores, y todos los cdigos fuente del libro.
Felicidades! Ahora que le hemos presentado el lenguaje de programacin ms extraordinario
de la dcada, est en usted hacer cosas an ms maravillosas con l.
Conforme invierta tiempo en sus propios programas, aprendiendo nuevas caractersticas y
ampliando las clases de Java en sus propios paquetes, aprender otra razn para entender el
porqu la tan alta inspiracin del nombre del lenguaje.
Nota
Preguntas y respuestas
P Se puede poner el comportamiento de manejo de eventos de un programa en su
|iro|>:i clase, en ve/, de incluirlo con el cdigo <|iiv eren l;i inlorfiz?
R S se puede, y muchos programadores le dirn que es una buena forma de disear sus
d h
TT
:la aPJicac*n
cornlf
ahernatV-y asla
^de,ha"comportamiento
ms fcii * Proyec
comportadme, asocado d
se conjunta
no resonado
1
Si-
Apndices
A Resumen del lenguaje Java
Apndice
libro.
Los smbolos y palabras clave del lenguaje se muesiran en fuente monoespaciada. Los argumentos y otras partes que se vayan a substituir, csln en cursivas
monoespaciadas.
\W\
556
Apndice A
Palabras reservadas
[ nmero ).nmero
Las palabras siguientes estn reservadas para el uso del propio lenguaje Java. (Algunas de
nmero[
ellas estn reservadas pero no se usan actualmente.) No debe utilizar estos trminos para
nmero[ d
abstrct
import
return
1 +
void
instanceof
short
volatile
'carcter'
break
else
int
static
while
"caracteres"
byte.
extends
interface
super
long
switch
catch
finally
native
synchronized
float
criar
new
throw
const
goto
private
throws
continu
if
protected
transient
implemertfs..
default
public
try
false y nuil tambin estn reservadas para ser usadas como literales.
Cadena vaca
Retroceso
Tabulador
Avance de lnea
Avance de hoja
Relorno de carro
\"
ComJla doble
Comilla sencilla
\\
\unmhexadecimal
nuil
true
/*
s'ct
puede
//
es
un
Escape Unicode
Booleano (verdadero)
Booieano (falso)
comentario que
nmero
L]
Qxnmhexadecimal
Declaracin de variables
cnar nombrevariable
Literales
nmeroll
Diagonal invenida
Nulo
false
Comentarios
Un solo carcter
Cadena de caracteres
\n
\f
package
Con signo
Expolente
\t
\r
for
\b
this
class
Tipo ouble
nmero[e E]nmero
double
final
Tipo float
D]
booleah
case
Tipo double
F)
]nmero
Caracteres
Booleano
Tipo int
nombreclase nombrevariable
t-
Tipo int
Mlil|. ,
Entero hexadecimal
(dXnmhexadecimal
Entero hexadecimal
Qsnmoctal
Entero octal
5571
nombrevariable
Tipos de ciases _
Mltiples variables
m
i
Apndice A
1558
Las opciones siguientes estn disponibles slo para las variables de clase e instancia.
arg
static
final
)
]
public
declaracinDeVariable
Consumios
declaracinDeVariable
prvate
protected
Variable de clase
Control de acceso
Asignacin de variables
=
valor
Asignacin
variable**
Incremento posterior
++variable
Incremento previo
variable--
Decremento posterior
-variable
Decrcmento previo
variable
+=
valor
Suma y asigna
variable
valor
Rosla y asigna
Multiplica y asigna
variable
*=
valor
variable
1=
valor
arg
arg
arg
<=
arg
>= arg
Menor que
Mayor que
arg
Menor o igual a
arg == arg
declaracinDeVariable
variable
<
arg >
Divide y asigna
arB
1=
arg
arg
&&
arg
ar9 !
!
ANO Jsia)
arg
OR lgico
arg
arg &
arg
arg
arg
arg
arg
NOT lgico
AND
OR
arg
arg
arg
arg
arg
>
XOR
Desplazamiento a la izquierda
Desplazamiento a la derecha
arg
~ arg
Complnenlo
(tipo) cosa
variable %= valor
variable
&=
AND y asigna
variable
variable
'=
variable
<<=
variable
>>= valor
new clase();
variable
>?>=
valor
valor
valor
valor
valor
Instancia de
OR y asigna
XOR y asigna
Objetos
Crea una nueva inslancia
Operadores
ew tipo(arg,
arg
arg
Suma
arg
arg
Resta
t>)eto.variable
arg
arg
Multiplicacin
objeto.varclase
arg
arg
Divisin
Clase.varclase
arg %
arg
Mdulo o residuo
objeto.mtodo()
arg,
Variable de instancia
Variable de clase
Variable de clase
Mtodo de instancia
(sin argumentos)
..}
'I
Mlodo de inslancia
Apndice A
560
objeto. classmethodO
'
break [etiqueta J
argumentos)
continu [ etiqueta ]
Mtodo de clase
label:
Clase.mtodoclase()
Etiquetado de ciclo
argumentos)
Mtodo de clase
Definiciones de clases
class nombreclase bloque
Arreglos
En esta seccin, los corchetes son partes de la creacin del arreglo o de las instrucciones de
' acceso. No denotan partes opcionales, como en otras partes de este apndice.
tipo nombrevariableW
Variable de arreglo
tipo[)
Variable de arreglo
new
nombrevariable
tipo[nmElementos)
arreglo/ndice]
Longitud de arreglo
arreglo.longitud
[ abstract ] class
nombreclase bloque
publie 1 class
nombreclase bloque
bloque
Ciclos y condicionales
prueba
) bloque
if i
prueba ) bloaue
else bloque
switch
( prueba
interface nombrelnterfaz
Condicional
Iextends otralnterfaz,
...
{}
case valorinstrucciones
inicializador;
cambio
) ~bloque
while (
prueba
do bloque
while (prueba)
No instanciablc
bloque
default : instruccin
(
Sin subclases
El mtodo bsico luce as, donde tipoDevuelto es un nombre de tipo, un nombre de clase o
case valorinstrucciones
for
opcionales:
class nombreclase
if (
prueba;
Ciclo for
Miodo bsico
tipoDevuelto nombreMtodo
) bloque
Ciclo while
Ciclo do
m
*
, Apndice A
562
Las variaciones de mtodo pueden incluir cualesquier palabras clave opcionales siguientes:
[abstract
nombrMitodo()
static';]
.i
tipoDevuelto
nombreutodo()
[
final
import paquete.nombreclnso
Mtodo de clase
tipoDevuelto
nombreM'ivdo) bloque
]
import paquete.*
Mtodo nativo
package nombrePaquete
Mtodo final
[ public ] interface
bloque
tipoDevuelto
nombreMtooO
bloque
synchronized
Importacin
bloque
native
Mtodo abstracto
tipoDevuelto
nombrelnterfaz bloque
fabstract ] interface
Mtodo sincronizado
tipoDevuelto nombreMtodo()
nombrelnterfaz bloque
bloque
[ public
private
Control de acceso
protected] tipoDevuelto
nombreMtodo()
nombreclase()
Constructor bsico
bloque
nombrec. ase(parmetro,
parmetiv...)
publii
parmetro,
Constructor con
parmetros
bloque
private
nombrec. ase()
protected
Control de acceso
this
nombreclsse.this
super
Se refiere a la superclase
super.nonbreMtodo(}
this(...
super(.. .)
tipo.clfss
valor
Devuelve un valor
. ,
-Inierliiz pblica
Inierfa?. abstracta
bloque
Instrucciones protegidas
Se ejecuta si se l:in/.i una excepcin
Se ejecuta siempre
bloque
return
especfica
Proteccin
'
bloque
1
flr
h }
!.'<
Apndice
Recursos de Java en
Internet
Este apndice contiene una lista de libros, sitios Web, loros de discusin en Internet
Rogers Cadenhead, coautor de este libro, mantiene el sitio oficial del mismo en
http://www.prefect.com/3ava2i
Visite este sitio para tener el cdigo fuente de todos los proyectos del libro aclara
567 1
What's New? Esta rea contiene anuncios relacionados con la publicacin de actua
lizaciones para los productos y eventos como JnvaOne. la consulta semestral para los
programadores de Java. Tambin incluye as publicaciones y la programacin de las
sesiones de capacitacin que se ofrecen.
E5S
Documentaon
co que descubre Java por primera ve/,. ste es un buen punto para iniciar porque pre
970. 7-O85-6
uso en sus propias pginas Web. Tambin tiene conexiones con varios directorios de
applels de Internet, incluyendo Developcr.Coin's Camelan en
034"'
n,lSBN:968-8S0-804-0
http://www.jars. com.
For Developers
tosas" del lenguaje Java en lugares tan diversos como U.S. Postal Service. UCLA
Medical Cerner, Ergon lnformatik y la misin Mars Pathfmder.
E| sitio de 5un
y venias.
. Employment
biblioteca de clases de
ii
Java Store
. A-Z ndex
de Web, incluyendo camisas de mezclilla, lazas para caf, playeras y gorras de bisbol.
orden alfabtico. Perdido? Tambin se proporcionan algunos tips para navegar en este
'
i: :
I i'
i:
i.
568
Apndice B
Este sitio se actualiza constantemente con recursos de uso libre para los programadores de
Java. Una de las parles que podra aprovechar de inmediato es la pgina Documentaron en la
direccin siguiente:
http://java.sun.com/docs/index.html
miembros del equipo Gamelan actualizan el sitio diariamente. Camelan tambin realiza las
http://www.gamelan.com/special/picks.html
Han, arcesar a otro directorio de clasificacin de npplm de Java, dirija su navegador hacia la
Debido a que gran parte del fenmeno Java se ha inspirado en su uso en pginas Web, un
gran nmero de sitios Web estn enfocados en Java y su programacin.
edicin.
.liivu\\'t>ilJ i*s i i ni irvisln cu Iilm sohu* el ]l'I)^u;i|i* ,I:ivji y uviitilnj'.i.-i u*!:ti'hUKu!.i, (ii:inlii-tii-
una lista de libros actuales y por editarse. La puede encontrar en la direccin siguiente:
http://www.javaworld.com/javaworld/books/jw-books-index.html
L-liiotte Rusty Harold, autora de varios libros descritos en la pgina Web, presenta otra selec
cin de libros relacionados-con JavaT^^io con las revisiones de muchos de esos libros. La
lisia de Harold se puede consultar en:
http: //sunsite. une. edu/jav,af aqJbooks.html
El lugar para iniciar esta bsqueda es Developer.Com's Camelan, el sitio Web que presenta
un catlogo de programas, recursos de programacin y ms informacin de Java, en la
siguiente direccin:
http://www.gamelan.com
Gamelan es el directorio mas amplio en su clase dentro de Web, superando incluso a Sun en
cuanto a la profundidad de su cobertura. Se ha convertido en el primer lugar de registro de
informacin para los programadores de Java, tan pronto como terminan el programa. Los
569
#
ft
http://www.jars.com
El logotipo de la manzana del JARS aparece en los numerosos app.ets que se ofrecen en las
paginas Web. El sitio JARS ha sido ampliado iceien.cincme p:iri, inclu, las novedades acerca
del lenguaje y los desarrollos relacionados, revisiones de las herramic.as de desarrollo para
JavaWorld
Una de las mejores revistas que han surgido al servicio de la comunidad Je programadores
http://www.javaworld.com
JavaWorld suele publicar artculos .morales, junto con novedades de desarrollos de Java y
oirs caractersticas, las cuales se actualizan cada mes. En el rea de artculos de manual, el .
formato umeo de Web ofrece una ventaja sobre las revistas impresas (como Java Uepor,) En
Como complemen.o a las listas de FAQs (preguntas ms frecuen.es) sobre Java que estn
disponibles en el sitio Web de Sun Microsystems, los programadores de Java que u,ili/an
los grupos de discusin de Internet, han colaborado con sus propias listas de preguntas y
respuestas.
Elliot.e Rus.y Harold. patrocinador de la pgina Web sobre libros de Java, ofrece tambin lu
lisia actualizada de Java FAQ en Ja direccin siguiente:
http://sunsite.unc.edu/javafaq/javafaq.html
Otro recurso similar, la "Unofficial Obscure Java FAQ-, se inici como un esfuerzo para con
http://k2.scl.cwru.edu/-gaunt/java/java-faq.htnii
.J*-?.
Apndice B
1570
571
Oportunidades
de empleo
S. est aprendiendo Java como un medio mr,
omo un medio mr,
tas relacionadas
lid con ese tema en Web C
listas
C77" '^^ ** **"' "^ de h
comp.lang. java.mise Aunque este grupo ha sido designado como el rea de dis
cusin y comentario de Java para todos los temas que no pertenecen a ningn otro
P;,ra
grupo, es ms utilizado que los dems. Reemplaz a comp. lang. j ava a mediados de
1996. Aqu se puede comentar cualquier tema relacionado con Java.
PtIM"lllnicnlc- d>ri
comp.lang. java.api Lisie grupo est dedicado a la discusin sobre las Al'ls
(Intcrfaces de Programacin de Aplicaciones) del lenguaje Java, los programas de
toda la biblioteca de clases que viene con el JDK, y otras implemcntaeiones del
lenguaje.
-enas de pe
"cspccmc<)
- ^ Caveto,: 12n7Z1TMh
C" U'S l|UC P"alC b"Slllxtrnet Nl d
nttp://wv/v/.careerpatfi.com
i I
ireccin
cionadas con la programacin de Java. Esto lo conviene en otro buen lugar que deben
frecuentar los nuevos programadores.
comp.lang. java, setup Este grupo proporciona un lugar para presentar problemas de
comp. lang. java.tech El ms avanzado de los grupos de discusin sobre Java, esle
grupo est dedicado a discutir la implementacin del lenguaje, lemas relacionados con
Apndice
el uso ele un indicador de comandos poique usted ejecuta cada uno de los progra
mas del JDK escribiendo su nombre junto con cualquiera de los argumentos nece
sarios.
Configuracin de Windows 95
y Windows NT
Los usuarios de Windows 95 y Windows NT pueden configurar el JDK por medio
del indicador de comandos del MS-DOS, disponible en Inicio I Programas I MSDOS. tlesde la barra de larcas.
575 I
Apndice
Tome nota de esla carpeta tal como esl anulada en In Folder. Esla es la crpela Path del
JDK, y la teiidra'<|uc utilizar muy pronio.
Un ejem
e comando y ,c despea -
Si
csu'i
utilizan
mensaje en respuesta:
"-*--
distinto.
5=
comandos:
Entrada
path
Ver una lista de todas las carpetas en que Windows busca programas de MS-DOS; sios
vienen separados por signos de punto y coma. He aqu un ejemplo:
PATH=C:\WIND0WS;C:\WIND0WS\C0MMAND;C:\JDK1 .2\BIN
En este listado de PATH, el texto C: \JDK1 .2\BIN se refiere a la carpeta PATH del JDK, que es
la carpeta donde el sistema buscar el archivo java. exe. Tambin hay otras dos carpetas ano
tadas en PATH, que son C: \WINDOWS y C: \WINDOWS\C0MMAND.
Su configuracin de PATH debe incluir una referencia a la carpeta PATH del JDK. (Las letras
SSi
Si PATH no incluye la carpeta PATH del JDK, necesitar editar su configuracin de PATH y
agregrsela.
bsqueda de
java.exe.
\\
Para cambiar PATH en un sistema Windows 95, debe editar el archivo de texto
autoexec.bat. Haga clic con el botn derecho del ratn en el archivo y seleccione el coman
do Edicin para abrir autoexec.bat en el Bloc de notas.
El archivo autoexec.bat contendr mucho malcrial tcnico incomprensible para los princi
piantes en el sistema MS-DOS.
Busque una lnea que comience con el texto PATH=, SET -PATH= o PATH seguido de un espacio
en blanco.
[i
577 I
Tip
http://www.prefect.com/java2i.
lo Drimero que debe verificar es si escribi el nombre correctamente respetando las mayuscu
Us y minLas. Asegrese de estar en .a carpeta que contiene el archivo ,ueme que ,n- de
compilar y vuelva a verificar el nombre del archivo.
C:\jdk1 .2\bin
^^
MS-DOS, para hacer una lista de todos los archivos que estn en una carpeta. El nombre
;-;
apLe en el lado izquierdo de la lista se deben ignorar, ya que son nombre, que uuhza
Windows para manejar los archivos.
Figura C.2
Lista de archivos en
una ventana de
es de las carpen,.
MS-DOS.
Java 1.2.
La la ubicacin del archivo para determinar dnde se puede encontrar tools. ] ar.
La mayon'a de los errores CXass not f ound se pueden arreglar mediante la conf.guracn
de CLASSPATH para indicar la ubicacin de tools .jar.
Una forma de encontrar tools. 3 ar es abrir la carpeta en que insta. el JDK (como
"
2) Ah debe haber una subcarpea llamada lib que cont.ene tools., ar.
Resultado de uno
bsqueda de
Para cambiar la configuracin de CLASSPATH. en un sistema Wimlows NT. no tiene que abrir
tools-jar.
Para cambiar CLASSPATH en un sistema Windows J5, deber editar el archivo de texto
autoexec.bat. Haga clic con el boln derecho del ratn en el archivo y seleccione el coman
do Editar para abrir autoexec. bat en el Bloc de notas.
\'.\ archivo autoexec.bat contiene mucho malcra! tcnico i|in- es incomprensible para los
principianles.
Busque un rengln que empiece con el texto CLASSPATH^, SET CLASSPATH= o CLASSPATH
seguido de un espacio en blanco.
e nol.i H-
escriba el texto CLASSPATH= seguido de la carpeta Patrt del JDK. como en el ejemplo
r, ASsPAVH.
siguiente:
CLASSPATH*.C:\jdk1.2\lib\tools.jar
Guarde el archivo despus de hacer el cambio. Para que este cambio suria electo deber reiniciar el sistema. Si el archivo tools .jar est en la carpeta que milico en la instruccin
un
luear
desde el
tools. jar.
Si encuentra %JAVA_HOME%, brrelo junto con el texto que le sigue hasla el siguiente punto
y coma. Reemplace ese lexto con la ubicacin correcta de tools .jar. Asegrese de no
borrar ningn punto y coma de los que se utilizan para separar los nombres de las carpetas.
t
581
Apndice C
unsetenv
CLASSPATH
Para que este cambio sea permanente, debe retirar el comando que estableci CLASSPATH de
su archivo .profile, .eshre o .login.
Estos cambios no tendrn efecto hasta que ciee la sesin actual e inicie oir, o utilice
CLASSPATH-.;C:\DEV\CHATSERVER\:C:\jdk1.2\lib\tools.]Br
el comando source conelnombre del archivo que cambi. Si aller de alguna forma el
'rrhivo .login, el comando source ser el siguiente:
source
-/.login
Configuracin de UNIX
. login ui a lnea como la siguiente:
ment
] i
i
r
Apndice
En este apndice aprender a seleccionar un editor para usarlo con el JDK y a confisurnr su sistema para que trabaje con el editor.
documento o establezca sus propiedades, busque una opcin de formato como las
siguientes:
Texto simple
Texto ASC11
Uso
Apndice D
nassFont
not-found
^fc
b0,n inicio, es un
de MU^f^. Al,mvo.
Z \-\-
formatos
fo
d . bmar desde el
d
sdc un M^
^ ^.^
-'- -
& tcxU)
asociacin de archivos
en
,
Une,
Une en que se cnc-cnuav
sor.
S5
d.tando
csl presente
dio en
la carpo,.
,, i,lc,,rra la O
K,,a croar -a
Figura D.2
Figura D.1
declararon.
,;l
vez
en texto mpte >
ve
mcn,os
mcn,os con
con que
que irab..jo y
intype
Crt'ic/tiM / un docu
mento nuevo de texto
en una curpeiu de
Windows 95.
Se cea
. *
,,,
"
5871
Apndice D
Desplcese a travs de la lisia Regislered lile lypes hasta que e.icuenuv el ii|)o yue incluya a
JAVA en su campo Extensin. El lugar ms probable para encontrarlo es bajo un ttulo como
Java files o Java programs, pero ese podra no ser el faso en su sistema.
Cuando encuentre el tipo correcto de archivo, necesitar borrar la-asociacin existente para
Una vez hecho esto, puede crear una nueva asociacin para la extensin de archivo .java.
nueva asociacin.
cn 0,
reemplazarla con una nueva. Seleccione Remove (Quitar) para borrar la asociacin actual, y
archivo, se abre una ventana Open Wilh (Abrir con), que se muestra en la figura U.4.
Figura D.4
Asociacin de unc
Figura D.3
extensin de archivo
con un programa.
r-rsr
. En el cuadro de lista Choose the program you wanl lo use (Elija el programa que desea
utilizar) busque el editor de texto o procesador de palabras que desea utilizar con los
- Asegrese de seleccionar la opcin Always use this program lo open ihis file (Utilizar
siempre este programa para abrir este archivo).
Al hacer clic en OK para confirmar esta configuracin, su editor elegido abrir el archivo
Anything. java y cualquier otro archivo con la extensin .java.
;
I 588
Apndice D
Si desea cambiar este icono, seleccione View I Oplions I File Types (Ver I Opciones de crpela
I Tipos de archivo) desde la barra de mens de una crpela para ver el cuadro de dilogo File
Typcs. Desplcese a travs de Registered File Types (Tipos de archivo registrados) para
Cuando este tipo de archivo est resaltado, seleccione Edil (Editar) para abrir una ventana
Edil File Type (Editar tipo de archivo), como la que se muestra en la llgura E.5.
Figura D.5
La ventana Edil File
Type.
ndice
- '.* .'
jr-
wr- -.
h*t7l-:.-
...._ .,
;.r, . i
iiv
!l
Smbolos
fichiov* '
DtfK* |
//anotacin de con.eMh.no.
* (""IM-Tsaml), 83
* (asterisco), 180, 305
si :'.:i'V
I ) (Havi-j), r7, US
I 1 'crcheles), 112
arcos
A (circunflejo), 83
Seleccione C hange Icn (Cambiar icono) en la ventana Edil File Type y podr decir un cu
ejemplo. 2O"-211
= (sigilo igual)
relleno, 20y
operador de asignacin
Si le gusta alguno de los iconos desplegados en la ventana Currem Icn (Icono actual),
operador NOT(.'), 83
(pimo), 93-M
I (t)arra verlical), X3
+ (signo ms),
operador de concaienacin
valos, 207
operador de incrememo(++1
XI
''
; (puni y coiii), C6
/-../anotacin de comentario,
/**...*/anotacin de
comentario, 73
463
- (ilion), SI
Lina ve/ cn< onirailo el cono que desea, resllelo y lug;i elie en OK p:ir;i seleccionarlo.
miiesira. 464-4M)
'-'lInpilSlreumO. mc'todo
220-221
1(15
IM
deil-ile, aplicacin de
patrones de relleno.
Para ver qu iconos contienen, puede abrir cualquier archivo de iconos, programa de
Windows 9.'. o un archivo .OLL. Despus de seleccionar un archivo, sus iconos se desple
HiiliereilKeader. objetos,
'olor, 220
Browse (Ext minar) para ver los iconos de los archivos de su sistema.
airibuu,!. de transforman,',,,
68. 72
martllelo y I aga ciic en OK para hacer el cambio. Si desea ver oros iconos, seleccione
al.rir
polgonos
agregar punios a. 2(l(>
esquinas redondeadas
r0-l-205
l'HI.Ciim.i.viMiii. objetos
4(,3
AbstIacl\Vil,rio,vln(,-,O()JkiI
i AWT
acceso
herencia. 387
predeterminado. 30.S
privado. 38-1-385
protegido. 385-386
de clase, 96
ndice
1590
ndice
de instancia^ 93-94
de naipes
agregar, 299
AccessControlConlext, dase,
creacin, 299
610
desplegar, 300
AcccssController, clase,
610
HdiunO, mlodo
argumentos. 341-342
ejemplo, 300-302
ActiveX, 486
ddActionLislciicr(), mtodo,
argumentos
de variables, 142-143
adjuslnieniValueChangedl),
mlodo 538
programa de miiesir.i.
538-54(1
adjusimenlValutChangedO
n.cl..d>,, 538
adininislrailores de diseo
249-253
punorama.231-232
parpadeo
ejemplo, 240
panorama, 239
componentes, 292-293
reduccin. 240-243
296-298
diseos de cuadrcula.
295-296
diseos de cuadrcula de
bolsa, 302-313
Adjustmentl.istencr, escucha de
i-vcnlu, 532
253-256
lcnica de animacin.
applets, 185
diseos de bordes,
piular/repintar, 232-233
sonido
DigialClock, ejemplo.
mrgenes, 313
paneles, 298-299
AiiHM.-buMiilli.javu, programn,
236-239
ejecucin. 234-236
inicio, 235
paro, 235
vea atnbii'n grficos
78-7!
ampersand (&), 83
ampliacin de nterfaces,
cliente/servidor). 468
BaseFramc 1, 355-356
cerrar, 378
C'opyArrayWhile
cdigo fuenie, 129
Copyl'asie, 500-501
ChangcTule, 535-537
de compilacin
plataformas de Windows,
28-30
sisinnas Solans. 31
definicin, 146
disear. 469-470
DoTest. 131
AND, operadores, 83
ejecuiar, 482
EchoArgs, 149
de bord< s, 296-298
Andrecssen, Marc, 14
EvenSleven. 120-121
animacin
creacin 292
407-408
de imgenes
479-481
servidor
carga, 243
consirucior. 470
dibujo, 245
ejecuiar, 482
3-17-309
diw o, 303-304
CHiipoucnles. 3O9-. II
Rumore. 246-247
observadores, 246
475-479
HclloDan
archivo fuente, 26-28
compilacin, 28-31
ejecucin, 30-31
recuperacin. 243
LabelTeM. 133
pUKVSvIlipillO, IIKMihK).
NamesLoop, 127-128
NumberReader, 124-125
creacin, 257-258
ejemplo. 293-294
Flowl.ayouK),
ejemplo de applet
WAITFORANSWER.
PopUpWindow, 354-356
SeeMeihod (ejemplo de
panorama, 302
relleno de celdas, 31?
de flujo
constructor, 294
244
doble bfer
Checkers, 258-261
472-473
eslado, 473
ciienie. 479-481
reflexin), 108-109
SumAverage, 150
atribuios
AUGN. 185
C'ODI-:. IN3. ISfi
COIiUASK. 1.S7
IISHACB, 186
VSPACE. 186
ejemplo, 182-183
applels, 11-13
ColorSwirl, 240-24 I
ColorTesi. 366
diseo. 367
inicio, 368
lizacin, 372-374
subpaneles, 369-370
comparado con las aplica
ciones, 13, 174. 377
comunicacin enire
DigialClock
presentacin. 470
375-377
detencin. 179.233
implememacin del
servidor. 469-479
Checkers. 258
destruccin. 179-180
mplemenlacin del
116
cteme
combina , 298-299
ejecucin. 482
priniNanics), mlodo,
definicin de. 11
mtodos. 545
clase, 116
salida. 116
.,
definicin, 233
546-549
pasar. 148
ejecucin, 2(>2
ArrayTest
subproeesos
clases,-545
manejo, 148-151
ciclos. 262-264
frmalos de archivo, 261
SwingOilorTesi. 518-520
eslado, 473
aplicaciones
ulcunce
511-512
WAITFORCONFIRM,
AIICapsDemo, 457-459
537
eslado, 473
compilacin, 256
de lxico, 134
534,537
Neko, applel
WAITFORCLIENT,
mrgenes, 313,
'
aelioiil'crforimdl), mtodo,
Graphics, 256
especificacin, 292-293
definicin, 341
AcliunLislencr, escucha de
I i m ilaciones, 257
eliminacin de un objeto
Dminos, 12
cicmplo l'alimliome
l-'illmore. 246-247
firmas digitales
autoridades de certifi
cacin. 431
cvililicados. A'MI
ejemplo. 431-433
navegador especfico,
433-434
lormaios de archivado
archivos CAU. 190
archivos JAR. I8S-I89
HTML. marcado
alineacin. I85-IS6
<APPLET>, etiqueta,
182-185
espaciado. 186
<O13JL:CT>, entnela.
187-188
<PARAM>, eiiijueta.
191-192
rompimienios de lnea.
185-186
'
ndice
1592
lneas
conhol. 2X3
mouseDownQ, mlodo,
creacin, 282
323-324
mareado de HTML. 324
mouseDownO, mtodo,
322
manejo de ovemos
teclas. 333
manejo, 1-18
SumAveragc, cjcniplo,
150-151
de ba xa de desplazamien-
aplicaciones. 148
applels. 191-195
cjen pi de applet
Se Back, 345-348
31 -1-319. 338-340
492-494
3:5-331
lipr; de eventos, 318
Map2r , 225-228
mlod s. 178
NewP. lindrome
definicin. 16
paquete java.awi.dnd
appletviewer, herramienta,
accesar, 114-115
cambiar. I 15-117
lipos de dalos, 1 14
iinplenicniacin. 112
ejemplo. 2O'--2II
muliidimensionales, 117-118
lelleno. 209
objetos, 113-1 14
archivos
programa de muestra
asociacioner
borrar. 457
class.dat. 4-2
pnniNamesO, mlodo.
cliangcCciloiO, mtodo,
347
color, 220
ArrayTcst, aplicacin
elememos
excepcin, 417
arreglos, 5611
dibujo
eventos, 533-534
ArraylmlexOulOfltounds.
inierfaces. 576
salida. 1 16
611-61
clases. 577
iiTasIrar y colocar
:iParameier(), mlodo,
PAKAM>. eliuucla. 191
mindos. 143-145
clase. 116
c cmpUi, 192-195
19!
pasar a:
558
lichoArgs. ejemplo. M9
336-337
Swing. 5I(>
de er foque. 343-344
306
dc^in, 341-343
,0, 144-345
resiricciones a componemes
reas de texto
328
asignacin
329-331
maicadu de IITML. 3.11
mouscDragO. mtodo,
262-264
Spots
327-328
'>'."
Zip, 190
conos de tipo de archivo, 646
116
salida, 116
CAB. 1-0-191
subndices. 1 14
JAR, I KM 89
variables, I 12-113
VSPACE. 186
W1DTH.60, 183
audio
ciclos, 262-264
play (), mlodo 262
adminisiradores de diseo
aliernalivas, 315
combinar, 298-299
creacin, 292
de bordes. 296-298
de cuadrcula, 294-296
de flujo, 293-294
de rejilla de bolsa,
302-313
de trjela, 299-302
especificacin, 292-293
mrgenes, 313
panorama, 292
animacin
definicin. 356
ejemplo de Te.MDialog,
357-360
modal, 356
objetos de archivo de
dilogo, 361
Graphics, 256
observadores de imagen
diferencias en plaiaformas,
246
268
parpadeo, 239-243
marcos
piniar/rcpiniar, 232-233
crcauii, 352
243
dunensionamicnio. 353
resumen, 231-232
355-156
2-l-J
IM.'ltiIS
sonidos. 261-264
acii\.ir. 363
subprocesos. 233-239
aplicaciones independiemos
364-365
elemeiitiis do nicm.s.
.i63-.t(,4
despliegue, 353
ejemplo de una ventana
375-377
coniiM.iu.il. 354-356
cin, 372-374
subpaneles. 369-370
ocultar. 353
componemos
agregar a coillonodoios.
269-270
botones, 273
279-2X2
casillas de verificacin.
274-277
etiquetas, 271-272
lien/os. 2X7-2SX
lista de seleccin,
277-279
lisias dcspla/ahlcs.
283-285
cuadros de dilogo
agregar a los appletx 3(,(j
creacin. 357
eventos. 361-302
resullados de actualiza
campos de lexio.
poor. 3I.S
2S5-2X6
u-ntanas. 352
ovenlos. 364
inicio, 368
barras de desplazamiento.
t
i
B
liad ciimniand o error en nom
bre de archivo, mensaje, 26
haras de desplazamiento
creacin, 285-286
ejemplo, 286
Swing. 517-518
Indi"
1594
bloques, 118-119
definicin, 67
try...calch. 419-421
ltoole, (corgc, 42
CABBASE (etiqueta
StringTokenizer, 620
botones
de caracteres, 76-77
Cerrar
aplicaciones, 378
Certifcale
clase, 613
ejemplo, 273
nuil, 540
inlcrfaz, 609
de opcin
cambio
creacin, 274
Swing, 517
manejo de eventos
:le accin, 537
de elcmenios, 541-5-'.'
Swing, 515-516
BR, eliqucla, 185-186
Itreaklterator, clase, 616
ItiifTcrcdliipiifSlrcaniO,
mlodo, 445
BulTiTcdOutputStrcamO,
mtodo, 446
BufferedKeaderO, mtodo 454
115-117
JComboBox, 517
lor
ejemplo, 127-128
valores de variable de
instancia, 94-95
campos de texto
caracteres de ocultamiento,
280
lectura. 440-442
archivos de salida
creacin, 443
escribir en, 443- 44
190-191
mtodos, 53
JI-raniL'. 51 I
whilc. 128-130
JLabei, 515
ejemplo, 280-281
manejo de eventos
541 -542
Swing, 5)6
JPasswordField, 516
Applet. 177
JRadioButton. 517
JScmlIBar, 517
JTexIArca. 516
JTexiField, 516
l-ine2D.I-loai, 223
Arc2D.Floai, 224
Meihod, 109
abstractas, 392-393
AbstraciColleclion. 618
agregar a paquetes. 39S
Modilicr, 109
auxiliares, 147-148
MyReci
UullonGroup, 517
cargar
constantes, 137-I3S
Countlnstances, 3S9
NamedPoini, 167
Pcr.son, 159
Web, 184
casillas de verificacin
botones de opcin, 274-27 '
creacin, 274
mtodos, 42-43
variables de instancia.
41
PriniClass, 163
PrimSubClass, 163
l>rimSubClass2, 164
ServerSocket, 467
Choicc, 277-279
Socket, 467
ejemplo, 274
definicin, 136
manejo de eventos
diseo. 36-38
Socketlmpl, 468
SiringSeleciion. 498
Ellipse2D.FIoai, 223
subclases
eventos de elemento,
Error, 416
creacin. 55-60
Field, 109
definicin. 48. 62
no excluyentes, 274
FileDialog, 361
Swing, 516-517
finales, 392
FontMetrics, 214
claves
privadas, 433
pblicas. 433
ileai Uiii( i, iiHJiodii, 212
superclases
definicin. 48, 63
indicar, 136
TextDialog. 358-359
lizacin, 372-374
siihpaiiclf.-. 369-370
siMcnia de color KG,B, 216
iniciali/acin, 3(>S
lisi.jdo del ckIl'u fuente
CiilorConiiiils. clase
.!7d-.t77
clientes
aplicacin de Tiivia
ejecucin, 4X_>
Clipboard, 498
aplicacin de muestra
499-502
ClipboardOwner. imerfa/
499
operaciones de copiar/pegar
499
COUKBASE (etiqueta
<AITLET>), atribulo, 187
CodeSource, clase, 610
cdigo de bylcs, 18
cdigos de escupe, 75
color
atributo de transformacin
220, 2I6-2IK
tramado. 216
MyRect2, 161-162
creacin
155-i 56
Constructor, 109
Cl.ASSI'ATH (configuracin
buildReciQ, mlodo
clases, 180
541-542
creacin, 279-280
eventos de elemento,
diseo, 52
circunflejo (A), 83
304-309
creacin, 50-52
control, 281-282
buildConstraintsO, mtod .,
sobrecarga, J56
panorama, 125-126
JCheckBox, 516
jerarquas
do...\vhile, 130-131
96
vm liimhiri, iiiicrfat-fs
Windows, 352
ventajas, 410
declinacin, 155-156
alcance, 411
JRuiinn. 5I.S
375-377
mam-jti de cvcnitu. 371
marcado de HTML, 377
de instancia, 136-137
nombrar, 411
de clase, 138
ejemplo, 410
ciclos,
disea 3fi7
iniciit, 36S
variables
internas, 409-410
dibujar, 207
buildKcctO, mlodo
elementos de un arreglo,
ejemplo, 275-277
panorama, 48-50
Unjas. 4.W
de concatenacin, 86
clculo distribuido, 488
herencia
creacin, 273
etiquetado, 273
ii
resultadas de la actualizacin
-VIII-SCu!,,,!), IIICIikIi,
37-1
liCiUiollSlio. mtodo.
373
updaiel;, mlodo. 372
subpanclcs, 369-370
comando cd, 28
combinar administradores de
diseo, 298-299
loincniariiis, 72-73
105-106
compoiicnicj,
ActiveX. 4S6
adminisirador de la imcrla/
de usuario, 521
agregar a las aplicaciones,
269-270.512-514
alineacin, 292-293
diseos de borde. 296-298
diseos de cuadrcula.
295-296
diseos de cuadricula de
bolsa. 302-313
s
'i
ndice
596
reas de icxio
control, 283
creacin, 282
ejemplo, 282-283
Swing. 516
asociacin con escuchas de
evento, 533-534-
barras de desplazamiento
interfaz de usuario/conso
121-122
persistencia, 487
switch
porttil, 487
ejemplos. 123-125
Swiiig. M7-3I8
soporte de computacin
distribuida, 488
diseo. 4X8
lienzos. 2S7-2K8
Swing, 515-516
listas de seleccin
(cuitamiento, 2X0
ejemplo, 278-279
creacin. 2 74
control, 285
creacin. 283-2S4
516-517
verifiejr/n verificar, 274
creacin de di -ieripciones
para, 522
463
sockets
implemcntacin de la
diseo, 469-470
ejecucin. 482
implenicnl.tcin de
nombrar. 523
cliente, 479-481
restricciones
implemeniacin del
fill, 3)0
servidor, 470-479
conexiones en Web,
462-463
creacin. . 71
gridheight, 306
ejemplo, 171-272
gridwidth. 306
fuentes, 2 ' I
gridx, 306
gridy. 306
constantes, 137-138
le.un. 271
weightx. 307
weigthy. 307
contenedores
vcniajas. !71
invisibles. 4> )
JavaBcans
API de ii rospeccin.
I'H)
API de m inejo de
eventos 490
API de pe sistencia,
490
arquilectu a, 487
sugerencias, 522
ventajas. 486
componentes de software, vea
componentes
componentes, agregar.
269-270
definicin. 268
continu, palabra clave, 132
conversin
de texto a maysculas.
457-459
de tipos primitivos a objeios.
104-105
aplicacin de muestra,
499-502
ClipboardOwner. interfaz
499
objetos transferibles
cadenas de texto, 498
definicin de. 497
l'o|>.vArray\Vhlc, programa
129-13
corinr/pcgiir, operaciones
Clipboard, 498-499
aplicacin de muestra,
499-502
ClipboardOwner, interfaz,
499
objetos transferibles
cadenas de texto, 498
i
*
260-261
creacin, 302-303
DalaliipiilSlrenniO, mtodo,
DuluOulpiiiStrciiiiK), mtodo,
creacin, 305
4-IV
dalos, llnjos de
de cuadrcula. 295-29(>
Ueadl'nmes. 451
cieacin. 449
diseo. 303-304
na, 307-31)9
lectura, 449
dalos, sabores de
cieaciiin. 497-49S
de accin, 537
arreglos de irrcglns,
de elemento, 541-542
cuadros de dilogo
II7-MS
variables, 112-113
consianies, 137-138
aplicacin de ejemplo,
imerfaces, 405-406
527-530
de confirmacin. 524-525
constructores. 562
de entrada. 525
decase, 145-146
de mensaje, 526
ejemplo, 139
de opcin. 52(>-527
definicin. 356
modales. 356
de clase, 95
361
de instancia, 136-137
TexiDialog, ejemplo,
357-360
ventanas, 357
charAtO. mtodo, 98
t
3
WritePrimcs, 450-451
304-307
proporciones rengln/colum
44'*
cuadrculas
CniiKlnsiiincrs. clase, .W
373
sabores de dalos.
497-498
RCBtoHSBO, mtodo
UKLConnccion. objetos.
teclado, 522
anchor, 310-311
374
463
ejemplo, 284-285
etiquetas
gclHSBColorO, mtodo
getInputStream(), mtodo,
mtodos abreviados de
definicin, 26 i. 486
cacin, 464-46C
2S4
464
agregar a contenedores.
HitITciedRcadcr, objetos.
listas dcsplazables
ejemplo. 2 4
376-377
finjas
control, 279
ejemplo, 2*0-281
Swing. 51 * >
definicin, 462
creacin, 279-280
278
creacin, 277-278
conectividad de redes
agregar a contenedores.
control. 2X1-282
limitaciones. 123
lemas de tiempo de
diquelar, 273
a clases, 103-104
a interfaecs. 104, 405
Ciraphics2D. 219
clases, 487
definicin, 101
objetos
ejemplos, 120-12)
sealizacin, 488
ejemplo. 273
if
creacin, 273
"I5-'
definicin, 1)9
488-489
creacin, 285-286
bolones
condicionales, 560-561
mltiples, 68
ndice
|598
599|
desarrollo, historia de Java
endoso de Netscape, 14
navegador Hoava, 14
desborde (asignacin de
variable), 88
descargar
CABarc, 190
cambio, 115-117
diseo
JFC, 510
conexiones de sockel,
JDK, parmetros de
configuracin
ventanas, 353
469-470
diagonal (/), 72
dibujar
Arc2D.Floai, ca e, 224
encapsulacin, 383
Web, 12
lrawOvalO, mlodo, 27
IrawPolygonO, mlodo,
205-206
de entrada de archivos,
440-442
( rawKoundRect(), mtodo,
204
444
escribir a. 439
programa de muesira,
541-542
KeyLisicncr, 542-543
MouseLislener, 543
MouseMoiionLisiener,
544
WindowLisiener, 544
espacio coordenado de usuario
219
lectura, 438
enumeracin de listas
223
indlodo. 54 I
220-221
lemSlaleChangedO,
452-456
de datos, 44y-451
color, 220
IlemLisicner
creacin, 438
Ellipse2D.FIoai. clase,
importacin, 533
cerrar. 439
131
icxio, 200-201
445-448
do caracteres. -438.
205
533-534
almacenamicnio en bfer.
Java2D, 224-! 25
ilujo.s
definicin, 438
drawPolygon(' mlodo.
538-540
343-344
de hvies, 438-440
polgonos, 206, 22 i
piograitia de inucslra
entrada/salida
223
mlodo, 538
losiFocusQ, mlodo,
valos
adjusnenlValueChanged().
343-344
limitaciones, 257
ActionListcncr, 537
AdjusimcniLisicner
gciFocusO, miodo.
definicin, 257
324-325
manejo de eventos
258-261
enlazadas, 408-409
borrar, 586-587
creacin, 585-587
414-415
443-444
enfoque
patrones de i ;lleno,
doble bfer
transformacin, :s|>eeill-
imgenes, 245
^^
(ib
j
creacin, 257-258
446-448
de caraclcres, 455-456
de salida de archivos,
arcos, 209-211
elipses, dibujo
cuadrculas, 303-304
clases, 36-38
applclviewcr. 60-61
archivo incorrecto, 26
vea tambin excepciones
elementos en arreglos
acceso, 114-115
JDK, 22-23
applcts
634-639
etiquetas (HTML)
dibujo), 222
eti(|iii'l:is
ejemplo, 271-272
Swing, 515
ventajas, 271
! -t
<APPLET>
jerarqua de clase
Error, clase. 416
Comando o nombre de
dir, comando, 29
despliegue
ciclos. 262-264
mlodos, 238
mensajes
236-237
versiones de Juva, 15
186
CODEBASE, ulribulo.
187
lanzar, 422-427
ejemplo, 1-82-183
H.STACI-. iinb.il... l,
VSl'ACIi, atribulo, 1X6
<BR>, 185-186
<OnJF.CT>. 1X7-188
I'AKAM>, I'JI
424
lemas de herencia
|9J
l.'.s -I.1
KvenSlevcn, programa de
prueba, 120-121
423
limitaciones, 429
538-540
Mall'nrmedURLHxcepiion,
417
clemenlo, 541-542
ma/)cjaJures afiidatlos,
niMiiscIJowiio. inioiii)
427-42.S
319-320
panorama. 436
pasar, 424-425
321-324
verificacin de consistencia.
4IX
definicin. 66. 77
notacin de punto, 94
326-331
mtodos
mouscDownO, 319-320
mouseDragO, 325
mouseEnterO, 326
i--i'
mouseExiK), 326
mouseMoveO, 325
mouseUpO, 320
definicin. 414
EOFExcepiion, 417
errores de compilador,
429-430
explcitas, 424
implcitas. 424
; f;
ndice
600
archivos de lectura de
texto, 453-455
de datos
aplicaciones de muestra.
450-451
creacin, 449
leer, 449
establecer, 213-214
de etiquetas, 271
futuro de Java,16
de lectura, 438
204
final,
aplicacin de muestra,
clases. 392
FocusListener, escucha de
evento, 532
certificados, 430
ejemplo, 431-433
panorama, 4M)
ejemplo. 127-128
euores comunes, 127
flujos
abrir en Internet
BuferedReader, objeh s.
formas,
dibujo. 208
ejemplo. 209-211
GeiFilc. aplicacin de
relleno. 209
muestra. 46-J-466
463
objetos Je conexin 1. RL.
4fi3
cerrar. 439
con almacenamiento en t ifer
lneas, 203
valos, 207
polgonos
creacin. 445-446
dibujo. 203
esquinas redondeadas.
204-205
lectura. 445
creacin. 438
definicin, 438
de byies, 43^-440
flujos de entrada de
archivos. 440-442
flujos de salida de
archivos, 443-444
de caracteres, 43S. 452
archivos de cscritun de
icmo, 455-456
getAdjustmentTypeO. mtodo,
538
g*t Ap|ilt'l('oi>le\l( J, mtodo.
491, 495
arcos
4(>4
getlnpuiStreamO, ml ido,
get.Selecti-dlndexesO, mtodo
441
mtodos, 391
relleno, 204
CAB, 190
JAR, 188-189
Zip, 189-190
FrameworkO, mtodo, 512
fuentes,
devolver informacin acerca
de, 214-215
285
elS'vsieniCliplloiirdO, mtodo
49S
nei.SystemUiokAndFeelClass
Niinu-O, mtodo, 52
(osling, James, 13
Roil-ocusO, mtodo, 343
< ni leos
animacin
getCrossl'iatforniLookAndrccl
geiInputSircamO, mtodo,
466
genes, 246
parpadeo, 239-243
pintar/repintar 232-233
recuperacin de imgenes
243
subprocesos. 233-239
arcos
atributos de transformacin
color, 220
patrones de relleno.
220-221
trazos de dibujo, 222
elipses, 223
guin (-), 81
combinacin, 298-299
creacin, 292
de bordes, 296-298
de cuadrcula. 294-296
de cuadrcula de bolsa,
barras de desplazamiento
285-286
botones. 273
campos de lexio. 279-2X2
casillas de verificacin
274-277
etiquetas. 271-272
lienzos. 287-2XS
listas de seleccin.
277-27"
listas dcspla/ahles
283-285
conos
creacin. 514
definicin. 514
Pardon My lions! Web
site, 515
lneas. 203, 223
polgonos
agregar punios a. 206
orillas tedondeaJav
204-205
rellenar. 204
302-313
de Unjo, 293-294
de naipes. 299-302
especificacin. 292-293
migenes, 313
p.moiaiua. 292
aplicaciones independientes
del AWT. 3i>4-3o5
iniciali/aciii. 368
stihpaiieles, 369-370
componentes
agregar a contenedores.
2n9-27O
barras de desplazamiento.
285-2X6
botones. 273
campos de texto, 279-282
casillas de verificacin.
274-277
etiquetas. 271-272
lienzos, 287-288
listas dcsplazables,
283-2X5
listas de seleccin,
277-279
cuadros de dilogo
agregar a applets. 360
aplicacin de muestra.
527-530
confirmar dilogos,
524-525
1602
ndice
mens
activar, 363
de entrada, 525
de mensaje, 526
desactivar, 363
compilacin
de opcin, 526-527
modales, 356
eventos, 364
administrador de inlerfaz
dilogo, 361
TextDialog, ejemplo,
plataformas de Windows,
bolones, 515-516
268
manejo de eventos
<OBJECT>, 187-188
<PARAM>, 191-J 92
sistemas Solaris, 31
herencia
definicin de, 48
excepciones. 425-426
casillas de verificacin.
jerarquas de clase
creacin. 50-52
descripciones de
componentes, 522
independencia de plataforma
temas de desempeo. 19
mtodos, 53
sobreponer, 178
de barra de
marco de trabajo de
i' . instrucciones
subclases, 55-60
ejemplos, 120-121
clse, palabra clave, 119
imgenes
teclado, 522
nombres de componentes,
523
de lista desplazable.
344
paneles de componentes,
de teclado, 331-338.
512-514
542-543
Sugerencias, 522
de ventana, 544-545
SwingColorTesi, apli
cacin. 518-520
escuchas de eventos.
531-533
ventajas. 510-511
establecer componente,
ventanas
533-534
handleEvcntO, mtodo,
318-319,338-340
mtodos. 534-535
mo\ imienios de ratn.
aplicacin. 545-549
marcos
BascFrame, ejemplo,
355-356
creacin. 352
definicin, 352
dimensionar, 353
dibujo, 245
policytool. 435
observadores, 246
historia de Java
recuperacin, 243
endoso de Nelsca|X.\ 14
Green. proyecto 13-14
Hoava, navegador, 14
versiones de Java. 15
evenios, 361-362
iniplcnu'iuir
interfaces
instalar el JDK
carcter de terminacin, 66
ciclos
ejemplo, 408-409
do, 130-131
ventana desplegablc,
366
inlerfaces niiltiples.
for. 125-128
actuali/.acin de resultados
geiHSBColorU. mtodo.
403-404
inlerfaces sencillas,
374
KGBloHSHO. mtodo.
H
handlcDeselccK., mtodo, 344
handleSelectO, mtodo,
HEIGHT, atril .uto (<APPLET>
etiqueta), 60
373
updaieO, mtodo. 372
402-403
condicionales. 560-561
definicin de. 11 y
if, 119-121
operador condicional.
swiich. 122-125
ejemplo. 408-4IW
inlerfaces mltiples.
403-40-1
inlerfaces sencillas,
lOMtl.i
KiiMiiable 2.14
inlerlaz/fusin de usuario de
API (Javal)eansj, 490
Internet K.vpluri-r, 434
inlerriipciones de lnea,
marcado de HTML,
185-ISn
Infei-rupledExceptinn,
excepciones, 41')
ilemSiuleChiii<>ilo. mlodo,
541
121-122
expresiones. 66. 77
finally, 421-422
importar. 395-396
paquete. 3')8
swiich
>: CHIls
ImaecObscrver, 246
implenicniacin
ocultar, 353
ejemplo, 345-348
keytoul. 432
Hoava, navegador. 14
SetHack. applel de
SuingColorTcsl,
515
jar, I S!
despliegue, 353
ejemplo, 354-356
325-331.543-544
CABarc, 190
grficas de usuario.
panorama. 48-50
de elemento , 541-542
subprocffsos. 235
i'iitj, mtodo
inicio
iconos
diseo, 52
herramientas
"ifiiili/cirn de appleis, 17
mtodos abreviados de
indcxOfO, mtodo,!)
indicador de comandos, 25
'"'o application, (ejemplo de
344-345
ventajas. I (,-17
etiquetas. 515
aplicacin, 511-512
de ajuslc, 538-540
desplazamiento,
panorama, 122-123
limitaciones, 123
8J
<APPLET>. 182-186
<UK>. 185-186
30
etiquetas
plataformas de Windows.
516-517
de accin, 341-343,537
de Hipertexto)
sislema Solaris. 31
barras de desplazamiento,
517-518
ejecucin
de usuario, 52!
diferencias en plataformas,
subpaneles; 369-370
28-30
357-360
muestra
Swing, 509
objetos de archivos de
HelloUan, aplicacin de
definicin, 356
ejemplos. 12.1-125
definicin de clase, 41
ejecucin. 4-1
indiice
I 604
ndice
mtodos, 39-42
porttil, 487
fecdJabberwockO.
mi JDK
Java21), 218
,,|>PU-i .le n.m-ra. 225-22X
3,b, 22-1
color, 220
patrones di relleno.
220-221
ibujo, 222
rectngulos.' 23
JavalU-uns
comparada c -n Java.
488-489
definicin de
4S7
sisiemas Solaris, 31
JavaScript, 32
490
4S7
mecanis nu de
descul rimiemo
de ca e, 4S7
dir,29
575-576
configuracin UN1X,
58U-5XI
carcter, 83
lneas, dibujo de
teclado, 522
ventajas, 510-511
ii-j uunbit'ii AWT: grficos
Jfraine, clase, 511
mtodos
addLineO, 328
inii(), 326
mouseDownO, 327-328
mouseDragO, 328
inouseUpfJ, 328
disponibilidad. !5
asisiente, 23-24
probar la instalacin.
mtodos
25-26
initO. 334
keyDownl). 335
painK). 335
panorama, 21-22
PATH, 575
arrastrar y colocar, 16
descarga, 510
clase, 214
listados
adniinistradores de diseo
de bordes, 297
de cuadrcula, 295-296
de cuadrcula de bolsa,
311-313
de flujo, 293-294
AllCapsDemo, aplicacin,
,
ArrayTest, aplicacin,
barras de desplazamiento,
286
liquelados, 132-133
for, 127-128
instrucciones
if, 120
l.abelTest, programa de
swilch, 124-125
Jabberwock, ejemplo
aplicacin, 45-46
: ..,
while, 129
Selectltem, 541
SwingColorTest, 546-549
WellAdjusted, 539
Map, applet
clase, 42-44
definicin, 140-14]
llamar a, 97
HelloDan, aplicacin, 27
ChangcTitie, 535-536
marcado de HTML, 60
bloques iry...finally,
aplicaciones
lienzos, 287
355
manejo de eventos,
casillas de verificacin,
etiquetas, 272
BseFramel, aplicacin,
de audio, 263-264
botones, 273
275
115-116
do...whle, 131
lienzos, 287-288
276-277
de naipes, 300-301
muestra, 133
bolones de opcin,
ciclos
Cl-ASSl'ATH. 579
BuTerDemo, 446-448
WritePrimes, 450-451
Fom.Melrics, ejemplo de
configuracin
flujos, aplicaciones
ReadSource, 454-455
421-422
WrileByles, 443
457-459
ReadByies, 441
532
236-237
ReadPrimes, 451
constructor. 159
paintQ, 329
ejemplo de mlodo
399-400
500-501
panorama, 509
copiar, 22-23
instalacin
576-57S
578-580
, ; ', ...
376-377
CopyPaste, aplicacin,
PATH. instruccin.
,-:
lne^arra () de canalizacin,
OVWindims NI,
CI.ASSI'ATH, instruccin.
.-.. , . .
definicin de, 16
mtodos abreviados de
28-30
ColorTest, applet
i . ColorConirols, clase,
573-57?
elipses, 223
trazos de
plataformas de Windows.
cd, 28 ,.
computacin, 4XX
javac
componentes, 512-518
soporte distribuido de
518-520
sealizacin, 488
showAuributesO, "*3. 47
aplicaciones, 511-512.
diseo, 488
main(), 45-47
de usuario. 521
propiedades de tiempo
42.48
1X8-1H9
Swing,
administrador de inicrfaz
6051
ScopeTesl, programa,
142-143
SeiBack, applet, 348
u~.
ndice
Swing
SwingColo.Test. apli
cacin. 518-519
(.lenle, 480-481'
servidor. 475-479
variables de instancia
definicin. 136
prueba/modificacin.
94-95
de seleccin
agregar a conlenedoics.
278
creacin, 277-278
ejemplo, 278-279
desplazables
agregar a coniencdorcs.
284
M
Macmillan Compuler
278
45-47
charWidlhO, 214
FrameworkO. 512
gciAecessibleCiiniexK). 23
326-331
325
32i
immwl-.xiul. muiiio.
.'2o
miiueMove(). mtodo.
325
SwingColorTcst applicalion
mtodos, 545
teclado, 331
keyDownO. mtodo. 332
Keys, applet de muesiia.
535-537
538-540
333-337
337-338
teclas predeterminadas,
533-534
332-333
definicin. 531
manejo de la memoria, 93
cdigos de escape. 75
imponacin, 533
lieniListener, 541-542
KeyListener, 542-543
definicin, 73
MouseListencr, 543
de carcter, 75
ven tambin conjunt < de
MouseMotionListencr, 544
mquina virtual
408-409
literales, 556-557
booleanas, 74-75
cadenas, 76-77
caracteres Unicodi
WindowListener. 544
eventos
enteras, 73-74
de accin, 537
numricas, 73-74
de ajusie, 538-540
de elemenlos, 541-542
535
Adju.NiineiiiLisieiicr.
charAtO, 98
tipos. 363
clases. 545
creacin. 277-278
creacin. 363-364
mouseDownO. nitodii.
AciionLisicner, 537
IbciisGincdl 1.540
lociisl.osnl. 540
escuchas de eventos
HowLayouiO, 293-294
l-oni(). 213
Cli.ingeTille.java, ejempio.
convcnNumQ, 125
changeColorO. 347
actionl'crformedl), 534
inanejadoios de excepciones
convenliO, 124
elementos de
MalformcdLKl.Kxccplioii,
321-324
activar, 363
mtodos
mciuscEmert). mtodo.
319-320
copyArea). 212
475
makcRangcO, mtodo, 140-141
pblico, 385
herencia. 387
coiintlienisO. 279
mouscDrag), mtodo.
anidadas, 427-42X
TriviaServer, aplicacin,
excepciones, 417
llllRoundRecn). 2(H
protegido. 385-386
desactivar. 363
firma, 147
Jabberwock.java, ejemplo.
privado, 384-385
niens, 364
566
mainO, mtodo
control, 279
ejemplo, 278-279
niens
liandleliveiilO. inuxlo.
gctSourceO, 534
agregar a conienedores,
544-545
control, 285
despiegabies
de ventana, 361-362,
JavaBcans. 490
ejemplo, 284-285
margenes
de teclado, 542-543
318-319
de enfoque, 540
6071
clases. 583-586
interfaces, 582-583
panorama, 17-18
creacin, 352
dimensionar, 353
eventos, 364
abstractos, 392-393
actionO
chcckrxuO. 274
gciAciionComniaiidd. .:"
checkEvcn). 121
geiAdjtisinieniT\pc( i, 53S
Dalal-lavorO. 497
DalalnputSireanid. 449
gelApplellllIrtl 1.491
DaiaOulputSlreami). 449
felAudioCiipi . 2o2
definicin. 561-562
gelC'lasstl. )0n
argumentos. 341-342
ejemplo. 139
definir, 341
ci('odfHaM-( i. 244
viColoni. 2IS
deleteO.-457
dclclr()ul:xii(). -157
dcstrovl I. 179
geiC'lickCounis 1.543
getCrossPlailiirmLoiikAnj
IvcI('I.inN.iiii>"i1. 521
addLine), 328
addPoiniO, 206
de durada. 58I-5H2
.idd.SpniO. 322
fetl-"ilel I. 4W>
Dialogo. 357
ailjusimeniValucChangedO,
disableO. 363
disposel). 25(>
gcillSItCnl'irl 1.374
538
ArgStreamO, 448
BorderLayoulQ. 297
drawArc), 208
gelliipulSueamtl. 4(i3
drawlmageO. 245-246
gi-ilnseisi). 313
BulferedlnpuiSireamO. 445
drawLineO, 203
BufferedOulpiitStreamO, 446
gciltemO. 279
drawOvalU, 207
gelKeyCliarl 1.543
BufleredReaderO, 454
drawPolygonO, 205-2U6
BuffeiedWriierO. 456
gell-alx-li). 273
drawRecK). 203
geiMessagcl 1.419
buildConstraimsO. 304-309
drawRoundRecK). 204
buildRecK), 155-156
getParameierO. 192
drawStringO, 200.214
getParennl. 360
getPoiiiK), 543
buttonO, 273
enahle(). 363
CardLayoutO. 299
equals(), 105
getSelectedlndexO. 279
clearUccK). 212
estik-o. 3S8-39O
geiSekvtedlnde.vesO. 2S5
geiSclectcdliniK. 279
dosel). 439
e.\isis(). 457
closePathO, 225
feedJabberwock). 42
geiSeleciedltemsO. 285
Filel), 456
getS/.e(), 212
definir, 562
FilcDialogO. 361
ejemplo, 159
FilelnputStreanH). 440
geiStateO, 274
FileOutputSireamO, 443
getSaieChange( 1.541
constructor. 160
nombres. 159
FileReader( ).453
getSysiemClipBoardl). 41>S
FilcWriterO. 455
getSysiemLiKikAndFeelCNi^
sobrecargar. 160-162
fillArcl), 208
sobreponer. 166-168
fillOvaK). 207
Namcl). 521
ftlIPolygonl). 205-206
gelToolkill). 498
filIRecu), 203
getValucO. 286
ndice
ndic
608
gelWidthO, 245
gciXO, 543
324-325
gelY(), 544
giKocusQ, 343
r,iidl.ayiu.i(). 295
handleDesclecK), 344
mouseDragO, 325
mouscDraggcdl), 544
liamlloEveniO. 318-319,
mouseEiitcrO. 326
338-341)
niousclixiil). 326.
Ji.tmIIi-Si-kvH). 3-l-t
mouseMove(), 325
liidcl). 353
mouscMovcdO. 544
indcxOfO. 98
inouseReleascd). 543
iiiO
muuseUpO, 320
..-'
niovcTiif). 225
322
newPramel). 352
inscnTexH). 283
newLinefj. 456
iuselsO- 313
ncxiDouble), 92
isEditable), 282
oneoZcrol), 144
itcmStalcChangcdO. 541
JHiiiiimK), 5Id
JComboBoxO, 517
232-233
JCheckBoxO. 516
Jl.abelo. 515
J.SerollBarO. 518
JTcMAreaO, 516
422-427
JTcxtRcIdO- 516
kcyDown). 332
425-426
kcyIVssedU. 43
definicin. 416
keyReleasei.I. 54 3
explcitas. 424
kcylyvill). 54 3
abcl), 271
nekoSleepO, 252
ucwAudioClipO. 262
milOnAO. 474-475
--keyU|H.. 332
nekoRunO, 250
nekoScraicl.O, 252
iinplciias, 424
423
JincToO. 225
parselnK), 146
linkToi). 494
MO. 284
143-145
loop*). 262
playl). 262
.losil;ocus(>. 34 3
PUS T. 483
losiOwncrshipi. 4'W
primLnO, 79
primMcO, 165
llamar, 96-98
mainf)
luma. M7
Jahhcrwock.javn, ejemplo.
45-47
TriviaScrver. aplicacin.
475
prinlNamest). 116
processlnpuu), 472-473
read(). 438
readFioalO. 449
readLine(), 454, 466
readStreamO. 448
makeRangeO. 140-141
readUnsignedByict 1,449
nikdir). 457
readUnsignedShonO, 449
motiscOnwn)
sobrecargados
renameToO. 457
creacin, 154-158
replaccTexlO. 283
definicin. 153-154
MS-DOS
requesiI-iicusO. 335
ventajas, 154
ivslupi-0. 315
cd, 28
rcMe(). 353
ilir. 29
165-166
appleis subprocesadas,
235
TriviaServer. aplicacin.
caiga. 248-24')
conjunto. 248
dibujar/iciluijar, 232-23.1
doble bl'er. 257-261
siTollbarO. 285
subslringO, 98
climinaciin de objetos
sclecU 1.279
testUlockO. 118
523
imgenes
sialic, 388-390
animacin
siringWidihO, 214
471-472
lexiAieaO, 282
253-256
tcnica de animacin.
249-253
toUppcrCascO. 98
sci.AciionCommanJl i. 537
panorama. 213-232
seiUackgioundO. 218
upilaieO. 240-243
parpadeo, 239-243
URL 1.492
rccupciaciil Je imagen.
selConslrainlst). 3n6
valueOI'O, 98
seiC'oiiieiuPaneO. 512
uindoClosed(). 545
sctCuricntl). 277
u'iiuInu'Clitsmg), 544
setEehoCharO. 516
windowOpenedO, 544
seil-.clioC'liaracicrl i. 2SD
setlldiiablct). 282
writelnK), 452
ciclos, 262-264
wriieStreainO, 448
ejecutar, 262
sctl:orcgrnund(). 2l>
selelpMenud. 363
minscula, convenir a
sell.alelo. 273
mayscula, 457-459
M'il.iiiikA.ul:cell. 521
sciMciuiUaro. 362
seiMiiemonieO. 522
243
rutas relati\ a> de archivos.
244
subprocesos. 233-239
sonido
mullitareas. 233
dilogo
modificadores, vea palalinis
sciSlringl). 271
sciSirokcl .222
setValueO, 286
seiVisihleO. 512
MuuscLislencr, escucha de
showAttnbutesO, 43
showConfirmDialoai), 524
evento, 532
MuuseMotionl.istener, escucha
showInpinDialogO, 525
df evento, 532
showMessagcDialogO. 526
sliowOpiionDialoiriJ. 526
showSialusl 1.491
miiuscKi'leasi'dO, mtodo,
size(). 212
543
92-IV4
nevtDoulilfU, mtodo, 92
coiiiponenies de Swing, 523
paquetes. 397-398
variables. 69-70
NO'I. opi-radnr, 83
notacin exponencial, 74
NT
aplicaciones de Java
compilacin, 28-30
ejecucin, 30
configuracin del JDK.
23-24,631-633
NaniesUlop, programa de
muestra, 127-128
naveRadores
firmas especficas de
navegador, 433-434
HutJava. 14
Java Plug-in. 176
'
nombrar
cla\e
NeivPalindronif, appli-l de
buiidkeci), mtodo
seiSuucU. 274
MvKect. clase
356
seil'ainK). 220
uviilirai'in. 2-18
selAcccssililcNaincl), 523
246
Graphics, 256
texi-'ieldO, 279
;'
multimedia
ventajas, 165
nuil)
in.licadoi de couiaiuins, 25
RGUloHSBO. 373
navegador, 19
Navigator, 4.34
comandos
162-164
Plug-in, mejoramiento de
repaimO, 232-233
609 1
634-636
Cl.ASSPATH. instruccin.
636-638
4
m
#
m
.iv
ndice
Numberlteader, programa de
muestra, 124-125
lcrales, 74
ocala*. 74
ventanas, 353
asignacin, 79-80
comparacin. 82
concatenacin (+), 86
condicional, 121-122
decrcmento (), 81
desigualdad (!=). 105
igualdad (==), 105
incremento (++), 81
matemticos, 77-79
new, 85
creacin de objetos.
90-92
instanciacin de arreglos,
objetos
arreglos, 113-114
113
NOT, 83
comparar. 105-106
OR. 83
precedencia, 84-85
a clases, 103-KM
.i interfaces, 104,405
convenir a tipo-, primitivos.
104-105
creacin
administradores de
memoria, 93
ternario, 121-122
oportunidades de empleo
(Jiivu), 571
orden de precedencia
(operadores), 84-85
organizacin, vea alineacin
valos, dibujar
argumentos, 90-91
cotislfucloics, 92
Font. 213
Genc-nill'ath. 225
' Graphics2D, 219
Random, 91-92
referencias, 99-100
transferihlcs
caracteres en campos de
texto, 280
pblico, 399-400
nombre, 397-398
super. 165-160
prueba, 183-184
Palndromo, ejemplo de clase
clases importadas. 5S
cJigo fuente, 59
515
puro
MlhjllOCCMlS, J.5
ejemplo, 240
panorama, 239
reduccin
309-370
mrgenes. 313
dilmjaj
drawPolygoiK J. mloo. 21 5
J.iv.iWVirIJ. 5(i9
Java2D, 224-225
Macmillan C"iiiii|)uter
I'opUpWindoH, aplicacin,
354-356
Pihlivliiiig. 566
vinas Web
353
lU-liTcnccs'k'st.java, :i|>licacin,
a aplicaciones. 148
lefeivncias, 99-IIMI
claves. 597-601
aapplcis. 191-195
relli-xin, 107-1119
cuniiol de acceso
a mtodos. 143-145
paquetes
predeterminado, 398
excepciones. 424-425
I'ATI1. configuracin
pnieh:i
rt'llfiiii, 3M
ceidura de la crpela.
cambiar, 575
nombres, 397-398
definicin, 62
valos, 207
polgonos. 2W5-2O6
referencia
rectngulos, 203-204
break, 131
peer, 315
class, 136
continu, 132
nombres de paquetes,
395
paquetes personalizados
Clipboard, 498-499
aplicacin de muestra,
499-502
ClipboardOwner, merfaz,
499
desplegar. 575
agregar. 576
398
eieiuplo. IOS
applcls. IN3-IX-J
clases, 398
implements, 234,402
polgonos
final, 137,390
relleno. 2(W
pasar
arcos, 208-209
extends. 136,407
printLiU), mtodo, 79
Java2D. 220-221
else. 119
de, 11
updaien. 240-243
interfaces, 597
abstrae!, 392
palabras clave
223
277
232-233
Kcctangle2D.FIoal, clase,
sobreponer el mtodo
argumentos
dibujar
parpadeo (animacin)
449
compilacin, 59
creacin, 29S
permisos, 431
f*eatlUiLsigiiL'il.Sliori()t mlodo,
persistencia, 487
creacin
predeterminado, 398
protected. 385
objetos tianslciihlcs
control de acceso
mili, 113
priivate, 384-385
pblico. 399-400
ClicckboxGroup, 275-276
"
iiisianccof, 535
611
Q-R
QnA.txt. archivo (aplicacin
TriviaServcr), 47.1
Random, clase, 91-92
anchor. 310-311
asignacin a componenics.
304-31(6
nn. 3io
gridlicighl. 306
gridwidlh. 306
eridx. 306
m -
ndice
I 612
gridy, 306
navegador especfico.
433-434
weighlx, 307
weighiy, 307
RGBlollSBO. mtodo, 373
KMI (Invocacin Ucmolu de
Mtodos)
aplicaciones, 504-505
arquiteciura, 503-504
pollicas. 434-435
semejante, 315
sensibilidad a maysculas y
minsculas, en Java, 69
panorama,502
servidores (aplicacin de
UI'C (Llamadas de
Trivia)
constructor, 470
TriviaServcr, aplicacin,
471-472
475-479
processlnpui(). mtodo,
472-473
244
470
sabores (dalos), 497-498
salida, vea entrada/salida
salir
aplicaciones, 378
ciclos, 131-132
ScopeTesl, programa, 142-143
SCKi)IX_A1I.SOJ.UTF.. evento,
SCROLI-_UNE_UOWN,
evento, 345
.SCIH.l._l.lNi:_Ll', evento,
345
SCKOLL_PAGK_DO\VN,
evento, 345
SCROU.J'AGK.UI', evento,
345
autoridades de cenifi-
cacin, 431
certificados. 430
ejemplo. 431-433
WAITFORANSWER. estado.
473
WA1TFORCLIENT, estado.
473
WA1TFORCONF1RM,
estado, 473
selAccessibleDcscriplionO,
mtodo, 523
sel AccessibleNimc(), mtodo,
Macmillan Coinpuicr
i'ublislnng, 277. 5o5
Microsol'i, 190
L'mcode Consonium, 7b
sizt-0. mtodo, 212
524
526
sotkets
diseo, 469-470
ejecucin, 4S2
implcnicnlacin de
'
implcnicnlacin de la capa de
transpone, 468
changeColorO. 347
inii(), 346
solucin de problemas
simplicity of Java, 20
actionO. 346-347
sistemas Solaris
aplicaciones de Java, compi-
lar/ejecuiar, 31
instalacin del JDK, 24-25
sistemas SPAKC, nslalacin
sobreponer, 179
Strouslrup, Djarne, 13
subclases, 50
creacin, 55-60
definicin, 48. 62
programas de animacin,
233-234
DiejIaK'loik. ejemplo.
23d-2 V)
iiMpicniL-macin.
operador de concatenacin
mtodos
sobrcposicirin. 1 79
senador. 470-479
signo ms -f- }.
implemento-ion dei
rcpaiiiK). .123
cliente, 479-481
81
537
345
JDI3C, 506
( + ). 86
523
scActionCominaiidO, mtodo,
inil(), 322
mou.scDownO. 322
painlO, 323
JDK, 22
showAIlributesO. mtodo, 43
slHm'McssageDialogO, mtodo,
aildSpoK). 322
JavaWorld, 569
sliouConllrmDialogO, mtodo,
variables de instancia.
nilodos
JARS. 569
323-324
ejecutar, 482
sealizacin, 504
Rmiregistry, programa, SOS
plataformas Windows,
576-578
ciclos, 262-264
234-23f>
substringO, mtodo, 98
Swing
#
i
barras de desplazamiento,
517-518
botones, 515-516
casillas de verificacin.
516-517
creacin de descripciones
t
i
para. 522
diquelas. 515
Sugerencias, 522
cuadros de dilogo
aplicacin ile muestra.
527-53(1
cic.-iciiin, 521-524
de confirmacin. 524-525
de entrada. 525
de mensaje, 526
de opcin. 526-527
definicin de. 16
mancjidc eventos, 531
ClMiigeTle java.
ejemplo. 55-537
I
I
I
1
I
1
csiiKha de eventos.
531-533
CNi.rbleccr componente,
533-534
,1c accin. 537
de ajuste. 53h-54U
de elemento. 541-542
de enfoque. 540
de ratn. 543-544
de teclado. 542-543
ilc vemana. 544-545
insianceof. palabra clave.
535
mtodo. 534
I
)
J
administrador de inierl'a/ de
usti.ii o. 521
aplu-aciones
niarctj de trabajo,
511-512
componentes
panorama. 509
wniajas. 51(1-511
SwitigC'olorTcsl, aplicacin de
muestra, 518-520
clases. 545
escuchas de eventos, 545
v
#
ndice
614
ndice
convertir a objetos,
104-105
TCP (Protocolo de Control de
Transmisin), sockcs
aplicacin de Trivia
diseo, 469-470
ejecucin. 482
toUpperCaseO, mtodo, 98
tramado 216
lr_\...calch, hlui|iies
(silico, 388-390
Unicodc. cunjunlu de
caracteres, 69
cdigos de escape. 75
transpone, 468
teclado
Weh. 76
580-581
333-337
ledas modificadoras.
337-33S
teclas predeterminadas,
332-333
mtodos abreviados, 522
457-459
dibujo, 200-201
41-142,
16(1, 235
Thruwable, clase, 4 6
tipos de datos, 7(1-7 ,JI0
hooleanus, 42
conversin por c: st,
101-102
KM-105
tipos primitivos, 7C -71, 110
conversin por i jst.
101-102
^Jvi
definicin. 136-137
valores iniciales, 69
locales, 67
declaracin. 6X
val.>ies, o1.)
mimbrar, 69-7U
booleanos. 42
KM-105
valoeOK), nilodo, 98
ventanas
variables de instancia
advertencia Je Unsipnca j.iv.i
alcance. 118
desplegar. 353
ScopcTcsi. pruprania
142-143
incremento. SU-81
variables
texto
globales. 67
gable. 356
definicin, 95
valores de acceso, 96
544-545
marcos
valores de cambio, 96
creacin, 352
valores iniciales, 69
definicin. 352
CLASSPATH, 397
dimensionjr. 353
constante
ejemplo de
declaracin. 137-138
definicin, 137
privado, 384-3S5
protegido, 385-386
finales, 391
convenir j objelos.
492-494
112-113 '
desborde. 8S
BuionLink, ejemplo.
variables de arreglos.
variables mltiples. 68
definicin de, 67
542-543
appleis. 491
decrcmento, 80-81
implemcnlacin de la capa de
Vinculacin
101-102
ejemplo, 419-421
pblico, 3S5
conversin por casi,
Baser>.mic.355-35i
acuitamiento. 353
Window, clase. 352
v erilcacin de consistencia
(excepciones!, 418
Vt'riSign, 431
WArn-OKANSWKR, estado
d.M-i.t,
l'ATH, inslruccin,
Wrilel'riiius, aplicacin.
'.>iiid(ivv()|)ened(I. mlodo.
184
636-638
l'veno, 362
(TriviaServerl, 473
W.AITFORCONI'IKM, oslado
\Veb, publicacin (|c iipjjlils,
CLASSPATH. insimccin
WINI)O\V_I)KSTROY, evini,
YVAITKOKCI.IIiNT.iMado
(TriviaServer), 473
23-24.631-633
iidovvClosiii);(),mlodo, 544
Windoul.i.siener, escucha de
(l'riviaServcr), 47J
elijiiela). 60
(i.t I 611
vvi i-fiiM I ihi'IIiimI, 452
450-451
i-vrnli, 532
5-14
Windows 95/Windovvs NT
aplicaciones de Java
compilar. 2S-3I)
ejccuiar. 30
615|
x-z
XOi, operador, H.
/ip, archiveros, l*>0