Documente Academic
Documente Profesional
Documente Cultură
Rogers Cadenhead
Aprendiendo
TRADUCCIN:
Antonio Enrique Gonzlez Velzquez
Traductor Profesional
REVISIN TCNICA:
Ariel Ortiz Ramrez
HALL
MXICO - NUEVA YORK BOGOT LONDRES MADRID MUNICH NUEVA DELH1 PARS RO DE JANEIRO SIDNEY SINGAPUR TOKIO TORONTO ZUR1CH
i vi
Aprendiendo Jvj I en 21
DIa 3
65
...66 ...67
Resumen de contenido
Introduccin Semana 1 1 , 7
9
33
67 69
70 72
72
73
Da I
2 3
4 5 6
Literales numricas
Lcrales boolcanas
Literales de caracteres
7.1
74
75
65 89
111
76
77
.;
135
Aritmtica
Ms sobre asignacin
Incremento y decrcmento
77
79
153
80
2
171
173
Comparaciones
Operadores lgicos
Precedencia de operadores Aritmtica ele cadenas
Resumen
Preguntas y respuestas
X3
S4
So
231
87
N8
23!
267
DIa 4
Lecciones de objetos
Creacin de objetos nuevos
89
yo
90
11
12
13
291
317
Uso de new
Qu hace ncw
92
14
351
93 93
93
44
379
Da 15
16
17
18
38!
413
437
461
Modificacin de valores
\arhbles de clase
95
Llanadas a mtodos
I. ;>s mtodos dt clase
96
os
'}')
100 102
19
20
485 509
531
103
104
-21
105
105
107
Contenido
553
Apndices
Apndice A
B
555
565 573 583
DIa5
* -.
'
( jq
111
...... ;
;
^ " ^ ]4
589
^ ^ ^^ ^
Condicionales if
El operador condicional
pj
^
Condicionales switch
Ciclos f or
Ciclos while y do
Ciclos while
]28
* : 12g
120
Ciclos do-.while
Interrupcin de los ciclos Ciclos etiquetados
(jj
,32 ^4
134
135
Definicin de clases
Creacin de variables de clase y de instancia
Definicin de variables de instancia Constantes
Variables de clase
Creacin de mtodos
]36
^
^ jjg
^
^
Definicin de mtodos
La palabra clave this
)4
]4,
^
)4<.
Mtodos de clase
Creacin de aplicaciones en Java
,46
]47
Clases auxiliares
^
j4g - )5)
]4g
Resumen
Preguntas y respuestas
.e de un objr-io .
)52
:
v-
w.
Contenido
',
153
154 .. 158 .. 159
;
Lneas
:
:::.: :...
203
203 207 208
2I2
::..
.. 160 .. I6 .. I62
Copiado y limpieza
texto y fuentes
Cree objetos Font Dibujo de caracteres y cadenas
Cmo obtener informacin acerca de una fuente
'..'.'
213
213 213
214
Sobreposicin de mtodos
.. 165
.. 166
Mtodos finalizadores
.. 168
Color
216
216 217
Resumen
Preguntas y respuestas
.. 169
.. 169
218
219
171
173
174
Colores 20
219 220
220'
178
180
231
182
182 . 183 ^
232 232
5J
233 234
185
'
2*6
TO
~3*
CODE y CODEBASE
La etiqueta <OBJECT>
. 1S8 . 190
. 191
. 195
'Insumen
'regunias y respuestas
. 197
246
248
La clase Graphics
. 200 . 202
El ejemplo Neko
Doble bfer
256
24S
.. 202
Contenido
XII
258 258
325
325
326
261
2M
Resumen
Preguntas y respuestas
V.
326 331
205
267
.... 2(.S
....269
332
332
El AWT
333
337
.... 26')
.... 27I
338
Etiquetas
.... 273
. 274
340
341
0??
.,
Manejo de los eventos de enfoque Eventos del rea de texto Eventos de listas desplazable
Un ejemplo: el interruptor de colores de fondo
Campos de texto
reas de texto
.,<,.,
.^
Listas desplazabas
Barras de desplazamiento y deslizadores
Lienzos ,
08J
"^
T^y
346
349
Preguntas y respuestas
349
... 289
291
351
352
La clase Window
352
Marcos
352
"^ ~%
"^ "^
~^
'
,^ ^^
Mrgenes
Resumen Preguntas y respuestas
-,l4
3I4
317
318
Doble clic
XII
Contenido
XIII I
379
381
422 423,
423 424
425
3S2
388
390
426
426
39-
427
427
428
428
429
429
430
431
433'
-"-1
Conflicios.de nombres
Una nota acerca de classpath y dnde se ubican las clases
396
397
Creacin do sus propios paquetes Seleccin de un nombre para el paquete Creacin de la estructura de una carpeta Cmo agregar una clase al paquete
Control de acceso a los paquetes y las clases
Polticas de seguridad
Resumen Preguntas y respuestas
'.
434
435 435
437
438 438 439
Interfaces
40
401
Interfaces y clases
4^2
44C-
440 440
444 445
44 405
406
Filtros de bytes
A'
41 I
Flujos de caracteres Cmo leer archivos de lexto Cmo escribir archivos de texto Archivos y filtros para los nombres de archivo
408
Clases internas
R sumen
Pr:guntas y respuestas
409
4P
413
414
I as excepciones de Java
Manejo de excepciones
4!5
417
Sockets
467
v 418 41S
V
Contenido
xv I
;""
.479
Resumen
Preguntas y respuestas
485
s
532
4g8
534
La API de JavaBeans
Trucos con applets
Eventos de accin
Eventos de ajuste Eventos de enfoque
Eventos de elemento
.491
.491
.. 541
. 496
Eventos de tecla
Eventos de ratn
Eventos de movimiento del ratn
Eventos de ventana
"
5"+4
.. 497
.. 49S
544
.. 502 .. 503
.. 504
5
...
Resumen
Preguntas y respuestas
.. 505
... 506
Resumen
Preguntas y respuestas
... 507
509
...510
Apndices
553
556
^^
Comentarios
Literales
Declaracin de variables
,,, 556 ^-
5]j
Asignacin de variables
Etiquetas
Botones
Campos de texto
,'
515
5I
5|6
Operadores
55g
0bJel0S
reas de texto
- - " ^
^16
^7 M8
Arreglos
"'.560
* ^
Ciclos y condicionales
560
Definiciones de clases
Importacin
^
565
Proteccin
Apndice B Recursos de Java en Internet
Sitio Web de este libro 565 56fi
5J]
,..
Mtodos abreviados
Informacin sobre herramientas
^2
^
. 5<>6
. 5oK
. 568
S5
do sei
JavaWorld
. 570
. 571
573
573
S7S
The Off
Oportunidades de empleo
575
576 5S0
nttp://v/ww.Prefect.com/]ava2i.
5 SO
583
c0" ilIDK
5X3
5S5
586
5X7
5SX
589
NDICE
Dedicatoria
A Eric. por todas las razones comunes (soporte moral, preguntas estpidas, apoyo en los
momentos difciles, lomar grandes cantidades de caf). U.
Prentice-Hall Hispanoamericana
El personal de Prentice-Hall Hispanoamericana, S.A. est comprometido en presentarle lo
mejor en material de consulla sobre computacin. Cada libro de Prentice-Hall Hispanoamericana es el resultado de meses de trabajo de nuestro personal, que investiga y
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. .
A Rita Cracker (de cario "Nana ") y Mary Cadenhead (de cario "Abuela " o "Mimi").
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
De Laura Lemay:
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
mayo de 1995 y sembr la idea de esie libro.
Responderemos a todos los lectores que podamos. Su nombre, direccin y nmero telefnico
jams formarn parle de ninguna lista de correos ni sern usados para otro fin, ms que el de
A lodos quienes compraron mis libros anteriores y les gustaron: compren lambin ste.
De Rogis Cadenhecd:
ayudarnos a seguirle llevando los mejores libros posibles. Puede escribirnos a la siguiente
direccin:
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
Rogerverg y le plan aria un beso a mi esposa Mary y a mi hijo Max, quien debena estar entre
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,
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.
&
9
m
Por una pane Java mantiene despiertos a los programadores hasta tarde, mientras al mismo
desarrollo de programas.
tiempo otro tipo de Java permite a los programadores dormir mejor despus de una jornada de
El lenguaje de programacin Java alcanz un lugar importante a fines de 1995 cuando
m
m m
opciones para agregar programas interactivos a Web, incluyendo Shockwave de Macromedia y ActiveX de Microsoft. Cuando se introdujo Java se revolucion la naturaleza de las pginas efectos especiales. De acuerdo con la mquina de bsqueda Alta Vista, ms de un milln de
pginas en Web incluyen applets de Java.
Netscape firm un contrato para integrarlo en el navegador Navigator. Hoy hay vanas
Web. Los applcts de Java, pequeos programas que se ejecutan dentro1 del navegador como parte de una pgina, sirven para varios propsitos: juegos, multimedia, animacin, y otros
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
de programas Java.
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 11 empieza una exploracin de cuatro das a la programacin visual. Usted aprende a crear una interfaz grfica de usuario para los applets usando el AWT (Kit de herramientas para el manejo Abstracto de Ventanas), un conjunto de clases introducidas en Java 1.02.
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.
. Da I es la introduccin bsica: Qu es Java, por qu es tan innovador y cmo obtener los programas necesarios para crear programas Java. Incluso crear su primera apli
cacin Java.
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.
los y copiarlos. Tambin tendr un primer contacto con las bibliotecas de clases Java.
. En el da 5, aprender ms de Java a travs de los arreglos, instrucciones condicionales
y ciclos
El da 16 cubre las excepciones, errores, avisos, y oirs condiciones anormales, genera das tamo por el sistema como por sus programas; tambin aprender acerca de la
seguridad Java.
El da ( explora completamente la creacin de clases, los bloques de construccin bsi cos de . ualquier programa Java y cmo ponerlos juntos para conformar una aplicacin Java (L n programa que pueda ejecutarse por s mismo sin depender de un navegador
Web).
Lo i|m ustcil aprendi durante el da (i. lo construir durante o I da 7. Usted aprender ms acerca de cmo crear y usar mtodos, incluyendo sobreseer y sobrecargar mtodos
y crea; constructores.
nican con Internet, incluyendo la programacin con sockets y el manejo de los URL. En el da 19 se toca algo de lo ms nuevo y las caractersticas ms sofisticadas del lenguaje en la versin 2, incluyendo JavaBeans, RMI (Invocacin Remota de Mtodos)
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
una aplicacin, a partir de caractersticas como una variable de sensacin de apariencia
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.
El da 21 usted finaliza su conocimiento de Swing al activar una inierfaz grfica de usuario dentro de una aplicacin funcional que pueda responder a los eventos del usuario.
. En e da 9 aprender acerca de las clases Java para dibujar figuras y caracteres en la pai illa- incluyendo la cobertura de las nuevas clases Java 2D introducidas en Java 1.2
. 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
Ion .a de hacer que sus programas manejen varias tareas al mismo tiempo.
Introduccin
Convenciones
Nota
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
en sus propios proyectos a.nh.-riosos de programacin, dentro o Im-r:. de Woh.
Us,ed aprende a desarrollar applets; tambin conocer los programas Java mteractivos que se
Tip
. 1, uier aspecto de. lenguaje y se en,rf lo suficientemente bien con Java para prolund,
Si usied todava es razonablemente novato en la programacin, o si nunca ames ha cscriu. un parama, hicn -dra suponer que sic es e. .ibro correcto par;, superarse. Puesto ,,k- -hIos
.Precaucin
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
quema leer cst, libro le incluye si cualesquiera de los siguicn.es aspectos son ceos:
osConceptos d.. este libro estn ilustrados con programas funcionales, usteU podra .r,hiUa, ,
Trmino Nuevo
. Usted es in verdadero mago en HTML, entiende la programacin CGI en Perl, Visual Basic, o , n algn otro lenguaje y desea pasar al siguiente nivel en el diseo de pagmus
Web.
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
macin. - ha escuchado que Java es fcil de aprender, poderoso y fenomenal. Usted ha programado en C o C++ durante algunos aos, h;, odo acerca de memos rcl;,
livos a J; va, y desea ver si vale la pena el entusiasmo.
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
. 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.
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. ~
Cmo se estructura este libro Se pretende q ,e es.e libro sea ledo y absorbido en un lapso de ,res semanas. Durante cada
semana usted lee siete captulos que le presentan concentos asociados al lenguaje Java y la
creacin de a ipleis y aplicaciones.
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
3 4
5
6
r :;^.r,
i ysyTt:f JS
#
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 todos lados. La gente vena desde muchos kilmetros a la redonda (la mayora
para darle una ojeada a este lenguaje.
&s
para si' mismo entre grficos, texto, auclio y seales de "I3N CONSTRUCCIN" por
mediante enlaces de Internet, pero hubo quien vino en persona a Silicon Valley)
Introduccin a Java
11
Da 1
Las metas de hoy son razonablemente modestas. Aprender sobre los temas siguientes:
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. ',
. .'Java nace que los autores de .ibros de compuncin lleguen ser ce,ebr,c,des ap.au-
De, mismo modo, .a leyenda se iden.T.c rpidamente por s misma con .as hazaas enemalogr;fic;is tic Clint:
Qu es Java
Basndose en la enorme cantidad de publicaciones que Java ha recibido durante los ltimos aos
"Desayuna balas!"
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.
Introduccin a Java
13
Los usuarios de Web con un navegador sin soporte de Java podran ver texto, un grfico o
Figura 1.1
Un appla de Java
corriendo en Netscape
Nuviii"""'
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
C++, el popular lenguaje de programacin orientado a objetos desarrollado por Bjarne
m &
m
Stroustrup. Sin embargo, James Gosling, miembro del proyecto Green, al no quedar satisfe
cho con el desempeo de C++ en la propuesta, se encerr en su oficina y escribi un nuevo
ck en cmo ca decw!'"!*
,er cjecu-
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
Nota
final de Java 2. el cual permite que los
ina virtual del ambiente de
Sun descubri ms tarde que el nombre Oak ya se haba usado, pero nunca
# #
de
usa
-in funciona
V
Da 1 Introduccin a Java
Java 1.1.7sta es una versin de 1998 con.mejoras a la interfaz del usuario, manejo
de eventos y mayor consistencia en el lenguaje.',
Guardaespaldas
Solovino
Java 2La nueva versin, liberada primero bajo el nombre Java 1.2 para pruebas beta
pblicas en diciembre de 1997.
Mota
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
. Java es portable -Pente ser ejecutado en Wtndows, Macintosh y otras plata.ormas
navegadores de los usuarios.
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
frecuentemente seis meses o ms antes que oros programas de desarrollo de Java.
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.
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,
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
Para demostrar e, potenca, de Java y saWar su proyecto ele *,ijac, de ser arc^o.e
S3S
^^
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, grt;e antes que soporte plenamente la versin 2 de Java.
Introduccin a Java
Da 1
17
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
^^
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
?^ >
naui-
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.
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.
ler.gu.ye
gy
o c
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
Da 1
Introduccin a Java
19
Precaucin
que
use las nuevas caractersticas de Java 2, su cdigo de bytes no funcionar en los navegadores que slo contienen la mquina virtual 1.0.2. Java Plug-in es un complemento para navegadores que Sun desarrolla actualmente, el cual
*
Trmino Nuevo
*-
habilita a los desabolladores a especificar una mquina virtual distinta a la incluida con Netscape Navigator o Microsoft Internet Explorer. Esto permi
tirla que los applets de Java 1.1. y 2 funcionaran, con tan slo especificar su mquina virtual correspondiente. Para detalles de Java Plug-in, puede con
sultar la siguiente pgina Web:
http://java.sun.com/products
Por otra parte las aplicaciones de Java slo se pueden ejecutar en un sistema donde se haya
,ll:iql,ina, ennu.se muestra la figura 1.3.
Figura 1.3
Pniftrtimux tic J" '" <'" pUiHiJunmis nuil, pies.
/inlrprele de Java
Esto provoca algunas consideraciones de desempeo (los programas de Java se ejecutan con
(Penlium)
ferencia de velocidad es el principal punto en contra de Java). Algunas herramientas de de sarrollo incluyen compiladores "justo a tiempo", los cuales pueden ejecutar cdigo de byics
de Java a mayor velocidad.
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:
Al usar cualquiera de estas soluciones, usted obtiene velocidad a costa de portabilidad de Java. Una aplicacin de Java que usa llamadas de Windows para sus accesos a disco no fun
cionara en una Macintosh sin modificaciones.
ocupas d. lo qc ly=
ur"'1
Da 1
Introduccin a Java
21
Nota
Mfflft.
tSgje&
m m
m
m
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
primera herramienta que soporta una nueva versin de Java.
C" >
semana di i libro.
J Si pt0Enil,,al|, O*.
El JDK es un coniunto de utileras basadas en texto para programas de linca de comandos, que no utilizan una interfaz grfica de usuario. Los programadores ejecutan cada una de las
utileras del JDK al escribir comandos en un indicador, como lo siguiente:
java GetFunky
%rx
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
L ,, stracion de ,a
rpidan':me.
y son an ms
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.
V
Introduccin a Java
Da 1
23
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
plataforma que uslcd usa.
Uversin 1.2 de. JDK (Kit de Desarrollo de Java) est disponible actualmente para las s. Windows 95
Pura verificar el tamao en Windows 95 o Windows NT, vaya al directorio que contiene el
archivo de instalacin del JDK y haga clic en el archivo con el botn derecho del rutn. Surge
. Windows 98
. Windows NT
. SohrisSPARC
Descargu : e, JDK para estas plataformas de, sitio Web de Sun, en ,a gueme dneccn:
http://
U seccic n Produc & APls del s.tio Web, ofrece hipexvincu.es a versiones d.suiuas de,
v otros p educios de Sun.
ava.sun.com
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
JDK instalado en su sistema.
Figura 1.4
Trecawin
r,13ndo a
iii
ti
sin que usted obtuvo (como \ jdk1.2), a menos que utilice el botn Browse (Examinar) para
seleccionar un directorio diferente en su sistema.
Da 1
Introduccin a Java
251
Tip
que est
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
paquete. El siguiente es un ejemplo:
% ./jdk12 -solaris2-sparc.bin
r
.
Prueba de la instalacin
acepta .a .lalacin prede.ermma a. us , c ,a Si omitir todo todo cxccp.o cxccp.o lo los arch.vos de prog,ama e Al omitir
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.
Los usuarios de Windows pueden verificar su instalacin del JDK al usar el comando de MS-
precaucin
en su
Tip
MS-DOS puede ser ntimldatorio para quienes estn acostumbrados al estilo grfico de apuntar y seleccionar de Windows 95. Por lo tanto, no puede usar
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 "1.2"
previamente un s
subdirectorio llamado )
existentes en su sistema.
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
Introduccin a Java
27
Da 1
126
file
El JDK no incluye un editor de lexto, pero la mayora de herramientas de Java vienen con su
propio editor para crear archivos de cdigo fuente. .
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
pLcg
celebridad' por un
~3
Nota
L arrestado, luego de haber.c deparado a un ce:^ en 1994, y le dijo a un psiquiatra que las cadenas de
atraparlo.
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, -
)o ^
^ ^^
;ip,.cml:, micnlriis
K) clcmc||Lil ^ ,
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.
Si su editor pide un nombre de archivo antes di empezar a escribir cualquier cosa, use
HelloDan.java.
S : "S^
o, e, AWT,
HeiloDan.
is fuenie de Java s
2:
, .
3:-
Kenneth?");
":
5:
'
Introduccin a Java
5Ss
http://www.prefect.com/java21
nombre HelloDan. java.
cd es abreviatura de "cambiar directorio", los trminos carpeta y directorio son sinnimos. Si est en la carpeta correcta, puede compilar HelloDan. java escribiendo lo siguiente en el
indicador de lnea de comandos:
Entrada
javac HelloDan.java
Al terminar de escribir el programa, guarde e, archivo en alguna pane en su disco Curo con e.
Nota
Si usa el comando dir para listar todos los archivos en un directorio en
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
Compilacin de pro
jMSDUSPimw
ventana de MS-DOS.
Corp
19S1-3996.
\J21uork
Volui.ie
StL'ial
Nutnbr.
]s
label DS4T.-2F2F
Oiroctory of
C:\021ucirl:
01-24-96 2:39s .
C;l-24-'5a
2:33a
..
'
14
';
01-24-5J
14 3
2:2a Heliot-ih
fr-i-e
file(s)
byt.es bytes
dic(s)
42 , 96,704
::\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
130
Da 1
Introduccin a Java
31
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.
fuente de Java en un sistema Solaris. Desde una lnea de comandos UNIX, use cd para ir al
directorio que contiene el archivo fuente de Java Hellodan. java. Si usa el directorio J21work
recomendado para los usuarios de Windows, ste sera el comando que debera usar:
cd -/J21work
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
de comandos de MS-DOS bajo Windows. Ejecute HelloOan cambindose a la carpeta que
contiene HelloDan.class y escriba lo siguiente:
java HelloDan
Una vez en el directorio correcto, utilice as el comando javac con el nombre de archivo:
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
Asegrese de eliminar la extensin .class cuando ejecute un programa Java con la herramienta java. (Escribir java HelloDan.class arrojar un error.) Adems si ve un mensaje de error de "Class not found" , aun cuando este .,
en el mismo directorio de HelloDan. class, podria necesitar camb.ar otra
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
de MS-DOS que se utilizaron para llegar a ese punto.
Si su programa est correctamente escrito y compilado, deber ver la frase What' s trie frequeney, Kenneth? desplegada en la pantalla.
Figura 1.7
Ejecucin Je aplica
ciones Javo en unu
ventana de \1S-DOS.
Nota
Volimu:
:^-lj-5)
IJumUl
1-
Resumen
Ahora que ya ha configurado una herramienta de desarrollo de Java y la ha usado para
2 fiii-is)
2 dir(s)
;lik:
39,419,OJ
''-- "y-""
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.
Semana 1
en pginas Web.
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
m m
a Objetos
Preguntas y respuestas
p Cul es la relacin entre JavaScript y Java?
R Tici en iguales las primeras cuatro letras.
Da
&
0
SS
R i1 e> resto de este Hbro
h n y applets de Java:
m
m
o
a objetos
La programacin orientada a objetos (tambin llamada OOP) se parece mucho a la
A la mayora de la gente que la prueba por primera vez no le gusta, y podra cues
tionar la salud mental de quienes cantan sus alabanzas. "Qu te hice... diran
para que me hicieras beber esto?"
Algn tiempo despus, sin embargo, se cultiva un gusto por la cerveza en quienes
continan bebindola.
La programacin orientada a objetos, como la cerveza, es un gusto que se adquiere con el tiempo. Es una de las ideas de programacin ms extraordinaria de los lti
mos aos, y tambin fuente de gran consternacin para los prograniadores que no estn familiarizados con ella.
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
351
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
tos diferentes llamados objetos. ,l
Piense
Trmino Nuevo
ii
'
,, , FGO se puede hace todo upo de cosas, c.st.1
c.,slillos, an
um> maginar.
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
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
clase es la ms importante de estas caractersticas.
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.
Da 2
371
en sus programas. Adems, puede usar de nuevo la clase CommandButton para crear diferen
rboles en general:
. Tienen hojas y races
. Crecen
CoromandButton no tiene que reescribir el cdigo para cada botn de comando que desee usar
tes tipos de botones conforme los vaya necesitando, tanto en este programa como en otros.
Figura 2.1
La clase Tree y varios
objetos Tree.
. Producen clorofila
cn ,,
. Bajo o alto
. Tupido o ralo
.
i
>e da frutos o no
. Aspectos de su apariencia, como el >ener o no na sombra en ,-D La .lase Co^andButton tambin podra definir cmo se compona un botn:
. s necesita un clic sencillo o doble para ser usado
Nota
Una de las clases estndar'de Java. java.awt.Button, agrupa toda la fun cionalidad de este ejemplo hipottico CommanButton y ms. Ya tendr oportunidad de trabajar con l en el dia 11. "Construya interfaces de
usuario sencillas para applets".
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
llevar a cabo lo que su programa requiere.
Da 2
391
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
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 berwock (enojado o calmado), estado de salud (vivo o muerto), o tendencias polticas
(socialista, independiente, o mam futbolista).
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
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
Java.
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.
consistira en crear una Case sencilla que se use para crear objetos a pan,r de ,as clases tandar de Java y manejar su interaccin.
Para
y cada instancia almacena su propio valor para ese atribulo. A las variables de instancia
tambin se les denomina variables de objeto.
as
Cecas de clases de Java sern suficientes para sus necesidades. En tal caso su tarea
Cada atributo de clase tiene una variable correspondiente sencilla; al cambiar el valor de la 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
-
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.
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-
Trmino Nuevo
instancias, de modo que slo se almacena un valor, no impona cuntos objetos de clase
^:t^arienca, estado y otras cualidades de esa Case. Piense cmo se podna crear ,a
Los
u o, son las cosas individuales que idiidl que diferencian diferencian una un clase de objetos de otros y de.er-
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:
Din 2
41 I
Se enoja
Se calma i
Ahora que ya conoce la terminologa bsica de la programacin orientada a objetos, las cosas
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
. Se come a un campesino
.
Se salta la cena
Se recupera
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.
Nata
La sintaxis real del ejemplo no se detalla aqu. sela como una introduccin
a la programacin orientada a objetos, ms que como una leccin de la sin
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
}
por pillaba:
Usted ha creado una clase. Por el momento no es gran cosa, pero las dos lneas son un ejem
plo de una clase Java en su expresin ms simple.
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; boolean hungry;
m Q
m
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).
43 I
s:
6:
7:
8: 9:
18:
void feedJabberwock()
if
(hungry == true)
hungry = false;
{ -a peasant!");
11:
12:
thanks
--
already ate.");,
13:
14:
//y an hay ms
ntodos. Hay
15:}
Tip
P;ll, empezar, agregue las siguientes lneas debajo de las tres variab.es de instan,, en su
definicin de clase:
void feedJabberwock(
incluyen para beneficio de los programadores, para que la lgica del progra
if
}
hungry = false;
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.
Tif
void
showAttributes() if (hungry ==
" + color +
"
jabberwock.");
System.out.println("The
else
jabberwock is hungry.");
System.out.println("The
jabberwock is full.");
jf (hungry
==
: --:::
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:
2:
3:
class Jabberwock {
String color;
String sex;
Use uno de los procedimientos siguientes para compilar el programa, dependiendo del sis
tema que est usando.
4:
boolean
hungry;
451
Agregue un mtodo main () a la clase Jabberwock para que pueda ser ejecutada direc
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
iavac Jabberwock.java
= new Jabberwock();
"orange";
true;
"male";
System.out.println("Calling showAttributes
j.showAttributes();
...");
String color;
String boolean sex; hungry;
System.out.println("
j.feedJabberwock();
-");
5: 6:
7:
void ieedJabberwock()
i1 (s;s?e:.::t:;
");
8:
9:
10: 11:
hungry = false;
...");
12:
13:
14:
a + sex
color
Con el mtodo main<) en su lugar, ahora se puede usar la clase Jabberwock como una apli
cacin. Resguarde y compile el archivo.
m
Q
15:
16: 17:
jabberwock."); iabberwock i.
El listado 2.3 muestra el archivo de cdigo fuente Jabberwock .java final, en caso de que
haya tenido problemas al compilarlos.
18:
19:
28:
1Se
}
Systen,
21:
Tip
copia del archivo fuente y otros archivos asociados en el sitio Web oficial de
este libro en http://www.prefect.coro/java21.
Si tiene problemas con cualquier programa en este libro, puede obtener una
S
In
1:
2:
3: 4:
class
Jabberwock {
color;
sex;
String
String
boolean hungry;
Da 2
47 j
void feedJabberwocM) {
if (hungry == true)
hungry = false;
8: 9:
10:
System.out.println("Yum -- a peasant!
),
java Jabberwock
11:
12:
13:
14:
color
15:
16:
Yum
h. iabberwock is hungry.",;
17:
18:
19:
28:
^" system.out.printlnC'The
J.bberwcck is full.);
21:
22:
23: 24:
No,
thanks
already ate.
Con el listado 2.3 como gua, lo que sigue toma lugar en el mtodo main ().
Lnea 22 Se declara el mtodo main (). La primera lnea del mtodo main () siem
pre se parece a sta, y usted aprender acerca de cada elemento posteriormente durante
esta semana.
25:
26: 27: 28:
j.sex = "raale";
yS..7out.pri"t(
j.showAttributes();
29: 3C:
Svstem.out.printlnf'
j feedJabberwock();
");
),
31:
32: 33:
34:
K;::::":;Sun!"c;i;;showAttributes.
j.showAttributes();
aprendi, usted de hecho no opera directamente en las clases en sus programas Java. En vez de ello, crea objetos de aquellas clases y llama a mtodos para esos objetos para
operar en ellos.
35: 36:
37:
Svstem.out,println("
j.feedJabberwock();
)>
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.
38: 39:
La apHcacn Jabberwock se puede ejecutar con uno de los siguien.es procedimientos espec,
fieos de plataforma:
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..; .-.;
ciacin del objeto Jabberwock showAttrlhl,tosO ,r.. despicar los v:, , fllcll -,, _ Se Un.ua ,.cv,,...cn.c 1 .uLkW, showA ^.^ ^ ^^
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
clases.
Clase A
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
Clase B \
Herencia
ia en la programacin orientada a
Clase D
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.
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
'
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.
en una jerarqua ms general de clases. Esto podra desembocar en mucho ms trabajo para
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, :...",,...
',;
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.
^ que hn diferente a su clase de la Case Co-.ndButton. La generacton de sbela es 7^Z mediante e, cua, se definen clases nuevas que Ucncn diferenaas respecto de su
supe rease.
nbmos de las saciases de Co-ndButton. Todo lo que debe hacer es def.mr Ips aspec-
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.
TRMINO NUEVQ
etreda Erectamente de la Case obj.ct. Esto le permite acomodarse perfectamente en rq t Cases de Java. De hecho, si crea una definicin de Case que no md.que una ''I e"le Java asume que la Case nueva es herencia dtrecta de Object. U Case
jabberwock que se cre hereda directamente de la clase Object.
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.
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:
. L a funcionalidad que es comn a mltiples clases se puede colocar en superclases, lo
. Los cabios a la superclase se reflejan automticamente en todas sus subclases, las
La Case jabb.rwock est terminada, funciona correctamente y todo est bien. Ahora acara
una Case Java llamada Dragn.
I'
531
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
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
se usa un mtodo en un programa en ejecucin. Si se hace un llamado a un mtodo en un
FourLegged
FlyingMonster
ti
objeto en particular, el intrprete de Java primero revisar la clase del objeto para este mto
do. Si no lo encuentra, el intrprete de Jav;i lo busca en la superclase ilc esa clase, y as suce
sivamente, hasta encontrar la definicin del mtodo. Esio se ilustra en la figura 2.5.
(3
Figura 2.5
Repule
Amphibian
m m
Mammal
jerurquia de clases.
,es
oira.s.
El mensaje e enviado al objeto y pasado por la jerarqua de clases hasta que se encuentre
una definicin
a
i
i*
Nota
Las cosas se complican cuando una subclase "define un mtodo que tiene el mismo nombre,
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,
en la superclase. A este proceso se le denomina xobreposicin (figura 2.6).
cree un mtodo con ti mismo nombre, tipo de valor de retomo y argumentos como el mtodo
Da 2
551
Figura 2.6
Sobrepostcin de
mtodos.
El mtodo es sobrepuesto por esla definicin
Las interfaces son un tema que se entiende mejor despus de tener alguna experiencia de
programacin orientada a objetos y Java. Las explorar ampliamente durante el da 15,
Paquetes
Definicin inicia!
bel mtodo
En Java los paquetes son una forma de agrupar clases e interfaces asociadas. Habilitan los
., 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.
El mensaje se enva al objelc y es pasado por la jerarqua
hacia arriba hasta que se
ciones especficas.
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 suhclases).
En forma predeterminada, sus clases de Java slo tienen acceso a las clases en
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.
ii
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
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,
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
cia sencilla.
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.
producirlas. Java hace ,ue la herencia sea menos complicada al habilitar nicamente la heren-
Interfa :es
mtodos. Tambin tendr una mejor sensacin acerca de cmo trabajan los paquetes.
Cuando empieza a programar en Java, el uso ms comn de la generacin de subclases es cuando se crean los applets. Crear applets es diferente a crear aplicaciones. Los applets java se ejecutan como parte de una pgina Web, y por tanto tienen reglas especiales para su com portamiento. Debido a estas reglas especiales para los applets, crear un applet sencillo es
ms complicado que crear una aplicacin sencilla.
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
el problenu del eomp namiento compartido.
implemcnu,, sea ms acl de comprender y disear. Sin embaivo. lamb.en podna ser resme-
Jna interf, z es un conjunto de mtodos que indican que una clase tiene un com
Trmino Nuevo
Todos los applets son subclases de la clase Applet (la cual es parte del paquete j ava. applet).
Al crear una subclase de Applet, automticamente recibe todo el comportamiento y atribu
tos que habilitan al programa Java a ejecutarse como parle de una pgina Web.
Da 2
571
Se da al objeto Font el valor de la fuente Times Romn negritas de 36 puntos. La instruccin new crea un nuevo objeto Font con los valores especificados entre parnte
Al crear una variable de instancia para contener este objeto Font, lo pone disponible para
m
t
todos los mtodos en su clase. El siguiente paso en el proyecto Palindrome es crear un mto
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
applet.Applet.
que se ejecute, para iniciar el applet, para responder a la entrada del ratn, y para que libere
recursos cuando el applet termine su ejecucin.
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
do en la ventana del applet en cualquier momento que necesitara ser desplegado al correr el programa. Aada una lnea en blanco debajo de la declaracin font, y escriba lo
siguiente para sobreponer el mtodo paint ():
public void paint(Graphics screen)
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
embalo, todos los appleis deben ser public.
El mtodo paint () toma un argumento sencillo: una instancia de la clase Graphics llamada
j, ,* y
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.
Ya ha hecho tres cosas dentro de su mtodo paint ():
declaracin:
Da 2
591
36);
,
Ahora, con las clases apropiadas importadas en su programa. Palindrome. java debera
5,
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 nicnl compilarlo, podra haber visto una serie de errores como el siguicnle:
Palindrone.java:2: Class Font not found in type declaration.
import java.awt.Graphics;
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
2:
3:
4:
import Java.awt.Font;
import java.awt.Color; publie class Palindrome extends
Font f =
publie
paquete (java, applet. Applet). En el resto del programa, se refiri a otras clases s.n usar
Hay dos formas de resolver este problema:
5: 6: 7:
8:
java.applet.Applet
Font.BOLD,
{
new Font("TimesRoman",
36);
void paint(Graphics
screen)
9:
screen.setFont(f); sereen.setColor(Color.red);
screen.drawString("Go hang a salami, I'm a lasagna hog.", 5,
. Referirse a todas las clases exlernas por su nombre de paquete compleio, como
java.awt.Graphics, java.awt.Font, y java.awt.Color.
10:
11:
40);
. Usar una instruccin import al principio de! programa para que estn disponibles uno
o ms paquetes y clases en el programa.
12:
13:
Cul elija es, en su mayor parte, un asunto de preferencia personal: pero si se refiere a una
de texto.
clase en otro paquete muchas veces, tal vez prefiera usar import para dism.nu.r la canndad
En este ejemplo se usar lo ltimo.
Guarde este archivo con el nombre Palindrome. java. Puesto que este archivo fuente con tiene una clase pblica, Palindrome, el nombre de archivo debe corresponder al nombre de la clase pblica para que se compile exitosamente. El uso de maysculas y minsculas aqu tam
bin es importante, por lo que las letras deben ser idnticas.
Para importar estas clases, aada los tres enunciados siguientes antes de la induccin
publie import
import
Este archivo fuente puede ser compilado de la misma manera que las aplicaciones Java que
class
Palindrome:
usted ha creado hasta aqu. Sin embargo, para poder ejecutarlo, debe crear una pgina Web
para colocarlo.
java.awt.Graphics;
java.awt.Font;
Muchos programas de desarrollo de pginas Web, como Home Page de Claris y Dreamweaver
de Macromedia, permiten colocar un applet Java dentro de una pgina Web.
iniport
java.awt.Color;
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.
61
ff
50
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
Acplet euiuo
salan n, I 'ni
1 as a na ho.
Cl
o
Si an no se familiariza con lo que es un palndromo, vea la figura 2.7 y lea al revs el enunciado "Go hang a salami, l'm a lasagna hog". Los palndro mos son palabras y frases que se leen igual en cualquier direccin, sin tomar
(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
.I
I
II Q
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.
. 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
ciones?
Para resum.r el materia, de hoy, aqu le presentamos un g.osario de los trminos que se
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
variables de instancia.
2 acl^o a los mismos mtodos, pero frecuentemente tienen valores d.stintos para sus
Es lo mismo que un objeto. Cada objeto es una instancia de alguna clase.
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
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
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).
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
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
ms pequeos de la programacin en Java. Dejar por un da clases, objetos y mtodos para as examinar las cosas elementales que se pueden hacer en una lnea
sencilla de cdigo Java.
Hoy tocaremos los temas siguientes: Instrucciones Java y expresiones
Variahles y tipos de datos
Comentarios
Literales Expresiones aritmticas
Comparaciones
Operadores lgicos
Da 3
67
Nota
Puesto aue Java es similar a C y C++. gran parte del material en este da les
de una sola letra. Cuando sea necesario, las notas tcn,cas como esta
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".
Tod" hsTireas que quiera cumplir en un programa Java se pueden dividir en un;, seno de
instrucciones.
iva^
y expresiones
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.
En Java hay tres tipos de variables: variables de instancia, variables de clase y variables
locales.
, as insnuccones representan una necon sencilla que se ,oma en un programa Java Todo lo
siguiente son instrucciones sencillas de Java:
int ag' = 30;
import java.awt.dnd;
Las variables de instancia, como lo aprendi ayer, se usan para definir los atributos de un
objeto.
, 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.
Las variables locales se usan dentro de definiciones de mtodo, o incluso en bloques de instrucciones ms pequeos dentro de un mtodo. Slo se pueden usar mientras el mtodo o
=:
B po de sumar dos nmeros juntos. Otros producen un valor boolcano (true o
o .ncluso pueden producr un objeto de Java. Hablaremos de ellos ms ade.amc. - 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
691
Como indica la ltima instruccin, usted puede asignar valores a variables mltiples del
mismo tipo mediante comas para separarlas.
variable:
int highScore;
A las variables locales se les debe dar valores antes de ser usadas en un programa, o el pro
grama no se compilar con xito. Por esta razn es una buena prctica darle valores iniciales
a todas las variables locales.
String
username;
boolean gameOver;
Variables numricas 0
Caracteres ' \0'
Booleanas f alse
Objcctos nuil
Nomenclatura de variables
En Java los nombres de variables deben empezar con una letra, un carcter de subrayado(
nombres de variable pueden incluir cualquier combinacin de letras o nmeros.
),
o un signo de pesos($). No pueden empezar con un nmero! Despus del primer carcter, los
un prcrama.
Nota
el conjunto de caracteres estndar ms miles de otros para representar alfa betos internacionales. Los caracteres acentuados y otros smbolos se pueden
usar en nombres de variables tan ampliamente en cuanto contengan un
\oolean active;
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
cacin de las palabras, se aplica la siguiente gua estndar:
La primera letra del nombre de variable es minscula
Da 3
71
demasiado grande o demasiado pequeo para su tipo de variable designado, por lo que usted
debera ser precavido al designar el tipo.
Trmino Nuevo
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 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.
El tipo char se usa para caracteres individuales como letras, nmeros, puntuacin y otros
smbolos.
Tdos de variable
Adems de un nombre, una dejacin de vanab.e debe incluir el tipo de informacon que se
van almacena, El upo puede ser de cua.quiem de los s,gu,e,,es:
. Uno de los tipos de datos bsicos
El ltimo de los ocho tipos de datos bsicos es boolean. Como sabe, en Java los valores
booleanos pueden contener true o f alse.
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 inicial, por ejemplo, Boolean y Char. stas tienen diferente funcionalidad en un programa
Java, por lo que usted no las puede usar cu forirui intercambiable. Maana ver cmo se usan
lipos de variables.
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 lastName
hair; firstMonster;
"Walsh";
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.
Tabla 3.1. Tipos de entero.
Color
Jabberwock
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
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
Nota
pueden usar esa clase como su tipo.
ser interpretado como un documento oficial del modo en que trabajan la clase y sus mtodos
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.
snappyDresser = faise;
Literales
Adems de las variables, mmhin ulili/.ar una Hiera! en una instruccin Ja\a.
lario.s.
Trmino Nuevo
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:
Int year = 1998
Hay tres diferentes tipos de comntanos que se pueden usar en ,a programacin de Java y los
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.
En este ejemplo todo e, texto desde hasta e, fina! de ,a Knea es un comen.ano y e, comp,-
Literales numricas
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
I 74
Da 3
75 |
Para representar un nmero negativo como una literal, anteponga a ste el smbolo menos (-).
como en -45.
0 a false. ste no es el caso de Java (debe usai\ los valores true o f alse para representar
Si ha usado otros lenguajes como C, esperara que un valor de 1 fuera equivalente a true y
Nota
Observe que la literal true no est entre comillas. Si as fuera, el compilador Java podra
asumir que se trata de una cadena de caracteres.
significa que slo pueden representar valores de 0 a 7 como un dgito sencillo. En octal, el octavo nmero es 18 ( o ce como una literal de Java).
Hexadecimal es un sistema de numeracin base16, y puede representar 16
Literales de caracteres
Lasjiterales de caracteres se expresan mediante un carcter sencillo entre comillas sencillas,
como 'a",'#' y "31. Usted debiera estar familiarizado con el conjunto de caracteres ASCII,
nmeros como un dgito sencillo. Las letras A a F representan los ltimos seis
dgitos, por lo que los primeros 16 nmeros son 6, 1,2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E. F. . '
el cual incluye 128 caracteres entre letras, numerales, puntuacin y otros caracteres tiles en
bits.
Los sistemas octal y hexadecimal son ms apropiados para determinadas ta reas en programacin que'el sistema decimal normal. Si alguna vez ha
manejado HTML para configurar el color de fondo de una pgina Web, ya
ha utilizado nmeros hexadecimales.
computacin. Java sopona miles de caracteres adicionales a travs del estndar Unicode de 16
Algunas literales de caracteres representan caracteres que nq-son imprimibles directamente o accesibles a travs del teclado. La tabla 3.2 lista los cdigos especiales que puedan represen
tar estos caracteres especiales incluso como caracteres del conjunto de caracteres Unicode. La
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.
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
Lnea nueva
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
el ejemplo siguiente:
float piValue = 3.1415927F;
\r
\f
Utilice expolenles en las literales de punto dolante al usar la letra e o E, seguida del expo
nente, el cual puede ser un nmero negativo. Las instrucciones siguientes usan notacin expo
nencial:
double x = 12e22;
\\ \' \\d
\xd
Diagonal invertida
Comilla sencilla Comillas dobles
Octal Hexadecimal
double
19E-95;
Literales booleanas
Los valores booleanos true y f alse tambin son literales. stos son los dos nicos valares
\ud
Carcter Unicode
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.
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
Literales de cadena
objeto cuando se usan. Hoy y maana aprender ms acerca de cadenas y la clase String.
dc caraclei,s. En Java
Expresiones y operadores
bay n,l0dos
Una expresin es una instruccin que produce un valor. Algunas dc las expresiones mas
cor
int y = 4;
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
Hay cinco operadores que se utilizan para ejecutar la aritmtica bsica en Java. stos se
muestran en la tabla 3.3
"Precaucin
A la mayora de los
Unicode al
pueda ser re
Suma Resta
3 5
5
14
+
'
Multiplicacin
Divisin Mdulo
/
%
7
7
20
til
. Da 3
79 i
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). 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
25: 26: }
entero, ya que el tipo de datos int no puede manejar nmeros de punto flotante. Como un
ejemplo, la expresin 31 / 9 produce un resultado de 3 si se almacena como un entero.
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
mismo tipo con el que usted quiere lerminar. El listado 3.1 es un ejemplo ce aritmtica sencilla en Java.
class oebaMath {
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
En esta sencilla aplicacin Java, las tres variables estn creadas con valores iniciales en las
6;
= 4:
short
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.)
" pet amoebas.");
5:
6:
7: 8: 9:
float a =
.I2f;
+ x +
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
10:
11 : 12: 13:
14:
"
+ x);
System.out.println("\tMitosis occurs,
amoebas.");
puede usar el operador + para combinar estos elementos en una cadena sencilla.
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
x! =
2;
lid
15:
System.out.println("\tThere's a fight.
out.");
x = x y;
Ms sobre asignacin
siguiente manera:
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
= 7;
System.out.println("You now have " + x); Systen. out. println ("UParamecia attack!
the colony.');
x = y = z
21:
x =
22:
23:
24:
System.out.println("You end up with " + x + " pet amoebas."); System.out. pri.it ln("Daily upkeep cost per amoeba: S" + a); System.out.println("Total daily cost: S" + (a * x));
(x
3);
81
Da 3
80
siempre se calcula ames de que se
#
dla
Trmino Nuevo
Incrementar una variable significa agregar 1 a su valor, y decrementar una variable significa sustraer 1 de su valor.
can inmediatamente despus de, o inmediatamente antes de, un nombre de variable, como en
el siguiente cdigo de ejemplo: ;
se ca
alcula x + 2 . El resultado de
uv comn en progra-
int
x =
= 7;
x++;
Estos operadores de incremento y decremento pueden ser colocados antes o despus de un nombre de variable, y esto afecta el valor de las expresiones que implican a estos operadores.
Trmino Nuevo
equivalentes a:
despus de un nombre.
m
m
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
x
y z
=
= =
42;
x++; ++x;
cada lado de su in
on
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^^_
Da 3
83
Precaucin
Operadores lgicos
se pueden combinar para formar expresiones ms complejas. Esto se maneja a travs de operadores lgicos, los cuales se usan para las combinaciones lgicas AND, OR, XOR, y NOT
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. Estos operadores se usan en expresiones que devuelven valores booleanos true o f alse.
Si ambas expresiones son verdaderas, el valor true est asignado a la variable unusual. En
cualquier otra circunstancia, el valor f alse se asigna a unusual.
Esta expresin combina dos expresiones de comparacin: age < 21 y girlf riendAge > 78.
dependiendo de ;i la comparacin que se hace es verdadera o falsa. La tabla 3.5 muestra a los
operadores de ce mparacin.
La diferencia entre & y && radica en cunlo Irabajo realiza Jasa en la expresin combinada. Si
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
Igual
No igual Menor que Mayor que
Ejemplo
x
x x
Para las combinaciones OR se usan los operadores o Estas expresiones combinadas devuelven un valor true si cualquiera de las expresiones booleanas son verdaderas.
Otro ejemplo inspirado en Harold Maude:
==
1= < 3
3
3
>
X
x
<= 3
>= 3
a la variable unusual. nicamente si ambas de estas expresiones son f alse el valor false se
asignar a unusual.
Esta expresin combina dos expresiones de comparacin: grimThoughts > 10 y girlf riendAge > 78. Si cualquiera de estas expresiones son ciertas, el valor true se asigna
' /!
Observe el uso de en vez de . Por este uso, si grimThoughts > 10 es true, se asigna el
valor de true a unusual y la segunda expresin nunca se evala.
La combinacin XOR tiene un operador lgico, \ Esto provoca un resultado true slo si las
dos expresiones booleanas que combina tienen valores opuestos. Si ambas son true o ambas
< 25 produce un restituido ya se;i truc ti falsc, ilcpeiiilicnilo del valor tle-1
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
m #
Dia 3
llcvlH:,w
,.o, ,-u,
< Suelve
a.o,
Operador
new (tipo)expresin
Notas
especialmente en el da 5.
Precedencia de operadore
eniza el valorado la expresin.
!=
&
OR
&&
? .
n .enera,, e. orden de. primero a, himo es el siguiente: ". ()pcr.c.K-s de incremento y decrcmento
. Opci iciones aritmticas
. Coir puniciones
. Ope, aciones lgicas
= +* .= = /= %= -=
4= = = = >>>=
H!
^ones de asignacin
Para cambiar el orden en que se evalan las expresiones coloque parntesis alrededor ilc las
,cuU en ,a c,P-n
expresiones que se deber evaluar primero. Anide un conjunto de parntesis dentro de otros
ms interna se evala primero). La siguiente expresin produce un valor 5:
y = (6 + 4) / 2
I!
?&^
para asegurarse que las expresiones se evalen en el orden deseado (la expresin de parntesis
El resultado es el valor 5, porque 6 + 4 se calcula antes del resultado, 10, que es dividido
Notas
entre 2.
" <; vnrhh|e, dentro de objetos y
^.^ cn |os
,,,.,]
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.
'osieiioniienie en la seni.iiui. i
arreglos, i
basndose en si el objeto e
+*
- instanceo-f
una instancia de \
expone maana).
Da 3
871
Aritmtica de cadenas
Resumen
;
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.
Quien abre una a una las matruskas queda algo decepcionado al llegar a la mueca ms
pequea en el grupo. Idealmente, los avances en microingenierfa deberan habilitar a los artistas rusos para crear muecas an ms pequeas, hasta que alguien alcance el lmite subatmi
co y se declare el ganador.
Concatenar significa enlazar dos cosas. Por convencin se ha elegido este verbo
Trmino Nuevo
para describir el acto de combinar dos cadenas (destacndose sobre pegar, engo
Usted ha alcanzado la mueca anidada ms pequea de Java, lo cual no debera ser una desilusin. El uso de instrucciones y expresiones lo habilita para comenzar a construir mto
dos efectivos, lo cual hace posible objetos y clases efectivos.
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
dades al tiempo que desarrolle objetos para programas Java.
Para resumir el materia! de hoy, la tabla 3.7 lista los operadores que usted ha aprendido.
Imagnese que es una mueca matruska y revselos cuidadosamente.
Tabla 3.7. Resumen de operadores.
El operador combina cadenas, otros objetos y variables para formar una cadena sencilla^ En
el ejemplo precdeme, la Hiera) Everybody loves se concatena al valor del objeto Stnng
firstName.
Operador
Significado
Suma
Resta
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
los elementos de I i operacin sern tratados como si fueran cadenas:
System.out.prirtln(4 + score and " + 7 years ago.");
Multiplicacin
Divisin
Esto produce el te: to de salida 4 score and 7 years ago., como si las literales enteras 4
y 7 lucran cadena:.
Mdulo
Menor que
>
<=
Hay tambin un o ,erador cono = para aadir algo al final de la caoena. Por ejemplo, la
expresin siguieni:: myNarae += " Jr ";
==
Igual
Diferente
i =
&&
li
ANO lgico
OR lgico NOT lgico
ANO
!:
En este ejemplo >. t cambia el valor de nyName (que podra ser algo parecido a Ef rgm
Zimbalist)alaudirJr. al final (Efrem Zimbalist Jr.).
i
&
i
OR
fll
Semana 1
XOR
Asignacin
Incremento Decrcmento
Multiplicacin y asignacin
Divisin y asignacin Mdulo y asignacin
Da
Lecciones de objetos
Hace dos das, la programacin orientada a objetos se comparaba con la cerveza, ya
c,o ,.,
ejemplo * .to
que sta tiene un sabor que se aprecia con el tiempo que podra provocar desorien
tacin, causar nuseas y una visin alterada del mundo.
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
^^
e)
compor.
-^
po enea de progn ^^
^.K-do evitarlo c. si. ptop.a
Creacin de objetos (tambin llamados insiancius). Revisin de la ejecucin y modificacin de variables de clase y de instancia
en esos objetos.
Llamadas a los mtodos de un objeto. ; Conversin de objetos y otros tipos de datos de una clase a otra.
Lecciones de objetos
91
con el nmero o tipo equivocado de argumentos (o si no le proporciona argumentos y se necesita alguno), obtiene un mensaje de error cuando trata de compilar su programa Java.
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
nuevo de cualquier clase dada.
de nmeros aleatorios, y su rango es de un valor decimal de 0.0 a 1.0. Los nmeros aleato
rios son tiles en juegos y otros programas en los cuales s necesita un elemento de impre- dictibilidad. . <
,. 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.
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;
operador new.
para crear instancias de esas clases usted nene que hacer.o de manera explica med.an.e el
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
, os tambin? Realmente, no lo hacen. Los tipos de datos primitivos para nmeros y caracteres crean nmeros y caracteres, pero por ef.cenca en
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;
3:
4: 5:
class RandomKunbers
publie static Randon
r1 =
{
argumens[]) {
Uso de m.'W
6: 7: 8: 9:
10:
r1,
Para crear un o jeto nuevo, utilice el operador new con el nombre de la clase de la :ual desea
String team!-ame = new StringO; Random rand nfo = new RandomO; jabberwock = new JabberwocM );
new
System.out.println(Randoro
11:
12: 13: 14: }
r2 =
new Random(8675389);
valu 2: " + r2.nextDouble());
System.out.println("Randoi
Los parmesi son importantes: no hay que retirarlos. Los parntesis pueden estar vacos en
objeto. Los templos siguientes muestran objetos que estn s.endo creados con ar .amentos.
Random valu 2:
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
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>
tos, la cual crea un objeto Random alimentado con una semilla de la hora en curso. Su valor
p Ir , s acerca de los constructores.) Si trata de crear una nueva insumo. una Case
Lecciones de objetos
S3j
'
.-o.no la semilla.
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.
#
m
tiene que asignar explcitamente ninguna memoria para objetos. Java lo hace por usted. 1V. La segunda l
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.
Cu
,a cia
:lJ1. * rea la ..TU. parac. > - ' ^ d A es.e s.e mtodo cspcc.al ;lasc dada. espec.al f ^ , os matmcu,*s son mtodos especa.es para ^imu.u ^^ ^
^ ..,, ,... ,, obic
,ener un numero
u hace new
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:
myCustomer.orderTotal;
^^
cs(os
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
D(a4
Lecciones de objetos
951
ese objeto tiene su propia variable de instancia llamada layaway, usted podra referirse a ella
de esta forma:
'
myCustome.orderTotal.layaway;
Las expresiones de punto se evalan de izquierda a derecha, as que inicie con l variable
orderTotal de myCustomer, la cual apunta a otro objeto con la variable layaway. Terminar con el valor de la variable layaway. J
Moving to
(7,
6)
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; .
Modificacin de valores
Y equals 6
En este ejemplo, primero crea una instancia de Point donde x es igual a 4 y y es igual a 13
(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
mo las lneas 17 y 18 despliegan nuevamente los valores ile x y y para mosir.iiciiio han
cambiado.
El listado 4 2 s un ejemplo de un programa que prueba y modifica las variables de instancia en el objeto P. int. listo es pan. del paquee java.awt y ,c renca- ..n pumo Ac le
nadas con los 'alores x y y.
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.
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
import
java.awt.Point;
3: 4:
5: 6:
7:
class fetPoints {
ble. Al modificar el valor de esa variable lo modifica para todas las instancias de esa clase.
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;
int age;
8:
9:
"Igwebuike";
10: 11 :
12: 13:
14:
1 ication.y = 6;
Cada instancia de la clase FamilyMember tiene sus propios valores para ame y age, pero la
variable de clase smame slo tiene un valor para lodos los miembros de la familia:
"Igwebuike". Cambie el valor de smame y todas las instancias de FamilyMember sern
afectadas.
" + location.x;
15:
16: 17: 18: 19: 20:
S/steo.out.println("\nEnding location:-);
ystem.out.printlnCX-equals
Da 4
Lecciones de objetos
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
2:
3:
A:
publie
String
life,
will believe
reincarnation";
Llamadas a mtodos
Llamar a un mtodo en un objeto es igu
a est a la izquierda del punto, y
5:
6:
7:
string
of
is:
this
"
str);
"
System.out.println("Length
string:
8: 9: 10:
character at
position 7:
to 31:
"
"
11:
12: 13: 14:
index
of
the character x:
" the
R.,,Ea , ,
15:
+
+
"substring
\"will\":
"
str.indexOf("will"));
16:
17:
18:
19:
definido en myCistomer:
elAllOrdersO .talkToManager() ;
In my next life,
string:
at
48
7: e
position
The
objeto myCustcner:
substring from 24
to
31:
believe 8
The index
of the character x:
The index of the beginning of the substring "will": 19 The string in upper case: IN MY NEXT LIFE, I WILL BELIEVE IN
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 *
,98
Da 4
Lecciones de objetos
99 i
. La linca 7 llama al mtodo length() sobre el nuevo objeto String. La cadena tiene 48
.. La linca 9 llama al mtodo charAt (), el cual devuelve el carcter en la posicin dada
de la cadena. Observe que las posiciones de la cadena empiezan en la posicin 0 i.n
ve/ do 1, por I que el carcier en la posicin 7 es e.
caracteres.
life
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
s2; "
s = "tem"; "
S.VBluopf(5);
. I a linca 11 Mama al mtodo substring(), el cual toma dos en.eros indicando un rango y devuelve una subeadena con los pumos de inicio y de finalizacin. Tamb.cn puede ser llamado el mtodo substringl )con slo un argumento, el cual dcvuclv. I., . ,,, .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. La lnea 15 muestra un uso distinto del mtodo indexOf (), el cual toma un argumento
rara un String.
s2 = String.valueOf(5);
Referencias a objetos
Puesto que usted trabaja con objetos, algo importante para entenderlo es el uso de referencias.
Trmino Nuevo
. La lnea 17 usa el mtodo toUpperCase para devolver una copia de la cadena slo en
mayscul is.
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,
Para ilustrar mejor la diferencia, el listado 4.4 muestra cmo funcionan las referencias.
Listado 4.4. El texto computo de refebencestest. java.
1:
a sus instancias Los mtodos de clase suelen ser usados para mtodos de
^;
2: 3:
4: 5: 6:
import java.awt.Polnt;
class ReferencesTest {
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
pt2;
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
pt1
Pt2
= new Point(1O0,
10e);
7:
8: 9:
ca ex.stente de Strin., pero a. obtener una cadena de otro objeto o upo ^ '
definitiva, una .peracin del estilo String, y ..ene sentido definirlo en la clase Strxng.
pti.x
10: 11:
12: 13:
pti.y = 200;
"
"
+ pt1 .x +
+ pt2 .x
+
",
-,
Los mtodos d: clase pueden ser tiles para colocar juntos mtodos en un solo '^
"
"
+ pt1
+ Pt2
y); y);
Case,. Por eje nplo. la Case Math. defmida en el paquete i . lang, contiene un con unto
14:
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: int maximu .Price = Math.max(firstPrice, secondPrice) ;
200,
200,
200
200
! I
>
Lecciones de objetos
101
Cuando enve argumentos pura mtodos o use variables en expresiones, debe usar variables de
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.
. Lnea 6
. Linca 7
Nota
Hay un rea donde el compilador de Java es decididamente diferente: las cadenas. El manejo de cadenas en los mtodos printlnf), instrucciones de asignacin y argumentos de mtodos se simplifican con el uso del operador de concatenacin (+). Si cualquier variable en un grupo de expresiones de
concatenacin es una cadena. Java trata toda la forma como un String.
System.out.println("Honest,
dad,
my GPA is a
"
(gpa+1.5));
usar cualquier v
Algunas veces tendr un valor en su programa de Java que no es del tipo correcto para lo que
usted lo necesita. Podra ser la clase incorrecta, o el tipo de datos incorrectos, como un float
pti,
pt2Objeto Point x:200
y: 200
Figura 4.1
Referan as ti objetos.
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.
ola
Conversiones por cast entre tipos primitivos, tales como int a float o float a
double.
Conversiones por Cast desde una instancia de una clase a una instancia de otra clase.
MM^
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.
nianej
Lecciones de objetos
103 I
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 ,
subclase dondequiera que se espere una superclase.
i illliiiil
un double. piicJe causar alguna prdida de precismn.
adoptado por Java como parte de su soporte de caracteres.
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
El siguiente ejemplo convierte por casting una instancia de la clase VicePresident a una
emp = veep; // no se necesita conversin por cast hacia arriba veep = (VicePresident)emp; // requiere conversin por cast explcita
Lecciones de objetos Da 4
104 String pennsylvania = "65000"; int penn. = Integer.parselnt(pennsylvania);
1051
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.
Comparacin de objetos
Ayer aprendi acerca de operadores para comparar valores: igual, distinto, menor que.
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,,-, ,
r F13L F1 ,?
P ^ ^^ sc ^a ,, ol,,,
^^ ^ ^ ^
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 mplemenmteger dataCount = new inte9er
tengan los mismos valores. Sin embargo, aun cuando hubiera utilizado el operador == para
Un buen ejemplo de esto es la clase String. lis posible tener dos objetos diferentes que con
compararlos, estos objetos deberan ser considerados diferentes. Pese a que sus contenidos
corresponden, no son el mismo objeto.
int
newcount
nt.w
usted necesita en p V
rcsuUacjo
Sxring
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
107 1
Nota
1:
2: 3:
4:
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.
5:
6:
7: 8:
* M11;
+
9:
System.out.println("Same object.
(stri == str2));
16:
11:
12:
13:
14:
Svstetn.out.println("String2:
System.out.printlnC'Sarae object.
Systei.out.println(-Sa.e valu?
}
.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 ()
devuelve una cadena representando cl nombre de la clase.
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 si el objeto es una nsiancia de la clase nombrada o cualquiera de las subclases de la clase:
"swordfish" instanceof String // true 10); pt instanceof String // false
Point pt = new Point(iB,
Tambin se puede usar este operador instanceof para interfaces; si un objeto es una instan
cia de una clase que implemento una inierfaz, cl operador instanceof con ese nombre de inierfaz a la derecha devuelve true.
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 encontrar las variables de la clase, mtodos y constructores, y trabajar con ellos.
Lecciones de objetos
Da 4
1091
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:
<
6: 7: 8:
9: 16:
La aplicacin SeeMethods pudo haber sido hecha con cualquier clase de objetos. Cambie la
lnea 6 de SeeMethods. j ava para crear un objeto diferente y dar un vistazo a sus interiores. Le reflexin es muy usada por herramientas como navegadores de clases y depuradores, como
Systsm.ot.pnntln( Method.
(int i - .
i-MBthod-
11:
12: 13:
t }
Field
Method
da de la ; plicacin
Constructor
Array
m USTAD^T.USAUBADEJ^APU^^
n:M.t',od:pMicfin.ln.tive1.v..lanfl.C1.ss
lili M
Maneja arreglos
Dccodifica informacin acerca de cl;ises, variables, mtodos (que se
Modif ier
ticas").
describen en el da 15, "Funciones de las clases: paquetes, interfaces y otras caracters Adems, habr una gran cantidad de mtodos disponibles en una clase de objetos llamada
Class que ayuda a unir varias clases que tienen que ver con reflexin. La reflexin es una caracterstica avanzada que usted podra no estar listo para usar en sus
JI-SS; SS2
i =5? ^
java.^ng.InterruptedException
java.utii.Random.setSeed(long)
extBytes(byte[l)
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.
nextint()
110
Dia4
Semana 1
objetos por los beneficios que ofrece: disponibilidad mejorada, rcu.ili.acio,, y man.ennn.cnU,
Y si es de los que ven "el vaso medio lleno", vale la pena que use la programacin orientada a
una clase.
Finalmente, le dio un primer vistazo a la flexin, una manera de hacer que una clase revele
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 ).
A este punto va tiene las habilidades para manejar las tareas :ns simples en el lenguaje Java.
Da
Preguntas y respuestas
primitivos, como int y boolean.
P .stoy confundido acerca de las diferencias entre los objetos y los tipos de datos
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
como instancia o variables de clase.
T. boolean y ch.r) representan las cosas ms pequeas. No son objetos, aunque de nuch-,s manera se puedan manejar como objetos: Pueden ser asonados a vanables >
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
tro, de modo que pueda pasar a travs de ella?
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.)
Incluso aprender a organizar grupos de la misma clase o lipo de dalos en listas lla
madas arreglos.
Le apuntadores explcitos. Las referencas a objeto, son. efectivamente, apuntadores. Pr I aloo con uno lia vino,.*.. us,ed creara una Case Ha-uada Nod.. la cua
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.
1131
String[] Point[]
int[)
difficultwords;
i .
hits;
guesses;
Java. En al^
Usted ver los dos estilos utilizados en los programas, y como no hay un consenso sobre qu estilo sea ms legible, la opcin es ms bien una cuestin de preferencia personal.
:
pu
-"=::-~h'11'~11"~'"
^ CO111O enteros.
objelo y asignarlo a esa variable. He aqu las formas de dar este paso:
Utilice el operador new.
f
#
Inicialice directamente el contenido del arreglo. Como los arreglos son objetos en Java, puede usar el operador new para crear una nuevi' iastancia de un arreglo, como en la instruccin siguiente:
String[]
Esta instruccin crea un nuevo arreglo de cadenas con 10 posiciones que pueden contener
m
m
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:
int[) temps = new int[99);
Cuando usted crea un arreglo de objeto mediante new, todas sus posiciones se nicialuan ,
Declaracin de variables de
Para arencarlas de las 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 =
"thai"
"jalapeno",
};
"anaheiin",
"serrano"
"habanero",
strinp !:-^
im
de
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.
Da 5
11!
arreglos uncan su numeracin en 0. Siempre que trabaje con arreglos, tenga esto en mume y
Insistimos: La longitud del arreglo es 10, pero su subndice slo puede llegar hasta 9 Los
un arreglo al colocar una instruccin de asignacin despus del nombre del arreglo y el
=85;
= "The";
Como vio en los ejemplos anteriores, puede asignar un valor a una posicio,, especfica de
sentence[i0] = sentence[0];
--
^ ^.^ inician
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.
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
Algo importante a tener en cuenta es que en Java un arreglo de objetos es un arreglo de refe
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
Strlnol] M.tX.!.p.rt-"-rlnoIiBl;
Para finalizar la discusin acerca de los arreglos, el listado 5.1 presenta un programa sencillo
l s dos l
1:
2: 3: 4: 5:
Stringf) firstNames = { -Defins", "Grace", "Bjarne", "James" }; Stringf] lastNames = new Strin0[firstNames.length];
void printNames()
int i = C;
6:
'
^^ ^ -^^^ iii.i,iltflll
System.out.println(firstNames[i]
" " + lastNames[i]);
^ s^ pros
System.out.println(firstNames[i]
+ " " + lastNamesfi]);
importar el tipo:
117]
Finalmente, el mtodo main () desarrolla lo siguiente: La lnea 22 crea una instancia inicial de ArrayTest para que se-puedan usar sus va
riables de instancia y mtodos.
15: 16: 17:
18: 19: 2e: 21: 22:
.printl(
El resultado son las primeras cuatro lneas de la salida; observe que se inicializ el
arreglo f irstNames, pero los vaiores en lastNames son nuil. Si un arreglo no est inicializado cuando se declara, los valores de las posiciones iniciales estarn vacas: nuil para los arreglos de objetos, 0 para nmeros y f alse para los booleanos. Las lneas 25-28 establecen los valores de cada una de las posiciones en el arreglo
lastnames a las cadenas reales.
lastNames
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
' 27:
28: 25:
a.lastNamesl3] - 'Gosling ,
a printNamesO;
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 travs de los elementos de un arreglo, en lugar de trabajar con ellos individualmente. Esto
hace mucho ms pequeo al cdigo, y en muchos casos ms sencillo de leer. Cuando apren
Grsce Hopper
-arn Stroustrup
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
0 %
.I
valor.
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
. ; . ,
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.
De suyo las declaraciones de bloque no se usan solas en una definicin de mtodo, como
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
La condicional fundamental es la palabra clave if. La condicional if usa una expresin booleana para decidir cundo se deber ejecutar una instruccin. Si la expresin devuelve un
valor true, la instruccin se lleva a cabo.
He aqu un ejemplo sencillo que despliega el mensaje "You cali thai a haircui?" slo con una
do
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)
booleana sencilla.
inicio de bloque
+ x;
int y = 40;
y y
//
-fin de bloque
La diferencia entre las condicionales if en Java y las de C o C++ es que Java requiere que la verificacin devuelva un valor booleano (true o f alse). En
C, la verificacin puede devolver un entero.
Da 5
Con if usted slo puede incluir una instruccin sencilla como el cdigo a ejecutar despus
,|,o ms que una solu cosa ceno resultado de un enunciado if. pon*, esas ,nsm,cc,oncs
de I. prueba. (En e, ejemplo anterior est asignada la variable restauran.) ^ en, argo en
17:
18:
e.evenCheck(77),
e.evenCheck(1346);
jav. puede aparecer un bloque dondequiera que lo haga una ms.rucon sola. S, deso haca
19: }'
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" )
System.out.printlnCThe jabberwock is angry ), _ Systemiout.println ("Have you made out a will? )l;
...
m
#
Valu is 54.
Stevenl Valu is 77.
t
#
jabberwock est contento. Si lo est, .a condicin (hungry) se usa para v r s, <>J tambin est hambriento, asumiendo que un jabberwock hambnen.o es algo que h.,> que ev ,ar incluso s, es un jabberwock contento. La condicional if (hungry) es o.n. ra d<
decir if (hungry == true). Para las pruebas booleanas de este upo. dejar luera 1, ult.nu
de un nmero par.
pasado. Entonces se prueba ese argumento, mediante una condicional if, para ver si se trata
entero (vea la lnea 3). El mtodo evenCheck () inicia en cuanto imprime el valor que le fue
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
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.
La prueba del mdulo del da 3, "Los ABCs de Java" devuelve el residuo de la divisin de sus
ESCWBA
1:
2: 3:
4:
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
System.out.printlnCValue
El operador condicional
trminos.
5:
6:
7:
+ val +"");
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
8: 9:
10:
11:
12: 13:
14:
del if ms general, que slo puede dar por resultado una instruccin o un bloque para ser eje
El operador condicional es una expresin, lo que significa que devuelve un valor, a diferencia
15:
1231
switch
(grade)
case
. cas
'
ourBestScore - yScore,
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
para cualquier clase de prueba en cualquier tipo.
prob"por *""*'
ir (oper == + ) addargs(arg1,
subargs(argi, arg2), arg2); aro2),
Lo siguiente es una revisin de if anidada mostrada previamente. Ha sido reescrito como una
instruccin switch.
switch (oper)
'+': addargs(arg1, break;
case '*':
{
arg2); '
case
subargs(arg1,
break; case ' -':
arg2);
multargs(argi, break;
arg2);
case
'/': divargs(arg1,
break;
arg2);
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.
124
Da 5
is:
16:
default:
return "
ase^ una
^
^
.^.^ ^ ^ hasla ^ ^ , ,0
^^
17:
se
18:
19:
28:
cncuen.
nc , >
21: 22:
publie static void aain (String arguMentsJ) { NunberReader n = new NunberReaderO; String nuo = n.convertNu(4) + n.convertNu(1) +
n.convertNum(3);
23:
24: }.
Pr ejemplo, en
^ x is
ch.
i >
valores de 2,
an odd
r.umber.
switch
case
case
(x)
2:
4:
esto.)
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
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.()
#
#
t
i m
case 6:
);
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,
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:
class N .mberReader {
String convertNum(int val)
convertNum().
2:
3:
4:
{
"
switch (val)
case 0:
{
return
"zero
5:
6:
case
case
case case
1:
2:
3: 4:
return
return
return return
"one
";
7:
8:
"two
"four
";
"
Ciclos for
, 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.
"toree
El ciclo for repite una instruccin por un nmero especificado de veces hasta que una condi-
9:
16:
case
case
case
5:
6:
7:
return
return
return
"five "six
"seven
" ";
11:
12:
13:
14:
case
8:
return
"eight
case 9:
return
"nine
"
Da 5
'est0es' USIed Pde*>*>* Observe que s, usa una instruccin vaca en su ciclo for, tendra que inicializar o incrementar
a sin n.nguna expresin o instruccin y esa parte del ciclo f or ser ignorada
instruccin;
mer vanable de celo o ndices de ciclo por usted mismo en otras panes del programa.
f or si todo lo
El inicio
(ndice de,
encuc7 qU7a el-aCer CSt numero h Priprimo mayor l Ca ^a CSe CC'Pr ejemP)0' el S8uienle c encuentra primer 4,e00. (Llama a un mtodo llamado
leales al ciclo.
Un error comn en los ciclos for es colocar accidentalmente un punto y coma al final de la
x = x * i; // Esta lnea no es parte del ciclo!
luera del celo for. Tenga cuidado de no cometer este error en sus programas de javu.
del ciclo. La lnea x = x i se ejecutar slo una vez, debido a que est por completo
En este ejemplo, el primer punto y coma finaliza el ciclo sin ejecutar x = x i como parte
;
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:
j,
: ndice se compara con saluta
3:
4:
5:
6: 7:
8:
9: 10:
11:
12: 13:
14: 15: 16:
System.out.printlnC
");
18:
19: 20:
das'si m Ih"
se Z I n de """ d contiene nicamente una instruccin: cln de bloo bloque, 7, sto no se requ.eren ya^ que el ciclo
21:
m nto es , eT 77 t ""'"
1:
cada
en ese punto.
9
#
class CopyArrayWhile {
Ritchie
Hopper
#
#
Bjarne
Stroustrup
james Gosling
6:
7: 8:
9:
10: 11:
12:
Systero.out.print("arrayi: [ "); for (int i = 0; i < arrayl.length; i++) { Systero.out.print(array1[i] + " ");
System.out.println("J"); int count =0;
13:
14:
System.out.print("array2: [ ")
'
array2[count] = (float) arraylfcount);
15:
Ciclos while y do
16:
17: 18:
19:
20:
Salida
arrayl: array2:
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
131
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
array (Recuerde que esa
1:
class DoTest {
2:
3:
4:
1;
6:
7:
8:
} while
.-,}
(x <= 16);
9:
10:
Salida
round
Looping, Looping,
Looping,
Looping,
Looping, Looping,
round 9
round
menos una ve ..
En todos los ciclos, el ciclo finaliza al cumplirse una condicin probada. Podra suceder que durante la ejecucin de un ciclo ocurriera algo por lo que usted quisiera salir del ciclo antes
de su trmino. Para eso puede usar las palabras clave break y continu.
i;in>poco lc ^' N
una vez.
^5
*
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
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.
do {
_ ^
i++ //
if
int count = e
#
f or anida-
l T e
t #
#
1: class LabelTest {
4:
5:
6:
7:
thisLoop:
8:
System.out.println("i is " + i +
break thisLoop;
9: 11:
12: 13: }
if (( i J) > 4)
' 3
i ls
j);
:[count2++] - (float)userDatai[count];
System.out.prlntln("en(J of loops");
Ciclos pt;quetados
,. .> ,<. de un
Salida
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, j is 3
end of loops
Como puede ver, el cic.o iter hasta que la suma q a de de i i y y j j fue fue mayor mayo que 4> dos celos salieron sal bl dos celos all bloque exterior y se despleg el mensaje final.
en(onces jos
Ut 'for
( nt i = 0; i <1
Da 5
Semana 1
ueco
en*
* #
Pregunta;; y respuestas
lf ,cnn ,6,1.
R
nesI)araunlf.Cu-..
,vo ,, * W.v.V...
Da
6
S; :
"
Creacin de clases
"os ""U1'jC! de p"
c ,,,, , I.,,
n, n^ciud: por.
cuIT 1
M
HUS
m m
Creacin de clases
137
npfinicin de clases
4:
5:
String sex;.
boolean hungry;
int age;
6: 7:
class Ticker {
//
cuerpo de la clase
estn definidas dentro de un mtodo. Las variables son las siguientes: color
sex
quemado)
Esta definicin de clase contiene cuatro variables. stas son variables de instancia porque no
El color del jabberwock (por ejemplo; naranja, limn, amarillo limn, u ocreUna cadena que indica el gnero del jabbciwiKk
Si su clase es una subclase, la palabra clave extends se usa paro indicar la superch.se de la
nueva clase. Observe a la siguiente subclase de Ticker.
class SportsTic<er extends Ticker {
// cuerpo Je la clase
hungry
age
en caso contrario
#
#
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.
t
m
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".
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
de instancia se
objeto. En Java, usted puede crear constantes para todos los linos de variables: instancia, clase
y local.
c,,o
t^
;.,,,, v
Nota
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".
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;
3:
i
final int LEFT = B;
Creacin de mtodos
desempear durare su existencia).
Definicin de mtodos
con lo siguiente:
- -
thxs.alignn-ent = CENTER;
Tambin puede verificar una alineactn dada:
switch (this.alignment) {
se denominay/w del
^fLargarse de .lin..cion L
break;
this.alignment = CENTER;
this.alignment = 2;
Variables de clase
Como aprendi en las lecciones an^enojc
^
r.,UrTyp, , 1po primiljVo C,,M M ^
us vanab.es de clase son bue;as pan^^ 0 para llevar un registro de informan relat.a
como en lo siguiente:
^ un COI1Junto de ob.e.os.
140
Da 6
Oh
Observe que s, e te me
,e si este mtodo devuelve un arreglo de objeto, los corchetes del arreglo pueden ir
^ ^ ^ ^ ^^ Puesl0 que la forrna
21: 22:
23: }
cc^ emre parntesis. Estos parmetros se convierten en variab.es locales en el cue^o del
mtodo, recibiendo sus valores cuando se llama al mtodo. ;
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 un
A menos m,c un mtodo haya sido declarado con void co.no su tipo de retorno, el mtodo
punto dentro del mtodo, mediante la palabra clave return.
Luclve algn tipo de valor al finaliza, Este valor debe ser devuelto exphcuamcnte en algn
El lisruio 6 2 muestra un ejemplo de una clase que def.nc un mtodo makeRanget). Este
,os enteros entre esos dos lmites. Los lmites se incluyen en el arreg.o de enteros.
Listado 6.2. El tfxto completo de rangeclass . java.
1 :
#
comoHin argumento
Le los (un lmite inLior y un Hm.te supenor) y crea un arreglo que connene todos
actual, etctera. Los sigujemes son ejemplos del uso de this:
ctua 2 P
"
class
2: 3:
4:
langeClass {
5: 6:
7:
8: 9: 18:
11 :
i..,.,..:, v
tM pc,.
En muchos casos podra no necesitar hacer uso explcitamente de la palabra clave this, ya ""
. J"iomatica. For ejemplo, puede referirse a ambas variables de
uenniajs en la clase actual simplemente por nombre, porque
i j r
12: 13:
RangeClass theRange = new RangeC^ass(), theArray = theRange ^nakeRange(1, 18); System.out.print("The array: [ ")! for (int i = 8; i < theArray.length; i+*)
System.out.print(theArray[i] + );
como sigue:
'
i*
"k-
'14:
15: 16:
17:
t = X>'
18:
19: 26:
Systera.out.println(*]");
Mota
La omisin de la palabra clave this para variables de instancia, dependera de la ex,stenc,a de variables del mismo nombre declaradas en el alcance
Da 6
sta es la salida:
test =20
u na
1n'
o2 Z
oca? ' el 7m.smo nombre, pero > con ^^ d Valr local 10 L test dentro local con el valor 20. C" La variable
"
0Cl1 ) riW
- E1 "^odo printT..t(, to
^ ^ ^
mtodo cu: ^
c t un oh
Teau^ .
b r3 3 tra: ^obteniendo SU Varabledesde dC nSta"Ca Pd- en cambiar , d deb.do a que S ese valor d se "" estaba la supenrla.se vez desu
Wi'ble
na subclase
encontrarla.
.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
Cuando usted llama a un mtodo con parmetros de objeto, los objetos que pasan dentro del
3:
2:
1: class PassByReference {
int count = 6;
Creacin de clases
Da 6
144
1451
'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.
5:
6:
7: 8:
Las lneas 18-22 imprimen los valores iniciales del arreglo; usted puede ver la salida de estas
return count;
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. 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.
int
nuroOnes;
19:
System.out
26:
21:
22:
23:
24: 25:
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).
System.out. println("]");
numOnes = test
Ones =
Mtodos de clase
numOnes);
26:
27: 28:
29:
36:
System.out.println("]");
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
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
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
Da 6
Creacin de clases
cade,-
como . in.
el t'empo m SOrpre"derle; ha eStad Creando "P^aciones Java con mtodos nain() todo
La firma para el mtodo main () siempre luce as:
La clase punto de inicio para su aplicacin slo necesita una cosa: un mtodo main() Al
int count -
p.r..lnt(, -o un entero
-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.
Creacijid^cwo^^^^
esta en ejecucin. Si desea tralar esta clase como un objeto, tiene que crear una instancia de
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
Clases auxiliares
m.entras la apl.cacin se est ejecutando. Usted puede crear tantas clases como desee para su
estar compuesta de muchas clases, donde se crean y usan diferentes instancias de cada clase
Su aplicacin Java puede tener slo una clase o, en el caso de programas ms grandes, podra
e, $islema grffico
pequeas
programa.
Si est usando el JDK, las clases deben ser accesibles desde un directorio que
cla qm
sin embargo, que nicamente la clase de punto de inicio necesita un mtodo main(). Despus
En tanto Java encuentra la clase, sta ser utilizada por su programa mientras corre. Observe,
Da 6
los
class EchoArgs {
5 6:
System.out.printlnrArgun.ent + i + -..
m
+ arguroentsfi]);
7: }
P,,, pasar argumentos a un programa Java en Windows o Solaris, se deben agregar a la lnea
Salida
Salida
Argument 2: Hough
a^e > H
Nota
arreglo de argumentos.
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-
Da 6
Creacin de clases
^:;: r crnirios ^^ ilamad ParSeInt' Cambie <* '/ 6 para usar ese
sum += Integer.parselntargumentsfi]);
Resumen
1:
2: 3:
4:
5: 6:
7:
fcr (int i
i - ! i < .r,nt..l.nBth; !) t
!
sura += arguments[i),
Variables de clase y de instancia, las cuales contienen los atributos de una clase v objevanables locales y como declarar constantes.
8: 9: 16:
11:
12:
13: }
le una Case. "110"1'" ^'^ defi"e ' lndUyend laS PaneS d "^ fia de ^'to. cmo s? la a" 3 ""i mlOd0' Cm " al PaSa" '0Sanual ar8U"lenIOS a ' -'odos y cmo usar palabra clave" this para referirse objeto
devolve ,
el
c:
sum += arguments[il;
Da 6
Preguntas y respuestas
J V
P usted mencion que las variables locales constantes no pueden ser creadas en
,|ue no usen las caractersticas del lenguaje en Java 27
l|M,U.|s que son compatibles con .lava 1.0.2. Por qu deseara yo crear programas
Semana 1
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
de la variable de instancia?
variable, queda oculta por la variable local. Hay alguna forma de aislar el valor
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 variablc local.
Da
|. Fscrih.... programa que loma cuatro argumentos, pero si le doy menos argumen-
mente los mtodos pueden definir el comportamiento del objeto (qu es capa/ de
instancia brindan una forma de describir qu son bs clases y los objetos, nica-''
Las clases y objelos proporcionan un marco de trabajo. Las variables de clase a' de
conocimiento a crear programas Java. Sin embargo, podra llegar a olvidar algunas caractersticas que hacen poderosos a los mtodos (caractersticas que hacen que
,.
: ,
,. Sobrecarga de mtodos. Cmo crear mtodos con mltiples firmas y definidones,, pero con el mismo nombre.
Da 7
J .-I
155 L55J
rectngulo: x1,
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
yi, X2 y y2.
El prximo proyecto es crear un mtodo sobrecargado. El listado 7.1 muestra una definicin
sistema.
Escriba
int x2 = 0;
int y2 = 0;
Mota
d co I
' LaUin'1'
clase.
Aunque haya compilado exitosamente este programa, podra no ejecutarse debido a que no hay un mtodo main (). La versin final podr ser compila da y ejecutada cuando usted haya terminado de construir esta definicin de
nables a sus valores correctos como las dos esquinas de un rectngulo. Este mtodo toma cuatro
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;
aal.zan en 0. Usted puede aadir un mtodo de instancia buildRect () p;ira asignar las va
Cuando se crea una nueva instancia de la clase MyRect, todas sus variables de instancia se ni-
argumentos enteros y devuelve el objeto rectngulo resultante. Debido a que los argumentos
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
Jo siguiente:
x1
sobrecargar buildRect () para que su lista de argumentos tome dos objetos Point. Observe
tos Point en vez de coordenadas individuales. Para mplementar esta alternativa, puede
x2 = bottomRight.x;
156
Da 7
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
YueiXu'para. que Java pueda encontrarla.
f i
27:
2e:
29:
38:
X2 =
yi = topLeft.y;
(xi + w);
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.
i siguiente es una definicin para un mtodo sobrecargado:
MyRect twildRect(Point topLeft, int w, int h) {
xi.:= topLeft. x;
32:.
33:
34:
void printRect(){
35:
36:
37:
38:
St
x2
""'
-
;;
-vi-'- topLeft.y;
39:
40: 41:
}'"
42:
43:
44: 45:
46:
System.out.println("**");
points
rect.printRect();
47: 48:
49:
1:
import
java.awt.Point;
50: 51:
52: 53: 54: 55:
System.out.println("***");
2:
3:
4:
= 6;
= 0;
= = 8; a;
5:
6:
7:
56:
57:
rect.printRect();
rect.buildRect(new Point(ie,i0)
50
5e).
)j
8: 9:
10:
x2,
int y2)
58:
this.xi = x1;.
this.yi = yi;
this.x2 this.y2 = x2; = y2;
11 : 12:
13: 14:
Lo siguiente es la salida:
return this;
Salida
Calling buildRect with points (10,10)
MyRect: <10, 10, 20, 20>
15: 16:
17:
18:
19: 28:
=
=
=
topLeft.x;
topLeft.y;
bottomRight.x;
y2
bottomRight.y; this;
point
return
Mtodos constructores bsicos L- Mtodos consecres !ucen mucho como mtodos regula.es. con dos diferencias bsicas:
Siempre tienen el mismo nombre que la clase. No tienen un tipo de retorno.
bottOmRight)
*Escriba
1:
: topLeft.y,
o argi.mcn.o
os cn.cros. Con
2: 3:
4: 5: 6:
'
Person(String n, int a) {
ame = n; -
7:
8:
age
= a;
9:
10: 11:
12: 13:
void printPerson() {
14: 15:
16:
;
22:
23:,
24: }
System.out.println("
System.out.prlntln("
");
);
mtOd ilamado PrlntP..on() pan, que e.Xo s pueda o eda presentar" " ' a"s mismo, y un mtodo objeto se Min (, para probar las cosas
Cmo llamar a otro mtodo constructor A prime >- * "Oy vio comon mtodo poda hacer e, lrab.jo de otro: y un mtodo
buildRect () llam a otro mtodo buldRect ().
Escriba
1:
2:
3:
4:
import java.awt.Point;
class Myfiect2 {
int y1
5:
6:
7:
int xi = o; = e;
8: 9: 10:
int x2 = 0; int y2 = 0;
class MyCircle {
int x, y, radius;
11:
12:
this.yi
= yi;
13: 14:
15: 16:
17:
18:
19:
20:
21:,,
22: 23:
24:
>
y2 = bottomRight.y;
x2 = bottomRight.x;
y1 = topLeft.y;
1 point
25:
x1 = topLeft.x;
26:
27:
31:
3e:
29:,
y2 = (VI + h);
' .Mi. i .-
.,'
void printRect() {,
32:
33:
^
'
Syit..out.println(V + x2 + ",
System.out.printCMyRect: <- + x1
y2
35:'
36:
34:
Da 7
162
existentes
, Para .sobreponer un mtodo, ,odo lo que tiene que hacer crear un mtodo en su subclase que
que coincida con la firma, la nueva firma oculta la definicin original del m.odo.
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
printMe(). el cua] imprime el nombre de la clase y los valores de sus variables de instancia.
44:
Aqu tiene un ejemplo sencillo; el jslado 7.5 muestra una clase simple con un mtodo llamado
Listado 7.5. El texto completo de printclass.
int x = e;
int y = 1;
45: 46:
47: 48: 49: 50:
rect.printRect();
System.out.println*
).
Escriba
1: 2: 3:
4:
class PrintClass {
51: 52:
rect.printRect();
System.out.prmtln(
5:
6: 7:
void printMe()
53:
54: 55:
8:
9: 10:
El listado 7.6 muestra una clase llamada PrintSubClass, que es una subclase de
MyRect
Sobreposicin de mtodos
Cuando usted Ua.na a un mtodo de -*^
llc clases has.a que la localice. La heren u
petidan^e en ibcU-e, n tener ,uc
.ri(ikMniic
^ mlodo nacia arriba en I. jerarq-a
^ ^ ^^ a fc
8:
6: 7-
4: 5:
}
vez
165 I
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:
ilt|o 7 7 uuieslra esta
void myMethod (String a, String b) // hacer cosas aqui
super.myMethod(a, b);
ti clase. printSubClissZ es i
// ; PRINTSUBCLASS2.
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
refiere a la superclase ms que a la clase actual. Por ejemplo, el listado 7.8 muestra los dos mtodos printMe() distintos usados en el ejem
plo anterior.
Escriba
1:
2:
// desde PrintClass
void printMe() {
3: 4: 5: 6:
System.out.printlnCx is
"
+ x +
",
y is
" + y) ;
7:
v se ll.ma al mciCHloprintMeO.s
8: 9: 16:
11:
Systen.out.println("x
z is
-*
Da 7
ro.rintlnCl } thxs.getClassO.getNameO)
System.out.printlnCX is " * . System.out.printlnCY is + y),
::sSobeP:;s;:prinicra msiniccin-usicd n
if (condition == true) )
s(i2
llamar un constructor
sUper(i,2,;
//
namar a
un
constructor
ongina>
aadir
solamente
la
pore.
//
desde PrintSubClass
void printMeO {
super.prmtMeO;
Systera.out.printlnCZ
is
nomb e
da adicional/
-"
illicializar x
^ ^ m,loi)o conM,,ltMOr de
niciaHzacita de su objeto, no solo ,n,c,ah tamb,n cambiando el contenido de vanab es q y. cxplci.amenie los mtodos constructores de la supere!..
"CCCS'C-
this.name = name;
'
super(argi, arg2, );
168
Da 7
is
is
5
5
usar finalize()
ame
is SmallPoint
El mtodo constructor definido aqu para NamedPoint llama al mlodo constructor de Point
cializar estas variables fcilmente, tal vez no podra saber qu ms est hacend Point para
hacia arriba en la jerarqua para asegurarse que todo se configure correctamente.
para inicializar las variables de instancia de Point (x y y). Aunque usted mismo puede ,n.inicializarse h s mismo. Por lo tanto, siempre es una buena idea pasar mtodos constructores
Resumen
Mtodos finalizadores
condiciones
diferente,
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
Preguntas y respuestas
Nota
los errores se les llama excepciones: aprender ms acerca de estas en el ahora, todo lo que usted necesita es incluir estas palabras cave en la
definicin del mtodo.
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.
Incluya cualquier actividad de limpieza que desee hacer para este objeto dentro del cuerpo de
td l
purmetrl
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.
Semana 2
de Java
Temas avanzados
8 Cmo poner programas
interactivos en Web
Silt
11 Construccin de interfaces de
usuario sencillas para applets
12
Organizacin de los
componentes en una nterfaz de usuario
H</*
13
usuario en un applet
14 Desarrollo de interfaces de
SlSi
Semana 2
Da
3m
>".'
i1 ii
I
Li
i* MI
Da 8
174
c.ones senas en cuanto a lo que un applet es capaz de hacer. Si no hubiera estas restricciones
Debido a que los applets de Java se ejecutan en el sistema del usuario, hay algunas resine-'"
un programador de Java podra escribir fcilmente un applet que borre archivos de usuario
:
Diferencias entre los applets
Como una regla general, los applets de Java se ejecutan bajo un modelo de seguridad "mejor
Leer o escribir archivos en el sistema de archivos del usuario.
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 <
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
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
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
Precaucin
cin y
Aunque el modelo de seguridad de Java hace extremadamente difcil que un applet dae el sistema del usuario, nunca ser 100% seguro. Busque "applets hostiles" en Web y encontrar exposiciones de temas de seguridad en diferentes versiones de Java y cmo han sido resueltos. Incluso podra encontrar ejemplos de applets problemticos para quien utiliza navegadores de Java. Java es ms seguro que otras soluciones de programacin Web
Dia8
177 i
176
La programacin de aplicaciones usar las caractersticas ms recientes y mejores de Java 2. Una vez que los navegadores encuentren una forma de alcanzar a los desarrolladores del lenguaje, usted podr utilizar las bibliotecas de clase de Java 2 en sus applets. A travs de este libro se harn notar las diferencias de versin. Ocasionalmente el compilador Java mencionar estas diferencias cuando utilice una caracterstica de Java 1.0.2 que lia sido
remplazada con una mejor solucin como en Java 2, y tambin se le har una advertencia
al respecto.
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 procrama. 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 .;
L, des(ruccin suena ms aspen, de lo que es. E, m.odo destroy,, hilbililll al appta a u,l,,a uevidudes de l,,npc/.a jus,o ;,,lt.s de que cl n,ism, sea /ihcnulo de n,L,,,,.ra o con-
k
i
I pple haya creado. Para proporcionar e, componam.cn.o de limpie., para su apple,. sobre-
eenoo ! T "'" CU"qUer ll bJCI C" CJR'u<:idn- C" ^"^' X^n troy a qe ,enga recursos especeos que necesiten ser liberados, como los subprocesos
PUede US:" US:"" CKle mld |Wii fioil'uilaf ej fioil'uilaf cu"ufr subproceso en eje-
en si mismo.
Tal vez le llame la atencin la diferencia entre destroy,, y finalize,). que se describi en el da 7, "Uso de mtodos para realizar tareas" El mtodo
180
Da 8
Web
181
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 *
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
import java.awt.Color;
Publie class Pallndrome ex
iiport java.awt.Font-
iraport Java.awt.Graphics-
[ DE PALIMDRQME . JAVA.
<t
Ustld debe sobreponer el mtodo paint () de su subclase Applet para desplegar cualquier
cosa. El mtodo paint () luce as:
publie void paint(Graphics g) { // aqu va el cdigo
vL,.n Sel navegador se mueve , tremes posiciones en la panu.lla. y as, por el csi.lo
9
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
"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 java.awt.Graphics;
avegador por lo que usted no tiene que preocuparse por ello. S.n embargo, siempre d be .
Tip
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.
subclases del paquete, por tanto la Instruccin xmport j ava . awt. ; no
incluye las cla-.es del paquete j ava. awt. image.
,a el
o ejemplo, la instruccin i.port J,va. awt.-; carga todas las Cases publ,
ca Zpaquete java.awt. Sin embargo, la instruccin i.port no meluye las
b.0.
n.j,,
4,
" I-
,,,ls,n<MndoM
Un applet sencillo ,,, el .la " ''Un vistan a la programacin orientad, ;, objeos". usted ere un :Wlci sck.IIo
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. macin de applets. El listado 8.1 muestra el cdigo de dicho applet.
Figura 8.1
Ese .pplet serevisa aqu por una razn diferente: para tomarlo como un ejemplo de progra
i
;
Da 8
Si usted implementa los mtodos correctos del applel en su clase (init(), start(),
de un punto de salida explcita.
V:
does not support Java!
Despus de que haya creado la Case o clases que componen su applc. y las haya condado
, os ,np.c,s se colocan en una pgina meante la etiqueta <APPLET>. un comando Je pmgn, n' acin HTML que funciona como otros elementos de HTML. Hay numerosas hcnam.eMUs
El propsito de <APPLET> es colocar un applet en una pgina Web y controlar c.nn luce con
Los navegadores cort capacidades Java usan la informacin contenida en la etiqueta y ejecu
n-r un direcIorio
El archivo de clase
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
dimensin.
suficientemente grande.
La seccin siguiente asume que usted tiene suficientes conocimientos para
u^de^ '
Nota
porque su 1Z1^J.T " Cnil! 4UC * ^ 'd l sopona. Si usted no especifica navL^dor no lo
L, enqueta <APPLET> es una extensin especial a HTML para incluir apple.s de Java en pag,-
queu, es soportada por todos los navegadores que mj manejan pg programa de Java. ill d gina Web 8 2 muestra un ejemplo sencillo de una pgina Web con con un un apple, apple, mc.u.do. mc.u.do.
11
2:
<HEAD>
5:
<BODY>
yd
Da8
~~~~~~~
-*-"pSE
Figura 8.2
tos app'eli
En su forma ms simple, la etiqueta <APPLET> utiliza los atributos CODE, WIDTH y HEIGHT
- Ui i>a'n(i Web
PalindromePage.html
\ota
Mfammcfl>
V: en Navigator.
El atributo ALIGN define cmo ser alineado el ;,pple, en una pgina Web en relacin a otra.s
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.
ALIGN=ABSBOTTOM alinea la parte baja del applet con el elemento ms pequeo en la linea (que puede ser la lnea base del texto u otro applet o imagen;.
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-
la pgina
dei
^ 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.
HSPACE y VSPACE
Mediante los atributos HSPACE y VSPACE se configura la cantidad de espacio en pixeles entre
do BiX.class de
j!
un applc. y st, texto que lo rodea. HSPACE controla el espacio horizontal a la .z.qu.cda y
aqu est ese fragmento muestra de HTML con espacio vertical de 50 y espac.o hor.zontal
de 10:
erecL. del app.et, v VSPACE comro.a el espacio vertical sobre y bajo el applet. Por ejemplo,
; i
</APPLET>
HEIQHT-4. WIDTH-4M>
</APPLET>
en un fondo blanco, con otros elementos de una pagina Web. El fondo de la pag.na es una
la cantidad de espacio entre el applet y el texto en la pgina.
1 a fi.u.r.. 8.4 muestra cmo se desplegara este applet. el cual despliega una cama sonriente
La etiqueta <object>
rejilla, y cada rejilla tiene un tamao de !0xl0 pixeles. Usted puede usar la rej.lla para med.r
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
ejecutar un applet despus de obtenerlo de un servidor Web.
archivos los cuales sern utilizados por un navegador con capacidades Java cuando trate de
Da 8
188
cuso*
?,
archivo JAR. el
- ->rMw jar ^ ^
cantidad de arch
...r*.*.-.*
que el tamao
;: fadrTncqueblenerddscrvidonusleJpualc**y*"Tior jlg
ores ravisaiore imemet Exptrer > T ""^ demr "" "^ MR" Li ianic el lonnaio Zip C o empacados sin compresin
listado 8.2
1:
<HTML>
2:
3:
4:
ieme.
'
""''
5:
6:
7:
8: 9:
10:
</OBJECT> </BODY>
</HTML>
11:
12:
pZ n ,
Dia 8
i
Precaucin
Aunque un archivero Java puede contener archivos de clase, el atributo
conocer el nombre del archivo de la clase principal del applet para cargarlo.
t:rf''lc lm *
An.cs de que los desarrollados de Java introdujeran el formato de archivo JAR. lamo Netscape
coi, el atributo ARCHIVE, pero slo se pueden utilizar para los archivos de clase, no para ,ma-
L-.s versiones actuales de los navegadores Web de Netscape soportan el uso de archiveros Zip
usar el atribulo ARCHIVE para indicar el n.mib.v cid a.duvcro. um.o i-Me.
HEIGHT=100>
</APPLET>
"!!e ' u otros unos ele archivos que un applc. pudiera necesitar. Con Netscape, usted puede
<APPLET copE=-MyAPlet.class- ARCHIVE--appletstuff.zip" WIDTH-1B8
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.
Una etiqueta especial de parmetro en el archivo HTML. Cdigo en su apple para analizar esos paramaros
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
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
est disponible sin cosi en la direccin siguiente:
http://www.microsoft.com/workshop/prog/cab/
/A
dtmro dc
<PARAM NAME=size VALUE="24"> A Java applet appears here
</APPLET>
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
1931
Listado 8.4.
1:
import
iraport
java.awt.Graphics;
java.awt.Color;
S^4
initffcomola siguiente
2:
3:
import java.awt.Font;
4:
5:
6:
7:
"
'
-:
8: 9: 18:
11:
Nota
nombres de los parmetros en B|' "^b ii6n de letras maysculas y mer,e, incluso deben ut,l,za--I,, m m. ^eecuminirigs"> es d.ferente a minsculas. En otras Palab^s?s7parmetros no estn pasando ade-
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
String
palindrome;
Para configurar un valor para el nombre, liene que obtener el parmetro. El mejor lugar para
if (theFontName == nuil)
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");
StringY = etParameter('size-);
if (s == nuil)
cd e, applci p,_unar0.,
Una vez agregado este mtodo, todo lo que queda es modificar el mtodo paint (). El mto
do original drawString() se pareca a esto:
C,
El listado 8.5 muestra el resultado final de la clase MoreHelloApplet. Compile la clase para
que tenga listo un archivo de clase.
|194
Da 8
1951
Cargar este archivo HTML en Netscape Navigator produce el resultado que se muestra en la
figura 8.5. Figura 8.5
La lanilla
NewPalindrome.html
import
import import
java.awt.Graphics;
java.awt.Font; Java.awt.Color;
apBBMp
4: 5:
-:*" 0
*il U W -
java.applet.Applet
Font.BOLD, 36);
".. -J..
6:
7:
8:
9:
10:
publie
void
paint(Graphics
screen)
screen.setFont(f); screen.setCoJor(Color.red);
11:
12:
13: 14:
screen.drawString(palindrome,
5,
50);
{
nuil)
irfi.-j-,. .-
f
-
Al
.*
palindrome = getPararaeter("palindrome");
(palindrome ==
palindrome =
sinned";
19:
20:
Ahora cree usted el archivo HTML que contiene este applet. El listado S.6 muestra una nueva
pgina Web para el applet NewPalindrome.
1:
2:
<HEAD>
3:
Escriba
1:
2:
4:
5: 6:
<HTML>
<HEAD>
3:
4:
5: 6:
7: 8:
9: 10:
Your
</APPLET> </BODY>
7:
<APPLET CODE="NewPalindrorae.class"
WIDTH=600 HEIGHT=100>
8:
9:
10:
sir,
prefer prison">
:1
Java!
11: 12:
</BODY> </HTML>
Resumen
Es discutible la razn por la que los applets siguen siendo el centro de atencin del desarrollo
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
etiqueta <PARAM> que se usa para pasar el palndromo al applet. En este ejemplo, el
parmetro AME es palindrome, y VALU es la cadena No, sir, prefer prison.
de Java, ms de dos aos despus de que el lenguaje fuera liberado por primera vez al pblico.
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
196
Da 8
Figura 8.6.
La pgina
Preguntas y respuestas
>P_.Teiigo un applet que toma parmetros y un archivo HTML que le pasa esos
Dcnnis and Edna siiined
nuil. Qu estii pasando kju?
-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*
\ r
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.
R Se requiere muy poco por parte del servidor para ofrecer applets de Java junto con
servidor comercialmeme disponibles ofrecen sopone adicional para Java Si no lo
. 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
MIME.
extensin de archivo .class con el tipo MIME application/octet-stream Consiilic la documentacin dc , servidor p:lr1 llliiyor informado,, a-s,xvio :l los lipos
hacen, configurar el servidor para presentar applels dc Java requiere que se asocie la
. 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>
R Dependiendo de su navegador u otro ambiente habilitado para Java, usted podra tener
System.out.printlnO), o bien podra ser resguardada en un archivo de registro. (Netscape tiene una Consola Java [Java consol] bajo el men Opiions: Internet Explorer utiliza un archivo de registro que usted debe habilitar al elegir Oplions I
una ventana de consola donde aparezca la salida de depuracin (el resultado de
. Para acelcaf e! tiempo que .orna cargar un applct desde un servidor Web. usted puede
cabbase de Microsoft.
Advanced.)
. 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).
rios reales).
Puede continuar imprimiendo mensajes mediante System.out.printlnO en sus applets (no olvide quitarlos cuando haya terminado, para que no confundan a sus usua
.
Semana 2
Da
detalles de los ciclos bien construidos o una jerarqua de clases ele"ante pero si le
es con un programa que despliegue grneos. Tal vez el to Pedro no aprecie los
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
200
Da .9
Tambin empezar a usar las caractersticas de dibujo mejoradas en Java2D, un conjunto de claseintroducidas en Java 2 que ofrece algunas caractersticas que atraen a la vista:
''- Ob|Clos desasociados.
map . html.
1: <body bgcolor="#C4c4c4">
widtn=35e>
6:
</body>
La clase Graphics
Un applet concibe las operaciones grficas en forma parecida a la de un lienzo. Usted ha usado previamente el mtodo drawString () para dibujar texto dentro de un applet. La fuente
artista elegira un color y una brocha antes de pintar.
del texto y el color fueron elegidos antes de dibujar los caracteres, del mismo modo que un
Dibujo de un texto en
una ventana del
El tcx.o no e's lo nico que puede dibujar dentro de la ventana del applet. Usted puede dibujar
lneas, valos, crculos, arcos, rectngulos y otros polgonos.
applel.
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.
1 ;, mayora de las operaciones bsicas son mtodos debidos en la el.se Graphics. l-n ....
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:
2'
iniport |ava.awt.Graphics;
e!
' }
185, 75);
requ.ere ser dibujado, colocar todas las operaciones de dibujo en paint () asegura que
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
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-
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.
seccin.
Continuaremos agregando al apple. Map cada m.odo de dibujo que se abarque en esta
'
Da 9
El sistema de coordenadas de Java usa pixelcs como su unidad de medida. La coordenada de origen 0 0 est en la esquina superior izquierda de la ventana del applet. El valor de
las coordenadas x se incrementa a la derecha de 0,0, y las coordenadas y, lo hacen en
esquina inferior izquierda y los valores de y se incrementan en semido superior.
y M p"ni *
drawLine(x1, yi, X2, y2);
* >
sentido inferior. Esto difiere de otros sistemas de dibujo en el cual el origen 0. est en h 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.
+X
como se puede ver en ,a figura 9.3, una porcin de la ventana del apple,.
9.3
Esta instruccin dibuja una lnea de 185,80 a 222,80; una Knea que subrava
c\ texio Florida,
Figura 9.2
El sistema de
coordenadas para
0.0
?r ?o
grficos de Java.
Mota
6C 60
nuar con el texto y escribir todo el cdigo Java una sola vez
lista completa al final de esta seccin. Hasta entonces, usted puede conti
Rectngulos
+Y
Dibujo y relleno
redoderd?: ** "^ *teclados ieCUta8ul0: reclnul ml v con esquinas redondeadas (como en la mayora de los de computadora).
Usted puede dibujar ambos tipos de rectngulos en una forma delineada o rellena con el color
fillRect () para las formas rellenas.
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.
Para dibujar un rectngulo normal, use e. mtodo drawRect (, para los contornos y e, mtodo
Nota
Tambin puede dibujar archivos de mapas de bits, como los archivos GIF y
JPG, mediante la clase Image. Maana aprender sobre esto.
Da 9
#
#
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. "
del aPL.;
Figura 9.5
Agregado de un
al applet.
ancho y 8 de aho El
rectngulo redondeado
^ n E re mis grande sea el rea, ms redondas sern las esquinas. Incluso puede hacer
qS cinguto se vea como un crculo o ., ovalo, haciendo esu, argumcn.os ,o su,,,cnteniente grandes.
lilo limos argumentos definen el ancho y el alto del rea en que se redondean las
() y nilPoIygon,,
"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.
10
maneras
Figura 9.4
dondeadus.
e!ZE P d6Sde ""Poly0on(nt/; C^ de P"iattl -diante enteros. Esto requ.ere una llamada al constructor
P
p'un.os
int x[]
mt points = x.length;
Da 9
I 206
ejemplo:
,
Cuando tenga ,
65);
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(235,140,15,15);
los negros conectados entre s en un puni al ceniro de Florida, como se ve en la lgura 9.7
stos son mtodos f ill (rellenar) en vez de mtodos draw (trazar), por eso crean tres crcu
208
Da 9
Cmo
I22!2l!ifParencade:
fuentes y color
Figura 9.7
Agregado de un tro de
crculos el arpie!.
Medidas de un aito.
270
Esta
-190) .
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:
Figura 9.9
Un arco.
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.
Da 9
>210
211
9:
10:
11:
12:
screen.drawRoundRect(182,61,43,24,10l8); int X[] =,{ 10, 234, 253, 261, 344, 336, 295, 259, 205, 211,
195, 191, 120, 94, 81,
37,
12,
10 };
13:
14: 15: 16:
17:
int y[] = { 12,-15, 25, 71, 209, 278, 310, 274, 18B, 171, 174,
12 };
medios crculos.
, ,,. *
valores x y y
,a. ,. , *
18:
19:
20:
screen.fillDval(235,140,15,15); screen.fillOval(225,130,15,15);
#&:!. mmm.
de Java:
La figura 9.10 muestra el applet Map que ha sido pintado con los mtodos do dibujo bsic
Figura 9.10
El applel Map.
s1* b*
50,140
50,150
50,160 50,170
# #
V
2:
import java.awt.Graphics;
import java.awt.Polygon;
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
y Color, y se podran reorganizar las operaciones de dibujo para mejorar el producto final.
I'
8:
Da 9
2131
Copiado y limpieza
ventana del Applet:
Texto y fuentes
> t
La clase Graphic, tambin incluye alguna funcionalidad de corte y pegado que .ncluve la
. 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 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
Para Java 1.1 y posteriores, los nombres de fuentes TimesRoman, Helvtica y Courier deben ser remplazados con serif, sanserif, y monospaced, respectiva
mente. Estos nombres genricos especifican el estilo de la fuente sin nom
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
215
4:
PU51^n^old_Paint(G'-aphics screen) {
rics fm = g,
18:
11:
12: 13:
setFont(f);
,o y dibuja la cadena
14:
}
}
screen.dra*StrinB(S) ,, y);
16:
^"J^^^^r'-v -- '-
a
dicha cadena.
charWidth(char)
getHeightl)
V ,
I i/port ]ava.at.FontMetrics;
217
Color
usar las
y ColorSpace del paquete j ava. awt para que sus aPPlel!| >'
y
s
Usted puede especificar el valor sRCB del Las .nstrucciones siguienles ,nuestran
= newColor(0.807FjlF0F).
) float.
SJndo scB. En este sistema un color se describe por la cantidad que contiene d. ojo
ponentes pueden ser representados como un entero emre 0 y 55
esencia completa de color rojo, verde o azul Blanco es 255. 255. bs. la
Color c2 = newcolor(255,204)102).
Jal que van de 0 a ^ .0. Java puede representar millones de colores entre los dos
extremos mediante sRGB.
le s tres U ,ed tambin puede representar valores sRGB mediante los nume.o, de pa.to
punto flotante como
^^?
e^
I
io de color deseado, en cuanto se use el objeto ColorSpace para JJh.t pcn de colores. Usted tambin puede convenir desde cuaUuncr onuc, d.
; ^^
ar9umentos hexadeci-
color ol a sKGB. y y
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 (0,255,255)
magenta
orange
(255,0,255)
(255,200,0)
En ,a mayora de los programas, bastar e, uso integrado de sRGB para definir -os .o,o,w
Uso de objetos Color
darkGray (64,64,64)
ray (128,128,128)
green (0,255,0)
Pink (255,175,175)
red (255,0,0)
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.
wnite (255,255,255)
yellow (255,255,0)
lightGray (192,192,192)
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
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
Especificacin de los
Addico
Cclico
Figura 9.12
cclicos.
y muchas otras caractersticas.
2D
screen2D.setColcr(Color.black)
* -
d "*
GradientPaint.
Patrones de relleno
LS patrn, s de relleno
o un P- * su P^
setPaint()deGraPhics2Dconun
a JlamIa a, ,n
,mslnil1or GradlentPaint
GradientPaint(x1Iyi>Colonlx2ly2,color2,;
Si usu* desea usar un desp.azamicn.0 Jc g gradienle
Ss22 2
patrn c: Ueno ^
"Z^::Tzrel co]or
ccl,C0.
de
=
.sacclicos y cclicos emre blanco y u
GradientPaintfx!,yi,colon,X2,y2,colora,true,-
- ^ -d, lo que es un **
es insertados.
untos en
el objeto
screen2D.setPamt(pat) ;
' \
BasicS
Td
Rectngulos
L^ferenca entre ,OS dos es que uno loma argumentos fioat y eJ olro lc)n):Lgumentas
ente es un ejemplo:
Los rectngulos se crean mediante las clases Rectan9le2D. Float o fiectan9le2D Double
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
redonclcadas.
225
'
polly.moveTo(5f, 0f);
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:
nuevo punto. Es
^rtoE
> se usa ei
POlly.lineTc(205f, 90f);
90f);
polly.HneTo(205f, 0f);
y moveTo
St quiere cerrar un polgono, utilice el mtodo closePath( )s in
polly.closePath();
ado por el
Dibujo de objetos
los fiemos y f xll,, para los objetos rellenos. s,oS toman un objeto como argumento
Todos los objetos dibujados usan los mismos mtodos de la clase GrapfUcs2D:
para
Java2D, se deben especificar los nmeros de punto flotante en vez de ser enteros
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"
Da 9
? 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
,a herramienta appletviewer incluida con el JDK 1.2 es la nica manera de verlo.
Un ejemplo de dibujo 2D ' i-I r i nrimcns actividades de hoy usted cre un mapa de Ronda siguiendo los meiodos
^Tv con un navegador Web que soporte Java 2. A. momen.o de escnb.r es.a obra
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:
screen2D.fiii(fl);
fl-closePath();
fl.lineTo(81F,49F); n.lineTo(12F,37F);
screen2D.setColor(C
// Dibujar valos
2:
screen2D.fill(e3);
screen2D.fiii(e2),'
screen2D.fill(e1).
Float(245)130) 15,15) ;
S:-;;i;:?;
3:
4: 5:
6:
7:
(Graphics2D)screen;
8: 9: 10:
11: 12:
13:
14:
screen2D.setStroke(pen);
appletviewer maneja las et.quetas Por lo que no hay motivo para crear
breve que io
19:
20:
21:
22: 23:
24:
fl.lineTo(344F,209F);
fl.lineTo(336F,278F); fl.lineTo(295F,310F);
29:
30:
31:
32:
fl.lineTo(259F,274F); fl.lineTo(205F,188F);
fl.lineTo(211F,171F); fl.lineTo(195F,174F);
Pnes de dibuJ
33:
34:
mrodo setStroke,, de
Da 9
co,or verde en 0 0 al
para l0
se al estado de Florida y
=Preguntas y respuestas
en negrtlS a la n.i.ad.
relleno actual.
d
la
19;
de un applet. Ya puede
\ \
Semana 2
Da
10
<">
SE-''.
11
Da 10
234
Adicin de i
y sonido
235|
aliciar el progr.ima
:; l*.
ejemplo previo:
runner.start();
vi . 1
^
npommtao.
cosas emre
"gUrando10 C '(>d<)'"
1"'
ia instrucci11 sigllieme;
haber sid
Precaucin
Tnread runner;
eTecucin 1, '' PrCeS '^^dades en el ambiente de ejecucin del programa y puede introducir errores en su operacin que son
Hay un mtodo stop() que podra ser llamado en objetos Thread para
Da 10
1236
runner.start();
if (runner 1= nuil)
}
runner = nuil-
vc
cn
2sr,2S?
repaintf);
{ try
Thread.sleep(ieee);
^
Sun Mar 08 11:09:10 EST 1998
screen.setFont(theFot);
u coIqueien
r^^zr
ya que
iroport
java.awt.oraphics;
.-""4)i
g. Date theDate;
10'.
Thread runner;
I!!
1
13:
14:
if (runner == nuil) {
runner = ne Thread(ttus);
Da 10
V sonido
239 i
| destruir nbpm^'^^^
Parama.
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.
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. trabajo del applet est en el mtodo run () (lneas 25-33).
TL mtodo (a. inicio con la instruccin en .a lnea 27); la expres.on runner fhisThread devolver un valor true hasta que el objeto runner so coni^re a nuil lo
I":, ocurre en e mtodo stop< > de. app.et). Dentro de ese ciclo whil. se construye un
cuadro sencillo de animacin.
Dentro de run () es donde realmente ocurre la animacin. Observe el ciclo w.ile,) dentro
.S^
crear animaciones. '
de la
'Os lm'hlc M |uc cl.be dcso.nban^rsc
, pausa por
.000
S:S=H
el -b de cadro,
Pp>dc,,,.
l d,b.jo y la ,mpra; ,
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.
- *-
Da 10
240
0.sot
paint(g);
o.
Color.getHSBColorfe, (float)1.0,(float),.0).
^ ^^ ^ presenta en colores
parpadea terriblemente
int i = 0;
try
Netscape NnviS"1'"'-
if (i == colors.length ) i = 0;
} caten (InterruptedException e) i
Thread.sleep(200);
import
java.awt.;
V
9.
,1(J':
21.30, e, llenarloeo.
color
las Cses
-chivos de clases de JM ^ ""*" ^'^ d ls a, por por Z lo que Us,cd u.Mcd henc c,uc mdicarle a Java dnde encobrarlos
^y:
*
, He
. y
es sencilla: sobreponer upcJatel) y quitar la part = donde s _l. P ' no se necesha limpiar porpue no esta c:o - P^ lcx(o update (,
com/]ava21/images/booK
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
nuevoarepainto.yassucesivameme.
"s.ed dibuja lo que de.eu ver despicado, llan^ ZZ'^T """ ^ !" ^ "
r
Java.
PreCaUCin
Aunque pu
esto, cuando llame a repaint Oo-r-r "" ^ d"Plie9Ue' MaS tarde ver paint (> Pr cre^r una secuencia animada.
co,!f,0 y Par de 'a ejecucin de ^ applet lecoiuaia del da K, "Cnio poner programas intei etiv w
,-
Pintado y repintado
" dt
olio programa.
requieren start n t /
stoP(, :t.^;: '!"L ::;::i ^^-v ai ^ ^ - ^~ > ^ los .,p,,|u.s ,lo necesitaron usar paint () una ve/.
' '' "" P'CeN0 >' c'"e M ^cuum l P"-""- *
mciodo repaintO.
' prorama
^ de-una .rea
.iempo de proce-
Ai
solicitudes a repaint,) se
)a, acunas podran ser
llamada a repaint O y
Da 10
Dibujo de imgenes
en un applet a travs del mtodo drawlmage () de la clase Graphics.
^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.
El objelo lmage a desplegar
La coordenada x
La coordenada y
"rsumt
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
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.
tamao d.stimo al real. El mtodo OetHeiOht() devuelve la altura de la imagen como un
ocupar al desplegarse. Si no son del tamao real, la imagen ser escalada parque quepa en
Los argumentos ancho y alto describen el ancho y alto, en pixeles. que la miasen debera de
Hay dos mtodos de la clase Inrnge que son tiles cuando se despliega una imagen en 01ro
V..
|248
Da 10
Crear animacin con imgenes es lo mismo que con fuentes, colores y otros objetos amma-
y usar otro ^
Succin de los poblanas de parpadeo. La nica diferencia es que usted uene una p,la de
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.
a desplegar.
que
1 as imgenes con que usted trabaja en el apple. Neko les parecern familiares a muchos
El ejemplo Neko
Neko se mover
esho or Kenji Gotoh que desarrolla un gato pequeo animado. Neko juega con el punten,
Java se ejecutar desde el lado izquierdo de la ventana del applet, se deiend a a
Neko que proviene de la palabra japonesa que significa gato, es un programa de Mcuosh ,
int x.
inj
int y = 50;
Para este ejemplo, crear animacin basada en los grficos originales de Neka ste es. basa
""7
public void init() { String nekoSref]
stop.oif,
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.
. sera ch'f 9
Figura 10.4
i'S <lcl
ijtph'l Neko.
,,,, estar HsH, ,an, es,e proyecto, copie , o. dison ^ creado previa,,, me, los siguientes nueve archivos de imagen del s...
:;:z: *
r ri
'^ C" SUbProcesos. P este propsito se usar el
La idea bsica".-n el app.e, NeKo es tomar la serie de imgenes y desplegarlas de una en una
programa:
Da 10
.
.
void nekoRunfint start, int end) { for (int i = start- i < ehd; i+=i0)
x = i;
i
repaint();
nekoPics[i j ;
pause(150);
La ltima i
-*
'd obieT^
ZllZ ""I
) co
9('' C'
S, no o hiciera
'-" conl-
<-t*"no
Precaucin
UU por lo que si usted est escribiendo este applet para permanecer con
} caten (InterruptedException e) { )
Thr .ad.sleep(tirae)i
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 ^ ^ ^ ^
i 252
Da 10
253
Todo ,o que tiene que suceder para desp.egar cada una de estas imgenes es .o guien*:
. Cambiar el valor de crrente al objeto Image que debiera desplegar.
. Llamara repaint().
; 1
currentlmg = nekoPicsm
pause(250);
currentlmg = nekoPics[2);
repaint();
Se llama al mtodo nekoSleep (, en el m ilnA ^omo se muestra aqu: mtlOdo run' J deI PPki con un ^umemo de 5_
// dormir por cinco "turno.:" nekosieep(5); s
m m
6
// bostezar
currentlmg = nekoPics[3);
epaintO;
en ~
mclod
nekoRunfx, si2e().width +
Paso 4: finalice
siguientes comprenden el mtodo,
void nekoScratch(int numTimes) <
blanca alrededor.
0Cada rrin fondo bianc-si .endrj ~una *cuja Cuadro "e la animacin
' " *"" " VlenIuna dc/
1''. "ggue la insinjccin sigui guicnle al
currentlmg = nekoPics[5'j;
pause(150);
setBackgrourid(Color.vvhite);
r una anisenci,,:. a ani :. Observ 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
v ,'
Den.ro de. mtodo run, de, applet, se llama a, mtodo r.ekoScratch,, con argumento
de 4:
// rascarse cuatro veces
nekoScratch(4);
nekoSleep(5);
3:
4:
repaint();
pause(580);
6:
7:
nekoRUn(x, size(,.width
currentlmg;
runner;
int y = 58;
13:
14: 15:
go^t! = ( Ti.Kti...
awake.gif" };
16:
17:
Pause(i58);
pt0r CrrtI
currentlmg = nekoPicsri
18:
19:
20:
21:
22: 23: 24:
r (int i = numTimes; i I . ..
currentlmg = nekoPics[4]' repaintf); ' ''
pause(150);
repaint();
nekoscratch(int numTimes) {
25:
26: 27:
28: 29:
38:
currentlmg = nekoPicsfsi-
pause(150);
31:
32:
33:
34:
nekosie.p(int numTimes) /
currentlmg = nekopicsrei-
Pause(258);
repaintf);
currentlmg = nekoPicsm-
l ''
pause(258);
45: 46:
47:
currentlmg = nekoPics[3];
repaint();
J caten (InterruptedException e)
Thread.sleep(time);
51:
//
"turnos
Dia 10
256
rfrawimaoelcurrentlnig,
x,
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.
doble bufer es menos eficiente que el uso normal de espacio, y tambin toma ms memoria y
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
# m
m
de I..superficie de d.bujo del applet: el contexto grfico (una instancia de Graphics) para
W-onar los .ne.odos de dibujo, como drawl.age (, v drawString ( . y el objeu,
' 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
Image para contener los puntos a ser dibujados.
definicin de clase:
usted las pueda pasar al mtodo paint (). Declare las siguientes variables de instancia en su
de pantalla y el contexto grfico necesitan ser almacenados en variables de instancia para que
Graphics offsereen;
Image offscreenlmage;
Figura 10.5
/ ap>lei
&
puede entonces enviar el mtodo getGraphics () para obtener un nuevo contexto Grapracs
size().height);
que tan grandes sern.) El m,odo createlmage(, le d:. una instancia de I.age, eon la que
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
Doble bfer
**
plo, para dibujar una imagen llamada bug en la posicin 10,10, use esta lnea:
offscreen.drawlmagefbug, ib, ib, this);
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
la P:'M"
screen.drawlmagefoffscreenlmage, 0, 0, this);
limpie la pantalla entre cuadros:
paint(g);
m c, lklWc
Por supuesto, las ms de las veces deber sobreponer el mtodo update() para que no se
lili
Da 10
259 i
,
,
bfer"fuera de pantalla.
dirrme"'
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
Graphics offsereen;
offscreenlmg;
::;;rr
offsereen.setColor(Color.black)
// dibujar fondo
El applet Checkers
offsereen.setColor(Color.red)-
// dibujar ficha
SCreen-drawIma9e(offscreenlms'0 ;
g0)
tnis).
del applet.
Pantana, ,,ena ^
csn
**
offsereen.dispose();
Da 10
I
1:
iraport java.awi. ,
2:
3: A:
53:
offscreen.fili0val(p
public void destroy() {
}
offscreen.setColor(Color.red)
// dibujar ficha
?r?rTfiUfiect(1B0
this);
offscreen.fiiiRect(0)0,ie0)1e0) offscreen.setColorfColor.white
m
m
54:
55: 56:
5:r
6:
7:
57: 58:
59:
offscreen.dispose(i;
8:
9:
^:eS;i;reateImage(
offscreen = offscreenlmg.ge
;th,
siZe(>
Figura 10.6
El applei Checkera.
19:
20:
21: 22:
23:
24:
25:
26:
27:
28:
Sr;Vhi.r.d - Thread.currentThre.dO;
while (runner == thisThread) {
xPos += xMove;
33:
34:
repaint();
try
35:
} caten (InterruptedException e) { }
}
Thread.sleep(100);
36: 37:
38:
39:
40:
41:
42:
43:
44: 45: , 46:
Da 10
Si ios mtodos
,.,...,. ,, espacio de audio alma, un objeto URL, carga y rep.oducc ,-,
objeto Audiociip.
un
ciado, durante su
cambia a o^r
Escriba
us;lo
o, un programa d.beri r
AudioClip bgSound;
AudioClip beep; Thread runner;
AudioCli . clip -
; 1
new
AUdioClipCaudio/ariba.waV);
Da 10
I 264
Listado
27:
28:
dad. Mediante imgenes y contextos de grficos, usted puede crear un bfer fuera de pantalla
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
29:
30:
31:
32: 33:
34:
35:
36: 37:
ejecutarse el applet. Tambin aprendi a localizar, cargar y reproducir sonidos a travs de los
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
38:
39:
40:
Preguntas y respuestas
P En el programa Neko, usted pone el proceso de car-a de la maKen denlro del
liabra una diferencia de pausas, l'or qu no en ese caso poner la .rjii'i de imesas imgenes, y puesto que init() no es subproceso principal del applel, ah
if (beep != n"11)
beep. playO!
mtodo nit(). Me parece que podra tomarle i Java mucho tiempo cargar todas
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
genes al ejecutarse el applet.
que no toma mucho tiempo de procesamiento durante la inicializacin. Los dalos de la 'majen que apunta a getlmagef) no estn realmente cargados hasta que se necesita
"
^ ^ ^ ^ 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.
r.p.int(,. runo y upd.t.(). y <*" ^^ s appleut (loca.,zarU, cargarlas y aria* ccm. Tambin aprendi cmo usar ^^j ^marlM).
a ,,-avcs del mtodo drawimage() para dcspleg
^.^^
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
interfaces de usuario
Construccin de
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
Con la popularidad de los sistemas operativos Macimosh y Windows, la mayora de los actuales usuarios de computadora espera que sus programas desarrollen una
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
Por fortuna, Java ha simplificado el proceso con el AWT (Kit de Herramientas de Manejo Abstracto de Ventanas), un conjunto de clases para la creacin y uso de inte-
usuano para un applet. Utilizar las tcnicas de Java 1.0.2, debido a que permanece
Hoy usted tendr que usar el conjunto de herramientas para crear una interfaz de
Da 10 '
n
t:
'
'f1eSlC d'-^ elesde e .si.io Web de es.e er archivo ch . jpg PrJ1 uier que ya est en su sistema
h
Figura 10.3
f/
Fillmore.
^ ^^ UmJos ^
1:
import java.awt.Graphics;
import java.awt.lmage;
2:
3:
4:
5: 6: 7:
8: 9:
10: 11:
12: 13:
14:
con new para crear un objeto aqu, ya que recibe un ohje.o Image desde el mtodo
La lnea 5 del applet asocia la variable *hig con la clase I.age. No ,iene que usar la ins.ruc-
15: 16:
17:
escaLde
nan susTl'^4 "^ 96tWdth( J y 9etHei9ht' > d< '<>dos de |a clase Inage y a.muc,-
Cm T**" "^ ^ *
l pdeme R.lmo. En la lnea 20. es.a variable se incremen.a pan, que |0 feo
21:
22:
23
Da 11
algo
El AWT
. de. usuano
y re
a genera, y funcionad en todos ,os s,s-
usuano
ma5
TL
.- -,,.
Un ob c .-o cM mu ,malu/i pcro jcll.
import
java.awt.-;
i!
'r.
2
c
U
U
2
o "3
n
3
"O
Ul
ir 5 o
^z
J
c
^2 M -^
O "2
"3
o
r3
-^
5 o <->
,N
T3
0
cj"
r:
Sb
o
>c aj
o
o
.2 "2 2-
" o c C 2
..
O
c
g.
.^
O
o
8 -F
<J
o-
L
<u
T3 c3 .5
U
a T3 .
X _
-^
2
Q.
41
81
8
S 3"
sa
I
i "8
S "
i.
II
"8
a 3
?3
ai
"i:
cj
i;
cu
u o
x) 3
? .^
2, c
'2
=
o
a 2
-*
'-
c =
o. .h=
a
o
3
a)
O T3
s
o
XJ
s. e
S5
i"
o
o
c
."2
o
O"
u
O u
Je
o
2" *-
o o
3
'1 VI
sZ
^i
-J
! 5 ;
S
,2
3 a.
^ I-I 3
? s :e
s If I
.c
ai
"O
S
c .9
QJ
<2
C
3
'-*
rtj
'C
."
la
"u JZ py. UJ 3
3 "O
(O
C
*"
Ql
c " o
O *^
' c ^
.2 O O -S
5 x
c '2
Vi
QJ
"
S "> 2
o "o j K
ui
&>-
<
+
3
c
Q
Q. at)
4 6
~O
Q
E 8 =
_j
^
o
x.
,/>
gj
JO
W
O
10 H 3 Ol
!_
'i 111
O
o
V)
^O
+^
CT "
a -g s S C o " ^ g -2. a r
Q.
t-
-H H
O
i-s S"
Q
o
XI S
S o "2 o.
m
i-
ni
=
o
ra
8
J,
3
o I
II
c X)
ai
C "O
S c -o
O
QJ
5J
aj
12
r* rj "l
o 1
-rl O T3
'-I "
o 0
<t)
"O
V L. L. H rt
3
O
>
o
rS
10
5
v o
O
o
"o. a. al lil
3
o. o.
Q.
a. ro
Cl
;ear T yOlT^ 'Uttn' USIddel PUdC COnfiuw S -"-' "). tr.ng) obtener la e.ique.a ,ex,o con el mtodo getLabeK
El lisiado 11.3 contiene el
15:
add(righty);
16:
17:
<APPLET>:
1:
Pn.ebe el funciona-niemo
<.ppl.t
2: 3:
4:
import java.awt.1
5: 6:
7:
.Hardllnerr se coloca en el
8:
9:
10:
11: 12:
Figura 11.2
El applet Labels.
SE3E
BUcdlnfl hcartl
321
1.3:
14:
15:
add(stop);
add(eat);
16: 17:
HTML:
1J ., a
"
olones.
^ do
l,"
3PP ' dC 50 PXd" dC "nch0 C" V" dc 30. " neo botones estarn
275|
Escriba
Figura 11.3
El tip/ilei VCR.
1:
2:
3:
4:
HTML,
import java.awt.*;
publie class Checkbox
Casillas de verificacin
Las casillas de
5:
6: 7:
Checkbox
Checkbox
8:
Checkbox Checkbox
aU. So- P
9:
10: 11:
12:
13: 14:
c2.setState(true);
Figura 11.4
</ /iV
15: 16:
17:
ro) ca.fi//<M
18:
La figura 11.5 muestra la salida de e.s.e nppiet, cuyo funcionamiento puede ser verificado con la
Figura 11.5
-lalx
HtM
El npplcl
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.
276
Da 11
Construccin de nterfaces de
12:
13:
add(pi);
14:
16:
17:
add(P5);
}
18:
Precaucin
Figura 11.6
Elapplet PickAPole.
ciona el objeo ri. :! c cual uene la et>que,a 0^ ^ ^ ^'tru. sin ulifincam^ como el .cr-
^^ ^ ^ ^ una casllhl dc
^ verificacin Se,ec^dl
Listas de seleccin
" ""
Checkt*
sus:
http://www.mcp.com/personal/
illl lili
Construccin de interfaces de
Figura 11.7
Ejemplo de unti lisi"
de .seleccin.
kte?
12
add(span);
sPan.addltem("Julio Iglesias');
''
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
Figura 11.8
El applet
twuiiii'i'j IB
=200 width=i50>
SelectASpaniard.
gender.addltem("Female") ;
Trecaucin
,,,.
lNl.Il,H.li,.i,,ii
Ia - - Posicin
;-r
Campos de texto
dase TextField
Choice span = new ChoiceO; publie void init() { . ... span.addItem("Pedro Almodovar ),
span.addltemC'Antonio Banderas
span.addItem("Charo");
el texto que no
U" CmponenIe
. a panir de la
6: 7: 8: 9:
),
construc.ores ,guiemcs:
10:
span.addltemCXavier Cugaf');
Da 11
^
Escriba
para app,ets
1:
2:
3:
4:
m
m
5:
6: 7: 8:
9:
La ins,rucc,n gueme crea un campo de ,cxto vaco con un espacio sulle,en,e para 30 caracteres:
m
: ");
IB:
11:
12:
13:
14: 15: 16:
m
#
Se hubiera po lido miliar \, insirucein gueme si usted hubiera proporcionado el texto ini
cial "Puddin N. Tae" en el campo de icxu ame:
17:
18':
19:
20: y
add(password);
password.setEchoCharacter( )
add(passwordLabel);
add(address);
add(addressLabel);
X e >:; .ase TextFiel,. (En verdones subsecuentes de, lenguaje se debe usar
cualquier liicr: \ que aparezca entre
H, ejemplo s,g nente crea un
ochar, C,a,,,. Si se usa una Leal para especificar el carac,, * Lcada por chillas sencilla, como en * Java in.erprea como un objeto Str.ng
ll dbl com.llas dobles.
comp;
diseo
Figura 11.9
&<'PpleiOutOfSite.
campo,
lexio indicado.
Construccin de nterfaces de
determina si el campo puede o no ser editado. Un e, campo sea editado y true ,o permite (que es ,o prede-
283 i
! *
reas de texto
lrBi
En la figura] 1.10 se muestra la salida del appiet cargado con el appletviewer.
Figura 11. i o El appiet Virginia.
el componente.
. TextAreaU.t, int) crea un rea de x,o vaca con .a camidadI indicada de hncas
. Terrea (Strina) eren un rea de texto que connene la cadena ,nd,cad, de ancho y
alto no especificados. , i,
1:
import
java.awt.
2: 3:
4:
5:
6:
7: 8: 9: 16: 11:
me the truth,\n"
Listas desplazables
12: 13:
14: 15:
16: 17:
18:
Da 11
I 284
tjque[a
i siguiente:
Figura 11.11
indicada de elementos
Horario seleccionados.
add(String).)
Ele,emplo silente crea una Ustay.ea.de dos elementos:
remezo para loH, " 8el'"(i#It) tnMJiin ^().C-temS() ,amb,n tiene e, m,s remplazo para los piogramas Java 2: getltemCount
m,smo
.addl-..<euild.nst.rn ,-,
^
zable con siete . lementos.
Listad. >J_2JL
1: import jsva.awt.*;
2: 3:
4:
T
im.addItem("Hamlef);
m.addItem("Claudius );
5: 6:
7:
^ b- * despla.n.ento puede
c void init() {
8:
9:
10: 11:
,m.addItem("Gertrude"
,m.addItem("Polonius");
,m.addItem("Horatio-);
K*Jo comn las harn.s de despla.a.nic,,,,, w m,m pccinculo los vata, mnunos y
,m.addItem("Laertes");
im.addItem("Ophelia");
dd(hm);
12 13
Scrollbardflty crea una barra de desplazamiento con valores mximo y mnimo de 0 y la orientacin indicada. Se utilizaron !as variables' de clase para establecer la onentac.n con el argumento nico del mtodo: Scrollbar.HORIZONTAL o
Scrollbar.VERTICAL.
Al
v'.
El appleiSlider.
Lienzos
" USan Planamente como un espacio en una interfaz
. E1 v:1lor mnimo de la barra de despcenlo.
de diseo.
ventana
f2:
" " "" 'nVCr in"">iMH ..., si se vn.-csion:, h,
Listado n.n. El texto completo de crosshair.
GridLayout gl = new GridLayout(1,1)
1: import java.awt.';
'
i
2:
1: import java.awt.*:
6:
7:
8:
9:
5:
4-
10:
11:
9:
11:
12: 13: 14:
8:
7:
setLayout(gl);
15: 16:
17:
18:
19:
barras de dcsplazam.enlo:
ac.ua. . U baua d,
desplaZamien,o
23:
24:
para app,ets
<3pplet code-crosshair.class"
</applet>
width=10C>
Resumen
El AWT
Figura 11.13
El applet Crosshair.
contenedor.
m
m
un,
- -* de estos
.Y, Hnea 4 crea un objeto Gri-L.yout que ser, crecido co.no c. adulador de
Preguntas y respuestas
p^
.0.2,
im >d'
te navegadores han
libro-Microso/i
=,
Semana 2
Da
12
componentes en una
CQn
292
Da 12
_22f2fffldelos.componentes en
void lnit() setLayout(lm); {
#
una interfaz de usuario
2#
Como aprendi ayer, una interfaz grfica de usuario diseada con el ANVT es algo muy flu-
do Redfmensionar una ventana puede causar estragos en su interfaz, a, moverse los compo-
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.:.,ainiiMili' y similares.
los
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, herrapropias clases de manejo de ventanas.
n.icn.as de desarrollo de Java penniten un control similar sohre un;, inicrla* a ,,-s de sus
::
slSu
E1 ;ltlmm,M,ndor de diseo predetermin es .a clase FlowLayout. I:s,a Case ^^ los componentes fluvan de izquierda a derecha en el orden en que se agregan al contenedor.
Tfmtpd
3:
4: 5:
6: 7:
8:
Butto
(>c-9la:
-S
.
'
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();.
9:
10:
11: 12:
13: 14:
= MW Butt0"("Evidence-
f = new ButtonCFBiti
9
setLayout(lm)
15:
add(b);
Da 12
i-
add(c);
add(d);
18:
19: 28: 21:
add(e);
add(f);
"
ut(10,3);
do ;,,
se utiliz la
<applet cod.-Alph.b.t.cl.
</applet>
vertical de 8 pixeles:
espacio
Figura 12.1
En :w,tl MP,t. el
dis*
aicionales al consiructor FXowLayout (). cl , ,, -nt inti loma los iresargumemossiguiemes.cn orden:
El constructor FlowLayout(nf, ^nL, i^,
BUttcncaroI=newButto
(Maro
Button 9reg = new ButtonC'Greg-,; Btton jan = new Button("Jan", : Button alice = new Button(-Ali.-|.
BUttoncindy
Utton
newBuno
er);
add(jan);
add(cindy);
add(alice); add(peter);
Listado
12.2. continuacin
los
La figura 12 2 muestra este applet en una pgina con
</applet>
component)
Figura 12.2
Nuc\ e bolones ornan i-
-.ados e un diseo de
udreiilii de .5 x J.
tj^M
addC'North", quitButton);
i r.o.in n > es aue. se han expandido para
2:
import java.awt.*-
3:
4:
El administrador BorderLayout
5:
6:
7:-
8:
9:
10:
11:
Figura 12.3
Oii<iiii:.iekin i e los componentes 1. ::j<> el
diseo de bon es.
'-.i'i.S-'Xi:^''-*!'-'/''[: -';':':
12: 13:
14: 15:
,^t
m
'X~ia?W i^vt* i'-'?'.
16:
17:
18:
19:
add("Center
center);
*'i
'*
h.iht-12. width-18.>
pane.add(dialogue);
e|
,.
' . E1 pane, se Lena con componentes antes de ser coloco en un con.cncdor mas grande
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
add Strinn
#
interte Ce sunrio
13:
14;
15i
16:
runner.start();
17:
puons
18:
19:
20:
21:
22:
23: 24:
25:
26:
27:
28: 29:
30:
p
i j "
31:
32:
33:
setLayout(card); .'
-auei[
Divorce.")-
34:
do ce:
35:
36:
37:
38:
39:
40:
current++;
card.show(this, "Card
current = 0;
i-urrentj, current)-
if (current > 5)
repaint();
try {
41:
42:
43:
,-,
iri por
44:
45: 46:
47: }
} catch (InterruptedException e) {
Thread.sleep(5000);
i iport
java.awt.*;
2:
. 3:
4:
5:
6: 7: 8:
9:
10: 12:
Une, 7 -Se crea el arrezo lab para que contenga las seis etique.as
Din 12
L dd c,o *
ios
,.c Se coto.. I
p d .PPle, <** como c,r.
"ne"
setLayoutfgridbag?;
variable current.
Gri^agConstraints() ;
constraints.gridwidth'= t constraints.gridheight = -
constraints.gridx =0constraints.gridy = a-
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 ^ >
"
ponen,e puede
^Xc^s I
c UMN
* V (como en el botn OK en el
PrPiaS CUadnCUlaS
Da 12
Figura 12.5
Un diseo de cuadrcula de bolsa.
Figura 12.6
El diseo de cuadrcu
la de bolsa de la figu
ra 12.5, con una cuadrcula impuesta.
gbc. weighty = wy
^ ^ ffl ,,
' * pci"i
^ ^^ cn la cuad,alla y
,.
// etiqueta de nombre
%ba9"nStrantSabl
i :-
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
esquina superior izquierda.
^^Z^^
Este botn esta en 1. esquina superior izquierda, por .o que su grid* y gridy dos primeros
dos argumentos de buildConstraints ()) son 0 y 0, respectivamente.
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.
exactas aqu, o asegurar que todo es. alineado De , "" PreCUparSe de ias ^porciones
^^^?::::^:;: iodrsS ios * reslriccio" ''e cada compoCOmaceldas * rcnS'Olieii y Co ColuranM^ L ""correcto, Sliei y encimadas, 3S ^ luJr y ese tipo
.'.
;
Los dos ltimos argumenlos enteros son para weightx v weiflhty. que se mitan para
ambos valores a 100. Los pesos se vern en el paso tres.
ame '!'
I ''!'.>'
V .-."
J
OK
Password'
sumar 100.
ce.da. Los valores de we m* weQ*" 1 "^ ' "'^ ^ Sd0 cslab'^ P"r o,i
>
#
buildConstraints(constraints,
;:=::;;:
308
Da 12
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
de entender, considere a los pesos como porcentajes y asegrese que sumen
100 para que todo salga correctamente.
reS' (4 (4 P
Qu celdas tienen valores y cules tienen 0? Las celdas que ocupan varios renglones u mente cuestin de elegir la celda que tendr un valor, y entonces las otras celdas en ese
rengln o columna debern ser 8.
columnas deberan ser siempre 0 en la direccin en que se extienden. As, todo es simple
>): //nombre
1, 1, 1,
100- Hl
//contrasena
Figura 12.9
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
to en la li.'ta anterior.
de bolsa, segundo
paso.
Diseo de cuadrcula
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,
budCo,straintsiconstraints, 1, 0, 1, 1, 90.
0, 1,
1.
10,
//nombre
//texto nombre
; 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:
ena funcionar a ,a
puede remplazar los botones marcadores es- Puesto que ya ha configurado todo.
como antes y remplaza los botones con los
Figura 12.10
1,1,1,1,0-
fiasswonii:,!
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".
Da 12'
Organfcaclon de lo, componen... en una interfaz de usuario El valor predeterminado de anchor es GridBagConstraints
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
ir
f5
r
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
pfife
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.
La segn, necion que afecta .a aparicin de un componente en la celda es anchor. Esta restriccir , se aplica nicamente a los componentes que no se ajustan a oda la celda, > le
"'. mo vocalmente dentro de la ce.da o alguno de los ocho valores de d.recoo,
GridBa<Constraints.NORTH GridBagConstraints.SOUTH
co po e
co po e
e'rl
1: import java.awt.*;
GridBagConstramts.SOUTHWEST GridBagConstraints.WEST
GridBagConstraints.NORTHWEST
"
Da 12
312
gbc.gridx
gx;
gbc.gridy
ay;
= gw;
gbc.gridWidth
11:
12: 13:
gbc.gridheight = gh;
gbc.weightx = wx;
La sigui
gbc.weighty = wy;
14:
15: 16: 17:
XtCOd""
* width-24t>
<
setLayout(gridbag); de nombre
c^rrzrr'*dbi
Relleno de celdas
1^
applcl p;l,, la
21:
22:
23:
24:
25:
metianUad"CUla S ^^^ ** un mencin, V^TS ipadx e ipady. T Estas controlan el rellena * (el b1Sa' espacio adicional -,|redlorde
add(labeli);
>
26:
27: 28:
29:
30: 31: 32:
33:
34:
Edd(tfname);
Mrgenes
, ,, e, )!
35: 36:
37:
,lUUdConstraints(cons tr
,/ etiqueta de contrasea
38:
39:
4B:
41:
a^
add(label2);
pane, '^"P3ra
Z Jo
2T ;?e e ipadyentre en los dises de cuad*uia deLos bois^ * "'-" p- determ nar ,a cantead de espacio componentes en un panel. mrgenes, sin emba,
S^;
un nuevo administrador de
42: 43:
44:
Los mrgenes determinan el espacio entre las orillas de un panel y sus componentes. 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).
45: 46:
47:
48:
Dentro de los mtodos get Insets(, o insets (,. cree un nuevo objeto Insets, donde el
49:
50:
51 :
52:
botn OK
2, 2, i, e. 2e>;
53:
54:
de m '"T" ^y ^ ^ nfrmaci" agriar mrgenesL;, a un diseo de cuadrT adneula: 10 para e, superior el inferior, y 30 para elP izquierdo y dercho. figura
12.11 muestra el resultado.
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
55:
=
ir vi C vs
=
5 "> o o
S -).=
'-
a | 5 -2 5 "a ,-: S S 3
s s
T3 U
C "3
tj
x:
S| e
5 .a <v -a 3 o
8.
a
-1 J < c
e O
p.
>.
<"
u ?3
5
./:
O
r-
" -i a
4j
^(
u
i i i
tea
cr
11 1
V-J-.
S 1 -B
O
U
1 '
lis
o
1>
<r.
2
en
"S i 2
o fc
S ,2 "
o -o
2 J=
cu D a.
a 1 g.
3
3 'c
O
So
te -S
<-
o.
5
j= .= c
lili
c
(y
>
S 3
C
3 C
3
>
i 5 t- 1
= >u w 3 c
'i x
^
"2
-^
-j
o '- JD
id
=
p ?*-
fD
c " ~
cu
>
o
r
** ^ ^J "= -
5 -S ? ? =
-3 -^
:j
r3
;=
3
CU
a-
t-
D en cu
H 5" =: -o "
c
0.
0 -
Q.
Semana 2
Da
13
reipj,u a
!-
*C^
applcI
1318
Da 13
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
Java llama automticamente a mtodos como paint (), init () y start () cada vez que los
necesita, sin que usted intervenga.
,. ,ouseUp()
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
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.
320
Da 13
usuario en un applet
ejemplo: Spots
>
Figura 13.1
return
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
La clase Event no incluye la clusula implements Runnable en su defini cin. Como podr ver ms adelante conforme vaya construyendo este
i * actu
forma, cada vez que dibuje un pumo
no hace nada por s mismo; simplemente espera la entrada y entonces hace su trabajo. Si no est haciendo algo en forma constante, el applet no necesi
ta subprocesos.
A continuacin, agregue el mtodo init (), el cual hace una sola cosa: establecer el color de
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.
s"dol3' nos"
Escriba
*Port java.a^t.Color
elsf
import java.awt.Graphics
port java.awt.Event;
0
#
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
punto en bs arreglos de almacenaje, incrementa la variable currspots y llama a
repaint():
void adespot(int x,
int y)
= = x; y;
xspets[currspots] yspitslcurrspots]
cun spots++;
return true;
else {
addspot(x,y);
<
rep; int();
Da 13
325|
Listado
21: 22:
23:
24:
ic boolean iiouseDown(Event
evt
f #
,
25:
26: 27:
yspots[currspots]
currspots++;
y;
repaint();
31:
32:
33:
34:
{
10, 20, 20)5
35: 36:
37:
- 10, yspots[i]
38:
39:
ratn
Usted pi ede cargar este applet en una pgina con el siguiente HTML:
<applei code="Spots.class" height=250 width=250>
</appli t>
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.Point;
import java.awt.Event'
mport java.awt.Color-
import java.awt.Graphics;
PUb
anchor; ,,
currline . ,; }
currentpoint;
ter"ini6n
setBackground(Color.White);
public
bcolean m
2 , ^ " "" SOl ' """ " P'r:1 ^ Pln a* clase Point bJC'a ";";lr M
,os puntos incalcs de 1;ls lneas
funcionan cnio.
' El arreg.0 ends man.iene ,os punIOS finaies de ,ns mlsmas ]fneas
1grmVf.Mi,.AJKmtlSS3
i
Figura 13.2
*>
m?
Dibujo de lneas.
en el arreglo).
m""ener
de lneas (para
de 1* '" -r la si siguien.e
para
son
para
evt int *
I 328
Da 13
Respuesta a /a entran* ^ i
return true;
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
-" He *,, cl 111|O(|O.painto^T^ " "nim-c'ln *> 'a "'"- en proceso, dblcljl
# t
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:
'TiVV1
l lneS-
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.mo de lneas, antes de llamar al mtodo addline(), descrito a cont.nuac.on:
^^
else
Escriba
1:
return false;
2: 3:
4:
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]
5: 6: 7:
import java.awt.Point;
port java.awt.Event-
iava.awt.Color:
= anchorr
ends currline]
curr. ine++;
= new Point(x.y);
8:
9:
10:
11:
Da 13
331
Listado 13.2
12:
59:
// nmero de lineas
60:
61:
62:
:.
ends[i].y);
13:
14: 15:
setBackground(Color.white);
63: 64:
16:
# #
_
17:
16:
19:
65:
66: 67: 68:
}
if (currentpoint 1= nuil)
g.drawLine(anchor.x,anchor.y currentpoint.x,currentpoint.y,;
20:
21:
22:
23:
24: 25: 26:
27: 28:
29:
30:
31:
32: 33:
34:
35: 36:
37:
38:
39:
^^
#
40:
41: 42:
43:
44:
else
return false;
de enfoque. Es ms fci, eme'der f S escribir en ese cL^o con" cTn ^ que recba e, enfoque. Tol ^ i"" 0"
COn eVentos
C'
. Poden con-
starts[currline] = anchor;
currline++;
#
#
#
enfoque a un
quit.requestFocusf)
'"
Puede asignar el enfoque a una ventana de apple, lla.ando a, mtodo request.ocus () de,
55:
56:
57:
apple,
^^IlUSBTNDAR
Tecla inicio
;i fin
a la derecha
Tecla F]
Tecla F2
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
s menos complicado que los c,ue utiliz ames, ya que slo nene ,rcs
as, la ventana del arJet n u requestFoc^(); de no' teciado. Recuerde esta dife encTa "a21 i' '"^ ^ '3 6
Pfband applets
java.awt.Graphics;
java.awt.Event;
import
java.awt.Font;
import
java.awt.Color;
case Event.DOWN:
curry += 5-
currkey;
currx; curry;
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).
publie void init() {
case Event.filGHT:
currx += 5;
break;
default:
currkey = (char)key;
repaintf); return true;
la
'-' ll11""11 """""-1-1 , C|.|ril|a t)ci teclado sea recibida p*i ipplet lisia instruccin es necesaria paia asLfcui.n H"<-
.imiiiivininitn ictbc i i'ih ni:i instruccin en el nieiotio nii \) "- " >-
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
336
Dh-13
48:
2:
3:
4:
5:
6:
7:
int
curry;
13:
14:
15:
// predeterminado
16:
17:
18: 19:
setBackground(Color.white);
setFont(new Font("Helvtica",Font.B0LD,36));
requestFocusO;
20:
21:
22:
(key)
23:
24:
Event.DOWN:
curry += 5;
break;
25:
26:
27:
case
Event.UP:
curry
break;
-= 5;
28:
29:
case
Event.LEFT:
30: 31:
32:
eurrx
break; case
-= 5;
Event.RIGHT:
33:
34:
35: 36:
currx += 5;
break;
default:
currkey =
(char)key;
37:
38:
39:
48: 41: 42:
repaint();
return true;
43:
44:
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
*
}
cuerpo de handleEvent (,..Puesto que est^variab. . , * ""^ Cm''rObar e" el tcin switch funciona bastan w^p', ' S" CnS'an'eS enleras' u"a
-"'-case-Eyent.MOUSE DOWN:
,-. evt.x + ",- + evt.y); return true; '
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-
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
oo derecho asignan los eventos a .as teclas modificadoras usted puede uuhzar as tecla
cioncs funcionan en sistemas diferentes con d.stintos tipos de ratn. Como los ches ,^u,e,
pntlnCMouse
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.
.,;
': .
return true;
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
case Event.MOUSE_DRAG-
.
. .,:
"
.
J
Puede probar los siguientes eventos de teclado-
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
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
biar elcom amiento del manejo de un evento predeterminado, o crear y pasar sus prop.os
ratn:
(igua, que en e.
340
Da 13
Respuesta a la entrada
. Event .MOUSEJJP se genera al liberar el botn del ratn (igual que en el mtodo
. Even.M0USE_M0VE se genera al mover el raln (igual que en el mtodo
mouseMoveO).
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 ().
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,
no tif ne que devolverlo personalmente.
devuc Ive true; si pasa el evento a una superclase, ese mtodo devolver true o f alse; usted
n hace que pase un objeto extrl ln CT 7"' ^ repreien- le " (e" CMe Cd>- el parmetro arg) e, cua, puede ser 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.
i
IV
<0 I
a> o
0)
2
O c .
w
g
o
c
a
u c
^~
m
-O
I
0
t.
O
(0
IA
JJ
o -H o *H 10 O
3 cr r-H o> III
ID
O11
5
9 ch ?5
c ai a> <a
S*5
H
-a
a.
o '-o
c
C
C
3
c
C
V5 w
=
?i
1>
*O O
51 l
2
O
-^ 'ro a
O
>
o
"o
u
5
c
0
o
Q
i)
t_
+-
c
O
m
c 3
U
II I |J
-7.
3 o
"c
"d.
>
5 2 '= 4J
-o
u
C
3
5
E
>
-n ^
= 5
C
OJ c
<u
3 2 ..
O
5.
r3
i: 2. o-
";
V)
-3
13 c
2 2 ? o (
o. "o -o --
c *-
g 3 5 3
= "i '3
3 2 5
5 H
8 1 s
3
i II!
g u o
c ^ o
^ w a ^ 2
5 "
a)
c. 3
I-
O.
o ^
.5
ra
-=
-y.
3
= 5
t
< =
<u | -3
vi
^ H5
3 u- 5 5
2a-
Ji
y;
_Ju(nu-J
*-*
=>
6
O
*j
v-
####+# #####
Da 13
Para los evemos seleccionar l.sta y dese.eccionar lista, no es fcil obtener^mtodos^ que se
siguiente forma:
puedan sobreponer para su uso. Para esos eventos tiene que uul.zar handleEvent(,, de la
public boolean handleEvent(Event evt) {
if (evt.id == Event.LIST_SELECT)
handleSelect(Event);
ID de evento
SCROLL_ABS0LUTE
SCROLL_LINE OOWN
Lo que representa
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 ().
Eventos del rea de texto L,s <re-,s de ,cx.o tienen los mismos eventos que los campos de texto. l':,a atrapar los eventoVcle enfoque puede utilizar los mtodos gotFocus() y lostFocus():
public boolean gotFocus'Event evt, Object arg) {
}
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
o
- * ** c 0)
c 3 O >i ra H
r\ c
3)
-1 O. _j
3
T3 ce
01
r-t
a. ca
r-i
01 3
5
m > CO c H O c
-l-
U.
01
3
L~
c
;_
c o c
c
*
ca
3
O CO CQ
3
3
c o
o
+* +-*
*^
^-
3
01
C c
$
c o 01 c II
01
XJ
/-i
jO
II c c
T3
3
c c o
+^
c ii
ii
ti
o
t_
-i
3 O
Oi 3
co o
u
+-<
a> 3
cu
+j
+-
x:
CO
13
O) l_
3
o n
T>
ra
o CO
o
CO
Resumen
1:
import
java.awt.
2: 3:
4:
5: 6:
7: 8:
9:
1C:
reuTcB
! in
"*
^
11:
12:
13:
14:
Preguntas y respuestas
P T
15:
16: 17:
add(greenButton);
para
a
funcin-En 's "*
ejec"te un '"dtod>
21:
22:
23: 24:
25: 26:
Object arg) {
changeColor((Button)evt.target);
27:
28:
29: 30:
31:
32:
-; ;
^^ e ! T" ^ *"
33:
34:
b - areenButton) setBackground(Color.green);
35: 36
37
38
39
Semana 2
Da 14
con el AWT
de usuario avanzadas
* awt <ki *
Desarrollo de interfaces
apren-
. tanfa M
aun. , , ,,
Mens.
Da 14
35,
^
Tn :"ewFrame<"My Cool Window)
n..ddccnt.r-,
-
Corth, !!ne B? in.atdCNorth-
r:::;:s;r:,- * - - -
pendientes de Java.
- - -
in.setLayout(new BorderLayo
r^pT
n
#
g aJUSla eI lamao de !a ^ a 100 pixe-
B. U-- -
lamail0 "CXiJa" n b>en con una, podran ser muy graildes muy
Ei
Aerando J^^S^^Z
p
tarna.0, botones de
i
lenido de esa a dicacion.
win.pack();
win.add(cancel);
win.add(ok);
win.showf);
s de.
ios
tanas normales del sistema ) EH P' VCmanaS ^ue se ven co'" stema.) El av.so es para prevenirle de algn programador n^lin.enciona-
Da 14
con e(
3551
20:
21:
22:
23:
24: 25:
else
Window-),
O
y"
errores y seguridad".
(window.isShowing/))
window.hde();
return true;
26:
27:
is window. Nos
^ J^ ^ Jc
28: 29:
} else
}
30: 31:
return false;
Escriba
FI6URA 14.1
1:
2:
3: 4: 5: 6:
import java.awt.;
7: 8:
9:
10:
setLayout(new BorderLayout())
11:
12:
13:
Insets getlnsets() {
Labei-
Escriba
1:
14: 15:
16: 17:
import java.awt.*;
2: 3:
4:
18:
5:
Button open,
cise;
19:
6:
7: 8:
9:
11:
add(open);
height=200 width=200>
12: 13:
14:
window.resiie(150,i58);
15:
16:
17: 18:
19:
""'
Da 14
J^rrollode nterfaces de
Objetos de dilogo
-culado a. marco
modo ms convencional.
el cual puede ser moda, ('trU) (truej o'o^alse" o no (false).^ * llI"1J" llvWhk' "* " If"""
i venlana de) i
OlalogiFrnme, String
ho 1
Cuadros de dilogo
Figura 14.2
cin cspccJica. etctera.
cierren.)
E
cionar
1358
Da 14 359 i
TextDialog di;
s:
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
6:
BaaeFrae2 theFrame;
i 7: '8:
9:
siguientes del cdigo. An no querr mostrarlo porque slo debe aparecer cuando haga che
en el boln Set Text.
10:
11:
12:
13: 14:
(BaseFra.,e2)p,renf
15:
16:
17:
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).
Button b = new Button("Set Text");
add("South", b);
16:
19:
20:
21:
Insets insets() {
22:
23:
24:
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) {
if (evt.target instanceof Button)
dl.show();
return true;
25: 26:
27:
28:
29: 30: 31:
(label == hide();
"0K")
else
return false;
32:
Al hacer clic en cualquier botn del marco, este mtodo despliega el objeto di del
TextDialog. En este ejemplo, hay un solo botn: Set Text.
33:
34:
} else
}
return true;
return false;
35:
ste es el f.nul del comprtamelo que debe agregar a la ventana de aparicin sbiia para crear
un dilogo Slo se necesitan dos cambios en el PopUpWindowDislog. Primero, se debe cambiar el nombre de la clase de PopUpWindow a PopUpWindowDialog. Luego se debe hacer referencia a
la clase BaseFrame2 en vez de a la BaseFramel, tal como se Musir en la mstruccon siguiente:
window = new BaseFrame2( "A Pop Up WindoW);
ame2. Ob
#
*
iraport
java.awt.*;
cons^
?me- *ms *
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. hacen complicado al applet. Aunque, en este punto, debe estar tranquilo de cmo cada parte
sus parles.
Tantas clases para un simple applet! Las diversas ventanas y las clases de eventos asociados
de un applet liene sus propios componentes y acciones, y por la forma en que se ajustan todas
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
marco para el dilogo.
'os applet, ,a mayora d.*^^^1"'"" * ***** h excePdones de 9"'*i aplicaciones independices S fC" USar
cuando trata de usar estas instancias F<
^
<ie archivo no abre
applet (normalmente, el navegador o la ventana misma del visor del applets) y usarlo como V
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
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
guardarlo. (La nica diferen
el
nrchiro
de tener a.xeso a una instancia de Frame. ste es el cdigo que puede poner dentro del
applet:
f-
while (!
anchorpoint = (
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.
En la primera lnea de este cdigo, usted crea una variable local llamada anchorpoint para
nmbe'd'el ^^ ^
"
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
que lo he.cdan de Component, tiene que convertir por cas. el valor de anchorpomt a
Componer t cada vez.
mtodo g -tParent) funcione, y ya que este mtodo est definido solamente en los objetos
Eventos de ventanas
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);
1362
Da 14
363 i
Tabla 14.1. Eventos de ventanas.
Cundo se presenta
WINDOW_EXPOSE
WINDOW_ICONIFY
WINDOW_DEIC0NIFY WINDOW_M0VED
disable 0 ;
habilitarlo de nuevo):
Mens
Slo nos queda hablar de un elemento de la interfaz de usuario en el AWT: los mens
Elementos de men
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.
Una barra de mens es un grupo de mens que aparecen a lo ancho de la pantalla en su parte superior. Como forman parte integral de la ventana, usted
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 = new Menu("File");
mbar.add(myMenu);
La clase CheckboxMe
lar:
1364
Da 14
rrss
P
Rnalmen.c. P
myMenu.add(coords);
llc pin agregar un separador al men (una lnea que se usa para separar grupos de
g S
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.
Eventos de menu men venio: uc . hecho de seleccionar un elemento de men con el ratn, o con un mtodc, abrev,a o desde
Adcnvs de lo. evento* de accin. CheckboxMenuItems genera even.os de sclccci.n y dese-
r mforme v. procesando eventos enerados por elementos de men y ciclemos de casilla de S Ja" no o de que como hec^xMenuIte, es una subclase de .enulte. no nece;m^ elemento de men como un caso especa.. Puede manejar es.a accon dd.
mismo modo en que maneja otros mtodos de acc.n.
Creacin de aplicaciones
AWT independientes
L-acin de Java 1.0.2.
u.i,ar de la misma
1366
Da 14
win.destroyO; System.exit(0);
1 diseo de/applet
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
applet.
z^
Por su complejidad, y porque puede crear confusiones, trabaje en este ejemplo paso a paso.
Da 14
con el AWT
369 I
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
y dos subpaneles para los campos de texto.
**
El paso 2 es la creacin de los componentes, primero el lienzo. Tiene una variable de instan
cia para contenerlo. Aqu crea el lien/.o e inicial!/,, el fondo en negro:
swatch = new Canvas();
<
U"
swatch.setBackground(Color.black);
Tambin necesita crear aqu dos instancias de los paneles ColorControls inexis.cn.es hasta
^ZZo. Pues* qul todava no ha creado ,. Case, usted no sabe cmo se .ra el eonslrUctor de dicha clase. En ese caso, coloque algunos constructores vacos, desPu,> podra
llenar los detalles.
T.tFi.
2
C'S' "^ "" '"l0<i concior. Dentro del
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
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.
ColorControls(ColorTest parent
entos de)
1370
Da 14
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));
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
apropiadas:
'"-alizar
^^^ontrois para
tfieldi
= new TextField("0");
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,
add(tfieldi);
Manejo de eventos
add(new Label(12,
add(tfield2);
add(new Label(13,
add(tfield3);
Usted ha terminado el constructor de la clase ColorControls del subpanel. Ya termin el diseo? Todava no. Tambin puede aadir mrgenes alrededor del subpanel, solameme en la pane superior e inferior, para mejorar un poco el diseo. Agregue aqu los mrgenes, lal como
lo hizo en laclase ColorTest utilizando el mtodo getlnsets():
publie Insets getlnsets() {
-*
10,
0i 0);
return true;
.update(this)-
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
Mibpanel. de modo que se igualen con los consmiciores para ColorControls.
En el mtodo action (i u
generada realmente por ,n
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
que refleje los nuevos valores. Debido a que e la actualizacin, precisamen.e por eso ne eslta enT *"
disPonib)es
de ,cxro.
d aPP'et'
"acer ,oda
"ue Pueda
Da 14
con el AWT
Ahora viene la parte difcil: hacer la actualizacin basndose *n los nuevos valores de
update () en la clase ColorTest. Este mtodo toma un solo argumento: la instancia
evento en el objeto Colorcontrols.)
cualquier campo de texto que haya cambiado. Para este paso, necesita definir el mtodo
Colorcontrols que contiene el valor que cambi. (El armenio !o toma de los mtodos de
,
y actualizar el lado HSB del nwi p" "'""" ^^^()'Necesila crear un nuevo objeto Color
puede crear un nuevo obipm mi/,~ i Con Jos tres vaJores RGB usted
Mota
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
las variables de instancia RGBcontrols y HSBcontrols:
void update(Colorcontrols controlPanel) {
probando si el argumento que recibi del panel es el mismo de los subpaneles que guardo en
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...
..horrar* alan de" escritura de cdigos, puede crear algunas variables lcale, para contener
rt
-- -
,|,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());
P.doS y re3!enJo | ,2 ,
HSB|e] = 368; HSBJ1] '=108; HSB[2) = 108;
los , .pro-
n lilil = lnteger.parseInt(controlPanel.tfield2.getText<));
Da 14
^
El cdigo fuente completo
= -aginarse ,o que esta pa
con el
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
"otante de modo que tiene que convenirlos a ints antes de convertidos en cadenas y
guardarlos:
HSBcontrols.tfieldi.setText(StrinQ.ValueOf((int)HSBW));
HSBcontrols.tfield2.setText<Strin0.value0f
HSBcontrols.tfield3.setText(String.value0f((int)HSB[2])),
int HSB 1
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
dado el cambio.
if...else c,ue define este mtodo y determina qu es lo que se debe ae.ualuar. una ve
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
,ex.o a f loats v dividirlos entre el factor de conversin apropiado, bl resuliaJo de
la variable local c de modo que la pueda usar de nuevo us .cclame,
c = color.getHSBColor((float)valuei / 360,
setUyout<new GrldLayoutM
' '
'
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(),
definidos en la clase Color, harn justamente eso:
RGBcontrols.tf ieldi .setText (String.valueOf (c.getRedO ));
}
),
BGBcontrols.tfield2.setText(String.valueOf c.oetGreen
RGBcontrols.tfield3.setText(String.valueOf(c.getBlue())),
Por ltimo, y
sv/atch. repaint();
HSB[0J .= 36e.
HSB[1] .= 10e.
Ya est! Lo logr. Ahora, compile las clases ColorTest y ColorControls. cree un arehivo
HTML para cargar el applel ColorTest, y verifquelo.
HSB[2]
32:
33:
35: } .
}.'
return true;
41:
42:
43:
44:
Despus de compilar ambos archivos de clase, podr cargar el upplc ipplei ColorTest en
= 100>
una pgi-
45:
46:
47:
swatch.setBackground(c); swatch.repaint();
48
49:
Resumen
1:
import java.awt.*;
2:
3:
4:
TlT
,,,.,.
5: 6:
7:
8:
9:
10:
11 :
12:
y(llridL.yoot(1,,
Preguntas y respuestas
13:
14:
15:
16:
17:
OTrn-m
R Dentro del AWT, tanto los app.ets como las aplicaciones siguen los mismos proced-
18:
19:
20: 21 : 22: 23:
24:
add(new Label(13,
add(tfield3);
Label.
25:
26:
27 28
29 30
Obj.cit ,rB) {
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
~
lo nTr h Cmre 'OS aPP'CtS y l3S aPlicacio". ^1 99 99 por por ciento ciento de de lo que ha aprend.do sobre los apple.s se puede utilizar con bs aplicaciones. De hecho,
id Eran cantidad de similitudes enrre ln<: nnr,intr >, i^ ..-.-:. . nr. . ,
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 '
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
Afine sus
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().
conocimientos de Java
nterfaces y otras carcter! 16 Circunstancias excepcionalesmanejo de errores y seguridad
17
18 Comunicacin a travs de
Internet
19
20 Diseo de una interfaz de
usuario con Swing
caractersticas
cambiar sufsignificado.
Acceso predeterminado
para usarlos.
i 384
Da 15
caractersticas
385
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
es fiante eI modincador
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
Acceso pblico
Astriccin tambin afecta a la herencia: ninguna variable o mtodo pnvado son heredados por
Tas subclases.
Las variables privadas son extremadamente tiles en dos circunstancias: . Cuando las otras clases no tienen razn para utilizar esa variable.
de clasc black de la
. cando ,,ra clase pudiera causar estragos cambiando la variable en fon*. inaprop,:ul.
cione, La variable TOUCHDOW!t ^ "'v ""m sucestvameme. Estas variables neci11 s ' T clases en instrucciones a.es conTo " '
if (position < 0) {
^^rrlic-n
SCOre = Score + Football.TOUCHDOWN;
escenano.
System.out.println("Touchdowni")-
siguiente:
: ;r**
-todos los mtodos
Acceso protegido
y una variabie a ,
son
Da 15
387|
Nota
La forma en que el acceso protegido difiere de los accesos predeterminados es la siguiente; las variables protegidas estn disponibles para las subclases,
aun cuando no estn en el mismo paquete.
3 ava awt. Panel pero en realidad est en su propio paquete, j ava. applet.
De la misma clase
. en el mismo paquete
De cualquier clase
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,
de usar un mtodo o variable de ayuda evitando, al mismo tiempo, su utilizacin par una
clase no relacionada.
podra tener la misma tarca por hacer. El acceso protegido le da a la subclase una oportunidad
sr
si
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,
tacer
ic en las subclases;
de aceeso
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
r de acceso
postales.
valores del 10000 al 99999 ero
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).
388
Da 15
Para evitar que una clase extema establezca la variable zipCode en forma incorrecta, puede
declararla prvate con una instruccin como sta:
prvate int zipCode;
Sin embargo, qu pasara si otras clases requirieran la posibilidad de establecer la variable zipCode para la clase con el Tin de hacerla til? En esa circunstancia, le puede dar acceso a
otras clases a una variable privada, a travs de un mtodo de acceso dentro de la misma clase
que contiene a zipCode. i
Los mtodos de acceso toman este nombre porque proporcionan el acceso a algo que, de otra
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.
forma, estara lucra de los lmites. A travs de un mtodo para proporcionar el a.-ceso a una
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 medio para que la clase sea ms inteligible.
1:
2:
3:
4:
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.
.
5:
6:
7:
8:
9:
10:
11: 12:
13: 14: 15: 16:
-Creacin de clases". El modificador static sirve para crear mtodos y variables de clase,
{
Countlnstances() {
^""""^"s.addlnstanceo;
17:
18:
publie
area(float r)
* r * r;
Da 15
Salida
Variables
se
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-
ia constante ^
U
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
Po stguiente:
establecer en cualquier valor aleatorio. Por lo tanto, en vez de crear un mtodo de acceso, lo
mema el valor de numlnstances en 1.
que crea es un mtodo privado especial llamado addlnstance) en las l.neas 8-I0 que mc.tLas lneas P-14 crean el mtodo constructor para esta clase. Recuerde, los constructores
llamar a addlnstance() e incrementar la vanable.
se llaman cada vez que se crea un nuevo objeto, lo cual hace que ste sea el lugar log.co para
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).
y facilidad de desarrollo.
7 ^ """ etUxmttar ei
o,
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
Una clase final no puede tener subclases.
muchas
pa a
ms
e'imina la "Osibilidad
1392
Da 15
Nota
una clase
final no se pueden derivar subclases. Al igual que con los mtodo, finales, este
flexibilidad.
ta. Los mtodos abstrac.os se decLn on"l ^dT T'3" '" SUbdaSeS de la clase ^c
Las c,ases abstraes tambin pueden conten Iodos TT^ * ^ "" "llOdS"' S ^ S" '"^ c
Paquetes
empezar desde el principio.
finales amnicamente, de modo Todos los mtodos en una clase final se convierten en quc no tiene que utilizar un modificador en sus declaraciones.
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.
ser
v>>*
y amp|aI
Lo, p,,ntle, , la
"=
Estas cta.es se Laman Cases abstractas, y se crean utilizando el mod.ficador a.stract. Este
es un ejemplo:
-O
a _
U
J-s
o -.2
i
c
.-
o
3 =
3
I
o.
f a
1/1
._ .c
i
O
II II
o c
-
fo'
c:
<u
E
'>
c
^3
"H
3
flj
oc
SM-i
5
O o
o
u 3
3
c
OJ
3 g.
=3
a.
c
o>
SJ I
O
C
< u
S
en
" 5
g * u
1/1
.2 _
>
Ti
porJ
"S
.E
o.fe
3:
<U -o
a.
o
1 2
-o " a.
i
s
a.
=
Ti
**
o-o
S. t
2u
o *~*
I I.
S
i iI
i 11..
u
i | o .
O
-S
a s
5 o E-SI;
S
f
O a
c
'.a. .2
a.
cr
s ^
o
2
o a. E
If
8.1
5
E
a. 5
3-^2 8
o
ai
J
3
u
2 "^
5P '
n
w
so
c.
a "2
u
<u
"
K cu
5.'
3
j
0
l!
-y.
0
Cu
CJ
-c
0
zr
O,
8. u
= -o
1
0.
1=1
3. g s E." .
cu
2
-^
m
1 3 E - '
(O
i
-
^ a.
I-5CL T3
S.
U H
3
o.
ai
3.'
. = -.o
11 i -s -i 2 3 3.|-3 .5 =-S
'5.
_
g?
II
C
OJ (0
c
" t
I
u "3
II
& 3 2
E.
3 cr ..
CL. _O
8.
2 o
.2
0
Q.
0/
c
m
E
t
o.
<u
"a
a z
o
D
p -
"o ^ 3
S
0
3 s s-
i
2
Q c
i
c
5
c 3
.
(0
.5
g
~q
T3
|
01
ni
<3 o
a
L.
+5 S
S 3 S
re
flj
3 " -S
11
1 3-
E "-.
+O-
cr
o-
a-
a
5 'B .2
o
o"
6.
r
o
c
o
a
-o
3 c S
'i "
ia.a 2 I
g
ti cd
1
P
1 5
^S t.
5
>
-H
3
=
g
O
J
55
Z. * S
=
C 3 ^1
ra
0)
.2, S. .s "
s
^
/i
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.
acerca de cussMTHydnde
Nota
Si sus antecedentes de programacin son de C o C++, al llegar a Java espe rara que la instruccin import funcione orne include. que ds por resulta do un programa muy largo al incluir cdigo fuente de otro archivo. Este no
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
import
jonathanclasses.*;
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:
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
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.
Por convencin, los nombres de los paque.es tienden a comenzar con una letra minscula, para
* -* - ,:;
El paso dos en la creacin de paquetes es crear una estructura de carpeta en el disco duro
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
paque(e.
Cmo agregar una clase al paquete El ltimo paso para colocar su clase dentro de los paquetes, es agregar una instruccin al archivo de la clase por encima de cualquier instruccin import que se haya m.I.zado. La
package com.prefect.canasta;
instruccin package se usa junto con el nombre del paquete, como aparece a commuac.on:
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.
Escriba
collections;
"_^~ '
*;
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.
9=
//
...
nadlo cual significa que la Case est disponible para las dems Cases en el m.smo paque,.
Dte 15
401, #
Listado 15.2. continuacin
10:
11 :,
12: 13:
14:
class
Node {
//no pblico
contents.;.
prvate
Object
prvate Node
Node(Object o,
contents next = .=
next;
Node
o; n;
15: 16:
17:
n)
"18:
19: 20:
rrr- - -
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
dentro del archivo.
immmm
mucho
s que
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
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.
La creacin de un buen paquete consiste en definir un grupo pequeo y limpio de clases y m,odos pblicos para que los usen otras clases, e implementos me .ante ^er -nndad de clases ocultas de apoyo. Ms adelante aprender otro uso para las clase> ocultas.
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.clases y mtodos abstractos simples.
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.
variable, como resultado de una conversin, etc.). tambin puede ,,.l.r una ,n.c.1i7..
!a Z as clases, tambin se compilan en archivos . class usando el confiador de jaxa. en muchos casos, donde quiera que pueda utilizar una clase (con un tipo de datos para una
Donde quiera que este libro tenga un nombre de clase en cualquiera de sus ejemplos o
ellas).
espera que haga Fruit. Usted quiere aue ..n,"* '" Fruitlik*. que representa lo que se sea un objeto esfrico que se pueda lanzar """""'y" una fruta- Po tambin quiere que (por ahora, no se preocupe por las defn.v' "*' ' CS '3 frma de MPresar 'do eso
* Pr
interface
void void
^om t o . lo puede substituir un nombre de interfa, Con frecuencia, los programadores de f la len Case" cuando en realidad quieren decir "clase o imerfaz". La. ^^^
mentan y amplan el poder de'las clases, y las dos se pueden raiar cas, ,gua . Una de I. s pocas diferencias entre ellas es que no se puede crear una instanca de .mertaz: ne* solo
puede crear una instancia de una clase.
decayf); squish();
Fruitlike {
Hay dos cosas que puede hacer con las interfaces: usarlas en sus propias clases y dehmr sus
interface
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.
public class Neko extends java.applet.Applet
implements Runnable {
toss(); rotate();
Spherelike {
Como las interfaces no aponan nada ms que definiciones de m.odos ^ que implemento esos m.odos en sus propias Cases, ut.lando las m.smas fi mas
dos que hay en la in.erfaz. Observe que una vez incluida una m.erfaz t.cne que - u
// extiende Object
Uni ve, que su Case implementa una nterin las subclases de su clase heredar,, losnuevos
\" (y pueden sobreponerlos o sobrecrganos) como s. su superclase los hub.era do Si su clase hereda de una superc.ase que implementa una interfaz determmada
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.
.anOrange.squisno';
anOrange.rotate(};
anOrange.ciecay()
// i
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
i.
3;
i :
406
Da 15
I^^J^racesyotrasc^Kterstics
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
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
Growable con un mtodo declarado explcitamente publie y abstract (growItO) y uno
declarado implcitamente como tal (growItBiggerQ): publie interface Growable { voi.d growItBigger(); . >. *
mtodos y constantes. Las definiciones de mtodo dentro de la interfaz son mtodds publie
y .,ui.(). Tamban
t. De qu lipo w a
como
9er"'i
interface Fruitlike {
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
implcmentacin.
self)
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:
publie interface Growable {
'
}
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
olas interfaces en el mismo paquete.
de mtodo que defini su "superimerfa^7LL T" -.nd.. ta, como ,o hara en una definici^e c,^ ^ "
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.
c. o
de imerf"ces no
^TjrC
*n existir en
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
SenClla M PUCde
i 408
Da 15
Growable,
.
Fruitiike,
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 :
collections.
_
package public
2:
3:
4: prvate
5: 6:
7:
8:
new LinkedListEnuraerator(root);
9:
0:
11 :
12:
class
Node
{
Object contents;
13:
14:
private
prvate
Node
next;
15: 16:
17: 18: 19: 20:
deJ ob
21:
22:
rango de snuaciones.
23:
24: 25:
Oases internas
class LinkedListEnumerator implements Enumeration {
private Node currentNode;
26: 27:
28: 29:
LinkedListEnumerator(Node
currentNode = root;
root)
. Las
30:
31:
superior-
penenee
un
de
Da 15
r
411
A'p-irtir de Java 1 1, usted poda definir una clase dentro de otra clase, como s. fuera un
tar botones selcccionables que tienen un fondo predeterminado de color azul.
Listado 15.4. Texto completo de inner .java.
import java.awt.Button;
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
'
1: 2: 3:
4:
import
java.awt.Color;
5: 6: 7:
8:
9: 10:
11: 12:
13:
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. ponen sus cdigos a dis-
. 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
1412
Da 15
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. J
Semana 3
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.
de errores y la seguridad g
cualquier situacin JeiegZ^
un esfuer20 J
esos programas no cxis.cn.
excepcionales: manejo
Los prod prognmudores de cualquier lcm-u-.i de errores, programas que nunca se de,"
Los Los
Circunstancias
/^
^d ^^ ** ""*
M anonrates
n yr
se imagine.
^ "
l^\?\'
asad?
14
DUi 1G
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:
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.
Manejar condiciones de error, en la mayora de los lenguajes de programacin, requiere de mucho ms trabajo que manejar un programa que se ejecuta en forma apropiada. Pueden
Java if . . . else y switch. para manejar los errores que se pudieran presentar.
crear una estructura de instrucciones muy confusa, similar en funcionalidad a los blooues de 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
switch
!= 1)
// no se encontr el archivo
3: // error de
4:
disco
corrupto
II
//
archivo
otro
def;.ult:
error
}
// arcr-ivo cargado, contine con el programa
Da 16
I 416
^
Exception es
cui-txceptionyMalformedURLEx
Precaucin
^ordrdas j
excepciones, y esa, exceones se
(EOFException, FileNotFo
i
Tnrowab e ,icnc des subclases
de ^'la y salid.
imcrnos , d ambieme de la u,
mucho
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
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.
try
Proteger el cdigo que contiene el mtodo que podra lanzar una excepcin dentro de
un bloque try.
} caThread-SIeePd000)
Influjos de W\ La
1422
Da 16
void readNumbers(int[]
numArray)
inticount = 6;
15:
16: 17: 18: 19:
try{
'
}
int|lastNum = 8;
while
if (lastNum == -1)
return;
lastNum = numArray[count++];
{'
20: 21:
22:
finally
23: 24:
25:
{ System.out.println("Last
number
read:
lastNum);
}
return;
26: 27:
array:
-1
13
'^
Last
number
read:
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 read" siempre se despliega.
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
^
i
obtener a.Os de l Esto puede causar vanas excepciones, como un error de d.sco, o un ,men-
idea bsica es que puede abrir una conexin con un archivo y usar el mtodo read () para
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
ejecucin o que se estrellara.
""tas clusulas. En un bloque mltiple catch el l" hl "^ * "^ mUc las dlsP b'qUe CatCh cuc acuerde ser
Al poner su mtodo read () dentro de un bloque try, podr manejar tranquilamente ese error
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
esto falla, guardar lo ms posible del estado actual del programa y sahr.
La clusula finaliy
que
El siguiente ejemplo trata de leer de un archivo y atrapar los errores, en caso de que sucedan:
numBytes++;
10 Exception - only read + nu.By.es);
// otro cdigo de limpieza
")_
P''
S1* E
dc d
-a cop,
esIra
u estruaurado un bloque
Aqu el "otro cdiao de limpieza" puede ser lo que usted quiera; puede seguiradelante con el
Tr3 I
Agrama uuHzando ,a .formacin parcia. que sac del arch.vo. o quiz desee dcsp.egar un
cuadro de dilogo que le permita al usuario seleccionar un archivo d.lcrcnic.
Los ejemplos que ha visto hasta aqu, atrapan un tipo especfico de excepcin Debido a que
TJSL de ccpcioncs estn organizadas un una jerarqua y usted puede uuh.ar una su*
de la misma instruccin catch.
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
EOFException y FileNotFoundException. Atrapando lOException, tamben captura
instancias de cualquiera de las subclases lOException.
class Final {
intf]
dos por herencia? Puede utilizar mltiples bloques catch para un solo try. as,:
t rv i II cdigo que puede generar excepciones
Qu pasa si usted quiere atrapar excepciones de ..pos muy diferentes que no es.n relaciona-
10j 8j
_^ 7
= { 1. 5, 20, 8, 1, 13 );
5: 6:
7: 8:
\ catch (lOException e) {
9:
10:
11: 12:
an
in = new Finalf)-
[la -16
Circur
,;
RuntimeException (o
numBytes;++
mylnputStream.read(myBuffer) '
... '
yer.length)
"
,,.,, ,>
dc Jl,vu.
2=s=ss=
W^w^/fcto.pc no
^^
Nota
ella. En
NBta
throws y herencia
0
!
e,,K es n.
"
I 426
Da 16
ii^^fi^epciona/es:
^S^if^ores y la seguridad
a su melod0,
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()
throw nis;
Poner en sus
Slo puede lanzar objetos que sean subclases de Throwable. Esto difiere de las excepciones de C++, las cuales le permiten lanzar objetos de cualquier
tipo.
^^
class SunSpotException
Nula
Dependiendo de la clase de excepcin que est utilizando, sta podra tener tambin argu
y throw
problema real con mayor detalle (lo cual puede ser muy til para propsitos de depuracin).
He aqu un ejemplo:
NotInServiceException() nis = new
NotInServiceException("Exception:
Datbase
Not
in
Service"
throw nis;
Da 16
1
429
try { }
catch
mr.loadHeader();
(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
de manejada a su ve.,. De esta forma, las excepciones flotan todo el cam.no a lo argo
como para no darle la oportunidad a un manejad*, que podra estar en el mtodo que IUu.
dena de llamadores de mtodos (normalmente, sin ser manejadas por la mayona e el os hasta que, finalmente, el mismo s.s.ema maneja las que no han do atrapadas, abortando su programa y mandando un mensaje de error. sta no es una mala ,dca en un parama ndc-
Tndiente pero en un applct podra hacer que se detenga el navegador. La mayona de los
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.
**
adobes se protegen'a s mismos de es.e desastre, atrapando .odas las excepciones cada
Dado que lanzar, atrapar y declarar excepciones son concentos reh.c.onados y pueden llegar a
Cundo usar excepciones Si su mtodo llama a otro m-odo que contiene una clusula throws, usted puede hacer una
de tres cosas:
. ,.:,s:,r'l, excepcin ;. I cadena que IU.ni:. TO.mlo su propi.. clausula throws , su . Realizar los dos mtodos anteriores, atrapando la excepcin mediante catch y lanzn
dola de nuevo en forma explcita mediante throw.
definicin de mtodo.
excepciones que tengan mZ^^d T ^^ *"* U""2arla edare ^ ' Probab-I.dad de ocumr y qUe .engan sentido para el diseo
- cd,g0 sea ms complejo; adem 7S ot s "t** ^'^ E" &M t0 "- q* anejar .odas ,aS excepciones ,^1^^"" " " "'"^ ^ 'e'^" 1 Por las excepciones, ,e . Lto^^^^ ClMndo * **> evar
P lnVolut-r:'d;ls- No es
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.
^ *" '^
1430
Da 16
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.
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
z.
de clases de J-a se ha escrito con este grado de cuidado, y es una de las razones por las
en Java. f
# *
cuales tiene lajfuerza suficiente para ser utilizada en la construccin de todos sus proyectos
"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.cncon abuso, ha sido bloqueada en los applets. Las caractersticas prohibidas son las siguientes
. Leer archivos del sistema en el que se esl ejecutando el applet.
, ;,| respecto. En consecuencia, cualquier curaclcrsca del lenguaje que pudiera m usada
. Conectarse a cualquier mquina distinta a la que entreg la pgina Web que contiene c;
. Desplegar una ventana que no incluya el aviso estndar "Ventana de un apple, de Javajava 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 se llama certificado.
applet.
que el programador es confiable" "_ "' * * UUari PlSe a lravs de) Proc Para
grama, indicando exactamente de quin viene. El documento que representa esta firma d.g.i.'
gnatures .R.
appiei s*utijj2
de Java
Para inspirar confianza, un proveedor de applets debe comprobar su identidad mediante un grupo llamado autoridad de certificacin. Lo ideal es que estos grupos no tengan ningn t.|*
1432
Da 16
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
como un programador confiable. Este proceso consta de cinco pasos:
ventaja de una firma djgital
esta preguma, cumos esc
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.
F'shhead?
:*^cuaiqui p^^Zzl!;ZVe podra -quedar un poco """. tennfcar* alguien. ,,cmo se puede u , T t ^^ MU en cnjumo para
un rasiro
. US'" ld 'w P"W'' sola, como idenhllcador de
ase
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.
3. Signaiures 'R' Us comprueba la identidad de Fishhead Software, para asegurarse de que es .m grupo lcyfli.no con la misma clave pblica que so Ic-s nni. Cuando ImsI.Ikm.I
pasa cl muesireo, Signatures -R' Us crea un nuevo archivo encriptado que se llama cer
tificado y lo enva a Fishhead. :
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
descargar su clave pblica.
^"^ rea'menle a la
o '' t^t"*' '" s|o ^puede P"M^' ^~ ^ C'JVe Puhl<, el^ cual >era u.sado ,on
^ *' Ceni(1"c' vera de otra con,-
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
un navegador con soporte para Java 2.
Su proceso es ms fcil:
1. Gilbert se da cuenta de que no puede ejecutar el nuevo applet de juego de Fishhead. mu antes establecer a la compaa como un programador confiable. Descarga la clave
pblica de Fishhead.
nttp://wvw.sun .com
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
134
Da 16
!^2f!!^fiexcepconaleS:
^fi^es V la segundad
435 |
a visin general de la
w,,, , , ,
. El-software Netscape Object Signing que publica identificaciones digitales, el cual : puede adquirir en alguna de las compaas lisiadas en la pgina Web
https://certs.netscape.com/client.html.
Resumen
Hoy aprendi cmo Je avud
.' El software Netscape Signing Tool, el cual est disponible en la pgina Web
http://developer.netscape.com/software/signedobj/jarpack.html.Signr
si,, lJU, mi))l),.k. s, ^m. t ^^
Tool tiene una caracterstica para utilizar un certificado de prueba antes de darle la
identificacin digital.
Nota
La documentacin para el uso de estas herramientas est disponible en los sitios de Microsoft y Netscape. Adems, Daniel Griscom, de Surtable
en la siguiente direccin Web:
http://www.suitable.com/Doc_CodeSigning.shtn
e su
Adems de la informaci
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.
Polticas de seguridad
norma,
appleI C0|)
na onm
Para facilitar la creacin de aplicaciones ms limitadas, ahora las aplicaciones tienen que
pasar por el mismo escrutinio de seguridad de los applets.
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
^'
1436
Da 16
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.
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.
dos por la clusula throws?
Semana 3
>"
P Hay alguna forma de evitar las restricciones tan estrictas colocadas en los mto
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;/';;^--
1438
Da 17
Puede manejar todos los datos en la misma forma una vez que aprenda a trabajar con un flujo
439
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*
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
desde un programa hacia un desuno. Hoy tratar con dos lipos diferentes de flujos: flujos de byles y flujos i\c caracteres. Los hylr\
llevan culeros con valores que van desde 0 a 255. Hay una extensa variedad de datos que se
Como m
un flujo
por una mquina virtual de Java. De hecho, iodos los lipos de dalos imaginables se pueden expresar usando hyie-. individale'..
o una serie de bvles combinados entre ellos.
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
* c >- *
,
caracteres de Java sopona Unicode, un estndar que incluye muchos ms caracteres de los
que se podran expresar ulizando byles solamente.
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.
,0. ,e,u,: ,_
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.
1440
Da 17
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:
int newByte = 0;
FilelnputStream y FileOutputStream
System-O"t.Print(newByte
newByte = df.readf)-
);
; ;
" '"
cada
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
archivo.
Usted puede enviar bytes a un flujo de salida de archivo y recibir bytes de un flujo de entrada
de archivo.
1:
2:
3: 4:
import java.io.*;
5:
6: 7: 8:
P->lJC.tl
FilelnputStream file =
int count = 0;
{
9: 10: 11:
12: 13:
14:
while (eofj
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
}f (input == -1)
else eof = true;
count++;
System.out.Print(input .
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.
15:
16: 17: 16: 19:
Para leer ms de un byte de dalos desde el flujo, llame a su mtodo rea(byte[), int,
int). Los argumentos de este mtodo son los siguientes:
Un arreglo de byles donde se guardarn los dalas.
file.closefj;
20:
21:
22: 23:
24:
F.l elemento dentro del arreglo donde se debe guardar el primer byte de los datos.
. El nmero de bytes que se va a leer.
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-
Filtros de bytes
Despus de ejecutar este programa, puede desplegar el archivo pie. gif en cualquier nave
OH7, como el que se muestra en la figura 17.1.
Figura 17.1
Un flujo de emrada almacenado en bfer. Uena s,e con jados, y cuando un programa necesita esos datos' busca
a recibir un libro pgina
por milizario.
" -^i
Filtrado de un flujo
FilterOutputStream.
disponible, devolver -i
5.
by.es ?
Da 17
Un flujo de salida almacenado en bfer se crea con alguno de los dos constructores siguenles:
10:
11:
12: 13:
14:
e,
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:
20: 21:
mftodo writ.<ftyt./J. int, int, escribe mltiples by.es desde el arreglo de by.es pen
y la cantidad de bytes que debe escribir.
class ArgStream {
cado. Los argumentos para este mtodo son el arreglo de bytes. el punto de m.c,o del arreglo
22:
23:
24:
int start = O;
25:
Nota
26:
27: 28:
29:
start = st;
dado como el residuo del nmero dividido entre 256. Esto lo podr probar
boolean wrlteStream) /
try {
'
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. 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
en la siguiente instruccin:
java BufferDemo 7 64
System.out.'printf- + out).
buff.cise();
return true;
42:
"tch (lOException e) {
return false;
43:
44:
45:
System.out.println("Exception
P"on.
e.getMessage());
en bfer desde el archivo y vuelve a leer los bytes. El listado 17.3 conuene el cod.go fuente.
,tado 17.3. Texto computo de bufferdemo .java,
1:
2:
boolean readStream() {
try {
49:
import
java.io.*;
50: 51:
#
+
4:
52:
53: 54: 55:
BufferedlnputStream(fiie)
5:
6:
7. 'i
; ;
56:
57:
-T (in != -1)
in = buff.readM;
finish = integer.parselnt(arguments[1]);
58:
Systera.out.print(" +in)
(in != -1);
'
Flujos de datos
catch
System.out.println("Exception:
(IOException _,
e.getMessage())
* puedan ,ccr o cscrili IJl^ lc , u " T ; byte, doubla, noat, C^^ "^ *" """
un Hujo de entrada de archivo" ^"^ C'""'" "" ""^ ^ l"""'iul:i illlllilrt-":"1 ^
O.t.OutptStr.,flUfpl/tSt/,M). t, cua|
ri'ujod- ., ,
.C""S'r"CIOr0ataInPutStream(^/'"Sfreafli). Kl
Writing: 4 5 6 7
Reading:
10
11
12
13
6 7
8 9
18
11
12
13
readBoolean(),wrteBoolean(to0jean)
readByte(),writeByte(i/7eeer)
readDouble(),writeDouble(doWe)
constructor ArgStream().
readFloat(),writeFloat(fioar)
readlntf), writelnt(iV))
readLong(),writeLong(Jon5)
linca 16 para volver a leer esos bytes.
readShort(),writeShort(nr)
o,,,
.....
en Mte .
d.,
1450
Da 17
451
Como una alternativa, puede esperar que una EOFException (excepcin de fin de archivo)
sea lanzada cuando el mtodo de lectura alcance el final del flujo. El ciclo encargado de leerj los dalos se puede encerrar en un bloque try, y la instruccin asociada caten slo debe
mnnejar objetos EOFException. Uamc :i cise () en el flujo y cuide otras tarcas ile limpieza
dentro del bloque catch.
for
}
(checkNumber % i ==
return false;
return true;
Esto queda demostrado en el prximo proyecto. Los listados 17.4 y 17.5 contienen dos pro
42:
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:
import java.io.*;
3: 4:
5:
class ReadPrimes {
inporf
2: 3:
4:
6:
class WritePrimes
7:
8: 9:
FilelnputStream me = new
5: 6:
7:
ril!InPUtStre<" ni<10<)P'i'"es
utStream buff = new
numPrimes
//
candidato:
10:
8:
9:
10: 11:
int candidate = 2;
11:
12:
while
if
Bufferedlnputstrea dl
(isPrime(candidate))
primes[numPrimes]
13: 14:
15: 16:
17:
while (true)
12: 13:
14:
numPrimes++;
candidate++;
18:
System.out.print(in + '
> catch (EOFException eof) /
buff.close();
int in = data.readlnt();
15:
19:
20:
16:
17:
try
18:
} catch (IOException e) {
}
19:
20: 21: 22:
25:
23:
24:
= new
DataOutputStream(buff);
25: 26:
27:
for (int i = 0;
data.closef);
i < 480;
i++)
data.writelnt(primes[i));
} catch (IOException e) {
--
28:
29:
System.out.println("Error
33:
34:
{
nuevo fluj0 de sa)ida
35:
' II
=
FileReader("index' ;KK|,>s incluidos en
gj slguiente caraciei c
.specficudo con
^
^/e! nmero de d . re^cnarl, Z^;.,^^hmero caracteres u leer. to inicial md.cado V ^.^ ^ el ponto inicial
, ^^^
carac,rcs anus
^.^ el bje,o
^^^^ y
int
inByte;
do {
_ text.read0".
t,t
*.....?..-
*<
1454
Da 17
de Java
455 i
28:
^T^o P crear un BufferedReader se puede uti.izar e, sigu.ente constructor: .Buff .r.dRe.der < Wr> Crea un flujo de canceres almacenado en bfer. asociado
con el objeto especificado Reader, como FileReader.
21:
22:
}
}
23:
Un flujo de caracteres almacenado en bfer se puede leer utilizando los mtodos r:ead () y
mtodo readLine().
readSTr,], int, int) descritos en FileReader. Puede leer una lnea de texto usando el
El mtodo readLine() devuelve un objeto String que con.iene la prxima lnea de texto
al final del flujo, el valor devuelto de la eadena ser .gual a nuil.
Un final de lnea est indicado por cualquiera de los siguientes:
Un carcter de lnea nueva ('\n')
TC.* ncluiri carcter o caracteres que representan el fina, de una lnea. S, se llega
de bfer se
,. aplicaciI1 ReadSource es e) a
- - * 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.
Escriba
1 :
de
Ircn " f " '
T""
import
java.io.*:
2: 3:
4:
5: 6: 7: 8: 9: 10: 11:
);
# #
12: 13:
14:
(!eof)
true;
15:
16:
17:
System:out.println(line);
18:
19:
buff.cise();
} caten (IOException e)
1:
import
java.io.*;
|458
Da 17
459,
Listado 17.7. continuacin
6:
7:
8:
*j
cap.convert();
9:
10:
class AllCaps {
String sourceName;
11:
12: 13:
14: 15:
sourceArg;
16:
17: 18:
void convert)
try {
19:
20:
21:
22:
".tmp")
23:
24:
25: 26:
Resumen
BufferedReader
in =
new
27:
28:
BufferedReader(fr);
29:
30: 31: 32:
//
FileWriter
Filewriter(temp);
BufferedWriter
=---=
33:
34: 35:
BufferedWriter(fw);
boolean eof
int inChar =
false;
8;
36:
37: 38:
39:
40:
do
(char)inChar
41: 42:
43:
44:
} while
(!eof);
45:
46:
47:
in.close(); out.close();
, t, ^ it , ^ e
boolean deleted
if (deleted) temp.renameTo(source);
caten
(IOException e)
{
-
SysteiJ!.out.println("Error
53:
54:
catch
(SecurityException se)
{
-
System.out.println("Error
1442
Ola 17
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
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
archivo ReadBytes.class, o no estar en posibilidad de ejecutar el programa. *
eleccin adecuada es el archivo de clase del programa, el cual contiene las instrucciones del
e -h,vo y e, argumeilt0 booJ^o ^ *J -chivo emente. La cadena' espec, c sobreescnbT ^ 'i8re;lr i8re;lr dl e de T cualquier cualquier infi informacin exi.s.en.e dalos. vez
rrarlo. El mtodo write (byteI] i t
este meIdo son el arrezo
Con e, constructor Fiie0utPlJtStream(Sf ^ archivo oue agregue datos despudc^7' ^"^ *** " " "Jo de sa,id,
S:t:r rva ^
Tip
Los usuarios de Windows 95 y Windows NT pueden utilizar el MS-DOS para crear class.dat. Vaya a la carpeta que contiene ReadBytes.ciass y utilice
ei siguiente comando de DOS:
copy ReadBytes.class class.dat .\
" d
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
43 182 C 23 54 4 178 0 20 1B7 0 11 89 21 4 184 0 26 183 0 16 16 182 0 18 182 0 24 182 0 21 21 4 2 160 0 8 4 61 167 0 6 132 3 1 153 255 209 43 182 0 19 178 0 20 187 0 11 89 18 1 183 0 16 29 l 0 17 182 0 24 182 0 22 167 0 29 76 178 0 20 187 0 11 89 18 3 16
cla,s wnteBytes
0 8 0
12 0 9 0
0 5
14
0
21
10 0
0 97
17 0
0 22
11
0
0 23
122 0
0
4
12
0 49
0
0
13 0 55
0 0 2 0
14
57
0 5
-1
7 0
0
13 0 60 0
93
16 0 63 0
10 0 67 0
18 0 71
0
0
1
19 0 83 0 20 0 90 0 1?
0 58
0 96 0
Bytes
read:
1121
ocupar el texlo en su sistema. El nmero de bytes que aparezca, depende del archivo
para crear class.dat.
La cantidad de bytes desplegados en cada lnea depende de! ancho de la columna que pueda
lJ
oseo;
yte..out.println(-Error - ^,
460
Da 17
Preguntas y respuestas
P Un programa en lenguaje C que utilizo, crea un archivo de enteros y otros datos.
Puedo leerlos con un programa de Java?
R S puede, pero algo que debe tomar en consideracin es si su programa representa
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
Internet
Comunicacin a travs de
1462
Da 18
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
CoiU'ctiviiltul es la capacidad de hacer conexiones desde su applet o aplicacin a
un sislcma. a llaves ilc l.i reil. La concclividail cu Java se iMipIcinciil.i a iraves di-
las clases del paquete j ava. net. Desde luego que hay restricciones. Los applets ele Java no suelen leer o escribir del.disco de
=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.
Las clases de socket, Socket y ServerSocket, que le permiten abrir conexiones estndar de socket a liosts, y leer y escribir de esas conexiones.
(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
1464
Da 18
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
hace ms complejo.
23: 24:
25: 26:
27:
Este proceso es muy confuso, por eso es til seguir los pasos a travs de un programa que lo
28:
29:
30: 31:
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
mento est totalmente cargado, se desplegar en un rea de texto.
frane.addWindowListener(l); "
32:
33:
34:
El listado 18.1 nos muestra el cdigo; la figura 18.1 nos da e. resultado de la lectura del
archivo.
35:
frame.setVisible(true);
frame. pack(-);
36:
37: 38: 39:
.TUlE-Ti.cH youh.Jv i .7 ir 21 D WTITlE
EOOY 60C0L0R--f FFFf f UNfe'
UN"-MI00r
Figura 18.1
La aplicacin
Ge t File.
40:
41:
42:
.HJAUON*RtOKTWO 6S
43: 44:
45:
String line;
BufferedReader data;'
46:
47:
48: 49:
conn = this.page.openConnectionf)-
50: 51:
52:
53: SU:
55:
5 6
7
box.setTextC'Connection opened
)-
56:
9
10 11
page;
);
57:
58:
59:
box.setText(buf.toString());
catch (IOException e) {
60:
61:
}
}
12 13
14
62:
= new
try
{
"URL(-http://www.prefect.com/java21/index.html
page
15
);
16:
17:
18:
+ page);
l proce-
22:
e venZas d V "ecib 7 T ^
1466
Da 18
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
URLConnection (por ejemplo Mra n,m
;
quC frecon lu* cl;lscs URL V
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
conozca, expcrimfnte con otras si as lo desea. El trabajo tiene lugar dentro del mtodo run() (lneas 40-61). Primero, se inician los tres
objetos necesarios para llegar a los datos del documento, URLConnection,
Puralasaplicacioncsdeconectividaddcredmisill.il.
Las lneas 47 y 48 abren una conexin URL, la cual es necesaria para obtener un flujo de
entrada desde esa conexin.
bajar con datagramas conulta1 * aParW- S tene int6rS en tra documentacin de Java para el paquete
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
tor pone los caracteres en un bfer y los saca cuando se le pide.
."">
readLine() para leer una lnea de texto del flujo de entrada. Conforme van llegando, el lec
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.
t.
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 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
BufferedlnputStream bis =
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); Una de las cosas que no hemos comentado, es el cdigo para el manejo de
eventos que aparece en las lineas 25-30. Este cdigo es necesario para que
Nota
dlos en
Da 18
Para crear un socket de servidor y unirlo a un puerto, debe crear una nueva instancia de
ServerSocket con el nmero del puerto:
^ 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
cdigos para implementar una aplicacin simple basada en un socket.
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
prop.a creacin. Esto permit posibilidades de red mucho ms flexibles.
. Nuevas opciones para socke.s. basadas en las opciones BSD (por ejemplo. TCPJWDE
LAY IP_MULTICAST_LOOP, SO_BINDADDR).
' l-i -I>-Ma de. usuano y ten,,,,,:, !,,s ,, lillv:ls dcl t,icill, co,lsisU.n cl>.
de Java que utiliza las clases para socke.s para imp.ememar una apl.cac.n s.mple basada
la red, denominada Trivia.
b sobre
xidad en Java aqu conexidad en Java, aqu est est un un ejemplo ejemplo de de un^gran un^
Da 18
break;
State = WAITFORCONFIRM
'
if
(outLine.equals("Bye."))
break;
case WAITFORCONFIRM
//
limpia todo
State = WAITFORANSWER;
else {
os.ciosef);
is.close(); clientSocket.closeO
outStr = "Bye.";
}
' + e);
state = WAITFORCLIENT;
catch
System.<?rr.println(" Exception:
(Exception e)
break;
e.printSt3CkTrace();
return outStr;
momento aprender ms sobre el mtodo initOnAf). A continuacin se pasa a un celo infinito hile, que espera la conexin de un cliente. Cuando un diente se conecta, se crean los Huios 1/0 apropiados y se maneja la comunicacin por medio del mtodo processinput (). A
se hace evidente porque el servidor enva la cadena -Bye. V Entonces, el todo run()
limpia los flujos y el socket del cliente.
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
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)
String outStr = nuil;
switch (state)
//
{
pregunta
prtguma!,.
"se
re,p,,enas
,.neai
Da 18
de su respuesta en la lnea siguiente, la cual, a su vez, est seguida por la siguiente pregunta.
He aqu una lista del archivo QnA.txt:
What caused the craters on the moon? meteorites i How far away f.s the moon (in miles)? How far away S.s the sun
start =
index++;
i
239000
93
no
catch (FileNotFoundException e, {
quesUon
:
catch (IOException e) {
?)S;em-err-P
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
nuacin:
prvale boolean initQnA() {
return true-
try
{ File
,,
- *-
ha(11
l|os;ir ;i|
*. .
lijBj
byte[)
read questions
and
arguments)
serven, start M-
TriaServer() ;
i++)
(byte)' \n' )
^^
Escriba
1 :
2: 3: 4: 5:
import java.til.Randoro;
6:
for
if
i++)
7:
}
else {
'
\\
476
Da 18
477
61: 62:
63:
Buffl ,
19:
64:
65:
66:
String outUne;
BufferedOUtputStream(clientSocket.8etOutPutStrea1(J,1
e1"8 " la SliCtud e processlnput(null)'
= "ew PrintWriter(new
20:
21:
22: 23:
24: 25:'
...");
67: 68:
69:
OS.flush();
os.println(outLine);
6:
27:
28: 29: 30:
73:
74:
if (inLine.length() > 0) {
os.fiush();
75:
31:
32: 33r 34: 35:
outLine = processInput(inLine);
if (outLine.equals("Bye "))
36:
37:
81:
82:
83:
// limpia todo
os.close();
38:
39:
40: 41:
System.err.println("Error:
and answers");
return;
is.close();
clientSocket.closef)
catch (Exception e) {
42:
88:
89:
90: 91:
43:
44: 45:
e-printStackTrace();
Systeni.err.println("Exception-
92:
93:
94:
if
try
(serverSocket == nuil)
return;
clientSocket = serverSocket.accept();
95:
96: 97: 98: 99: 100:
101:
try {
51 :
52:
53:
54:
couldn't connect to
55:
102:
103:
en un arre9ide bytes
return false;
56:
57:
58:
104: 105:
59:
InputStreanReader(clientSocket.getlnputStreain());
I 470
Dla 18
't
471
3.
4. 5.
6.
7.
r()
- :::
Triylltm.r
^'
respuestas
static final
static final
int
PORTNUM =
1234;
0;
int WAITFORCLIENT =
private
static final
int WAITFORANSWER =
1;
private
private
""">
.,,
espera a un cliente
try
serverSocket;
if (serverSocket == nuil)
return-
int numQuestions;
state = WAITFORCLIENT;
>
socket");
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
SySt
connecr
.v.!,i.\;-;'P
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
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.
^ P-nto de PregUnta/resPuesta
super("TriviaServer");
try
{ serverSocket
System.out.println("TriviaServer
entrada del
usuari0
|478
Da 18
149: 150:
151:
152:
break;
109:
110:
153: 154:
111:
112:
113:
114:
case WAITFORANSWER:
155: 156:
157:
// verifica la respuesta
strequ"r
158:
159: 160:
Want anotner?
(.y/nr;
115: 116:
int start = 0,
boolean isQ =
ndex = 0;
true;
117:
for
(int i = 0;
i < data.length;
i++)
161:
118:
119:
120:
if
(data[i] ==
if
(byte)'\n')
{
start,
162:
163: 164: 165: 166:
167:
break;
state = WAITFORCONFIRM;
' '
(isQ) { questions[index]
= new String(data,
case WAITFORCONFIRM
i
121:
122:
start
1);
isQ = false;
else {
123: 124:
125:
answers[index]
i start
=
= new String(data,
start,
168:
169:
1);
:ztZ,;,r
"Bye."j
isQ
true;
170:
171:
i 172:
126:
index++;
outStr =
127:
128:
start = i + 1;
173:
state = WAITFORCLIENT;
} return outStr;
}
129:
130: 131 : 132:
174: 175:
break;
catch
System.err.println("Exception:
return false;
(FileNotFoundException e)
176:
177:
178:
file");
133:
134:
135: 136:
137:
catch
System.err.printlnC'Exception:
questions");
return false;
(lOException e)
return
true;
142: 143:
144:
145:
146:
147:
{
una pregunta
case WAITFOHCLIENT:
ncluveene, Ido 8
mtodo dennido en
;isc Trivia m
148:
480
Da 18
481
47:
46: 49:
import
import
java.io.*;
java.net.*;
2:
3:
4:
out.flush();
out.println(str.tostringo)';
''
str.setLength(e);
out.close();
5:
6: 7:
1234;
// limpia todo
arguments)
54:
55: 56: 57:
8:
9:
10:
in.close(); socket.cise();
9 m
in
nuil;
58:
59:
11:
12: 13:
14:
}
}
catch (lOException e) {
60: 61:
15:
16: 17: 18:
19: 20: 21: 22:
if
(arguments.length != 1) { System.out.println("Usage:
return;
else
address = arguments[0];
//
try
23:
24:
25:
26: 27:
new lnputStreamReader(socket.getInputStream());
PORTNUM);
o. iDe ah e, argumenl0
^ coudos. S cod a
* con,
^1^
?f
el ^ Ce ,fmM
28:
29:
3e:
couldn't
crate
stream
31:
32:
el nomore de dorninio
hadend
:-
>
33: 34:
35:
36: 37:
38: 39:
40:
41:
42:
43:
44:
!= nuil)
"
+ inStr);
45: 46:
!=
'\n')
1482
Da 18
Comuna.,<,, .,
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
Hoy hemos aprendido a utilizar URLs y conexiones URL, jumo con flujos de entrada para
ma scmdor se sita en un puerto de Internet, esperando un cliente que haga contacto con*I.
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"
Preguntas y respuestas
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".
El comando es el siguiente:
java Trivia "127.0.6.1"
Los formularios HTML se pueden enviar de dos maneras: mediante la solicitud GET o
Despus de ejecuiar el cliente Trivia y responder algunas preguntas, el resultado que debe
ver es similar :t ste:
5AUJJA
F)?
Server: Server:
Wrong,
y
meteorites
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
para imitar un formulario, obtener la entrada del usuario y construir un nuevo obje.o
Puesto que la informacin est codificada en el URL. puede escribir un applet de Java
Client:
Client:
Is the Earth a perfect sphere? the correct answer is no. Want another? (y/n) (in degrees
K Tiene que imitar lo que hace lu navegador para enviar formularios por medio de POST.
malo exacto est determinado por el protocolo HTTP; eslo slo es un subcon.junlo.)
Content-lengtn: 36
(y/n)
93
Abra un sockel en el servidor y enve los dalos, lo cual se ve como lo siguiente, (l-l fr
Client:
Contentype: application/xwww-formuriencoded
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
Si lo hizo bien, el servidor le dar el formulario CG1. Despus, su applel se encargar de manejar ese resullado en forma adecuada. Note que si la salida es HTML, todava no hay una forma de pasarla I navegado, que ojeme su applel. lista posibilidad podra darse en ediciones fuluras de Java. Sin embargo, si le devuelven un URL. uMed puede
redneccionar el navegador hacia ese IIRI..
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
m
unnecm iiy y
TJZkTJT T que n rpid0 Java-es fcilversin semirsedelaber^uajeL la gran cam.dad de clases ofrece como Sun. Cada nueva
nar todas las panes de la biblioteca estndar de clases de Java. Puede enocar 7
Por fortuna, para estar en posibilidad de crear programas tiles no tiene que domi
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
JavaBeans
i 'i
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
Un componente de software es una pieza aislada en una estructura separada, leilnij-nu- ivulilizahle.
Si desarrolla partes de un programa de forma que sean independientes, sera posible ensam
::.Trr
El objetivo de JavaBeans
>
<
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
-:~,
variedad de microprocesadores y sistemas operativos que se utilizan en nuestros das. Ha habido u ui diversidad razonable de intentos en el software de componentes, pero siempre han estado li Hitados a un sistema operativo especfico. Las arquitecturas de componentes VBX y OCX de Microsoft, han tenido mucho xito en el mundo Intel de las PCs, pero no han hecho
mucho |or cerrar la brecha con los dems tipos de sistemas operativos.
- Na a.np.in.d de huJJ^u^ Z " Tf " ^ * ^ Cn<K<" K"V sc a<l:ll>ion' " l;l -" /ciles de usa c ^ ,^TT" ^ V ""^ ^" otra cosa. qim^lur, que- laclue su consuuccin es
con que se construyen y u.iliz.n if
Rededor
'an>bin tiene el efec
; r; ;is;idos-cn
j
. Eslo
''"
Nota
La tecnologa Microsoft ActiveX, basada en su tecnologa OCX, apunta hacia la idea de proporcionar una tecnologa de componentes de usos mltiples, compatible con un amplio rango de plataformas. Sin embargo, considerando
la dependencia de ActiveX del cdigo Windows de 32 bits, todava est por
especficas
vlcXi "" n!?O r'"1S ll bcnefit'ilis '^''"^ aplicables a c ensiR.is un, imponamcs de Java, aunque poco mencina
le clases, lo cual pcrmile la inleraccin
integrar en
leimuajc |iarticular de programacin, o para un enlomo particular ile desarrollo. As como la dependencia de las plataformas debilita a los componentes en el momento de su ejecucin, limitar: u desarrollo a un lenguaje particular de programacin o entorno de desarrollo lambicn los debilita al final del proceso. A los creadores de software les agradara estar
en posibilidad de decidir por s mismos cul es el lenguaje ms apropiado para una tarca en
lado un sistema en el que los objelos se >nar sus ornees o iiisloria de desarrollo. Es!e mecanismo
s S!,ir r^;"rs"eictia de ia ^^^ * *, es ,a ,,,,. ' ' \''P'""' '' ie "" nbJe|0 para guardar y recuperar su csiado
1488
Da 19
489 |
Trmino Nuevo
lin JavaBeans la computacin distribuida se lia resumido limpiamente para mantener las cusas ajustadas, sin dejar de ofrecer una amplia gama de opciones a los programadores que nece
desarro.,0 de componen^, ~ ^^
Parama, Ms an. pu.d! " , ' "**""
botones y mens, esto le PLce neme es simP,ememe un PZgma r visible. Un buen ejemplo esTncZn
"***" *
"
' el * * tos
*' AWT Cm
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
componentes de JavaBeans.
X2e ^
componentes muestran
-, .ener que
La arquitectura de JavaBeans incluye soporte para especificar propiedades en tiempo de diseo y mecanismos de edicin, para facilitar la edicin visual de sus componentes. El resul tado es que los programadores estn en posibilidad de utilizar herramientas visuales para
ensamblar y modificar los componentes de JavaBeans en forma Huida, muy a la manera en que las herramientas visuales de las PCs trabajan con componentes tomo los controles VBX
- * -,bi,,dad y
La API de JavaBeans
"da la funcionalidad
conjunto de AP,,
u OCX. De esta forma, los programadores especifican cmo se van a utilizar y manipular los
componentes en un entorno de desarrollo.
sta de los
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
manipular con facilidad a travs de un conjunto estndar de propiedades bien definidas. JavaBeans une la potencia de los applets de Java totalmente desarrollados, con la solidez y
reusabilidad de los componentes del AWT de Java, como los botones.
1490
Da 19
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 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.
Basndose en las necesidades especficas de sus componentes, los programadores estn en
libertad de disear soluciones de persistencia ms elaboradas.
navegador Web que indica (entre otns inf ^ S la |wnc llcl seccin ,e ensear a logra " 2 , """"T""0 " "ud hi'*""'" * ,do. ,,,
c 10 LtcU0 > olus "'"'^s-populares ele applcls.
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,
ElmtodoshowStatuso delaclase
El mtodo showstatus()
listas APls son muy importantes para darle a los componentes la libertad tic interaciuar entre
ellos de manera consistente.
Este mtodo puede ser llamado con una instruccin como ,a sigu.enteSetApPletCOntext(,.sncwStatus,-CliCk appIet window to
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
superior. stas utilizan a las APIs de nivel inferior para determinar qu panes del componente
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.
:M 1
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>
'
"
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),
nmero de puerto (80 para http) y un nombre de archivo o de ruta. . URL (String, String, String) es igual al constructor anterior menos el nmero de
puerto.
dores. Cuando lo compHe con la herrn 9 ""* amp' de aviso de desaprobacin. he"ai"'* Javac d.i JDK, .2. r ecibir
un
5:
6:
7: 8:
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);
"http://www. prefect.com/java2r)
El navegador que contiene el applet de Java con este cdigo, cargar y desplegar el docu
mento en ese URL.
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;
to de las posiciones a las que se refieren los botones.
los botones se nuestran en la figura 19.1. Haciendo clic en los botones, se carga el documen
linkTof (String)arg );
1494
Da 19
ft
i++) {.
495
29:
30:
void|linkTo(String ame) {
|6r
31:
32:
i< bmList.length;
'*.* de su ap ,,".,,
C" Va
"
33:
34: 35:
36:
37: 38:
I
f
if (ame.equals(bmList[i].ame))
theURL = bmList[i].url;
!= nuil)
if
(theURL
getAppletContext().showDocument(theURL);
applei
dores y entornos * TJlT* " ^'^ S69n los diversos
39: 40:
41:
class
Bookmark
url;
42:
String
ame;
43;
44:
URL
rr~
45:
Bookmark(String ame,
this.name = ame;
String theURL)
try
}
50: 51:
52:
System.out.println("Bad URL:
"
+ theURL);
53:
HEIGHT=120 WIDTH=240>
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, ;.. "" "*' ""* ^ p (e (en Le esle ca cas. 'a clase MyAppletSubclass).
Enumeration en tumo Nol < , de la clase llZt'a ** "f" 1C otro appie.) n cel co T aP'
496
Dia 19
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:
<p>This applet receives information from the sender: <APPLET CODE="MyApplet.Class" WIDTH=100 HEIGHT=150
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
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
de su subclase. Una vez dada .a referencia a. apple, nombrado, puede llamar mtodos en ese
la clase genrica Applet; probablemente tendr que convenir ese objeto en una instancia
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
at Flavo Da Piavor
'* ^ ^" " ^"^"^ ^"^"^ bor bor ".egiblc".egiblc- E El objeo ? ^ '* resultante .endrd un Upo MIME de .pplic.tion/,-,.v.
CZ funcionalidad incluida en sus plataformas nativas (por ejemplo, se poda cop.ar texto y
1498
Da 19
DataFlavor{String,
Cualquier com
ue desee milb-,
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(),
isDataFlavoTSupported(), y getTransferData(). (Para obtener ms detalles, consulte la
,,,
Sr"" * - *
:.,
: .
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
fuente.
3 4
.,
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
ponapapeles estndar del sistema para mover informacin hacia, y desde, oros programas que
,, ,-, ,, ,,f,
""t
se ejecuten en la misma plataforma nativa, o bien utilice sus propias instancias del ponapapeles
parte del paquete java .awt .datatransf er. Puede acceder al Clipboard estndar del sis
tema a travs de los mtodos getToolkit () y getSystemClipBoard () (getToolkit () le da una forma de tener acceso a varias caraciersieas del sistema nativo), como en el ejemplo
siguiente:
Clipboard clip = getToolkit().getSystemClipboard()
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.
El applc CopyPaste.
500
Da 19
avanzadas
t
51: 52:
53:
54:
import
import
java.awt.*;
java.awt.datatransfer.*;
paste.setEnabled(true);
void doPaste() {
2:
3:
4:
import java.awt.event.*;
5:
6: 7:
55:
56: 57:
8: 9:
10:
58:
59: 60:
61:
TextField tfCopy,
Clipboard clip;
tfPaste;
11:
12: 13:
14:
62:
15: 16:
17:
CopyPaste test = new CopyPastef); WindowListener 1 = new WindowAdapter() { public void windowClosing(WindowEvent e)
System.exit(O);
63:
64:
.setText(txt)-
#.toStrlng(
j.
65: 66:
67: 68:
18:
19:
20: 21:
test.addWindowListener(l);
};
69:
70: 71:
test.setSize(200,
test.showf);
150);
22: 23:
24:
72:
73: 74: 75: 76:
77: 78: }
CopyPaste()
25:
26:
27: 28:
contents)
29:
30:
31:
32:
33:
34: 35:
36:
37: 38:
paste.addActionListener(this);
paste.setEnabled(false);
39:
add(copy); add(tfCopy);
add(paste);
46:
41: 42: 43:
44:
add(tfPast);
ani un
void doCopy() {
45:
if (tfCopy.getText()
!= nuil)
ei
Cl b'n C^ Fr-- * "na .11 m-o-
1502
Da .19
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. 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
La arquitectura de la RMl
coloca en el campo de texto Paste To (linca 60), Una vez hecho esto. Paste To queda
desactivado. , . .
Lneas 75-77
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
Servidor
Aplicacin
Aplicacin
usted se comunica entre objetos est definido y estandarizado en la RMl. sta es un mecanis
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
tener que saber de antemano qu protocolo hablar, o cmo hablarlo.
Capa de stubs
Capa de esqueletos
Capa de relerencia
remota
Capa de transporte
Red
Capa de transpone
Nota
Otra forma de comunicacin entre objetos es la RPC (Llamadas a Procedimientos Remotos), en la cual usted puede llamar a mtodos o ejecu tar procedimientos de otros programas en una conexin de red. En tanto que la RPC y la RMl tienen muchas cosas en comn, la diferencia ms impor
tante es que la RPC slo enva llamadas a procedimientos, con argumentos
Las capas de "stubs" y de "esqueletos" en el cliente y el servidor, resp.civameme bilis capas se comportan como objetos sustitutos en cada lado, ochando la "lejana" de la llamada del mtodo a las clases reales de implememacin Por ejemplo en su apl.cacn Chente usted puede llamarmlodos remotos de la misma forma que lo hace
con los locales: el objeto siub es un sustituto local del objeto remoto.
k:H(M
pasados o descritos de modo que se puedan reconstruir en cualquiera de los extremos. La RMl pasa objetos enteros de da y vuelta en la Red, y por lo
tamo, incorpora mejor un modelo de objetos distribuidos completamente
orientado a objetos.
La capa de referencia remota, que maneja el empaquetamiento de una llamada de mto do, as, como sus parmetros y valores dcvuellos para su transpone cu la red. La capa de transpone, que es la conexin real a la red de un sistema a otro.
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.
con ot W y con eSq" S PCmiiten ;' 'aS d!'SeS dd ClC"le y el *"*<* como )os objelos que (ralan 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
504
Da 19
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.
el administradora
servidor,
^^^
lado del
Luego, los valores devueltos para la llamada al mtodo emprenden el viaje de regreso hacia el
lado del cliente.
"^ ""**
"* 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.rmi.server
Para imp ementar una aplicacin cliente-servidor, basada en la RMI, primero debe definir
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.
una inier az que contenga todos los mtodos que soporte su objeto remoto. Todos los mtodo-
506
Da 19
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
Preguntas y respuestas
1' showStatus(,
nfor
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.
"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
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
t se des.ruven con
jar coniroladores, establecer conexiones con las bases de datos, construir consullas SQL y
procesar los resultados.
U>n ., co-reca, depende de ese navegador. L,s .crsione, de Netscape e /nternet Lxplorer an.enores., 3.0 t.cnen problemas extraos con ,a emumeacn enlre apple.s
-Sm ' d'CC"(|UC ddK ^ ruiicllrSl" w"ba^;i1 '=" ' "- en W o m I' ^ TVeeUdr "llplCmC"1:l M*H o si L inlcJnudo
TT??
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
511
Precaucin
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
en un contenedor. Para evitar estos problemas, es mejor usar exclusivamente uno de estos sistemas de manejo de ventanas en un programa.
sa con r
El cdigo que aparece en el listado 20.1 puede ser una estructura para cyalesquier aplica
ciones (|iie cree medanle una ventana principal.
2:
^ ^ ^ ^
3:
4:
iraport java.awt.GridLayout; import java.awt.event.; import javax.swing.*; publie class Framework extends JFrame {
publie Framework() {
u ^ui
^ ^ ^^.^ M(uiL
5:
6: 7: 8: 9:
super('Application Title");
10:
11:
12: 13:
14:
args)
18: 19:
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
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
interfaces de usuario sencillas para los applets".
m m m
import import
java.awt.GridLayout; java.awt.event.*;
2: 3:
4:
import
javax.swing.*;
5:
publie
class Swinger
Swinger()
extends JFrame
{
6: 7:
8: 9:
publie
super("Swinger");
10:
11:
12:
13:
Setvisit>le(.ooleano). S. el
aniumen,o
setContentPane(pane);
18:
19:
..
20: 21:
22:
args)
23:
1 = new WindowAdaper()
{ e) {
a-al.
25:
26: 27:
28:
29:
30:
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true) ;
};
fe
"
Reuni ad(conponente).
514
Da 20
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
pane.add(button);
Lneas 14 y 15 Lnea 17
setContentPane(pane);
Figura 20.2
Un cuno en un
JButton.
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
esos mtodos en el marco mismo.
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
Web junto con los archivos que conforman el applet.
Etiquetas
h aneadn de una etiqueta
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
Swino.Constants: LEFT^S
? clarjLabei-La fum>^ -
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
Algunos de los mtodos constructores que puede usar, incluven ,os siguien.es-
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
nt) Es una
Botones
combinacin de ambos.
j con el
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.
pc:rLr
517
JCheckBox( Icono)
icono especificada, que se selecciona en caso de que el segundo argumento sea true.
ron el icono especificado. Icono)
JCheckBox(Cadena,
cadas de lexlo c icono.
Icono)
jButton(Cadena,
tas especificadas de lexto e icono, que se selecciona en caso de que el segundo argu-
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
L0i
a-o ^
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,
el nmero especificado de
mento f alse.
Este ltimo mtodo convierte el cuadro combinado en una lista de seleccin: las nicas selec
Casmas de verificacin v^
deopc,on
ciones que puede hacer el usuario son los elementos agregados a la lista.
Si el cuadro combinado es edilable, el usuario puede escribir en el campo de texto en lugar de usar la lista de seleccin y tomar un elemento. sia es la razn por la cual los cuadros combi"ados se llaman as.
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
I 518
Da 20
Diseo de una
JScrollBar(in)
29
30
31:
orientacin, valor inicial, tamao del cuadro ele desplazamiento, valor mnimo y valor
mximo especificados.
32: 33:
34:
35:
36: 37:
38:
39:
40:
fraine.addWindowListener(l) ;
! frame.setVisible(true);
publie Insets getlnsets() {
frane.pack();
zadas con el AWT". era el applet ColorTest, el cual permita seleccionar un color a travs de
sus valores RGB o-HSB.
41:
18) 10).
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
de eventos.
48:
Listado 20.3. Texto completo de swinocolortest.java.
1:
49: 50:
inport import
import
java.awt.*; java.awt.event.*;
javax.swing.*;
51:
52: 53:
54:
SwingColorControls(SwingCoiorTest parent
String 11, string 12, String 13) {
frame = parent;
2:
3: 4:
5: 6:
7:
8:
9:
18:
58:
publie SwingCoiorTest()
super("Color Test");
59:
68:
add(tfleldi);
tfield2 = new JTextField("0") ' tfield3 = new JTextField("0") ' add(new JLabel(H, JLabel.niGHT))
11:
add(tfield2);
12:
13:
14:
add(tfield3);
"'
15: 16:
17:
65:
"Red",
"Hue ,
66: 67:
18:
68:
69:
10, 0, 0);
19:
20: 21: 22:
"Brightness");
pane.add(RGBcontrols); pane.add(HSBcontrols);
setContentPane(pane);
23:
24:
25:
26:
27:
28:
i-'-l
520
Da 20
Figura 20.3
La aplicacin
SwingColorTest.
El programa SwingColorTest utiliza la estructura de la aplicacin presentada con anteriori dad, por lo que muchas partes del programa tambin ya han sido introducidas previamente.
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
mismo soporte que los componentes del AWT.
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.
que representa ,a apanenda Me,a. de plataforma cruja de Java que representa la apariencia de su sisicma.
UnsupportedLookAndFeelException.
ciones siguientes:
try {
"
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.
programa, se debcrn ,, ,
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
ma de Java a invidentes y otras personas con diversas aptitudes. Cuando se utilizan los mtodos abreviados de teclado, simulan la accin del ratn, y la Corma
del componen
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
nacin con otra tecla.
Los mtodos abreviados de teclado se establecen llamando al mtodo setMnemonic (char), en el mismo componente en que se puede utilizar el mtodo abreviado como control. El
argumento char es la tecla que se debe usar como parte del mtodo abreviado. El ejemplo
siguiente crea un objeto JButton y asocia el carcter ' i' con el botn:
JButton infoButton = new JButton("Information");
do para el objeto *^
sibleConttO
infoButton.setMnemonic('i');
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.
Proporcionan un nL^n
Un cuadro de dilogo
. m amm*.*.mMmtmmmiml,
-i.
Para establecer una informacin sobre herramientas en un componente, llame al mtodo setToolTipText( Cadena) del componente. La cadena debe ser una descripcin concisa del
propsito del componente.
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
524
Da 20
525i
. inputDialog
,. MessageDialog . optionDialog
Es un cuadro de dilogo que despliega un mensaje. Es un cuadro de dilogo que incluye los otros tres tipos de cuadros.
. .. ,,
'.
JOptionPane.ERROR_MESSAGE)
...
''
'
'
Figura 20.5
de confirmacin.
Un cuadro de dilogo
Un cuadro de dilogo de entrada hace una pregunta y utiliza un campo de texlo para guardar
El segundo argumemo puede ser una cadena, un componente o un objeto Icn. Si es una
cadena, ese texto aparecer desplegado en el cuadro de dilogo. Si es un componente o un
mtsms
Este mtodo devuelve uno de tres posibles valores enteros, y cada uno es una variable de
clase de JOptionPane: YES_0PTI0N, N0_0PTI0N y CANCEL_OPTION.
response;
Otro mtodo ofrece ms opciones para el dilogo de confirmacin: showConf irmDialog (Componente, Objeto, Cadena, inx, nr). Los dos primeros afu memos son guales a los del mtodo showConfirmDialogt). Los tres ltimos argumentos
son:
figura 20.:
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
"Enter your ame:"); '
Una cadena que se desplegar en la barra de ttulo del cuadro de dilogo. Un entero que indica qu botones de opcin estarn visibles. Debe ser igual a las va-,
riablos de clase YES_N0_CANCEL_0PTI0N o YES_N0_0PTI0N.
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.
Tambin puede crear un cuadro de dilogo de entrada con el mtodo ' showInputDialog(Componente, Objeto, Cadena, int). Los dos primeros argumemos
. Un entero que describe el tipo de cuadro de dilogo, por medio de las siguientes varmblcsilc cbse: EnROR.MESSAGE, INFORMATION.MESSAGE, PLAIN.MESSAGE, QUESde dibujar junto con el mensaje,
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, INFORMAliteral 0 si no va a utilizar ninguno.
Figura 20.7
t7/i cuadro de dilogo
le mensaje.
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
opciones en el cuadro de dilogo.
desphegan por med.o de. administrador de diseos de flujo, porque denuo del dilogo no hay
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
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")
wiat is your gender?", "Gender",
El ejemplo siguiente crea un cuadro de dilogo de opcin que utiliza un arreglo de obje.os JButton
0,
JOptionPane.INFORMATlON MESSAGE
nuil,
joptionPane.WARNING.MESSAGE);
Alert ,
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.
El proyecto siguiente nos da la oportunidad de ver una serie de cuadros de dilogo en un pro grama funcional. La aplicacin Info utiliza dilogos para obtener informacin del usuario, la
Da 20
529 I
47: 48:
pane.add(typeLabel); pane.add(type);
49:
50:
51:
setContentPane(pane);
1:
2:
import java.awt.GridLayout;
import java.awt.event.*;
52: 53:
54: 55:
3: import javax.swing.*;
l\
56:
57:
UIManager.setLookAndFeel(
} catch (Exception e) {
UIManager.getSystemLokAndFeelClassNameO);
+ "look and feel: " + e);
7".
I
1B
58: 59:
60:
61:
11:
12: 13:
14:
__
62:
63:
64:
65: 66:
15:
16:
17:
public Info()
super("Site
Information
p.
-,;
67: 68:
18:
19:
20:
69:
nrres:o:s:P
title = new JTextField(response1, 20);
"Enter the site title:");
frame.addWindowListener(l);
frarae.pack();
70:
71:
72:
21 :
22: 23:
24:
frame.setVisible(true);
}
73:
74:
in8respns:2p
"Enter the site address:"); address = ne* jTextField(response2, 20);
25:
26:
27:
28:
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
29:
30: 31 : 32:
33:
34:
'
cuadros de dilogo.
Figura 20.9
La ventana principal
de la aplicacin Info.
35:
JOptionPane.QUESTION_MESSAGE,
36:
37: 38:
nuil,
cholees,
Mucho de esta aplicacin es el cdigo del modelo de texto que se puede utilizar con cualquier
,
39:
40:
choices[e]);
aplicacin de Swing. Las lneas siguientes se relacionan con los cuadros de dilogo: Lneas 19-22 Es un dilogo de entrada que se usa para pedir al usuario que escriba
41 : 42:
43:
44: 45:
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
pane.add(addressLabel):
pane.add(address);
46:
530
Da 20
Lnea 30
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,
Semana 3
choices[8], designa al primer elemento del arreglo como la seleccin predeterminada del dilogo. La figura 20.10 muestra este cuadro de dilogo de opcin. Lnea 39 Es la respuesta al dilogo de opcin; un entero que identifica que el elemento
del arreglo seleccionado est guardado en un componente JTextField llamado type.
Figura 20.10
El cuadro ele dilogo
Da
Resumen
Despus que varios cientos de miles de prograniadores tuvieron la oportunidad de usar las
21
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
a la documentacin incluida en Swing, encontrar ms de treinia componentes distintos.
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.
dase siguiente se declara para que pued eda manejar eventos de accin y de te*t0-
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.
ActionListener
. AdjustmentListener
FocusListener . Eventos de enfoque de teclado que surjen cuando un componente, por ejemplo un campo de texto, gana o pierde el enfoque.
. itemListener
KeyListener
teclado.
. MouseListener
. MouseMotionListener
'" windowListener
Precaucin
Hay un error muy fac de cometer en un programa de Java, y ste es modir 9ar' 3 Un cont^edor. Antes de agregar
os y maneja, cual
nente al contenedor, tiene que agregarle los escuchadores de ev-enjer otra configuradoa pue
1534
Da 21
Manejo de eventoide
JButton zap = new JButton("Zap");
zap.addActionListener(this);
if (src == quitButton)
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 implemente el escuchador de evento apropiado.
quitProgram();
'
sortRecords ()
el
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
evento de accin:
*e podra usaran
iodo de
^> t"--'rar,a,, un
Si en la imerfaz grfica de usuario de su programa hay un solo componenie con un escuchador de evento para lor eventos de accin, utilice el mtodo actionPerf ormed() para
responder a un evento generado por ese componente.
voidactionPerformed(ActionEvent evt) Object src = evt.getSource(); if (src mstanceof JTextField) else if (src instanceof JButton)
quitProgram();
calculateScoref);
Si hay ms de un componente con un escuchador de evento de accin, deber utilizar el mto do para deducir qu componente se us y actuar en su programa de acuerdo con ello.
1 m"ia
Escriba
1: 2: 3: 4: 5: 6:
7:
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:
import java.awt.event.*;
8: 9:
2 = new JButton("Gulldenstern'j;
publie ChangeTitle() {
super("Title Bar");
10: 11:
12:
13:
El objeto devuelto por el mtodo getSource () se puede comparar con los componentes si
usa el operador == . Las instrucciones siguientes se podran utilizar dentro de! ejemplo
actionPerf ormed() anterior:
14:
bi.addActionListener(this); b2.addActionListener(this);
536
Da 21 "
pane.add(b1);
pane.add(b2);
setContentPane(pane);
public
args)
JFrame fraroe
new ChangeTltle();
23:
24: 25:
Windowlistener 1 =
public
new WindowAdapterf)
Eventos de accin
JRadioButton.
void windowClosing(WindowEvent
26:
27:
System.exit(O);
28: 29:
30:
frame.addWindowListener(l); frame.pack();
frame.setVisible(true);
};
31':
32: 33:
34:
35:
36:
public if
evt)
Object
37: 38:
39:
ese componente.
it
else if
40:
setTitle("Guildenstern"); repaint(); }
41:
42:
43:
,, , su
dc,
* -
En esta aplicacin slo se necesitan 12 lneas para responder a los eventos de accin de esta
aplicacin:
l.:i lnc:i 1 importa el paquete java.awt.event.
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
rauf i.
II
4
\"
.Da 21
Nota
Los comandos de accin son excepconalmente tiles cuando escribe un pro grama en el que ms de un componente debera provocar la misma acc.on.
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.
6:
import java.awt.event.*;
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.
Para manejar estos eventos, una clase debe implementar la interfaz Adj ustmentListener.
Slo hay un mtodo en la interfaz AdjustmentListener:
Eventos de ajuste
10:
"eW Td.rL.yout
11:
12:
13:
14:
15:
16: 17:
bar.addAd]ustmentListener(this)
JPanel pane = new JPanel(); . . pane.setLayout(bordJ;
pane.addfbar,
1B: ,
Par, ver cul es el valor actual de JScrollBar, dentro de este melado de manejo de eventos,
20: '
21: '
22:
19:
,.
pane.add(valu, "South",;
"Center");
23: 24:
25:
setContentPane(pane,;
Tambin puede determinar la forma en que el usuario movi la barra de desplazamiento, a travs del mtodo AdjustmentEvent del objeto getAdjustmentTyPe(). Esto devuelve uno
de cinco valores, cada uno de los cuales es una variable de clase de la clase Adjust.ent:
UNIT INCREMENT
. UNIT_DECREMENT
32:
33:
. BLOCK_INCREMENT
34:
frame.addWindowListener(l);
frame.pack(,;
35: 36:
37:
. BLOCK_DECREMENT
.
mienio.
frame.setVisible(true,;
'
38:
El programa que aparece en el listado 21.2, nos muestra el uso de la interfaz Ad ustmentListener. Cada vez que se mueve la barra de desplazamiento, se le agrega al marco una barra de desplazamiento y un campo de texto no editable, y se despliegan
mensajes en el campo.
if (source == bar, {
source = evt.getSource();
evt,
43:
44: 45:
46: 47: }
repaint();
540
Da 21
541
Eventos de elemento
, Trmino Nuevo
elmmo
' 1 Iw
!ul
j
TRiyilNf?,.NUEVO .
Usted se preguntar por qu hay un conjunto vaco de comillas en la llamada a setText () en la lnea 43 de este programa. Las comillas vacas se denominan
m
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
t
o a la ItemEvent.
Eventos de enfoque
Los evemos de enfoque suceden cuando cualquier componente gana o pierde la
entrada de enfoque en una interfaz grfica de usuario. El enfoque describe al
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
medio de un cursor parpadeando en ese campo.
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:
import java.awt.event.*;
b: 6:
7: 8:
9: 18:
11: 12:
ItemLiStener
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().
14:
15: 16:
17:
18:
pick.addltemUstener(this);
Da 21
543 |
21.3. CONTINUACIN
23:
24: 25:
pane.add(pick,
"Center");
siguiente:
setContentPane(pane);
26:
27:
28: ;
29:
30:
31:
32:
33: 34:
35: 36:
}
frarae.addWindowListener(1); frame.pack(); trame.setVisible(true);
evt)
37: 38:
39: 40:
41: 42:
43:
44:
Eventos de ratn
Los eventos de ratn se generan por
);
45:
46:
47:
Un clic de ratn.
usuano:
4B:
repaint();
49:
56:
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.
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.
Eventos de tecla
544
21*
getClickCount ()
con el ratn. i
getPoint()
Devuelve, como un objeto Point, las coordenadas x,y dentro del com
windowDeiconified(EventoDeVentana) windowlconifiB(EventoDeVentana)
getY()
Devuelve la posicin y.
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-
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
546
Da 21 -
-'
tfieldi.addActionListener(this);
tfield2.addActionListener(this);
1:
2:
3:
4:
tfield3.addActionListener(this);
inport jsvax.swing.*;
lmport Java.awt.event.*; .
iaport java.awt.*;
Por ltimo, agregue todos los mtodos definidos en Jas dos interfaces que implemema esta
clase: actionPerformed(Vento0e/4ccin),
ocus6aine(EventoDeEnfoque).
5:
ocuslostiEventoDeEnfoque) y
. !
6:
7: 8:
"nB0;:rCOTl "G
Los comiles de color se usan para registrar un valor numrico para un color, y esto hace
que el color se dibuje en un panel. Tambin actualiza los otros controles de color para que rcliejen el cambio de color. I lay dos formas para que un usuario pueda terminar una nueva eleccin de color: prcsionaiuli1 Intro en un campo de texto, lo cual genera un evento de accin, o salindose del campo para
9:
10:
publie SwinflColorTest() {
super("Color Test");
11:
12:
13:
14: 15:
16:
17: 18:
19:
28:
RCBCSrO1=e:^Cl
pane.add(swatch);
swatch.setBackground(Color.black)
Saturation", "Brlghtness")
21: 22:
if
(evt.getSourcp()
instanceof TextField)
f rame.update(tfiis);
23:
24: 25:
evt)
Uno de ellos, f ocusGained(), no necesita manejo. Entonces, se debe agregar una definicin
de mtodo ..vaco:
publie statlc void main(StrinB[) arB$) { . ; JFrame trame = new SwngColorTest(); .... WindowListener 1 = new WindowAdapter() {
System.exit(e);
{ }
33: 34:
35:
36:
};
frame.addWindowListener(l);
frame.pack{);
Este mtodo no contiene ningn comportamiento para el manejo de eventos, slo actualiza
37: 38:
39: 49: 41: 42: 43:
la muestra del color y todos los controles para que reflejen un cambio de color. Es idntico
frame.setVisible(true);
publie Insets getlnsetsf) {
ie);
548
Da 21
valores = de
en
96: ;
97: 98:
//
//
obtiene
y los
cadena
enteros
de
cadena de
los
campos
de texto
48:
49: 50:
convierte
valuel
Integer.parselnt(controlPanel.tfieldi.getText());
'99: 100:
101:
= new JTextField("0")
Uy"t(3,2,10,18) )
51:
52: 53:
54:
102:
103: 104:
105:
cambiado,
55: 56:
57:
c =
//
new Color(value1,
convierte los
value2,
RGB
value3);
en HSB
106:
valores 107:
58:
59:
floatf]
HSB[0]
HSB - Color.RGBtoHSB(value1,
= 360;
value2,
value3,
108:
(new float[3]));
rfSB[1] HSE[2] // *= *= 100; 100; campos HSB
60:
61:
62: 63:
64:
113:
restablece los
add(tfield3);
add(tfieldi);
114:
115:
65: 66:
67:
HSBcontrols.tfieldi.setText(String.valueOf((int)HSB[O]));
HSBcontrols.tfield2.setText(String.valueOf((int)HSB[1))); HSBcontrols.tfield3.setText(String.valueOf((int)HSB[2])); } else {
116:
10, 0, 0);
117:
118:
119:
//
c =
HSB ha
cambiado,
actualiza RGB
/ 360,
120: 121:
122: 123:
Color.getHSBColor((float)value1
72: 73:
74:
(float)value2 /
// restablece los
100,
(float)value3
RGB
100);
campos
75: 76:
77:
RGBcontrols.tfieldi.setText(String.valueOf(c.getRed()));
RGBcontrols.tfield2.setText(String.valueOf(c.getGreen()));
RGBcontrols.tfield3.setText(String.valueOf(c.oetBlue())) ;
78:
79:
80: // actualiza la muestra
81:
82:
swatch.setBackground(c);
swatch.repaint();
83:
84:
85:
86:
87:
Im aplicacin SwingColorTest.
l JJBJ
jTextField tfieldi,
tfield2,
tfield3;
parent,
Resumen
{
SwingColorControls(SwingColorTest
93:
94:
String
frame =
11,
String
12,
String 13)
95:
parent;
Por fuera el nuevo sistema tambin debe tener ms sentido, desde el punto de vista de un
/^
1550
Da 21
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
cornlf ahernatV^de, ha" ms fcii * Proyec comportadme, asocado d se conjunta y asla comportamiento no resonado
d h
TT
:la aPJicac*n
to para el melodo.
Los mtodos tic esa clase EventObject, como getSource(). se ulili/an para saher qu
componente gener el evento y qu clase de evento era. Una vez que conozca estos pasos, podr trabajar con cada una de las distintas interfaces de
escuchadores y clases de eventos. Tambin aprender acerca de los nuevos escuchadores
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
1
Si-
Apndices
A Resumen del lenguaje Java
Apndice
Esie apndice contiene un resumen del lenguaje Java, tal u.n.o se describe en csic
Esto no es un repaso de gramtica, ni una visin tcnica del lenguaje en si. Es una referencia rpida que podr utilizar luego de conocer los fundamen tos de cmo funciona el lenguaje. Si necesita una descripcin tcnica del lenguaje, puede visitar la seccin de documentacin en el sitio Web de JavaSoften http://java.sun.com/docs. Uno de los documentos que se ofrecen con acceso total, es la especificacin oficial del lenguaje Java el cual
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
5571
Palabras reservadas
Las palabras siguientes estn reservadas para el uso del propio lenguaje Java. (Algunas de
ellas estn reservadas pero no se usan actualmente.) No debe utilizar estos trminos para
[ nmero ).nmero
nmero[ f F)
Tipo double
Tipo float
nmero[ d
D]
do
import
return
void
1 +
]nmero
Tipo ouble
Con signo
nmero[e E]nmero
'carcter'
booleah
break
instanceof int
short
static
super
volatile
while
"caracteres"
Cadena de caracteres
Cadena vaca Retroceso Tabulador
Avance de lnea
byte.
case
interface
long native
new
switch
\b \t
\n
catch
criar
finally float
for
goto
synchronized this
throw
\f
\r
class
const
package private
protected
throws transient
try
\"
V
ComJla doble
continu default
if
\\
Comilla sencilla
Diagonal invenida Escape Unicode
Nulo
implemertfs..
public
\unmhexadecimal
nuil
false y nuil tambin estn reservadas para ser usadas como literales.
true
Comentarios
/* s'ct es un comentario que
false
Booleano (verdadero)
Booieano (falso)
puede //
Declaracin de variables
int ! long , nmbrenle Entero (seieccionar un tipo) double , nortrenrM. FIo,:,me ^.^ ^
cnar nombrevariable
Literales
nmero
Doolean nombrevariable
Tipo int
L]
Caracteres
nombreclase nombrevariable
t-
Booleano
nmeroll
Tipo int
Entero hexadecimal Entero hexadecimal Entero octal
nombrevariable
Mlil|. ,
Tipos de ciases _
m i
Mltiples variables
1558
Apndice A
Las opciones siguientes estn disponibles slo para las variables de clase e instancia.
Cualquiera'te ellas se puede utilizar con una declaracin de variable:
[
[
arg < arg ,
static
final ]
declaracinDeVariable
declaracinDeVariable
Variable de clase
Consumios
arg >
arg <=
arg
arg
Menor que
Mayor que
public
prvate
protected
Control de acceso
arg
>= arg
Menor o igual a
declaracinDeVariable
arg
arg
Asignacin de variables
variable = valor
arg
ar9 !
! arg
arg
ANO Jsia)
Asignacin
Incremento posterior
OR lgico
NOT lgico
AND
OR
arg &
arg ;
arg
arg
Incremento previo
Decremento posterior
arg
arg
Decrcmento previo
Suma y asigna
XOR
arg
arg
arg
arg
arg
arg
>
Desplazamiento a la izquierda
Desplazamiento a la derecha
variable
variable
*=
1=
valor
valor
~ arg
(tipo) cosa
variable %= valor
variable &= valor
variable
variable
'=
valor
valor
OR y asigna
XOR y asigna
variable
<<=
valor
Objetos
new clase();
variable
variable
>>= valor
>?>= valor
Operadores
arg arg + arg arg
ew tipo(arg,
Suma
Resta
arg,
t>)eto.variable
objeto.varclase
arg . arg
* I
arg arg
Multiplicacin
Divisin
Variable de instancia
Variable de clase
Clase.varclase
objeto.mtodo()
arg %
arg
Mdulo o residuo
Variable de clase
Mtodo de instancia
(sin argumentos)
..}
'I
Mlodo de inslancia
560
Apndice A
objeto. classmethodO
'
break [etiqueta J
continu [ etiqueta ]
label:
Mtodo de clase
Mtodo de clase
Definiciones de clases
class nombreclase bloque Definicin de clase simple
opcionales:
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
tipo[) nombrevariable
Sin subclases
Variable de arreglo
Variable de arreglo
Nuevo objeto de arreglo
[ abstract ] class
nombreclase bloque
No instanciablc
Accesible desde fuera del paquete
new
tipo[nmElementos)
publie 1 class
nombreclase bloque
Longitud de arreglo
class nombreclase
Ciclos y condicionales
if (
if i
prueba
) bloque
Iextends otralnterfaz,
... ) bloque
prueba ) bloaue
m m
else bloque
switch
( prueba
{}
El mtodo bsico luce as, donde tipoDevuelto es un nombre de tipo, un nombre de clase o
tipoDevuelto nombreUtoo( bloque Miodo bsico
default : instruccin
for ( inicializador;
) ~bloque prueba ) bloque
Ciclo while
prueba;
Ciclo for
cambio while (
tipoDevuelto nombreMtodo
do bloque
Ciclo do
while (prueba)
m *
562
, Apndice A
Las variaciones de mtodo pueden incluir cualesquier palabras clave opcionales siguientes:
[abstract ] tipoDevuelto
bloque
Mtodo abstracto
Importacin
import paquete.nombreclnso
lni|M>rl;i iin.i i-tosi-
nombrMitodo()
static';]
tipoDevuelto
Mtodo de clase
:
.i
nombreM'ivdo) bloque
[ native ] tipoDevuelto bloque
import paquete.*
Mtodo nativo
especfica
. ,
nombreutodo() [ final )
tipoDevuelto bloque
]
Mtodo final
nombreMtooO
I synchronized
nombrelnterfaz bloque
Mtodo sincronizado
-Inierliiz pblica
fabstract ] interface
nombrelnterfaz bloque
tipoDevuelto nombreMtodo()
bloque
Inierfa?. abstracta
[ public
private
Control de acceso
protected] tipoDevuelto
nombreMtodo() bloque
Proteccin
' synchponized ( objeto ) bloque
try bloque
Constructor bsico
nombrec. ase(parmetro,
parmetiv...) bloque
parmetro,
Constructor con
parmetros
publii
private
protected
Control de acceso
nombrec. ase()
bloque
1
flr
super.nonbreMtodo(}
this(...
super(.. .)
tipo.clfss
return | valor
Devuelve un valor
h }
!.'<
Apndice
Internet
Recursos de Java en
y otros recursos que puede utilizar para ampliar su conocimienio de Java.
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
ciones, conexiones actualizadas y cualquier otra informacin al respecto.
Visite este sitio para tener el cdigo fuente de todos los proyectos del libro aclara
!
M
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
970. 7-O85-6
co que descubre Java por primera ve/,. ste es un buen punto para iniciar porque pre
senta temas pensando en los principiantes.
Aqu estn lodos los productos y documentacin que puede copiar de Sun, incluyendo el JDK, documentacin sobre el lenguaje y oros archivos. Applets sle es un escaparate para iodos los programas de Java que se ejecutan en Web, incluyendo ms de dos docenas que ofrece Sun, y que se pueden adaptar para su
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
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
la sig lente direccin:
http-.// java.sun.com
. Employment
biblioteca de clases de
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
APIs, productos y los principales conceptos de la tecnologa de Java, en
ii
i: :
'
i:
I i'
i.
568
Apndice B
569
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
http://www.jars.com
#
ft
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-
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
de Java, y tambin es la ms econmica. .MmHWWest disponible en forma -ratum, en la
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
Una de las mejores revistas que han surgido al servicio de la comunidad Je programadores
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
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 .
cuanto un articulo va enseando un concepto particular o tipo de programacin, JavaWorld
formato umeo de Web ofrece una ventaja sobre las revistas impresas (como Java Uepor,) En
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
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:
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
http://sunsite.unc.edu/javafaq/javafaq.html
testar algunas preguntas menos frecuentes. Se localiza en la direccin siguiente:
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*-?.
1570
Apndice B
571
tas relacionadas lid con ese tema en Web C listas C77" '^^ ** **"' "^ de h
''> <>pomini<ad.s de Iralxijo .
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
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.
P;,ra
comp.lang. java.advocacy Este grupo est dedicado a cualquier comentario sobre Java que inspire debates acalorados o comparativos. Si desea discutir sobre los mritos de Java contra cualquier otro lenguaje, ste es el lugar. Tambin puede ser un buen
sitio de consulla para saber si Java es la eleccin correcta para un proyecto en el que
esl trabajando.
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
-enas de pe
"cspccmc<)
' " """ "C" l|" ^ixl^ireccin
i I
toda la biblioteca de clases que viene con el JDK, y otras implemcntaeiones del lenguaje.
comp.lang. java.prograromer Este grupo contiene preguntas y respuestas rela
nttp://wv/v/.careerpatfi.com
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
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
Si
csu'i
utilizan
e comando y ,c despea -
mensaje en respuesta:
distinto.
"-*--
comandos:
Entrada
path
5=
*
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
maysculas no son importantes en esta instancia, C: \JDK1.2\BIN es igual que
C: \jdk1 .2\bin.)
SSi
Figura C.1
Resultado de una
Si PATH no incluye la carpeta PATH del JDK, necesitar editar su configuracin de PATH y
agregrsela.
en la carpeta raz del disco duro de su sistema (normalmente es el disco C). Para cambiar la configuracin de PATH en un sistema Windows NT, no tiene que abrir un archivo de texto para editarlo. En vez de eso, seleccione Panel de Control I Configuraciones
(Control Panel I Settings) desde la barra de tareas.
\\
Para cambiar PATH en un sistema Windows 95, debe editar el archivo de texto
bsqueda de
java.exe.
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
- Si todava no ha tratado de compilaron programa de Java para probar el JDK puede usar el archivo HelloDan .java del sitio Web de este l.bro en.
: http://www.prefect.com/java2i.
lo Drimero que debe verificar es si escribi el nombre correctamente respetando las mayuscu
compilar y vuelva a verificar el nombre del archivo.
Us y minLas. Asegrese de estar en .a carpeta que contiene el archivo ,ueme que ,n- de
MS-DOS, para hacer una lista de todos los archivos que estn en una carpeta. El nombre
carpetas, tal como aparece en la figura D.2. Los non.bres abrevados do .os auhn^, que
Windows para manejar los archivos.
^^
Figura C.2
Lista de archivos en
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.
Si CLASSPATH no incluye la referencia a la copia de classes.zip del JDK 1.2, necesitar editar la configuracin de su CLASSPATH y agregrsela.
bsqueda de
tools-jar.
Para cambiar la configuracin de CLASSPATH. en un sistema Wimlows NT. no tiene que abrir un archivo de texto para editarlo, slo seleccione Panel de Control I Configuraciones en la
barra de tareas.
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.
Problema: no hay una instruccin classpath Si no encuentra una instruccin CLASSPATH, debe agregarle una al archivo autoexec.bat.
Desplcese hasla el Tinal del archivo de texto y agregue un rengln en blanco, (in cn:i lnea
e nol.i H-
r, ASsPAVH.
escriba el texto CLASSPATH= seguido de la carpeta Patrt del JDK. como en el ejemplo
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
Apndice C
581
unsetenv
CLASSPATH
Para que este cambio sea permanente, debe retirar el comando que estableci CLASSPATH de
su archivo .profile, .eshre o .login.
CLASSPATH-.;C:\DEV\CHATSERVER\:C:\jdk1.2\lib\tools.]Br
Estos cambios no tendrn efecto hasta que ciee la sesin actual e inicie oir, o utilice 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:
] i
i
r
ment
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:
Uso
Apndice D
not-found
intype
declararon.
^ ^.^
b0,n inicio, es un
^fc
,;l
-'- -
vez en texto mpte > ve mcn,os mcn,os con con que que irab..jo y
sdc un M^
& tcxU)
asociacin de archivos
en
, sor.
d.tando
csl presente
dio en
la carpo,.
,,,
"
,, i,lc,,rra la O
K,,a croar -a
S5
Figura D.2
Figura D.1
Crt'ic/tiM / un docu
mento nuevo de texto
en una curpeiu de
Windows 95.
Se cea
. *
5871
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
reemplazarla con una nueva. Seleccione Remove (Quitar) para borrar la asociacin actual, y
haga clic en Yes (SO para confirmar que desea borrarla.
Una vez hecho esto, puede crear una nueva asociacin para la extensin de archivo .java.
Cmo crear una nueva asociacin Al hacer doble clic en un archivo que no tenga una asociacin conocida para su extensin de
archivo, se abre una ventana Open Wilh (Abrir con), que se muestra en la figura U.4.
Figura D.4 Asociacin de unc
to p
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
archivos fuente de Java. Si no lo encuentra, seleccione el botn Other (Otros) y busque manualmente el programa. Si esi utilizando el programa Edit del DOS lo puede encontrar, en la mayora de los sistemas, en la carpeta \Windows\Command con el nom
bre de archivo edit o edit. exe.
- 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
I 588
Apndice D
Despus de asociar los archivos .java con el editor seleccionado, en forma predeterminada se
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
Edil File Type (Editar tipo de archivo), como la que se muestra en la llgura E.5.
Figura D.5
La ventana Edil File
Cuando este tipo de archivo est resaltado, seleccione Edil (Editar) para abrir una ventana
Type.
jr-
wr- -.
h*t7l-:.-
;.r, . i
...._ .,
iiv
ndice
Smbolos
//anotacin de con.eMh.no.
21), Rrjficos, 20(1-201, 5.S0-5X1
applei Map2D. 22i-2'')
dibujo, 20Xi 224
al.rir
arcos
!l
fichiov* '
DtfK* |
si :'.:i'V
dilereme pan desplegar todos los archivos .java.
Seleccione C hange Icn (Cambiar icono) en la ventana Edil File Type y podr decir un cu
A (circunflejo), 83
= (sigilo igual)
ejemplo. 2O"-211
relleno, 20y
operador de asignacin
68. 72
airibuu,!. de transforman,',,,
'olor, 220
HiiliereilKeader. objetos,
IM
Si le gusta alguno de los iconos desplegados en la ventana Currem Icn (Icono actual),
Browse (Ext minar) para ver los iconos de los archivos de su sistema.
martllelo y I aga ciic en OK para hacer el cambio. Si desea ver oros iconos, seleccione
deil-ile, aplicacin de
miiesira. 464-4M)
patrones de relleno.
220-221
coordinai si.siema. 202 i-'lp.ses, 223
'-'lInpilSlreumO. mc'todo
463
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
garn en la 'emana Current Icn.
operador NOT(.'), 83
- (ilion), SI
(pimo), 93-M
l'HI.Ciim.i.viMiii. objetos
4(,3
Lina ve/ cn< onirailo el cono que desea, resllelo y lug;i elie en OK p:ir;i seleccionarlo.
+ (signo ms),
AbstIacl\Vil,rio,vln(,-,O()JkiI
i AWT
acceso
operador de incrememo(++1
XI
; (puni y coiii), C6
''
herencia. 387
Paquetes
/-../anotacin de comentario,
/**...*/anotacin de
comentario, 73
esquinas redondeadas
r0-l-205
patrones de relleno, 204
de clase, 96
1590
ndice
ndice
I i m ilaciones, 257 eliminacin de un objeto
de instancia^ 93-94
de naipes
AccessControlConlext, dase,
610 AcccssController, clase,
610
agregar, 299
creacin, 299
desplegar, 300
Graphics, 256
Neko, applel
'
WAITFORCLIENT,
eslado, 473
WAITFORCONFIRM,
eslado, 473 aplicaciones
ejemplo, 300-302
especificacin, 292-293 mrgenes, 313, ulcunce
clases internas. 411
SwingOilorTesi. 518-520
clases,-545
escuchas de eventos. 545
Checkers. 258
doble biifer, 259
AIICapsDemo, 457-459
argumentos
manejo, 148-151
pasar. 148
definicin de. 11
depurar salida. 197 desplii-pio en panlalla. 1X0 destruccin. 179-180
lcnica de animacin.
ArrayTest
clase, 116
de variables, 142-143
249-253
punorama.231-232
parpadeo
mplemenlacin del
ciienie. 479-481
detencin. 179.233
ejemplo, 240
priniNanics), mlodo,
116
implememacin del
servidor. 469-479
presentacin. 470
DigialClock
.
ciclo while), 237
ActiveX, 486
ddActionLislciicr(), mtodo, 537
applets, 185
componentes, 292-293
panorama, 239
reduccin. 240-243
salida. 116
piular/repintar, 232-233
sonido
BaseFramc 1, 355-356
cerrar, 378
ciclos. 262-264
ejecucin, 2(>2
diseos de cuadrcula de
atribuios
bolsa, 302-313
diseos de flujo. 293-294 diseos de naipe. 299-302
AUGN. 185
C'ODI-:. IN3. ISfi
Dminos, 12
cicmplo l'alimliome
definicin, 233
DigialClock, ejemplo.
mlodo 538
programa de miiesir.i.
538-54(1
mrgenes, 313
paneles, 298-299
236-239
ejecucin. 234-236
AiiHM.-buMiilli.javu, programn,
adjusimenlValutChangedO
n.cl..d>,, 538 adininislrailores de diseo
applels, 11-13
plataformas de Windows,
28-30
sisinnas Solans. 31
ampersand (&), 83
ampliacin de nterfaces,
407-408
cliente/servidor). 468
cteme disear. 469-470
definicin, 146
DoTest. 131
ColorSwirl, 240-24 I
ColorTesi. 366 diseo. 367 inicio, 368
EchoArgs, 149
EvenSleven. 120-121
HclloDan archivo fuente, 26-28
433-434
lormaios de archivado
archivos CAU. 190
archivos JAR. I8S-I89
carga, 243
dibujo, 245
consirucior. 470
ejecuiar, 482
inilQnAO, niiodo. 474-475
HTML. marcado
alineacin. I85-IS6 <APPLET>, etiqueta, 182-185
espaciado. 186
475-479
inainO. muuio. 475
pUKVSvIlipillO, IIKMihK).
lizacin, 372-374
subpaneles, 369-370
comparado con las aplica ciones, 13, 174. 377
CHiipoucnles. 3O9-. II
'
panorama, 302
relleno de celdas, 31?
de flujo
comunicacin enire
<O13JL:CT>, entnela.
ejemplo. 293-294
ejemplo de applet
Checkers, 258-261
WAITFORANSWER.
eslado, 473
1592
ndice
asignacin
resiricciones a componemes
306
definicin. 356
ejemplo de Te.MDialog,
357-360
modal, 356
creacin, 282
objetos de archivo de
dilogo, 361
ventanas de dilogo. 357
diferencias en plaiaformas,
268
marcos
parpadeo, 239-243
piniar/rcpiniar, 232-233
recuperacin ,lc maten
crcauii, 352
SumAveragc, cjcniplo,
150-151
pasar a:
243
resumen, 231-232
dunensionamicnio. 353
ejemplo di. .'JaselTame,
355-156
IM.'ltiIS
dc^in, 341-343
de r:rt de texto, 344 de ba xa de desplazamien,0, 144-345 de er foque. 343-344
ilc ti.- ia iIl- barra du
aplicaciones. 148
color, 220
t i
9
applels. 191-195
mindos. 143-145
iiTasIrar y colocar
sonidos. 261-264
acii\.ir. 363
elemeiitiis do nicm.s.
.i63-.t(,4
ovenlos. 364 poor. 3I.S
t
1
Se Back, 345-348
inierfaces. 576
ArraylmlexOulOfltounds.
inicio, 368
u-ntanas. 352
31 -1-319. 338-340
mo\ miemos de raln.
excepcin, 417
ArrayTcst, aplicacin clase. 116 cdigo fuenie. 115-116 mainO, mlodo. 117
piinlNamest). mtodo. 1 16
salida. 1 16
resullados de actualiza
cin, 372-374
eventos. 361-302
subpaneles. 369-370
componemos
ocultar. 353
'fu iwiihit'-ti grlia; JPC
arreglos, 5611
elememos
agregar a coillonodoios.
dibujo
barras de desplazamiento.
2S5-2X6 botones, 273
campos de lexio.
B
liad ciimniand o error en nom
bre de archivo, mensaje, 26
adminisiradores de diseo
aliernalivas, 315
combinar, 298-299 creacin, 292
279-2X2
haras de desplazamiento
creacin, 285-286
asociacioner
A? 1-435
pru. la. I 83-1 4
borrar. 457
ejemplo, 286
lista de seleccin,
277-279
Swing. 517-518
lisias dcspla/ahlcs.
283-285
cliangcCciloiO, mtodo,
347
CAB. 1-0-191
JAR, I KM 89
variables, I 12-113
especificacin, 292-293
mrgenes, 313
panorama, 292
cuadros de dilogo
agregar a los appletx 3(,(j
creacin. 357
1594
Indi"
CABBASE (etiqueta
i
herencia mltiple, 54, 401
panorama, 48-50
try...calch. 419-421
ltoole, (corgc, 42
disea 3fi7
iniciit, 36S
Certifcale
clase, 613
creacin, 273
de concatenacin, 86
nuil, 540
internas, 409-410
alcance, 411
ejemplo, 410
nombrar, 411
de instancia, 136-137
vm liimhiri, iiiicrfat-fs
ejemplo, 273
etiquetado, 273
de opcin
inlcrfaz, 609
ciclos,
creacin, 274
ejemplo, 275-277
Swing, 517
ventajas, 410
Windows, 352
lizacin, 372-374
dibujar, 207
do...\vhile, 130-131
lor
JRuiinn. 5I.S
manejo de eventos
:le accin, 537
ejemplo, 127-128
errores comunes. 127
jerarquas
JCheckBox, 516
diseo, 52
JComboBox, 517
Cl.ASSI'ATH (configuracin
del JDK), 397
claves
de elcmenios, 541-5-'.'
Swing, 515-516
BR, eliqucla, 185-186 Itreaklterator, clase, 616
ItiifTcrcdliipiifSlrcaniO, mlodo, 445
campos de texto
caracteres de ocultamiento,
280
control, 281-282 creacin, 279-280 ejemplo, 280-281 manejo de eventos eventos de accin, 537 eventos de elemento,
541 -542
BulTiTcdOutputStrcamO,
mtodo, 446 BufferedKeaderO, mtodo 454
AbstraciColleclion. 618
agregar a paquetes. 39S
Applet. 177
Arc2D.Floai, 224
JRadioButton. 517 JScmlIBar, 517 JTexIArca. 516 JTexiField, 516 l-ine2D.I-loai, 223
Meihod, 109
Modilicr, 109 MyReci
JPasswordField, 516
resultadas de la actualizacin
-VIII-SCu!,,,!), IIICIikIi,
37-1
ii
buildKcctO, mlodo
Swing, 5)6
Clipboard, 498
declinacin, 155-156
sobrecarga, J56
bullonO, mtodo, 273
auxiliares, 147-148
UullonGroup, 517
aplicacin de muestra
499-502
buildReciQ, mlodo
155-i 56
ClipboardOwner. imerfa/
499
subpanclcs, 369-370
comando cd, 28
operaciones de copiar/pegar
499
clases, 180
MyRect2, 161-162
NamedPoini, 167 Pcr.son, 159
lectura. 440-442
casillas de verificacin botones de opcin, 274-27 ' creacin, 274 devolver estado de, 274 ejemplo, 274
manejo de eventos
105-106
compoiicnicj,
ActiveX. 4S6
archivos de salida
creacin, 443 escribir en, 443- 44
ServerSocket, 467
Socket, 467
l>rimSubClass2, 164
COUKBASE (etiqueta
cdigo de bylcs, 18
adminisirador de la imcrla/
de usuario, 521
agregar a las aplicaciones,
s
'i
Choicc, 277-279
definicin, 136 diseo. 36-38
cdigos de escupe, 75
color
541-542
definicin. 48. 62
superclases
atributo de transformacin
220, 2I6-2IK
FileDialog, 361
finales, 392 FontMetrics, 214
TextDialog. 358-359
596
ndice
reas de icxio
condicionales, 560-561
control, 283
creacin, 282
488-489 interfaz de usuario/conso lidacin de API, 490 mecanismo para descubrir clases, 487
persistencia, 487
definicin, 1)9
if
ejemplo, 282-283
Swing. 516 asociacin con escuchas de
evento, 533-534-
definicin, 101 objetos a clases, 103-104 a interfaecs. 104, 405 Ciraphics2D. 219
i
*
CniiKlnsiiincrs. clase, .W
eoini(lluiiiM), mtodo, 27V cuadricula de liolsa,
porttil, 487
ejemplos. 123-125
limitaciones. 123
conectividad de redes conexiones Web, 462-463
260-261
soporte de computacin
creacin, 273
. ejemplo. 273 diquelar, 273
Swing, 515-516
definicin, 462
finjas
HitITciedRcadcr, objetos.
lienzos. 2S7-2K8
listas de seleccin
464
D
DalaHawirO, lili'loiln, 497 DalaliipiilSlrenniO, mtodo,
44'*
creacin, 302-303
gclHSBColorO, mtodo
374
DuluOulpiiiStrciiiiK), mtodo,
4-IV
(cuitamiento, 2X0
control. 2X1-282
463
UKLConnccion. objetos. 463 sockets
RCBtoHSBO, mtodo
373
dalos, llnjos de
Ueadl'nmes. 451
WritePrimcs, 450-451
cieacin. 449
t 3
creacin. 2 74
ejemplo. 2 4
2S4
diseo. 303-304
implemcntacin de la
proporciones rengln/colum
na, 307-31)9
lectura, 449
dalos, sabores de
cieaciiin. 497-49S
ejemplo, 284-285
mtodos abreviados de
diseo, 469-470
ejecucin. 482
implenicnl.tcin de cliente, 479-481
teclado, 522
nombrar. 523
aplicacin de muestra,
499-502
de accin, 537
creacin de di -ieripciones
para, 522
definicin, 26 i. 486
etiquetas
restricciones
implemeniacin del
ClipboardOwner. interfaz
499
anchor, 310-311 fill, 3)0 gridheight, 306 gridwidth. 306 gridx, 306
gridy. 306
396
objetos transferibles
cadenas de texto, 498 definicin de. 497
aplicacin de ejemplo,
527-530
imerfaces, 405-406
miudos. 139. 561-562
constructores. 562
de confirmacin. 524-525
de entrada. 525
weightx. 307
weigthy. 307
de mensaje, 526
de opcin. 52(>-527
definicin. 356
modales. 356
decase, 145-146
ejemplo, 139 listas de paimciros, 140 lilis, palabra clave. 14 1-142
variables. 67, 557-55S
de clase, 95
l'o|>.vArray\Vhlc, programa
129-13
sugerencias, 522
ventajas. 486
componentes de software, vea
componentes
API de ii rospeccin.
I'H)
API de m inejo de
aplicacin de muestra,
499-502
TexiDialog, ejemplo,
357-360 ventanas, 357
de instancia, 136-137
mltiples, 68
ClipboardOwner, interfaz,
499
arquilectu a, 487
104-105
objetos transferibles
cadenas de texto, 498
charAtO. mtodo, 98
"I5-'
|598
ndice
599|
mensajes
etiquetas (HTML)
<APPLET>
! -t
i--i'
ciclos. 262-264
versiones de Juva, 15
desborde (asignacin de variable), 88 descargar
Comando o nombre de
archivo incorrecto, 26 vea tambin excepciones
CODEBASE, ulribulo.
187
CABarc, 190
JDK, 22-23 JFC, 510 despliegue applcts applclviewcr. 60-61 painlO, mc*lodo, 1SU
diseo
clases, 36-38 conexiones de sockel,
ejemplo, 1-82-183 H.STACI-. iinb.il... l, VSl'ACIi, atribulo, 1X6 <BR>, 185-186 <OnJF.CT>. 1X7-188
I'AKAM>, I'JI |9J
424
lemas de herencia l.'.s -I.1
ActionListcncr, 537
AdjusimcniLisicner
KvenSlevcn, programa de
prueba, 120-121
eventos de ajuste, manejo, 538-540 eventos ele clic, iiumcj
adjusnenlValueChanged().
mlodo, 538
piograitia de inucslra
limitaciones, 429
Mall'nrmedURLHxcepiion,
417 ma/)cjaJures afiidatlos,
427-42.S
panorama. 436
gciFocusO, miodo.
343-344
538-540
clemenlo, 541-542
niMiiscIJowiio. inioiii)
1
f
losiFocusQ, mlodo,
343-344 entrada/salida ilujo.s
319-320
Dminos applct, sitio Web, 12 dol, notacin, 93-94 DoTest, programa de muestra, 131
almacenamicnio en bfer.
445-448
cerrar. 439
lemSlaleChangedO,
indlodo. 54 I
verificacin de consistencia.
4IX
imgenes, 245
lneas
programa de muesira,
541-542
MouseMoiionLisiener,
544
Ellipse2D.FIoai. clase,
223
mouscDownO, 319-320
mouseDragO, 325
mouseEnterO, 326
mouseExiK), 326
mouseMoveO, 325
mouseUpO, 320
escribir a. 439
*
(ib
b
j
^^
ejemplo, 271-272
definicin. 414
220-221
EOFExcepiion, 417
errores de compilador,
414-415
Swing, 515
ventajas, 271
429-430
explcitas, 424
implcitas. 424
; f;
600
ndice
archivos de lectura de
de etiquetas, 271 establecer, 213-214 Font, objetos, 213 funciones, ver mtodos funciones miembro, ver mtodos futuro de Java,16
texto, 453-455
de datos
atributos de transformacin
color, 220 220-221 trazos de dibujo, 222 elipses, 223
patrones de relleno.
guin (-), 81
final, clases. 392 mtodos, 391 palabra clave, 137, 390 variables, 391
class.dat, archivo, 442 readO. mtodo. 440 escribir en, 439 filtrar. 439. 444-445
focusGalncdO, mtodo, 540
get.Selecti-dlndexesO, mtodo
gabinete (CAH), archiveros,
190-191 285
combinacin, 298-299
creacin, 292
de bordes, 296-298
de cuadrcula. 294-296
de cuadrcula de bolsa, 302-313
de Unjo, 293-294
barras de desplazamiento
285-286 botones. 273
campos de lexio. 279-2X2
FocusListener, escucha de
evento, 532
CcneralPath, clase, 225 geometra, vea formas gclAccessibltContexli), mtodo, 523 iclActionCoimnandO. mtodo,
537
elS'vsieniCliplloiirdO, mtodo
49S
gclSourceO, mtodo, 534, 537 getStalc'O, mtodo, 274 gelSialeChangeO, mtodo, 541
casillas de verificacin
274-277
nei.SystemUiokAndFeelClass
Niinu-O, mtodo, 52 gelTe.vl<),mtodo, 271, 2S1
aplicaciones independientes
del AWT. 3i>4-3o5
listas de seleccin.
277-27"
certificados, 430
ejemplo, 431-433
navegador especfico, -133-434
panorama, 4M)
getAdjustmentTypeO. mtodo,
538
g*t Ap|ilt'l('oi>le\l( J, mtodo. 491, 495
gelToolkilO, mtodo, 498 getValueO, mtodo. 286 j;el\Vdf|i(), mtodo, 245 elXO, mtodo, 543
KelVO, mtodo, 543
iniciali/aciii. 368
(osling, James, 13
Roil-ocusO, mtodo, 343
< ni leos
animacin
dibujo. 208
GeiFilc. aplicacin de
muestra. 46-J-466
ejemplo. 209-211
relleno. 209
stihpaiieles, 369-370
componentes
agregar a contenedores.
getlnpuiStreamO, ml ido,
463
objetos Je conexin 1. RL.
4fi3
cerrar. 439
con almacenamiento en t ifer
creacin. 445-446
dibujar imgenes, 245 disposicin de objetos Graphics, 256 doble bfer, 257-261 observadores de im
genes, 246
polgonos
agregar punios a. 206
2n9-27O
barras de desplazamiento.
285-2X6
botones. 273
campos de texto, 279-282
204-205
relleno, 204
geiInputSircamO, mtodo,
466
parpadeo, 239-243
pintar/repintar 232-233
recuperacin de imgenes
243
de byies, 43^-440
flujos de entrada de
subprocesos. 233-239
arcos
aplicacin de muestra.
527-530
de, 214-215
1602
ndice
mens
HelloUan, aplicacin de
muestra
definicin, 356
de entrada, 525 de mensaje, 526 de opcin, 526-527 modales, 356
objetos de archivos de
activar, 363 barras de mens, 362 desactivar, 363 elementos de, 363-364 eventos, 364
Swing, 509
subpaneles; 369-370
limitaciones, 123
panorama, 122-123
plataformas de Windows,
28-30 sislema Solaris. 31 ejecucin
independencia de plataforma
mquina virtual. J7-I8 nivel fuente, 18
temas de desempeo. 19
ventajas. I (,-17
plataformas de Windows.
30
sistemas Solaris, 31 herencia
<OBJECT>, 187-188
517-518
bolones, 515-516
bolones de opcin, 517 campos de texto, 516
"ifiiili/cirn de appleis, 17
applcls. 178-179. 2.1.1
grficas de usuario.
>: CHIls
casillas de verificacin.
516-517
mtodos, 53
mltiple, 54, 401 panorama. 48-50
sobreponer, 178
ii'iiUoAd, niiou1,,, 474.475
inlerfaces mltiples.
403-40-1
desplazamiento, 344-345
de elemento , 541-542
aplicacin, 511-512
mtodos abreviados de teclado, 522
nombres de componentes,
i' . instrucciones
inlerfaces sencillas,
lOMtl.i
KiiMiiable 2.14
523
paneles de componentes,
keytoul. 432
policytool. 435 hidel), mtodo, 353
dibujo, 245
mapas de bits, 582-5S6
de teclado, 331-338.
512-514
542-543
de ventana, 544-545
escuchas de eventos.
observadores, 246
recuperacin, 243
probar la instalacin, 25-26 .sistemas Solaris. 24-25 Windows 95, 23-24 Windows NT, 23-24
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')
versiones de Java. 15
Hoava, navegador. 14
carcter de terminacin, 66
ciclos
318-319,338-340
mtodos. 534-535 mo\ imienios de ratn.
ejemplo, 408-409
do, 130-131
366
actuali/.acin de resultados
inlerfaces niiltiples.
403-404
for. 125-128
valores del ndice. I 2(i
whilc, 128-130
325-331.543-544
SetHack. applel de
ejemplo, 345-348
geiHSBColorU. mtodo.
374
inlerfaces sencillas,
402-403
KGBloHSHO. mtodo.
condicionales. 560-561
definicin de. 11 y if, 119-121
operador condicional.
ilemSiuleChiii<>ilo. mlodo,
541
H
handlcDeselccK., mtodo, 344
373
updaieO, mtodo. 372
ejemplos. 12.1-125
I 604
indiice
ndice
Swing, administrador de inicrfaz de usuario. 521 aplicaciones, 511-512. 518-520
6051
mtodos, 39-42
fecdJabberwockO. 42.48
porttil, 487
propiedades de tiempo
diseo, 488
ColorTest, applet
main(), 45-47
showAuributesO, "*3. 47
JAR (java archive), nrchivos,
1X8-1H9
dir,29
, ; ', ...
.-.. , . .
i . ColorConirols, clase,
,-: 376-377
componentes, 512-518
cuadros de dilogo. 52.V5.iO
ChangcTitie, 535-536
Selectltem, 541
jar, herramicnla, 188 JARS (Servicio de Monitoreo de- Java Applet). 569 ,
Java Dcvelopnient Kit, mi JDK
definicin de, 16
lne^arra () de canalizacin,
carcter, 83 lneas, dibujo de
drawLineO, mtodo, 203
399-400
SwingColorTest, 546-549
plataformas de Windows.
28-30
CopyPaste, aplicacin,
500-501
WellAdjusted, 539
Map, applet
teclado, 522
addLineO, 328
inii(), 326
definicin, 140-14]
llamar a, 97 .
MyRect, clase, 155-157 MyReei2. clase, 161-162 NamedPuim, clase, 167 Neko, applet, 253-256
NewPalindrome, applet de
muestra
paintQ, 329
elipses, 223
576-57S
CI.ASSI'ATH, instruccin.
578-580
color, 220
patrones di relleno.
220-221
configuracin UN1X,
58U-5XI
adniinistradores de diseo
de bordes, 297
u~.
trazos de
JavalU-uns
ibujo, 222
copiar, 22-23
disponibilidad. !5
instalacin
de cuadrcula, 295-296
de cuadrcula de bolsa,
rectngulos.' 23
comparada c -n Java.
bolones de opcin,
276-277
botones, 273
campos de lexio, 2SI
sistemas Solaris, 24-25 Windows 95, 23-24 Windows NT. 23-24 nmero de versin, verilicar.
574
AllCapsDemo, aplicacin,
457-459
115-116
ArrayTest, aplicacin,
casillas de verificacin,
275
etiquetas, 272
lienzos, 287
marcado de HTML, 60 pasar por referencia, 143-144 PopUpWindow, aplicacin, 354-355 PrimClass, clase, 163 printMeO, mtodo, 165 PrintSubClass, clase, 163 PrinlSubClass2, clase, 164 referencias, 99
reflexin, 108
BseFramel, aplicacin,
355
bloques iry...finally, 421-422
panorama, 21-22
Cl-ASSl'ATH. 579
PATH, 575
if, 120
swilch, 124-125 Jabberwock, ejemplo aplicacin, 45-46
4S7
l.abelTest, programa de
muestra, 133
ScopeTesl, programa, 142-143 SeiBack, applet, 348 Spots, applet, 323-324 SumAverage, aplicacin, 150
arrastrar y colocar, 16
descarga, 510
: ..,
de ca e, 4S7
lienzos, 287-288
ndice
6071
Swing
de enfoque, 540
de teclado, 542-543
de ventana, 361-362,
544-545
margenes
privado, 384-385
protegido. 385-386
llllRoundRecn). 2(H
SwingColo.Test. apli
cacin. 518-519
liandleliveiilO. inuxlo.
318-319
M
Macmillan Compuler
JavaBcans. 490
niens, 364 mtodos
HowLayouiO, 293-294
IbciisGincdl 1.540
lociisl.osnl. 540
(.lenle, 480-481'
definicin. 136
creacin. 363-364
tipos. 363
eventos, 364
changeColorO. 347
charAtO, 98
l-oni(). 213
charWidlhO, 214
chcckrxuO. 274
mainO, mtodo
firma, 147 Jabberwock.java, ejemplo.
45-47
checkEvcn). 121
Dalal-lavorO. 497
94-95
326-331
mouscDrag), mtodo.
325
abstractos, 392-393
actionO
argumentos. 341-342
DalalnputSireanid. 449
DaiaOulputSlreami). 449
definicin. 561-562
ejemplo. 139
felAudioCiipi . 2o2
gelC'lasstl. )0n
geiC'lickCounis 1.543
ci('odfHaM-( i. 244
de seleccin
agregar a conlenedoics.
mciuscEmert). mtodo.
32i
definir, 341
278
excepciones, 417
inanejadoios de excepciones anidadas, 427-42X
immwl-.xiul. muiiio.
.'2o
viColoni. 2IS
getCrossPlailiirmLoiikAnj
IvcI('I.inN.iiii>"i1. 521
.Cll'uiicill: '. -17~ geiniKiniK-niHased. 244
fetl-"ilel I. 4W>
creacin, 277-278
ejemplo, 278-279
desplazables
SwingColorTcst applicalion
clases. 545
agregar a coniencdorcs.
284
ailjusimeniValucChangedO,
538
disableO. 363
mtodos, 545
ArgStreamO, 448
disposel). 25(>
drawArc), 208 drawlmageO. 245-246
drawLineO, 203
gelliipulSueamtl. 4(i3
creacin, 283-2R4
321-324
ejemplo, 284-285
despiegabies agregar a conienedores,
BorderLayoulQ. 297
BulferedlnpuiSireamO. 445
BufferedOulpiitStreamO, 446 BufleredReaderO, 454 BuffeiedWriierO. 456
drawOvalU, 207
drawPolygonO, 205-2U6
333-337
278
AciionLisicner, 537
Adju.NiineiiiLisieiicr.
buildConstraimsO. 304-309
buildRecK), 155-156
buttonO, 273
337-338
538-540
asociar componentes con.
teclas predeterminadas,
332-333
CardLayoutO. 299
clearUccK). 212 dosel). 439
533-534
definicin. 531
manejo de la memoria, 93
Map2D, applet, 225-228
mapas d"bils
literales, 556-557
booleanas, 74-75 cadenas, 76-77
FocusLisiener, 532, 540 imponacin, 533 lieniListener, 541-542 KeyListener, 542-543 MouseListencr, 543
MouseMotionListencr, 544
closePathO, 225
constructores, 92, 153, 158
definir, 562 ejemplo, 159
feedJabberwock). 42
Filel), 456
FilcDialogO. 361
clases. 583-586
cdigos de escape. 75
definicin, 73
de carcter, 75 ven tambin conjunt < de
interfaces, 582-583
mquina virtual
panorama, 17-18
FilelnputStreanH). 440
FileOutputSireamO, 443
FileReader( ).453
FilcWriterO. 455 fillArcl), 208
getSysiemClipBoardl). 41>S
getSysiemLiKikAndFeelCNi^
WindowListener. 544
eventos
caracteres Unicodi
enteras, 73-74 numricas, 73-74
de accin, 537
de ajusie, 538-540
de elemenlos, 541-542
Namcl). 521
fillOvaK). 207
ftlIPolygonl). 205-206
filIRecu), 203
getValucO. 286
608
ndic
ndice
609 1
gelWidthO, 245
renameToO. 457
sobrecargados
creacin, 154-158
definicin. 153-154
Plug-in, mejoramiento de
navegador, 19
Navigator, 4.34 t ;'
gciXO, 543
gelY(), 544
repaimO, 232-233
replaccTexlO. 283
requesiI-iicusO. 335
ivslupi-0. 315 rcMe(). 353
ventajas, 154
liamlloEveniO. 318-319,
338-341) Ji.tmIIi-Si-kvH). 3-l-t
in.licadoi de couiaiuins, 25
mouseEiitcrO. 326
niousclixiil). 326.
165-166
ventajas, 165
stand, I7'J, 233
multimedia
animacin
applel Neka. 248-256
mouseMove(), 325
appleis subprocesadas,
mouscMovcdO. 544
235
sialic, 388-390
iiiO
..-'
'
inouseReleascd). 543
muuseUpO, 320
niovcTiif). 225
TriviaServer. aplicacin.
471-472
dibujar/iciluijar, 232-23.1
doble bl'er. 257-261
climinaciin de objetos
uviilirai'in. 2-18
lisiado del cdigo fuente,
253-256
siTollbarO. 285
sclecU 1.279
sel AcccssiblcDcscripi iiin).
testUlockO. 118
tcnica de animacin.
249-253
lexiAieaO, 282
texi-'ieldO, 279
523
ucwAudioClipO. 262
newPramel). 352
inscnTexH). 283
iuselsO- 313
isEditable), 282 itcmStalcChangcdO. 541
JHiiiiimK), 5Id
JComboBoxO, 517
JCheckBoxO. 516
newLinefj. 456
ncxiDouble), 92
oneoZcrol), 144
packO. 353, 512
i
i
URL 1.492
selConslrainlst). 3n6
valueOI'O, 98
uindoClosed(). 545
u'iiuInu'Clitsmg), 544
243
rutas relati\ a> de archivos.
244 subprocesos. 233-239
seiC'oiiieiuPaneO. 512
sctCuricntl). 277
setEehoCharO. 516
windowOpenedO, 544 writeO, 439, 455 writelnK), 452 wriieStreainO, 448 Microsoft, sitio Web, 190 minscula, convenir a
mayscula, 457-459
sonido ciclos, 262-264 ejecutar, 262 frmalos de archivos, 261 vt'a amblen grficos; GUls mullitareas. 233 MvKect. clase
buiidkeci), mtodo
JTcxtRcIdO- 516
kcyDown). 332
92-IV4
nevtDoulilfU, mtodo, 92
nombrar
'
kcyIVssedU. 43
425-426
definicin. 416 explcitas. 424 iinplciias, 424
sell.alelo. 273
sciLit.viuK 1.292. 2'^
M'il.iiiikA.ul:cell. 521
keyReleasei.I. 54 3
kcylyvill). 54 3
--keyU|H.. 332
abcl), 271
declai acin. 155-156 sobrecarga, 156 definicin de clase, 155 listado del cdigo fuente,
156-157
JincToO. 225
linkToi). 494
notacin exponencial, 74
NT aplicaciones de Java
parselnK), 146
passing. arruinemos pata,
4
m
MO. 284
sciSlringl). 271
sciSirokcl .222
loop*). 262
.losil;ocus(>. 34 3 losiOwncrshipi. 4'W
llamar, 96-98
143-145
compilacin, 28-30
playl). 262
PUS T. 483
mainf)
N
NamedPoint, clase. 1I7
# m
processlnpuu), 472-473
read(). 438
TriviaScrver. aplicacin.
475
showMessagcDialogO. 526
makeRangeO. 140-141
readStreamO. 448
sliowOpiionDialoiriJ. 526
showSialusl 1.491 size(). 212
nikdir). 457
motiscOnwn)
readUnsignedByict 1,449
readUnsignedShonO, 449
543
ndice
611
m -
.iv
Numberlteader, programa de
muestra, 124-125
ventanas, 353
iiisianccof, 535
objetos tianslciihlcs
cadenas de texto, 498
asignacin, 79-80
comparacin. 82
concatenacin (+), 86
condicional, 121-122
permisos, 431
persistencia, 487
l'erson, clase, 159
lcrales, 74
223
ocala*. 74
O
<njECT> etiqueta (HTML),
TS7-188
objetos
lgicos, 83-84
matemticos, 77-79
new, 85
dilmjaj
arreglos, 113-114
drawPolygoiK J. mloo. 21 5
NOT, 83
OR. 83
Java2D, 224-225
I'opUpWindoH, aplicacin, 354-356
precedencia, 84-85
reduccin
a clases, 103-KM
.i interfaces, 104,405
convenir a tipo-, primitivos.
104-105
creacin
orden de precedencia
administradores de
creacin, 29S
lU-liTcnccs'k'st.java, :i|>licacin,
lefeivncias, 99-IIMI relli-xin, 107-1119 eieiuplo. IOS
mrgenes. 313
paquetes
argumentos
memoria, 93
a aplicaciones. 148
argumentos, 90-91
claves. 597-601
cuniiol de acceso
predeterminado, 398
pblico. 399-400
creacin clases, 398
ceidura de la crpela.
rt'llfiiii, 3M
rellenos de degradado, 220
"
V
pack(), mtodo, 353, 512 package, instruccin, 398 paintO, mtodo, 57-58, 178-180,
232-233
398
patrones de relleno
arcos, 208-209
Q-R
QnA.txt. archivo (aplicacin
TriviaServcr), 47.1
Random, clase, 91-92
Java2D. 220-221
valos, 207 polgonos. 2W5-2O6
abstrae!, 392
break, 131
anchor. 310-311
asignacin a componenics.
395
Clipboard, 498-499
aplicacin de muestra, 499-502
304-31(6
nn. 3io
gridlicighl. 306
gridwidlh. 306 eridx. 306
caracteres en campos de
texto, 280
paquetes personalizados
implements, 234,402
I 612
ndice
gridy, 306
weighlx, 307
# i
barras de desplazamiento,
517-518
botones, 515-516
t
i
i
JavaWorld, 569
JDI3C, 506
JDK, 22
inil(), 322
casillas de verificacin.
516-517
creacin de descripciones
para. 522 diquelas. 515
UI'C (Llamadas de
I'roccdimicnlo Reino,o i, 51)2 runO, mtodo
applcts con subprocesos. 235
Macmillan Coinpuicr
i'ublislnng, 277. 5o5
constructor, 470
ejecutar, 482
Microsol'i, 190
I
I I I 1 I 1
Sugerencias, 522
cuadros de dilogo aplicacin ile muestra.
TriviaServcr, aplicacin,
471-472 Rminahle, Hierra/., 234 rulas relativas de archivo,
244
sobreponer, 179
527-53(1
showAIlributesO. mtodo, 43
sliouConllrmDialogO, mtodo,
524
472-473
QnA.txl, archivo, 474
L'mcode Consonium, 7b sizt-0. mtodo, 212 skelelon, capa (RMI), S03 Sockel, clase, 467
Strouslrup, Djarne, 13
subclases, 50 creacin, 55-60
cic.-iciiin, 521-524
de confirmacin. 524-525
de entrada. 525
definicin, 48. 62
de mensaje, 526
de opcin. 526-527
variables de instancia.
470
sabores (dalos), 497-498 salida, vea entrada/salida
salir WAITFORANSWER. estado.
definicin de. 16
mancjidc eventos, 531
473
ClMiigeTle java.
ejemplo. 55-537
WA1TFORCLIENT, estado.
473
csiiKha de eventos.
aplicaciones, 378
WA1TFORCONF1RM,
estado, 473
selAccessibleDcscriplionO,
implcnicnlacin de
cliente, 479-481
531-533
CNi.rbleccr componente,
533-534 ,1c accin. 537
implemento-ion dei
senador. 470-479
DiejIaK'loik. ejemplo.
23d-2 V)
iiMpicniL-macin.
234-23f>
de ajuste. 53h-54U
de elemento. 541-542
de enfoque. 540
SCROLI-_UNE_UOWN,
evento, 345
.SCIH.l._l.lNi:_Ll', evento,
implcnicnlacin de la capa de
transpone, 468
solucin de problemas
substringO, mtodo, 98
I
)
J
de ratn. 543-544 de teclado. 542-543 ilc vemana. 544-545 insianceof. palabra clave. 535
mtodo. 534
345
SCKOLL_PAGK_DO\VN,
evento, 345
simplicity of Java, 20
345
'
SCROU.J'AGK.UI', evento,
345
changeColorO. 347
inii(), 346
autoridades de cenifi-
muestra, 518-520
clases. 545
escuchas de eventos, 545
ciclos, 262-264
cacin, 431
certificados. 430
ejemplo. 431-433
v
#
614
ndice
ndice
615|
convertir a objetos,
Vinculacin
appleis. 491
492-494
toUpperCaseO, mtodo, 98
tramado 216
lr_\...calch, hlui|iies
aplicacin de Trivia
diseo, 469-470
ejecucin. 482
implemcntacin del lado del cliente, 479-481 implementacin del lado
112-113 '
variables mltiples. 68 decrcmento, 80-81 definicin de, 67
CLASSPATH. insimccin
636-638
errores Class or found,
d.M-i.t,
WINI)O\V_I)KSTROY, evini,
l'ATH, inslruccin,
(i.t I 611
virili'O. inri.ido. 439, 455
vvi i-fiiM I ihi'IIiimI, 452
u
UIMana>er, clase. 521 Unicodc. cunjunlu de caracteres, 69
cdigos de escape. 75
w
WArn-OKANSWKR, estado
(l'riviaServcr), 47J
del lado del clicnle, 467 del lado del servidor, 467
implemcnlacin de la capa de
Wrilel'riiius, aplicacin.
450-451
transpone, 468
YVAITKOKCI.IIiNT.iMado
(TriviaServerl, 473 W.AITFORCONI'IKM, oslado
(TriviaServer), 473
\Veb, publicacin (|c iipjjlils,
184
teclado
'.>iiid(ivv()|)ened(I. mlodo.
5-14
x-z
XOi, operador, H. /ip, archiveros, l*>0
Windows 95/Windovvs NT
aplicaciones de Java
compilar. 2S-3I)
ejccuiar. 30
mimbrar, 69-7U
337-33S
teclas predeterminadas,
332-333
mtodos abreviados, 522 leslilloekO, mtodo. 118
V
valoeOK), nilodo, 98
variables
convenir a maysculas,
alcance. 118
alcance de lxico, 134 ScopcTcsi. pruprania
457-459
dibujo, 200-201
gable. 356
544-545
marcos
Thruwable, clase, 4 6 tipos de datos, 7(1-7 ,JI0 hooleanus, 42 conversin por c: st,
101-102
creacin, 352
definicin. 352 dimensionjr. 353 ejemplo de Baser>.mic.355-35i
CLASSPATH, 397
constante
KM-105
tipos primitivos, 7C -71, 110
conversin por i jst.
acuitamiento. 353 Window, clase. 352 v erilcacin de consistencia (excepciones!, 418 Vt'riSign, 431
101-102
privado, 384-3S5
protegido, 385-386
^Jvi