You are on page 1of 317

Laura Lemay

Rogers Cadenhead

Aprendiendo

TRADUCCIN:
Antonio Enrique Gonzlez Velzquez
Traductor Profesional

Jos Antonio Solbes Shang


Traductor Profesional

REVISIN TCNICA:
Ariel Ortiz Ramrez

Profesor en Ciencias Computacionales

Tecnolgico de Monterrey, Campus Estado de Mxico


PRENT1CE

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

Les ABCs de Java


instrucciones y expresiones Variables y tipos de datos ...

65
...66 ...67

Resumen de contenido
Introduccin Semana 1 1 , 7
9
33

Creacin de variables Nomenclatura de variables


Tipos de variable Asignacin de valores a las variables
Comentarios
!.heniles

67 69
70 72

Los inicios de la programacin en Java


Introduccin a Java i

72
73

Da I
2 3
4 5 6

Un vistazo a la programacin orientada a objetos Los ABCs de Java


Lecciones de objetos Listas, lgica y ciclos Creacin de clases

Literales numricas
Lcrales boolcanas
Literales de caracteres

7.1
74
75

65 89
111

Literales de c;ulcna Expresiones y operadores

76

77
.;

135

Aritmtica
Ms sobre asignacin
Incremento y decrcmento

77
79

Uso de mtodos para realizar tareas

153

80
2

Semana 2 Temas avanzados de Java


Da 8
9

171
173

Comparaciones

Operadores lgicos
Precedencia de operadores Aritmtica ele cadenas
Resumen
Preguntas y respuestas

X3
S4
So

Cmo poner programas interactivos en Web


Cmo mejorar la apariencia de sus programas con

grficos, fuentes y color


10 Adicin de imgenes, animacin y sonido

231

87

N8

23!
267

DIa 4

Lecciones de objetos
Creacin de objetos nuevos

89
yo
90

11
12
13

Construccin de inierfaces de usuario sencillas para applets


Organizacin de los componentes en una nterfaz de usuario
Respuesta a la entrada del usuario en un applet

291
317

Uso de new

Observacin acerca de la administracin de memoria Acc;so y establecimiento de variables de clase y de instancia


Cmo obtener valore.-.

Qu hace ncw

92

14

Desarrollo de interfaces de usuario avanzadas con el AWT

351

93 93
93
44

Semana 3 Afine sus conocimientos de Java

379

Da 15
16
17
18

Funciones de las clases: paquetes, inierfaces y otras caractersticas


Circunstancias excepcionales: manejo de errores y la seguridad
Manejo de datos a travs de los flujos de Java
Comunicacin a travs de Internet

38!
413
437
461

Modificacin de valores
\arhbles de clase

95

Llanadas a mtodos
I. ;>s mtodos dt clase

96
os
'}')

Rel encas a objetos

Con ersin por east y conversin normal de objetos y tipos primitivos


L onversiii por cast de tipos primitivos
Conversin por casi de objetos

100 102

19
20

JavaBeans y otras caractersticas avanzadas


Diseo de una interfaz de usuario con Swing

485 509
531

103
104

Conversin de tipos primitivos a objetos y viceversa


Comparacin de valores de objetos \ de clases
Comparacin de objetos

-21

Manejo de eventos de usuario con Swing

105
105

Determinacin de la clase de un ob< *>

107

Contenido

Examen de clases y mtodos con reflexin

553
Apndices

Apndice A
B

Resumen del lenguaje Java


Recursos de Java en Internet

555
565 573 583
DIa5

Resumen . Preguntas y respuestas


Ustas, lgica y ciclos

* -.

'

( jq
111

Configuracin del JDK

Arreglos Declaracin de variables de arreglo Creacin de arreglos de objetos


Acceso a los elementos del arreglo

...... ;
;

^ " ^ ]4

Uso de un editor de texto con el JDK


ndice

589

Modificacin de los elementos de un arreglo Arreglos multidimensionales Instrucciones de bloque

^ ^ ^^ ^

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

Resumen Preguntas y respuestas


DIa 6 Creacin de clases

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,

Alcance de variables y definiciones de mtodos


Paso de argumentos a mtodos

^
)4<.

Mtodos de clase
Creacin de aplicaciones en Java

,46
]47

Aplicaciones Java y argumentos de lnea de comandos


Paso de argumentos a las aplicaciones Java Manejo de argumentos en su aplicacin Java

Clases auxiliares

^
j4g - )5)

]4g

Resumen
Preguntas y respuestas
.e de un objr-io .

)52
:

v-

w.

Aprendiendo Java 2 en 21 Dns

Contenido

DlA 7 USO DE MTODOS PARA REALIZAR TAREAS


Mtodos constructores

',

153
154 .. 158 .. 159
;

Creacin de mtodos con el mismo nombie, pero con diferentes argumentos


Mtodos constructores bsicos
Cmo llamar a otro mtodo constructor
! Sobrecarga de mtodos constructores

Rectngulos valos Arcos

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

Cmo llamar al mtodo original


Sobreposicin de constructores

.. 165
.. 166

Mtodos finalizadores

.. 168

Color

216
216 217

Resumen
Preguntas y respuestas

.. 169

.. 169

Uso de objetos Color Cmo probar y establecer los colores actuales

Operaciones grficas avanzadas mediante Java2D


Espacios de coordenadas de usuario y de dispositivo

218
219

Semana 2 Temas avanzados de Java


DIa 8 Cmo poner programas interactivos en Web
Diferencias entre los applets y aplicaciones
Restricciones de seguridad de applets

171
173
174

Colores 20

Conversin por cast de un objeto Graphics2D Especificacin de los atributos de modelizado

219 220

175 176 177 177

Cmo elegir una versin de Java

Control de seguridad mejorado


Creacin de applels

Resumen Preguntas y respuestas

Creacin de objetos para dibujar Dibujo de objetos

223 225 228 229

220'

Actividades principales de applets


Un applet sencillo

178
180

DIa 10 Adicin de imgenes, animacin y sonido

231

Inclusin de un applet en una pgina Web


La etiqueta <APPLET>

182
182 . 183 ^

Animacin en Java Pintado y repintado


Inicio y paro de la ejecucin de un applet

232 232
5J

Cmo probar el resultado


Cmo poner appieis en Web

Control de la animacin mediante subprocesos Cmo escribir applets con subprocesos

233 234

Ms acerca de la etiqueta <APPLET>


HSPACE y VSPACE

185

'

Cmo poner todo unto


Cmo reducir el parpadeo de la animacin

2*6
TO

~3*

CODE y CODEBASE
La etiqueta <OBJECT>

.uchiveros JAVA Otros formatos de almacenamiento


] 'aso de parmetros a los applets

. 1S8 . 190
. 191
. 195

El parpadeo y cmo evitarlo Sobreposicin de update () Una solucin: no limpiar la pantalla


Recuperacin y uso de imgenes

239 240 240 243 244 ~ *


246 2-+3

'Insumen
'regunias y respuestas

. 197

Cmo obtener imgenes Rutas relativas de archivo Dibujo de imgenes

Una nota acerca de los observadores de imgenes

Da 9 Cmo mejorar la apariencia de sus programas con grficos,


fuentes y color

Cmo poner a trabajar las imgenes


199

246
248

Cmo crear animacin mediante imgenes

La clase Graphics

. 200 . 202

El ejemplo Neko

El sistema de coordenadas para grficos


Dibujo y relleno

Doble bfer

256

24S

.. 202

Aprendiendo Java 2 en 21 Das

Contenido

XII

Una nota acerca del borrado de objetos de Graphics


El applet Checkers Recuperacin y uso sonidos

258 258

Manejo de los movimientos del ratn

325

Eventos de arrastre y movimiento del ratn


Los eventos ratn entra y ratn sale '.

325
326

261
2M

Resumen
Preguntas y respuestas

V.

Un ejemplo: dibujo de lneas Manejo de los eventos de teclado

326 331

205

DIa 11 Construccin de .nterfaces de usuario sencillas para applets

267
.... 2(.S
....269

Los eventos tecla abajo y tecla arriba


Teclas predeterminadas

332
332

El AWT

Componentes de una interfaz de usuario


Adicin de componentes a un contenedor

Un ejemplo: escriba, despliegue y mueva caracteres


Prueba de las teclas modificadoras y los botones mltiples del ratn

333
337

.... 26')
.... 27I

El manejador de eventos genrico

338

Etiquetas

Botones Casillas de verificacin


Listas de seleccin

.... 273
. 274

Manejo de los eventos de componentes


Manejo de eventos de accin

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

343 344 344


345

Campos de texto
reas de texto

.,<,.,
.^

Listas desplazabas
Barras de desplazamiento y deslizadores
Lienzos ,

08J
"^
T^y

' Adicin del cdigo de eventos


Resumen

346
349

Preguntas y respuestas

349

Resumen Preguntas y respuestas

... 289
291

DIa 14 Desarrollo de interfaces de usuario avanzadas con el AWT


Ventanas, marcos y cuadros de dilogo

351
352

DIA 12 ORGANIZACIN DE LOS COMPONENTES EN UNA .NTERFAZ DE USUARIO


Diseo bsico de inlerfaces

... 292 oy?

La clase Window

352

Marcos

352

Diseo de una interfaz

El administrador FlowLayout El administrador GridLayout


El administrador BorderLayout Cmo mezclar administradores de diseo

"^ ~%
"^ "^

Cuadros de dilogo Eventos de ventanas


Mens Mens y barras de mens Elementos de men Evenlos de men Creacin de aplicaciones AWT independientes
Un ejemplo completo: el convertidor RGB a HSB El diseo del applel Definicin de los subpaneles Manejo de eventos Actualizacin del resultado

356 361 362 362 363


364 364

Diseo de interfaces avanzadas


El administrador CardLayout

~^
'

El administrador GridBagLayout Relleno de celdas

,^ ^^

Mrgenes
Resumen Preguntas y respuestas

-,l4
3I4
317
318

366 367 369 371 372

Ha 13 Respuesta a la entrada del usuario en un applet


Manejo de eventos
Tipos de eventos
El mtodo handleEventO

El cdigo fuente completo Resumen '. Preguntas y respuestas

375 377 377

Manejo de los clics del ratn

Eventos ratn arriba y ratn abajo

Doble clic

XII

Aprendiendo Java 2 en 21 Das

Contenido

XIII I

Semana 3 Afine sus conocimientos de Java


DIa 15 Funciones de las clases: paquetes, interfaces y otras caractersticas
Modificadores

379
381

Cmo declarar mtodos que podran lanzar excepciones La clusula throws

422 423,

Qu excepciones debera lanzar? Cmo pasar las excepciones


throws y herencia

423 424
425

Control de acceso a mtodos y variables

3S2

Mtodos y variables estticos

Clases, mtodos y variables final

388

390

Cmo crear y lanzar sus propias excepciones


Cmo lanzar excepciones

426
426

Clases y mtodos abstractos


Paquetes .

Variables Mtodos Clases .

39-

391 391 392


4
3o

Creacin de sus propias excepciones


Combine throws, try, y throw

427
427

Cundo usar excepciones y cundo no

428

Cundo usar excepciones


Cundo no usar excepciones
Mal estilo al usar las excepciones

428
429
429

Uso de los paquetes

Nombres completos de paquetes y clases


El comando import

Cmo usar firmas digitales para identificar los applets


Ejemplo de una firma digital
Firmas especficas para navegador

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

7 397 398 398 398

Polticas de seguridad
Resumen Preguntas y respuestas

'.

434
435 435

DIa 17 Manejo de datos a travs de los flujos de Java


Introduccin a los flujos

437
438 438 439

Interfaces

El problema de la herencia sencilla

40
401

Cmo utilizar un flujo Cmo filtrar un flujo

Interfaces y clases

Implementacin y uso de las interfaces l.-nplemeniacin de mltiples interfaces

4^2
44C-

Flujos de bytes Flujos de archivo


Filtrado de un flujo

440 440
444 445

Otros usos de las interfaces Coi io crear y extender las interfaces


nterfaces nuevas

44 405
406

Filtros de bytes

Mtodos dentro de las interfaces


Un ejemplo: enumeracin de listas vinculadas

Tomo extender interfaces

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

Resumen Preguntas y respuestas


DIa 18 Comunicacin a travs de Internet Conectividad en Java Apertura de conexiones con Web Apertura de un flujo a travs de la red Trivia: un socket simple tipo cliente-servidor Diseo del programa Trivia Implemenlacin del servidor Trivia . ,

452 453 455 456 459 460

461 462 462 463 468 469 470

DlA 16 CSCUNSTANCIAS EXCEPCIONALES: MANEJO DE ERRORES Y LA SEGURIDAD

413

Excepciones, la forma vieja y confusa

414

I as excepciones de Java
Manejo de excepciones

4!5
417

Sockets

467

Verificacin de la consistencia de las excepciones Proteccin de cdigo y captura de excepciones


La clusula f inally

v 418 41S

V
Contenido
xv I

Aprendiendo Java 2 en 21 Dias

Implementacin del cliente Trivia


Trivia en accin ;

;""

.479

Cuadros de dilogo estndar Un ejemplo: la aplicacin Inf o

Resumen
Preguntas y respuestas

Resumen Presuntas y respuestas

DIa 19 JavaBeans y otras caractersticas avanzadas


JavaBeans El objetivo de JavaBeans
Cmo se relacionan JavaBeans y Java

485

DlA 21 Manejo de eventos de usuario con Swing


El evento principal
Escuchadores de eventos

s
532

4g8

Cmo establecer los componentes

Mtodos manejadores de eventos

534

La API de JavaBeans
Trucos con applets

Trabajo con mtodos


.491

Eventos de accin
Eventos de ajuste Eventos de enfoque
Eventos de elemento

El mtodo showStatusO Informacin de! applet


Creacin de vnculos dentro de los applets
Comunicacin entre applets

.491

.491

.. 541

. 496

Eventos de tecla
Eventos de ratn
Eventos de movimiento del ratn
Eventos de ventana

"
5"+4

Cortar, copiar y pegar


Creacin de objetos transfcribles El portapapdes

.. 497
.. 49S

544

Invocacin a Mtodos Remotos La arquitectura de la RM1

.. 502 .. 503
.. 504

Un ejemplo: la aplicacin SwingColorTest

5
...

Resumen
Preguntas y respuestas

Creacin de aplicaciones RMI Conectividad para bases de datos de Java

.. 505

... 506

Resumen
Preguntas y respuestas

... 507
509
...510

Apndices

553

Apndice A Resumen del lenguaje Java


Palabras reservadas

DIa 20 Diseo de una interfaz de usuario con Swing


Los beneficios de Swing
Estructura de una aplicacin

556
^^

... 511 ...512


...514

Comentarios

Cmo agregar componentes a un marco de Swing


A trabajar con Swing

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

Casillas de verificacin y botones de opcin

- - " ^

^16
^7 M8

Arreglos

"'.560
* ^

Ciclos y condicionales

560

Definiciones de clases

Listas de seleccin Barras de desplazamiento


Un ejemplo: la aplicacin SwinoColorTest

Definiciones de mtodos y constructores

Importacin

^
565

Proteccin
Apndice B Recursos de Java en Internet
Sitio Web de este libro 565 56fi

Las nuevas caractersticas de Swing


Cmo establecer la apariencia

5J]
,..

Mtodos abreviados
Informacin sobre herramientas

^2
^

Otros ttulo a considerar

Descripciones y nombres de los componentes

. 5<>6

Acerca de los autores


libros sera mucho
s d.vcrt.do. En sus

n sino de Su,, Mierosysicms

. 5oK

Otros sitios Web sobre Java

. 568

U pgina de libros de Java

S5

do sei

JavaWorld

Preguntas mas frecuentes en J..va

. 570

Grupos de noticias de Java

. 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").

refina la informacin que se ofrece.


Como parte de este compromiso con usted, el lector de PHH, Prenlice-Hall

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:

Sin embargo, recuerde que el personal de Prenlice-Hall Hispanoamericana no puede actuar

como sopone tcnico o ni responder preguntas acerca de problemas relacionados con el


software o el hardware. Si usted tiene alguna pregunta o comentario acerca de cualquier libro de Prentice-Hall Hispanoamericana, existen muchas formas de entrar en contacto con nosotros.

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

Prentice-Hall Hispanoamericana, S.A.


Attn: Editorial Divisin Computacin

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

Calle Cuatro No. 25, 2" Piso,


Co!. Fracc. Alce Blanco

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

Naucalpan de Jurez, Edo. de Mxico. C.P. 53370

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.

Si lo prefiere, puede mandar un fax a Prentice-Hall Hispanoamericana al (525) 5387-0811.


Tambin puede ponerse en contacto con Prenlice-Hall Hispanoamericana a travs de nuestra
pgina Web: tittp: //www.prentice.com.mx

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.

Se pueden encontrar pelculas en los principales videoclubes, atletas en una intriga de

&

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.

conjunto de herramientas de comandos en lnea para escribir, compilar y probar la ejecucin


Aqu es donde queremos presentar el libro Aprendiendo Java 2 en 21 das editado por
mediante la versin ms actual del lenguaje y las mejores tcnicas disponibles.

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

de por qu podra ser el lenguaje de programacin de mayor uso en la prxima dcada.

Aprendiendo Java 2 en 21 Das

Introduccin

Cmo est organizado este libro


Aprendiendo Java 2 cu 21 das cubre el lenguaje Java y sus bibliotecas ele clases en 21 das, organizndolas en tres semanas por separado. Cada semana cubre un rea amplia y distinta
del desarrollo de applets y aplicaciones Java.

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.

En la primer semana usted aprender el lenguaje Java en s mismo:

. 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.

En el da 2, explorar conceptos bsicos de programacin orientada a objetos al mismo


tiempo en que son aplicables a Java.

En el da 14 usted redondea su conocimiento del AWT al aprender a desarrollar ven


tanas de aparicin, rnens, y aplicaciones independientes.

En el da 3. ser iniciado en detalles con bloques bsicos de construccin en Java: tipos


ile dalos, variables, y algunos tipos de expresiones como las aritmticas y las compara
ciones.

La semana 3 incluye tpicos avanzados y una introduccin a Swing, la nueva expansin de


programacin visual al AWT:

En el da 15 usted aprende ms acerca de interfaces y paquetes, los cuales son tiles


para agrupar clases y organizar una jerarqua de clases, as como oros aspectos avanza

Durante el da 4 se profundiza en detalles de cmo manejar objetos en Java, cmo


crearlos, cmo lener acceso a sus variables y llamar a sus mtodos, y cmo comparar

los y copiarlos. Tambin tendr un primer contacto con las bibliotecas de clases Java.
. En el da 5, aprender ms de Java a travs de los arreglos, instrucciones condicionales
y ciclos

dos del ncleo del lenguaje por s mismo.

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).

El da 17 cubre los flujos de entrada y de salida, un conjunto de clases que permiten el


acceso a archivos, el acceso a red, y otros manejos de datos sofisticados.
En el da 18 usted extiende su conocimiento de flujos para escribir programas que se comu

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.

La semana : se dedica principalmente a los applet y las tcnicas de programacin grficas


como la anii.iacin y manejo de imgenes:

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.

Acerca de este libro


Este libro le ensea todo acerca del lenguaje Java y cmo usarlo para crear applcts tanto para

Web como para aplicaciones independientes. Al terminar "Aprendiendo Java 2 en 21 das"


usted sabr lo suficiente acerca de Java y las bibliotecas de clases Java para hacer casi
cualquier cosa, dentro o fuera de un applet.

Introduccin

Quin debera leer este libro


Este libro ensea el lenguaje Java a tres grupos:
Prograinadores novatos.

Convenciones

Nota

Una Nota presenta piezas interesantes de informacin, algunas veces tcni


cas, relativas a la explicacin del momento.

. denle cinc ha sillo introducida a Java I. I o 1.02

. Dcsarrolladcrcs experimentados en otros lenguajes como Visual C++, Visual Uasic o


Deplhi.

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

Un Tip ofrece un consejo o una manera ms sencilla de hacer algo.

. 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

Una precaucin le pone sobre aviso acerca de problemas potenciales y le


ayuda a evitar un desastre.

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

Los trminos nuevos estn acompaados de cuadros propios, con- el trmino


nuevo en itlicas.

. 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

Un icono de salida muestra el abandono de un programa Java.

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.

Si nunca ha si-.o introducido a la programacin orientada a objetos, estilo de programacin


inmersa en Ja> a, no tiene de qu preocuparse. Este libro asume que no se cuenta con

El lexlo que usted escribe tambin aparecer en negritas.

conocimiento: previos en el diseo orientado a objetos, y usted nene la oponumdad d, ap.uv


der l estrateg a de-desarrollo radical al tiempo que crea sus prop.os applets.

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

Los ABCs de Java Lecciones de objetos

5
6

Listas, lgica y ciclos


Creacin de clases

r :;^.r,

Uso de mtodos para realizar


tareas

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

seguir un mejor lenguaje y un ambiente de programacin para la construccin de


un software ms sencillo y confiable.
Bill Joy, cofundador de Sun Microsystems

El campanero loco tena razn. Es posible ganar dinero en un lugar como


ste.

El hombre sin nombre, Un puado de dlares.

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:

La leyenda de Java ha sobrepasado un poco algunas veces a la realidad:

A qu se parece Java hoy y cmo lleg hasta ah.

. "Los programas escritos en Java se ejecutan sin fa.la en distintas plataformas de


. "Java termina con .a hegemona de los sistemas operativos de MiaosoU.
elidas imcrnacionalinentc!"

Por qu vale la pena aprender Java, y por qu es un-justo competidor para otros lenguajes de programacin.

computacin sin modificaciones!"

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!"

. "Golpea tan duro que tu abuelo tendr un magulln!"


. "Puede matar a un hombre con slo parpadear!"

y la altsima cantidad de libros acerca de Java (1054 de acuerdo al ms reciente comeo de la


revista JavaWorld), usted podra lener una impresin exagerada de lo que Java es capaz de hacer.

Java es un lenguaje de programacin apropiado para disear programas que funcionen en conjun
to con Internet. Tambin es un lenguaje de programacin que hace uso de una melodologa cuya
programacin.

utilidad es creciente en el mundo del diseo de software. Adems, es un lenguaje de plataformas

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

vo JavaOS y est optimizada para el lenguaje.

Java es ms parecido a lenguajes de programacin populares como C, C++, Visual Basic y


Delphi, que a lenguajes de descripcin de pginas como HTML o un lenguaje de gene
racin de scripts sencillo como JavaScript.

de Java con Cl ni Eastwood: Java es fenomenal.

rap y puedo c inturrear 75 frases por minuto .

Nacido para correr... en Web


A Java se le conoce mejor por su capacidad para correr en pginas Web. Los navegadores de
Netscape Navigator e Internet Explorer de Microsoft pueden obtener un programa Java de
una pgina Web y ejecutarlo localmente en el navegador Web del usuario.

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

(tomando la entrada del usuario, respondiendo a ella y presentando un contenido en cambio

Basic" "C ns ms", "Algo!", o "Mumps

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

nada (dependiendo de si el diseador de la pgina ofrece una alternativa al applct de Java).


Conforme avance en este libro aprender ms acerca de cmo trabajan applets, navegadores y
Web entre s. Aunque los upplcls son probablemente el uso ms popular ile Jiivii, son solo un moilo ilc usar

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

(televisores interactivos, tostadores de pan interactivos, luces rastreadoras interactivas).

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

se utiliz el mtodo de Gosling "mira por la ventana" al renombrar al


lenguaje. Si lo tuviera, usted podra agregar alguno de los siguientes nom
bres de lenguajes a su curriculum en~21 das:
Fresalvaje Laventanaindiscreta Agujeronegro
Lavaventanas

# #

de

usa

-in funciona

V
Da 1 Introduccin a Java

Java 1.0.2Es an la versin ms ampliamente soportada por los navegadores Web.


Eshoradccomer

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

En diciembre de 1998, Sun Microsystems liber finalmente la plataforma


Java 2, cuyo nombre clave nicialmenle fue JDK 1.2. Es importante notar que

aunque el nombre oficial manejado por Sun con fines publicitarios es Java 2,
el kit de herramientas de desarrollo, junto con toda su documentacin en

linea, mantiene su nombre original: JDK 1.2. Por tanto, en este libio, sin nimo de confundir al lector, los trminos Java 2 y JDK 1.2 se manejan de
mo hbito de estallar en llamas.
manera intercambiable.

. Java es pcquclio -Los programas son ms rpidos de descaer desde una pg.na. . Java es seguro -Evi.a que los hackers escriban programa que -sen cW en los
. 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.

sin modificacin alguna.

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

mente llamado WebRunner, pero lo rebautizaron como HolJau!.


el lenguaje 4 te leE qe No*,* to. U pri.ncr, c
,

S3S

JFaciory de Rogue Wave


Natural Intelligence Roaster

* ,9,5 m 77-^:^ :r;r p ;!'o *

^^

CodeWarrior de MetroWerks

Java WorkShop de SunSoft

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.

Versiones del lenguaje

Precaucin

Sun ha liberado tres versiones principales del lenguaje Java:

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

Dime, dime^rita ^^ dc ^ JdK,,

,, *

equipo, sobre todo por las diferencias en sus procesadores y otros factores.

La figura 1.2 muestra lo que se obtiene de un sistema dependiente de la plataforma. Se deben


producir mltiples cdigos ejecutables para mltiples sistemas.

Figura 1.2

Archivo binario (Penlium)

^con, versin v,gen,e incoen lo siguiente:


l

. Swing _Nuevas caractersticas paralar unamtc:-*

^^

Programas compilados en forma tradicional.

Compilador (Penlium;

Archivo binario

^ ^

. Arrastrar y coloca, loca, -^J^'

de una merta de un programa a otra.

Compilador (Powor PC)

Archivo binario
(SPARC)

Compilador (SPARC)

tres sem-inas.

,r qu est usted aqu?


.,

Los programas dc Java logran esta independencia mediante una mquina virtual (algo as como

-t- nnr mi la sent

?^ >
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

Cdigo de bytes es la versin de cdigo de mquina de la mquina virtual de


Java, las instrucciones que comprende directamente.

A la mquina virtual tambin se le conoce como el inirprete de Java o el ambiente de tiempo

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.

rograma escrito en Cua ,do usted compila un programa escrito en

s.

ler.gu.ye

gy

o c

. ,a nviyOra de oros leneajcs.


.^ ^^ sop

James T. Kirk no tiene que aprender un nuevo idioma cada vez que aterrizan en un planeta, ya
que el traductor universal convierte sus palabras en una expresin que los exlraterrestres

.^

entienden. Del mismo modo, los programadores de Java no tienen que crear versiones distin tas de sus programas para cada una de las plataformas en las que desean aterrizar pues la

Da 1

Introduccin a Java

19

Precaucin
que

Sin embargo esto no est libre de problemas. Usted se debe concentrar en la


mquina virtual de Java soportada por el navegador. Si crea un applet que

Java le conseguir algunas citas similares.)

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.

instalado la mquina virtual de Java correspondiente. Si desea ejecutar aplicaciones de Java 2


Si est acostumbrado a crear cdigo especfico a la plataforma como en Visual Basic y Delphi, podra pensar que el intrprete de cdigo de bytes agrega una capa innecesaria entre
su cdigo fuente y el cdigo de mquina compilado.

en su sistema de escritorio, antes debe instalar la mquina virtual.

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

ms lentitud que los compilados en cdigo dependiente de la plataforma como C, y la di


Cdigo de bytts de Java /
Cdigo de Java
(Indepencienle

(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:

Mediante llamadas a cdigo de mquina especfico al sistema en su programa de Java,


Intrprete de Java (SPARC)

lo cual lo hace dependiente de la plataforma.

Mediante compiladores "justo a tiempo", los cuales convierten el cdigo de bytps de


Java en cdigo especfico al sistema.

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

Java est orientado a objetos


de oportuni

dades durante los prximos seis das.

Nota

Prentice Hall publica otra linea de tutorales dirigidos directamente a los


programadores novatos, entre ellos Aprendiendo Java 7.1 en 24 horas,

disponible desde 1997, de Rogers Cadenhead, coautor de este libro.

Mfflft.

tSgje&

m m

m
m

programas orientados a objetos.

Adntrese en la programacin en Java


Por hoy dejaremos de lado todas las lecciones de historia, para realizar la segunda mitad del
trabajo. Aqu tiene una oportunidad de ver a Java en accin cuando cree su primer programa en Java: una aplicacin.

conceptos de ...ros lenguajes orientados a objetos.

laOOPdcC+r,'

- '

Antes de empezar, necesita instalar la herramienta de desarrollo de Java 2 en su sistema.

1 #

Aprender n, s acerca de ,a programacin orientada a objetos y Java durante e, d,a _,


-Un vistazo ; la programacin orientada a objetos .

Cmo seleccionar una herramienta de desarrollo Java


Para escribir programas Java se ivi|iiii'rc al['.iin tipo ik1 paquete de programacin ik' Java. Si mi sistema ya puede ejecutar applcts al navegar por Web. tal ve/ piense que ya est preparado
para desarrollo. Pero ste no es el caso. Se necesita una herramienta de programacin para
poder crear y ejecutar sus propios programas de Java.

java es sencillo de aprender

Para poder usar este libro a toda su capacidad, debe usar una herramienta de desarrollo que

U11 homo ,o ..ador Pemium II con tecnologa MMX).

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.

Instalacin del JDK


guientes plataformas:

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

un men contextual, y puede seleccionar el comando Propenies (Propiedades) para ver el


tamao del archivo en byics, junto con otra informacin pertinente.

. Windows 98

. Windows NT
. SohrisSPARC

instalacin en Windows 95 y Windows NT


Antes de instalar el JDK en su sistema, asegrese que no haya otras herramientas de desarro llo de Java instaladas. Tener ms de una herramienta de programacin Java en su sistema
provocar problemas de configuracin cuando trate de usar el JDK.

Descargu : e, JDK para estas plataformas de, sitio Web de Sun, en ,a gueme dneccn:
http://

Sol iris x86

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

vigente :s la siguiente pgina Web:


huP:/^.iavasOn.con,/Products/JDK/i.2/xndex.html

/:/ Assteme de confi guracin del JDK.

Trecawin

Elija la versin ms actual del JDK y2^^^ nr


fionGS de T3li3S QUG SQlcQoIi

i ^=i inx i 2 Peridicamente, Sun publica repara-

r,13ndo a

"eme del'JDK 1 '.2 disponible para su plataforma.


Si us; otra plataforma, como la Apple

iii

119 ptcters. Usted oeucria

Macintosh, puede verificar si tiene un JDK compatible


La conriguracin predeterminada de este asistente debera ser satisfactoria para la mayora de
los usuarios. El JDK est instalado en un nuevo directorio con un nombre basado en la ver

ti
sin que usted obtuvo (como \ jdk1.2), a menos que utilice el botn Browse (Examinar) para
seleccionar un directorio diferente en su sistema.

con J .va 2 visitando el sitio oficial Java de Sun en:


http /yjava.sun.com

Da 1

Introduccin a Java

251

Si descarg el archivo de instalacin, asegrese que puede accesar el archivo correctamente

: usted pudiera tener con el JDK

mediante el comando chmod a+x con el nombre de archivo.

Tip

que est

xTdk'i'l qu"pe"de ser el valor predeterminado.

Por ejemplo, los usuarios de SPARC usaran el comando siguiente:


% chmod a+x jdk12-solaris2-sparc.bin

Para instalar el JDK despus de hacer el cambio con chmod, use una ventana de sesin del

El asistente instalar tres componentes del JDK:

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

En un mundo ideal, el JDK debera funcionar correctamente despus de la instalacin.


Adems, el queso debera estar libre de grasas, los presidentes deberan ser ejemplares y
Jimmy John.-on debera ser todava el entrenado/ en jefe de los vaqueros de Dallas.

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

i.) necesita ->U1B de espacio libre en disco duro.


^^ ^.^

Los problemas ms comunes cuando se aprende Java provienen de errores al configurar el


JDK.

meter el JDK en un disco duro con poco espaco libre.

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-

espacio en disco duro y .., so noces,,;.,, pan, el ........ ...I

Al indicador de MS-DOS tambin se le conoce como indicador de comandos debido a que lo


puede usar para escribir comandos que ejecuta el sistema operativo.

precaucin

archivo Z1P, no debe descomprimirlo. El JDK puede leer


formato de archivo en este directono.

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

.. sismas SPARC que ejecuten Solaris 2.4 o supenor


. Sisicmas xKft que ejecuten Sl:.ris 2.5 o s,.pcr,r
[I archivero i

Si est usando el JDK 1.2, en respuesta uslcd debera ver el siguiente mensaje:
java versin "1.2"

previamente un s

subdirectorio llamado )

""""mero de versin mostrado es especfico, as que si ha descargado una versin subse

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

rsin o un mensaje de error 'Bad co-and or 1< ^

file

su sistema no puede encon^ Com|;,

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

cl archivo fuente Craps. java desde cl Bloc de notas de Windows.


cu.u
Figura 1.5
Cuuixtudo de un
archivo fuente.

celebridad' por un

miembro del publico,

~3

Nota

a, comunicador de telev.sion Dar, Rather

de Nueva York. Durante aos nad,e en^^


grupo R.E.M. inmortaliz la frase en una can :.o ^

L arrestado, luego de haber.c deparado a un ce:^ en 1994, y le dijo a un psiquiatra que las cadenas de
atraparlo.

Tip

Una mejor solucin es usar el Explorador de Windows para asociar perma

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

Ejecute el editor de su eleccin y escriba el programa Java que se

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.

,,es;, rollo de pplc.s. o .n.c.Hc

a-ea aplicaciones senc.las de

, df S/'Cmo poner programas mcnues de usuano

S : "S^

o, e, AWT,

Listado 1.1. El cdigo fuente de la aplicacin


1: class HelloDan {

HeiloDan.

Crnacin del archivo fuente

O, o con la mayor, de los "^


ce, an como archivos de texto
pr, .cesador de palabras que P

is fuenie de Java s

2:
, .

- ,exio sin formato, un formato al que tambin se fc


,s usuarios de Windows 95 pueden escribir progra- .
HvWrite, as como Microsoft Word.s, tiene el ,

le creariu:* >-"' .uimu1*-

lauier editor de icxio o

3:-

publie static void main (String[] arguments)

System.out.println("Whafs the frequeney,

Kenneth?");

":

5:

'

eo ,oce como texto ASC. o texto

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:

en el sL Web de la versin en ingls del libro, en la di

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

Si es un usuario del JDK de Windows 9S c,ue P

HELLOD-1 .JAV. La forma abreviada es una muestra de cmo maneja MS-DOS


los nombres de archivo con ms de ocho caracteres y extensiones de tres caracteres. Al usar las utileras del JDK en el indicador de linea de comandos, use siempre el nombre de archivo que le dio al archivo, no la abreviatura.

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

gramas Java en una

ventana de MS-DOS.

tici-osoft (FO Windows 91 (C)Copyright Microsoft


;: \VINDO''E>cd ::\J21.rk>dir
Voluiac ir, di i ve C has nc

Corp

19S1-3996.

in y ejecucin del programa en Windows

\J21uork

Volui.ie

StL'ial

Nutnbr.

]s

label DS4T.-2F2F

Oiroctory of

C:\021ucirl:
01-24-96 2:39s .

bo:6n o un comando de men comextual.


IELLC'D-1 JAV
1

C;l-24-'5a

2:33a

..

'

14

';

01-24-5J
14 3

2:2a Heliot-ih
fr-i-e

file(s)

byt.es bytes

picdan ser ejecutados por la mquina virtual de Java.

dic(s)

42 , 96,704

::\J21uork>javac HelloDan

'1

--

^--'-:-

..

...

qic contenga HelloDan. java.

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.

Compilacin y ejecucin del programa en Solaris


Use el compilador de Java de lnea de comandos que viene con el JDK pura compilar el archivo

fuente de Java en un sistema Solaris. Desde una lnea de comandos UNIX, use cd para ir al
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.

Suponiendo que no hubiese errores, usted finalizar con un archivo llamado

.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

configuracin en su archivo autoexec .bat. Vea el apndice C

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

Si ve un mensaje de error de Tlass Not Found", aun cuando est en el

mismo directorio de HelloDan.class, tal vez necesite modificar la configu


racin de su sistema. Vea el apndice C.

Volimu:

air.-ctoi-/ -!- >7:\0:.!-> k


01-M-S ?a H-lloDii.cl =:

:^-lj-5)

IJumUl

1-

Resumen
Ahora que ya ha configurado una herramienta de desarrollo de Java y la ha usado para

escribir su primer programa de Java, puede aadir a su curriculum el ttulo de "Programador


de Java".

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?

ihai.' tho fr-quney,


::\J21wofle>

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

Maana usted ser capaz de escribir "Progra

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:

Un vistazo a la programacin orientada


.<* cua.es

m
m
o

vr nana, de Laura Lemay. editado por Prcnt.ee Hall.

, -, ,,,dc puedo aprender ms acerca de Java y encon.rar m^

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

i Aqu hay otros lugares donde puede buscar informado,, de

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.

debera revisar aqu.

Para presentacin de Java, revise los grupos de noucias de Uscnet

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.

De algn modo se ha ganado la reputacin. La programacin orientada a objetos es


noticias.)

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

Un vistazo a la programacin orientada a objetos

351

ogramacin oricniada a objetos,


o,

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

stos son los temas a tratar.

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:

Esta tarjeta de video cabr en la ranura de la tarjeta madre?


Este monitor funcionara" con esta tarjeta de video?

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.

La programacin orientada a objetos es muy parecida a construir estructuras a partir de blo

prini. ru aplicacin de Java.

ques LEGO o ensamblar una PC. Mediante la OOP, todo su programa est formado por obje
tos diferentes llamados objetos. ,l

Piense

iense en trminos de pbjetos

Trmino Nuevo

Un objeto es un elemento independiente de un programa de computadora, que

representa un grupo asociado de caractersticas y est diseado para realizar

ii
'
,, , FGO se puede hace todo upo de cosas, c.st.1
c.,slillos, an
um> maginar.

tareas especficas. A los objetos tambin se les conoce como instancias.

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

,. uchas otras piezas -

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.

( on los bloques Ltuu ;>c i

^. cualqUier cosa que

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.

ndes HKlependiciues. usted cuenta ton "^ "puede

usar este' sistema mayor pan resolver

Da 2

Un vistazo a la programacin orientada a objetos

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

],, Mmale como objetos ""

objet. s crtmlos a pan > la P1"

Un ejemplo de diseo de clases

racursiicas siguientes de un botn:

El texto que identifica el propsi.o del boln

. 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

El tamao del boln

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".

. Si se debieran ignorar por completo los clics del non


hacer cuando se ha hecho un clic con exi.o

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.

y , c.niivman.ic.10 Hsmos. h^ulos en lo que

Da 2

Un vistazo a la programacin orientada a objetos

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).

programas. La biblioteca estndar de clases de Java contiene docenas de ellas.

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.

Una variable de instancia es un elemento de informacin que define un atribu


to de.un objeto en particular. La clase del objeto define qu tipo de atributo es,

La biblioteca estndar de Java maneja numerosas tareas co.no funciones mticas, .anejo dt textos grficos, somdo, interaccin del usuario y conectividad de redes. En muchos casos.
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;

m; s Java complicados, deber crear todo un conjun.o de Cases con interacciones

e.las. stas se podran usar para'conformar su prop.a bih.io.ee:, de Cases, para

usarse posteri >rmente en oros programas.

La utilizad >n es uno de los beneficios de mayor importancia en la programacin orientada


a objetos.

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,

Z:L r. presentacin de un J abberwock, (un monstruo parecido a un dragn, tomado dC


poema Jabh wacky de Lewis Carroll).

eoricn >hl da Jabberwock. Para finalizar esta seccin, cread una dase Java que ,mplc-

Trmino Nuevo

Una variable de clase es un clcmcnlo de informacin que define un atribulo de


loda una clase. La variable aplica para la clase por s misma y para todas sus

instancias, de modo que slo se almacena un valor, no impona cuntos objetos de clase

hayan sido creados.


Para un buen ejemplo de una variable de clase, suponga una variable que registre la canti dad exacta de los objetos Jabberwock que viven en una comunidad. Si se creara una va

Atribuios ios de una clase de objetos

^: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.

clase icri :a Mamada Jabberwock. Sus atributos podran inclu.r lo s.gu.ente:

. Col r naranja, ocre terracota, amarillo lin, maiz tostado


. Se>o masculino, femenino, qu-le-importa
hambriento . Ap -'lito satisfecho,

Comportamiento de una clase de objetos


El comportamiento es la manera en que una Case de objelos puede hacer cualquier cosa

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

Un vistazo a la programacin orientada a objetos

41 I

Creacin de una clase


.
.

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.

EI comportamiento para una Case de objetos se implementa a travs de mtodos.


os *** son grupos de instrucciones asociadas en una ca. de ob^sque

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

taxis de programacin Java, en la cual tendr oportunidad de profundizar el


da 3: "Los ABCs de java."

Abra el editor de lexto que suele usar para crear programas Java, de modo que empiece a

. Para informar un cambio a otro objeto

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.

. Pan, indicar al otro objeto que cambie algo acerca de s mismo


. para pedir a otro objeto que haga algo

o
m

El lugar para empezar es una definicin bsica de clase. Escriba lo siguime:.


class Jabberwock {

}
por pillaba:

Uno, dos! Uno, dos! Marchando marcialmeme va,

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.

antojo de chocolate haba, en la espada vorpal!


Ya la d capit y con su cabeza en lo alto,

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

saltand 3 con alegra, de vuelta a casa va".

con,o pl. para lo ,

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).

Un vistazo a la programacin orientada a objetos.

43 I

s:

6:
7:
8: 9:
18:

void feedJabberwock()

if

(hungry == true)
hungry = false;

{ -a peasant!");

Systera.out.printlnCYum } else System.out.println("No,

11:
12:

thanks

--

already ate.");,

13:

14:

//y an hay ms

ntodos. Hay

15:}

y oir para revisar sus atributos).

Tip

La sangra y las lineas en blanco que se usan para dar el espaciado en el


archivo fuente no afectan al compilador Java. Como los comentarios, se

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

ma sea ms sencilla de seguir. La sangra y el espaciado usados aqu, con las


lneas en blanco entre mtodos y variables sangradas y los mtodos, se usan

en todo el libro. La biblioteca de clases de Java usa una sangra similar.


Puede elegir el estilo de sangra que prefiera.

if
}

hungry = false;
Antes de que compile esta ciase, necesita agregar un mtodo ms. El mtodo

} ''sJste-.out.printlnCHo, thanks -- already ate.);


// y an hay mas

showAttributes() despliega los valores actuales de las variables de instancia en una instan
cia de su clase Jabberwock.

En el programa, borre la lnea de comentario / /y an hay ms y reemplcela con lo si


guiente:

Tif

void

showAttributes() if (hungry ==

System.out.println("This is a " + sex + "


true)

" + color +

"

jabberwock.");

System.out.println("The
else

jabberwock is hungry.");

System.out.println("The

jabberwock is full.");

jf (hungry

==

true .Si . true lo*

hanibricn,o, se despliega un me,,**

: --:::

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;

Un vistazo a la programacin orientada a objetos


Da 2
|"44
Hay dos maneras de usar la clase Jabberwock:

451

Cree un applet o aplicacin por separado que use esta clase.


indicador de
MI javac Jabberwock.java

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

listado 2.2.) En esta lnea, inserte lo siguiente:

tiene errores de escritura.

public static void main (String arguments[]) {


Jabberwock j
j.color = j.sex =
j.hungry -

= new Jabberwock();

fifi. USTADO 2.2. EL TEXTO taUAlOZ.MKWO^^


1: class Jabberwock {
2:
3:
4:

"orange";
true;

"male";

System.out.println("Calling showAttributes
j.showAttributes();

...");

String color;
String boolean sex; hungry;

System.out.println("
j.feedJabberwock();

System.out.printlnCFeed'ing the jabberwock ...");


System.out.println("
j.showAttributes();

-");

5: 6:
7:

void ieedJabberwock()

i1 (s;s?e:.::t:;

System.out.println("Calling showAttributes ...");


System.out.println(" "); System.out.println("Feeding the jabberwock
j.feedJabberwock();

");

8:

9:
10: 11:

hungry = false;

thanks - already ate.");

...");

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,

.out.printlnrThe jabberwock i. full.');

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

Listado 2.3. La versin final de jabberwock . java.

inicrprcic de h va. obtiene el error siguiente:


class

: void Min(String argv,]) i. t d.fm.d

1:
2:
3: 4:

class

Jabberwock {
color;
sex;

String
String

Esle e.or se d be B que e, i^ete de ^


rpnie no sabe qu hacer con el

boolean hungry;

Da 2

Un vistazo a la programacin orientada a objetos

47 j

A partir de una lnea de comandos, cambie al directorio que contenga el archivo


5:
6: 7:

travs del intrprete, como sigue:

Jabberwock.class mediante el comando cd. Use el comando java para ejecutarlo a


i

void feedJabberwocM) {
if (hungry == true)
hungry = false;

8: 9:
10:

System.out.println("Yum -- a peasant!

),

java Jabberwock

Al ejecutar la clase jabberwock, la salida debiera ser la siguiente:


Calling showAttributes ... This is a male orange jabberwock.The jabberwock is hungry.

11:

} elsystem.out.println("No, thanks -- already ate.");


void showAttributes() { System.out.println("This is a " + sex +
jabberwock.");

12:
13:
14:

color

15:
16:

Yum

Feeding the jabberwock - a peasantl

h. iabberwock is hungry.",;

17:

Calling showAttributes ... This is a male orange jabberwock.


The jabberwock is full. ... .'

18:
19:
28:

^" system.out.printlnC'The

J.bberwcck is full.);

Feeding the jabberwock

21:
22:
23: 24:

public static void main (String arguments[]) {


Jabberwock j = new Jabberwock() ;
j.color = "orange";

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();

Syste>n.out.println("Feeding the jabberwock .

");

),

Lnea 23, Jabberwock j = new Jabberwock(); Crea un nuevo objeto de la clase


.. Jabberwock y almacena una referencia a l en una variable llamada j. Como lo

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();

lystel.out.printlnC'Feeding tbe jabberwock .

)>

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:

Lnea 27 En esta lnea y otras ms que siguen, se usa una instruccin


System.out.printlnO para desplegar informacin a la pantalla. Se despliega todo lo
que haya entre parntesis.

'' Lnea 28 Se llama al mtodo showAttributes, definido en el objeto Jabberwock.


Windows

Esto hace que el objeto Jabberwock indique los valores de sus variables de instancia:
color, sex y hungry.

travs del intrprete, como sigue:


java Jabberwock

Un vistazo a la programacin orientada a objetos

Una clase puede tener nicamente una superclase, pero cada clase tiene una cantidad ilimita da de subclases. Las subclases reciben por herencia todos los atributos y comportamiento de
sus superclases..; .-.;

cambia el el va valor cambia

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

tener el mismo comportamiento y atributos. Su clase recibe automticamente todo esto de su

nUevameme en un intento de al-

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).

En la figura 2.2 se muestra la estructura de una jerarqua de clases.


Figura 2.2

Organizacin de las clases

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

Las clases C, D y E son subclases de B

Clase B \

bien las necesitan.

Herencia

ia en la programacin orientada a

Clase D

diferencian de la clase existente. Con la herencia, todas las clases

estricta, las que uno mismo


Slbc/ase,yalaclasequepro- |>

jerarqua de clases define conceptos abstractos en la pane superior de la jerarqua. Estos con ceptos se vuelven ms concretos conforme desciende la lnea de subclases.

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

rre v aquellas que provienen d<

'

Aunac,ase que hereda de otra Case sel


leona la herencia se le llama superclase. porciona

Da 2

Un vistazo a la programacin orientada a objetos

51

, Credo . > el. en ,. u.1 , ,! ,en?, * !-"

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.

Un mejor plan es identificar la funcionalidad comn de Dragn y Jabberwock y organizara


damente queden sordos por l.)

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-

ncionalidad y atributos definidos en Co-ndButton y el comportatmento y

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

i existente. La nica tarea de la subclase es indicar las diferencias de compor

oracin ck subclases es la creacin de una nueva clase que hereda de una

tamiento y atributos entre ella y la superclasc.

Podra haber dos clases debajo de Monster: FlyingMonster y WalkingMonster. Lo obvio


que las diferencia es que uno puede volar y la otra no. El comportamiento de los monstruos

Si su clase define totalmente el nuevo comportamiento y no es una subclase de otra clase.

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.

Creacin de una jerarqua de clases

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

i:/"!;' se'utilizada repetidamente en todas .as clases inferiores de ,a ..erarquu,

La Case jabb.rwock est terminada, funciona correctamente y todo est bien. Ahora acara
una Case Java llamada Dragn.

I'

Un vistazo a la programacin orientada a objetos Da 2 I 52

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

aporta la informacin apropiada para su situacin.


FlyingMonster

Los mtodos trabajan de manera parecida: los objetos nuevos tienen acceso a todos los nom bres de los mlodos.de su clase y superclase. Esto se determina de manera dinmica cuando
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

Ubicacin de los inciiiJo\ dentro de una

m m

Mammal

jerurquia de clases.

Flyin iMonster es una s

,es

oira.s.

El mensaje e enviado al objeto y pasado por la jerarqua de clases hasta que se encuentre
una definicin

a
i

1^'^hc^o a cada subclase.

i*

Nota

Las cosas se complican cuando una subclase "define un mtodo que tiene el mismo nombre,

rentes puntos de la m.sma. El ob'^


diatamente debajo de
de las clases a organizar.

diseando una )erarqu

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

Un vistazo a la programacin orientada a objetos

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,

"Funciones de las clases: paquetes, interfaces y otras caractersticas".

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

Por ahora, slo necesita conocer esto:


jis bibliotecas de clases en Java estn contenidas en un mi/ucie llanuiilo java. Las clases en el paquete java estn garantizadas para estar en cualquier mplcmeniacin de Java y son las nicas clases garantizadas para estar disponibles a travs de implementaciones diferentes. El paquete java contiene paqueics ms pequeos que definen subconjuntos especficos de la funcionalidad del lenguaje Java, como caractersticas estndar, manejo de archivos, multimedia y muchas otras cosas. Las clases en otros
paquetes como sun y netscape suelen estar disponibles nicamente en implementa-

encuentre una definicin que le corresponda

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).

Herencia sencilla y mltiple

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-

Creacin de una subclase


Como un proyecto final para hoy, crear una subclase de otra clase y sobrepondr algunos

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.

jonamieni i particular adems del que hereda de sus superclases.

Da 2

Un vistazo a la programacin orientada a objetos

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

TZ editor de texto y escriba !as instrucciones s.g


public class Palindrome extends java.applet.Applet
// y an hay ms

sis y este nuevo objeto se asigna a f.

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

definir la relacin entre las dos clases.

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);

screen.drawString("Go hang a salami,

I"m a lasagna hog!

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.

mtodo pblico, o el programa Java no se compilar exitosamente.

,,ho .*; no asreg

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 ():

screen. La clase Graphics proporciona el comportamiento para transformar las fuentes y

declaracin:

Font f -. new FontCTi...Hon-, Font.BOLD, 36);


Esta instruccin cumple dos cosas:

. Le ha indicado al objeto Graphics que la fuente a usar al desplegar texto es la conteni


da en la variable de instancia f.

. Le ha indicado al objeto Graphics () que el color a usar en texto y otras operaciones


de dibujo son una instancia de la clase Color para el color red.

. Finalmente, ha dibujado el texto en pantalla "Go hang a salami, I'm a lasagna

hog!", en el sistema de coordenadas x,y de 5,48. La cadena ser transformada en la

fuente y color indicados.

Da 2

Un vistazo a la programacin orientada a objetos

591

He aqu cmo luce el applcl despus de todo:

publie class Palindrome; extends java.applet.Applet {


Font f = new Font("TimesRoman", Font.BOLD,
{
:

Tambin puede Importar todo un paquete mediante un asterisco (*) en vez


de un nombre de clase. Por ejemplo, use esta instruccin para importar

36);

todas las clases en el paquete java.awt:


import java.awt.*;

publie void paint(Graphics screen)


screen.setFont(f); screen.setColor(Color.red);

screen.drawString('Go hang a salami, I'm a lasagna hog.


40);

,
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.

una revisin doble.

Listado 2.4. La versin final de palindrome. java.


1:

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

Applet en la primera lnea de la definicin de clase al referirse a su nombre completo de


sus nombres de paquete.

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.

Un vistazo a la programacin orientada a objetos

61

ff

50

Para abrir la pgina Web Palindrome. htral mediante un navegador Web, use,el comando del

HTML en cuanto estn asocia-

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

A diferencia del navegador Web, la herramienta appletviewer slo despliega el applet (o


applels) que estn incluidos en la pgina Web. No puede manipular nada ms que est con
cn a , di,r,o

tenido en la pgina.

La Figura 2.7 muestra el applet visto con la herramienta appletviewer.

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

de HTML. pero aqu hay dos

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

en cuenta espacios y puntuacin: "Dbale arroz a la zorra el abad". "Dennis


and Edna sinned" es un palndromo, como tambin lo son "Ah, Satn sees

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.

La programacin orientada a objetos tambin es capaz de marearlo, desorientarlo, y tal vez

; ejecutadas con un intrprete Java 2.

hasta hacerle sentir un poco de nuseas.

. 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.

Un vistazo a la programacin orientada a objetos


Da 2

631

Preguntas y respuestas
P En efecto, los mtodos son funciones que estn definidas dentro de clases. Si

ominoso que un episodio de los Expedientes Secretos X.

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:

R Algunos lenguajes de programacin les llaman funciones (C++ las denomina/un-

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.

la diferencia es relevante en otros lenguajes, y como ahora el trmino mtodo es de


uso comn en la terminologa orientada a objetos, Java tambin lo usa as.
P Cul es la distincin entre las variables y mtodos de instancia y sus contra

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.

partes, variables y mtodos de 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).

fie as de una clase.

Jos de da. se les .suele llamar solamente mtodos.

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.

lnle,fciz Especificacin de un comportamiento abstracto que luego .as Cases individate


podrn ii.iplememar.

lene

una supcrclase, y as sucesivamente.

m
m

Semana 1

m
m
m

m &

DA

Los ABCs de Java


Como ya lo aprendi, un programa Java est hecho de clases y objetos, los cuales a su vez estn hechos de mtodos y variables. Los mtodos estn hechos de instruc ciones y expresiones, que estn hechas de operadores.

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

Los ABCs de Java

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

pa exiliar a los programados que estn versados en esos lenguas


describirn las diferencias especficas entre Java y otros lenguajes.

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".

Variables y tipos de datos


En la aplicacin Jabberwock que cre el da 2, "Un vistazo a la programacin orientada a
objetos", us las variables para dar seguimiento a la informacin.
Trmino Nuevo

Tod" hsTireas que quiera cumplir en un programa Java se pueden dividir en un;, seno de
instrucciones.

iva^

y expresiones

Las variables son un lugar donde se puede almacenar la informacin mientras

se ejecuta un programa. El valor puede ser modificado en algn punto en el pro

Una instruccin es un comando sencillo escrito en un lenguaje de programacin


TRMINO _ tlUEVQ

grama, de aqu el nombre.

que hace que algo ocurra.

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.

Systemout.printim-VouTenotthebossof mel"); player score = 41367;

, 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

resulta en un valor a ser producido. El valor puede ser

bloque va a ser ejecutado por el intrprete de Java, y despus dejarn de existir.


Aunque los tres tipos de variables se crean de la misma manera, las variables de clase y las de

=:
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".

una i, siruccin en una lnea y sta se compilar cx.losamcnic:


).co .or = "lemon yellow";
). huigry = false;

;5EErS

A diferencia de otros lenguajes, Java no tiene variables globales (aquellas


que se pueden usar en todas las partes de un programa). Las variables de

clase y de instancia se usan para comunicar informacin de un objeto a otro,


reemplazando as la necesidad de variables globales.

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

Los ABCs de Java

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;

A las definiciones de variables de instancia y de clase se les da un valor inicial dependiendo


del tipo de informacin que contienen:

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.

Li] static void axn (StrinQ argumentsU ) <


jnt total;
tring reportTitie,

Nota

Adems, el lenguaje Java usa el conjunto de caracteres Unicode, que incluye

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;

nmero de carcter Unicode.

Cuando se da nombre a una variable y se usa eji un programa, es importante recordar que
HamuJasstreet.cityystate:

Java es sensible a maysculas/minsculas. La colocacin de las maysculas debe ser consis


tente. Debido a esto, un programa puede tener una variable llamada X y otra llamada x, y una
variable rosa no es igual a Rosa ni tampoco a ROSA.

Str.ng street, city. state;

val! rLas siguientes instrucciones ere


ini zipcode = 90210; St.ing ame - "Brandon";

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

b0..lean cneatedOnKelly -= fue;


in: age = 28,

Cada palabra despus del nombre de la variable empieza con mayscula


Todas las dems letras son minsculas

Da 3

Los ABCs to J.i

71

Las siguientes declaraciones de variable observan esta regla de nomendatura:


Button loadFile;
int areaCode; boolean piayerSetNewHighScore;

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.

. El nombre de una clase o interfaz


Un arreglo

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

estas clases especiales.

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";

algunos tipos de da.os en otros lenguajes de programac.on.

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

Valores auesepueden almacenar

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.

Los ABCs de Java

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.

Toda la documentacin oficial de la biblioteca de clases de Java proviene de los comentarios


d estilo javadoc. Puede ver la documentacin del JDK 1.2 en la siguiente pgina Web:
idCooe = 8675309;
http://java.sun.eom/products/jdk/1.2/docs

snappyDresser = faise;

Literales
Adems de las variables, mmhin ulili/.ar una Hiera! en una instruccin Ja\a.

lario.s.

Trmino Nuevo

Una literal es cualquier nmero, texto o informacin que represente directa


mente un valor.

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

sin ejecutable de un archivo fuente de Java.


puede usar a su eniera discrecin.

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.

como en la siguiente instruccin:

int creditHours = 3; //slo un crdito de 3 horas?


ador e Java no lo tomar en cuenta.

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

al agregar la letra L (L o 1) al nmero. Por ejemplo, la instruccin siguiente almacena el valor


4 para un entero long.

long pennyTotal = AL;


propuesto. "

JiA

I 74

Da 3

Los ABCs de Java

75 |

Para representar un nmero negativo como una literal, anteponga a ste el smbolo menos (-).
como en -45.

valores booleanos). La instruccin siguiente asigna una variable boolean:

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

Los sistemas de numeracin octal y hexadecimal son convenientes para muchos


usos avanzados de programacin, mas no son necesarios para principiantes.

boolean toThineOwnSelf = true;

Los nmeros ocales estn basados en un sistema de numeracin base8, lo cual

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;

Tabla 3.2 Cdigos de caracteres de escape.


Escape
\n
\t \b

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;

Tabulador Retroceso Retomo de carro


Salto de hoja

\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.

Los ABCs de Java

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

comunes son matemticas, como en el cdigo Cuente de ejemplo que sigue:


int x 2 = 3; = x '

cor

int y = 4;
int

y;

inacciones !

La ltima instruccin en este ejemplo es una expresin. El operador de multiplicacin * se

usa para multiplicar los enteros x y y, y la expresin produce el resultado de la multipli


cacin. Este resultado se almacena en el entero z.

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.

'

La mayora de las expresiones en Java usan operadores como el asterisco *.

Los operadores son smbolos especiales utilizados para funciones matemticas,


TRMINO NUEVEO

algunos tipos de instrucciones dc asignacin y comparaciones lgicas.

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

debe soportarlo para

,.0.2 slo soportaba el


el despliegue de cualquier

pueda ser re

Suma Resta

3 5
5
14

+
'

el sitio Web del consorcio

Multiplicacin

Divisin Mdulo

/
%

7
7

20

til
. Da 3

Los ABCs de Java

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.

Si ejecuta esta aplicacin Java, produce la siguiente salida:


You start with 6 pet amoebas.
You now have 8

Two get married and their spouses move in

El mdulo de la divisin, con el cual se usa el operador %, produce el residuo de la operacin


de divisin. Usando 31 % 9 el-resultado es 4 ya que 31 dividido entre 9 deja un residuo de 4.

You hw have 16 You now have 12

Mitosis occurs, doubling the number of amoebas

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

There's a fight. 4 amoebas move out.

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.

Total daily cost: $0.96

Daily upkeep cost per amoeba: $0.12

You end up with 8 pet amoebas.

Paramecia attack! You lose one-third of the colony

Listado 3.1. El archivo fuente amoebamath . java .


1: 2:
3:
4:

class oebaMath {

para indicar que es del tipo float.

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

putlic static void main (String arguments[]) {


int x =
y

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;

System.out.println("You start with "


in.');
x = x + 2;

+ x +

System.out.println("\tTwo get married and their spouses nove

de salida estndar, la cual suele ser la pantalla.

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:

System.out.println("You now nave

"

+ x);

System.out.println("\tMitosis occurs,
amoebas.");

doubling the number of

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;

Hoy, en pginas adelante, aprender ms acerca del uso del operador +.


+ x);

lid

System.out.println("You now nave "

15:

16: 17: 18: 19:


20:

System.out.println("\tThere's a fight.
out.");
x = x y;

" + y + " amoebas move

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.');

You lose one-third of

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);

En esta instruccin, las tres variables finalizan con el valor 7.

Los ABCs de'ava

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.

El operador de incremento es ++ y el operador de decremento es --. Estos operadores se colo


de ejemplo:
int x = 5; x = x + 2; - v - x + 2 lo primero que En la expresin x - x + . l
este clculo. 7. se asigna entonces a x.
ocurre es que

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++;

En este ejemplo, la instruccin x = x++ incrementa la variable x de 7 a 8.

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

Los operadores de decrcmento c incremento son llamados operadores ele "cjiju

equivalentes a:

si se listan antes de un nombre de variable, y operadores de posfijo si estn

despus de un nombre.

3.4. OPERADORES DEASIGNAGN.

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

de una expresin ms grande, es importante la eleccin entre operadores de prefijo y posfijo.


Supongamos las dos expresiones siguientes.
int x, y, z;

x
y z

=
= =

42;
x++; ++x;

cada lado de su in

on

eme$_ por ejemp,0 si

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;

Si an tiene problemas para identificar su funcionamiento, aqu est nuevamente el ejemplo


con comentarios que describen cada paso:
int x, y, x = 42; y _ x++. 2;
_

// x, y, y 2 ya estn declaradas // a x se le ha dado el valor de 42 // a y se le ha dado el valor de x (42.^. antes de ser

2 = ++x;

// incrementada y entonces x se ha incrementado a 43 // x se ha incrementado a 44, y 2 toma el valor de x

mcrerfento y decremento^^awectk

h^^_

Da 3

Los ABCs de Java

83

Precaucin

Como con los operadores cortos, los operadores de incremento y decremento

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

'i pueden producir resultados inesperados "al utilizar expresiones extremada-

Jmente complejas. El concepto de "asignar x a y antes de que x se Incremente"


,jno es precisamente correcto, ya que Java evala todo en el lado derecho de
:luna expresin antes de asignarle su valor al lado izquierdo. Java almacena
/algunos valores antes del manejo de una expresin para que un posfijo tra-

Las expresiones que producen valores booleanos, como las operaciones de comparacin,

lgico.

baje como se ha descrito en esta seccin. Cuando no est obteniendo los


^resultados esperados de una expresin compleja que incluye operadores de

"prefijo y posfijo, trate de romper la expresin en varias instrucciones para


: ^simplificarlo.

true slo si las dos expresiones booleanas son ciertas.

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

Veamos este ejemplo, tomado directamente de la pelcula Harold & Maude:

Comparaciones

boolean unusual = (age < 21) & (girlfriendAge > 78);-

#
#

:.

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

boolean unusual = (grimThoughts > 10) (girlfriendAge > 78);

>

Menor que o igual a


Mayor que o igual a

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

' /!

El ejemplo siguiente muestra un operador de comparacin en uso:


boolean hip;.

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.

int age = 3::;


hip = age < 25;

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

; son false, el operador " produce un valor false.

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.

Los ABCs de Java

85 1

m #

Dia 3

llcvlH:,w

,.o, ,-u,

< Suelve

a.o,

Operador
new (tipo)expresin

Notas

Con el operador new se crean nuevas instancias de clases; () en este

caso es para convertir por casting un valor. (Maana aprender


acerca de ambos temas.) Multiplicacin, divisin, mdulo.
Suma, resta.
^ csublccK;1

especialmente en el da 5.

Precedencia de operadore
eniza el valorado la expresin.

Desplazamiento de bits a la izquierda y derecha.


< > <= >=

Pruebas de comparacin por relacin.


Igualdad.
AND XOR

!=

&

OR
&&

AND lgico. OR lgico/

? .

Versin corla de if . . . then. . . else (expuesta en el da 5).


Asignaciones varias.
Ms asignaciones. __

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= = = = >>>=

Volviendo a la expresin y = 6 + 4 / 2, la tabla 3.7 muestra esa divisin evaluada antes de


la suma, por lo que el valor de y ser 8.

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!

S dos o,v aciones tienen la misma prec* 1


Xso.r.s primeros en ser evaluados.

?&^

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

"Mediante Mediante los los parmesi pa. :..-clases (se expon"""'

sirve para ner acceso a mtodos >var^


/ , .vmindrn maana), ios u
^

^.^ 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

Este operador dev

una instancia de \
expone maana).

Da 3

Los ABCs do Java

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

mar, unir, cornbinar, enlazar y conjuntar).

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.

En varios ejemplos, ha visto instrucciones que se parecen un poco a esto:


String firsName = "Raymond"; >. System.out.printlnf'Everybody loves + firstName),

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.

Estas dos lneas hacen que se despliegue el texto siguiente:


Everybody loves Raymond

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.

Trabajar con el operador de concatenacin es ms sencillo en Java por la manera en que

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 ";

Mayor que Menor que o igual a


Mayor que o igual a

==

Igual
Diferente

Esta expresin es equivalente a la siguiente:


myName = myNar; + " Jr.";

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

Tabla 3.7. continuacin

Semana 1

XOR

Asignacin
Incremento Decrcmento

Suma y asignacin Hi-si y asignacin

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

En realidad, as. s difcil de leer.

^^

e)

compor.

fuera de estas clases, y las usa con otras clases y objetos.

R u dMi. -* b. sada en C++, J

lal- i,mo de las n, ecas rusas u. d

-^

En este da trabajar extensamente con objetos y abarcar los temas siguientes:

po enea de progn ^^
^.K-do evitarlo c. si. ptop.a

Srt en n pm^nw no un n^suo. por lo


s, 1M- u>

crad()res conos SOI, uno de los

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

Creacin de objetos nuevos

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.

He aqu un ejemplo de la creacin de diversos tipos de objetos usando diferentes cantidades y


tipos de argumentos: La clase Random, parte del paquete java.til, crea objetos que se usan para generar los nmeros aleatorios en un programa. Estos objetos son llamados generadores

de nmeros aleatorios, y su rango es de un valor decimal de 0.0 a 1.0. Los nmeros aleato
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

nmero de una secuencia extremadamente grande de nmeros. A esto se le llama generacin


pseudoaleaioria de nmeros, y se usa en muy diferentes lenguajes de programacin. Para
poder tomar un nmero diferente de la secuencia de nmeros aleatorios, al objeto RandomO se

";

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

Qu hay acerca de las literales para nmeros y caracteres?, no crean obje-

rentes.

Listado 4.1. El texto completo de handomnumbers.java.


1:
2:

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[]) {

void main(String r2;

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

Random(); valu 1: " + r1.nextOouble());

crear una instai cia, seguido de parntesis:

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

cu o caso se creado el ms simple objeto bsico, o b,en pueden contener argu,

de'terminan I. s valores inicia,es de variables de insume u otras cuahdades me a s de s


GregorianCalendar date = new Gre0orianCalendar(64, 6, 6, 7, 30);
Point pt : new Point(0,0);

objeto. Los templos siguientes muestran objetos que estn s.endo creados con ar .amentos.

Cuando compile y ejecute el programa, la salida deber verse como la siguiente:


Random valu 1: 0.312596.1341023068 0.754788115099576

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

Observacin acerca de la administracin

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

,.. i;neas 9 Y 12 devuelve e) prxi-

La administracin de memoria en Java es dinmica y automtica. Cuando crea un objelo


nuevo, Java asigna aulomlicainenle la canlidad apropiada de memoria para ese objelo. As no

tiene que asignar explcitamente ninguna memoria para objetos. Java lo hace por usted. 1V. La segunda l

usa una .itera, como la segunda sem,-

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.

Acceso y establecimiento de variables


de clase y de instancia
Hasta este momento usted pudo crear su propio objeto con variables de clase y de instancia
definidas en l pero cmo irabujar con estas variables? Es muy sencillo! Las variables de

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

uando ue- - ^ operador new ^ =. ^^ ^ fin

u hace new

v] ,nslal)C, ric ia das

Cmo obtener valores


Para obtener el valor de una variable de instancia, usied usa la notacin de pumo. Con ella, un nombre de variable de clase o de instancia tiene dos partes: el objeto a la izquierda del puni
y la variable a la derecha.

-w^ Ce clases. Los constructores m.c,, .7^


-U.u.erouoob.co que e, objeto necesitle

Trmino Nuevo

La notacin de puni es una forma de referirse a las variables de instancia y


mtodos de un objeto mediante un operador de pumo (.)

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;

Enire las mlpl definicin de mlp


Enin

specificar argumentos dife, u

C cn,e de argumentos. C Cuan 0 uPo difcn,e

.Jes en la lisia de argnmenK s, y se "a--a Us mltiples definiciones de constructor o U q


a clase.

^^

b ^ Ran(jom(, cn e eJem ^.^ de ,a declaracion

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

bles de instancia. Si la variable de instancia orderTotal cauikne por s misma un objeto y

D(a4

Lecciones de objetos

951

ese objeto tiene su propia variable de instancia llamada layaway, usted podra referirse a ella
de esta forma:

Cuando usted ejecute esta aplicacin, la salida deber ser la siguiente:


Starting location:
X equals 4 '
Y equals 13

'

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)

Ending location: X equals 7

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.

Este ejemplo asigna el valor de la variable layaway a true.

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.

Lista >o 4.2. El texto completo de setpoints. java.


1: 2:

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;

publie static void main(String arguments[]) {


Po.nt location = new Point(4, 13);
Svite out.println("Starting location: ); S>sten,.out.println("X equals " location.x); S;steQ.out.println("Y equals " + location.y);
S.stem.out.println("\nMoving to (7, 6)");
1 ication.x = 7;

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

ytte-.out.printmCY equals " + location.y);

Llamar static a estas variables es referirse a uno de los significados para la


palabra esttico: fijo en un lugar. Si una clase tiene una variable static, cada objeto de esa clase tiene el mismo valor para dicha variable.

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.

de salida despliegan el mismo valor:

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.

Listado 4.3. El texto completo de checkstring.java.


1:

class

CheckString static str

{ void main(String = "In my next arguments[J) I { in

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:

System. out. println ("Trie


+ + + + str.lengthO);

string
of

is:
this

"

str);
"

System.out.println("Length

string:

8: 9: 10:

System. out. println ("Trie


str.charAt(7)); Systen.out.println("The str.substring(24, str.indexOf('x'));

character at

position 7:
to 31:

"
"

substring frora 24 31));

11:
12: 13: 14:

System.out.println("The Systeui. out. println ("The

index

of

the character x:

" the

R.,,Ea , ,

index of the beginning of

mtodo no tenga argumentos:

15:

+
+

"substring

\"will\":

"

str.indexOf("will"));

16:
17:
18:

System.out.println("The string in upper case:


str.tol)pperCase());

19:

definido en myCistomer:

Cuando usted ejecuta el programa, se despliega lo siguiente en el dispositivo de salida estn


dar de su sistema

elAllOrdersO .talkToManager() ;

Trie string is:


Length of this
The character

In my next life,
string:
at

I will believe in reincarnation

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

e se est rjoculando Java.

-"---"-

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 lnea 5 imprime el valor de la cadena que usted cre en la lnea 4 In my next

. 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

I will believe in reincarnaton".

este ejemplo producen el mismo resultado: la cadena 5:


String s,
S2 -

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);

subeadena de esa posicin y hasta el final de la cadena.

Referencias a objetos
Puesto que usted trabaja con objetos, algo importante para entenderlo es el uso de referencias.
Trmino Nuevo

Una referencia es un tipo de apuntador que se usa para indicar el valor de i


objeto.

. La lnea 17 usa el mtodo toUpperCase para devolver una copia de la cadena slo en
mayscul is.

de cadena y devuelve el ndice del principio de esa cadena.

est usando referencias a dichos objetos.

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:

Los mtodos de clase


Los mtodos de Case, como las variab.es de Case, aplican a la Case como

a sus instancias Los mtodos de clase suelen ser usados para mtodos de

podran no opc, doctamente en una instancia de esa clase, pem pertenece^kcP

^;

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

publie static void main (String arguments[]) {


Point pti,
= pt1;
= 200;

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;

System .out.println( "Pointi:


System .out.printlnf "Point2:

"
"

+ 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

en'nde de ope aciones matemticas como mtodos de Case; no hay -n^

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) ;

,,odode :,LM.th.x,, toma dos argumentos y devuelve e. ms grande de: os s.

A continuacin se muestra la salida del programa:


Pointi:
Point2:

200,
200,

200
200

! I

>

Lecciones de objetos

101

U Siguien,e .orna lugar en I. primera pane de este programa:


. 1 inca 5 Se crean dos variables Point.

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

Se asigna un nuevo objeto Point a pt1.


El valor de pt1 se asigna a pt2.

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.

arama nada las cambie pldamenie.

Esto hace posible lo siguiente:


( c iica pt2

float gpa = 2.25F;

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.

cuando usted necesita un int.

Utilice la conversin por cast para convertir un valor de un (ipo a otro.

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

renuncia por un problema de sueldo o es arrestado pblicamente por obscenidad.


Al hacer la conversin usted no cambia el valor de una variable. En ve/ de ello crea una
oti

nueva variable del tipo deseado.

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.

Conversin por cast y conversin normal


i de objetos y tipos
Algo que

Conversin normal de tipos primitivos a objetos, para extraer posteriormente valores


primitivos de esos objetos.

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

i y no a f2t.tvC;! c^era que Us -osa, sean de unat::: forma precisa

Lecciones de objetos

103 I

conversin por cast de tipos primitivos

Conversin por cast de objetos

tipo, primitivos .e permite cambiar c. valor de un tipo a otro ,,po


eces ocurre con tipos numricos, y hay un ,po primmvo que

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.

S^ i1 convers por cast. Los va.ores booleanos deben ser true o


Tase y no se pueden usar en una operacin de conversa por cas..

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.

nT Deb,do a que byte contiene valores de -128 a 127 y un int conuene

mirones, ha^espacio ms que suficiente para conven, de byte a in,

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.

Esto es cierto en cualquier parte en un programa, no slo dentro de llamadas a miodos. Si


usted tena una Variable definida como clase Window, podra asignar objetos de esa clase o
cualquiera de sus subclases, a esa variable sin conversin por cast explcita.

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

de llamar a mtodos que el objeto destino no tiene.

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

En este caso, nombredelaclase es el nombre de la clase destino y object es una referencia


al objeto fuente. Observe que la conversin por casting crea una referencia al-objeto anterior del tipo nombredelaclase; el objeto anterior an existe como antes lo haca.
siguiente expresin:
(int)(x / y);

El siguiente ejemplo convierte por casting una instancia de la clase VicePresident a una

instancia de la clase Employee; VicePresident es una subclase de Enployee con ms


informacin para definir que VicePresident tiene privilegios de toilet ejecutiva:
Employee emp = new Employee();

VicePresident veep = new VicePresident();


diferent.

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 valores de objetos


y de clases
Adems de la conversin por cast, hay operaciones que puede desempear en objetos:
Comparar objetos

Identificar la clase de cualquier objeto dado

Probar un objeto para verificar si es o no una instancia de una clase dada


eorrcspondcn a cada upo

Como una alternativa, e, paquete


primitivos: c chlos primiti

^ Observe que ,os non.


s primevos tienen nomnrcs Lon /v ,os tipos prim

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 ,?

etctera. La mayora de los operadores funcionan nicamente en tipos primitivos, no en obje


tos. Si intenta usar otros valores como openmdos, el compilador de Java produce errores.

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

tar mtodos especiales en su clase y llamar a esos mtodos.


e^p.0. * *** obtener un

Una v creado as. un obJCto, o p^c ^

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

., ,r,lluccil-,n comn Mue

,0 pucdc pu rcsuUacjo ,0 obtener ,

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

SfrADO 4.5. EL manCO WLETO DE EOUAISTEST. JAVA

Nota

1:

2: 3:
4:

eU"uu"mSe1.id ^(String .rg.f]) I


str2 = stri; ten out.println("String1:
Systen,.out.println("String2: "

String str1, str2; ... str1 = "Free the bound periodicais. ,

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));

Determinacin de la clase de un objeto


Quiere encontrar la clase de un objeto? He aqu cmo hacerlo para un objeto asignado a la
variable obj.

16:
11:

str2 = new String(stM);


System.out.println(-String1: +
str2 ==

12:

String ame = obj.getClass().getName();

13:
14:

Svstetn.out.println("String2:

15: 16: 17: 18:

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

La salida de! programa es como skue:


Sfing: Free the bc_nd periodicals. St-xng2: Free the bc.nd periodica.s.
Sane object? true

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,

Sfingi: Free the bc^nd penodicals.


Sw object? false
Se me valu? true

St-ing2: Free the bc.nd penodicsis.

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.

!.! linca 9 .s lo prueba.

Examen de clases y mtodos con reflexin


K.,n strina .vn el mismo valor M^' str1 > ;IS1S?I1;I Str2 ^ ^^ str2_
Una de las mejoras hechas al lenguaje Java despus de Java 1.0.2 fue la introduccin de la
reflexin, a la cual tambin se le denomina niivspeccin. Bajo cualquier nombre, la reflexin

I-;,, U sog' ma pane crea un nuevo obje o String .

a ese nue , objeto String. Ahora usted ,,cnc dos *>^ l

pe. con .-. mismo va!o, Efectu. la ^^^


ha). Prol arlos con el mtodo epuals() en la nnej iu
true; i iiien los mismos valore!.

Jr (I nca .5) devuelve .. P*J^ ^ ;"X ^ devuclvc la respuestt esperada

'cl .^ objclD en memo-

;,, usar el ,,,,,.

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

Mediante la reflexin, la aplicacin SeeMethods puede conocer cada mtodo de la clase

Randora y todos los mtodos heredados de las superclases Randora. Cada lnea del listado
muestra la informacin acerca de un mtodo:
Si es public

Qu tipo primitivo o de clase devuelve el mtodo

V import java.lang.reflect.*;

Si un objeto es de la clase actual o una de sus superclases

2: iaport java.til.Random;
3:
4:

El nombr del mtodo

r^Ucvoid ..inCtrin.!] argu.ents)


Rando* rd = new RandoM);

<

El tipo de cada uno de los argumentos utilizados cuando se llama al mtodo

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-

" + methods i])>

una manera de aprender ms acerca de la clase de los objetos examinados o depurados.


Tambin es requerida por JavaBeans, donde la capacidad de un objeto para consultar a otro acerca de lo que puede hacer (y entonces solicitar que haga algo), es til cuando se cons

11:

12: 13:

t }

truyen aplicaciones ms grandes. Aprender ms acerca de JavaBeans durante el da 19,


"JavaBeans y otras caractersticas avanzadas". .

El paquete java.lang.reflect.incluye las clases siguientes:

Field
Method

Maneja y encuentra informacin acerca de variables de clase y de instancia


Maneja mtodos de clase y de instancia

da de la ; plicacin

Constructor
Array

Maneja los mtodos especiales para crear nuevas instancias de clases

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

programas. Ser ms til cuando usted trabaje en la sealizacin de objetos, JavaBeans y


otros, de la programacin ms sofisticada de Java.

0: Method: public synchronized voxd J

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.

1V Method: public void 3ava.util_

nextint()

13: Mtthod: public long >aau"*iRandOm.nextFloat()

110

Dia4

"el vaso medio vaco", la programacin orientada a objc-

est tan profundamente inmersa en Java.

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

detalles acerca ele s misma.

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

Listas, lgica y ciclos


Si usted escribi un programa Java con lo que sabe hasta ahora, el programa le podra parecer algo soso. Si usted escribi un programa Java con lo que sabe hasta ahora, el programa le podra parecer algo soso. Rsta ltima oracin no se repiti dos veces por un error editorial. Es una demostracin de cuan fcil es que las
computadoras repitan la misma cosa una y otra vez. Hoy aprender cmo hacer que una parte de un programa de Java repita su ejecucin mediante los ciclos.

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

Lo primero por hacer en la lista de'hoy son arreglos.

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.

Listas, lgica y ciclos


Da 5

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.

Creacin de arreglos de objetos


Despus de haber declarado la variable de arreglo, su siguiente paso es crear un arreglo de

domemos, o quizas 1,000.'

:
pu

-"=::-~h'11'~11"~'"
^ CO111O enteros.

L.,,,lic,1u1s Mu, lico.. d ''" "I" '"

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:

c*.. .encr un arrcgo ^= - *

String[]

playerNames = new String[10J;

Par;iCrCar un arreglo en Javn, haga )o sigeme:

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.

,Oec1;,eun:,va,,a,e para que conten eUr

Los arreglos de objetos pueden contener tanto tipos primitivos (como enteros o booleanos),
como objetos:
int[) temps = new int[99);

, Cree un nuevo arrodo de objeto y aagneU,


?. Amiacene inform

acin en ese arregR

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

carcter, y nuil para objetos):

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:

(1,, vacos al objeto o upo de dalos, o al n

";:,11.,,cCone, sientes son eje^S de descees <Wv.ir,.,b

StringU

chiles =
"thai"

"jalapeno",
};

"anaheiin",

"serrano"

"habanero",
strinp !:-^

im

de

onsl1;

w despus de. upo de .n.onn.cn-ve. del

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

Lstar., lgica y ciclos

11!

reste 1 a la longitud del arreglo para obtener su elemento ms grande.

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

Modificacin de los elementos de un arreglo


subndice, como en el ejemplo siguiente:
myGrades(4]
sentence[0]

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];

lo, aunque puede se, tambin una pn*.o,

--

^ ^.^ 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

Jc, mS>. eco orfimo al " '" J* * l0


siguientes:

confome avance en el uso del lenguaje.

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;

que crea, inicializa, modifica y examina las partes de un arreglo.

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:

Listado 5.1. El texto completo de arraytestjava.


class ArrayTest {

Stringf) firstNames = { -Defins", "Grace", "Bjarne", "James" }; Stringf] lastNames = new Strin0[firstNames.length];
void printNames()
int i = C;

6:

'

,: tlil u, -Ci, nstancias excepconales. n . ^

^^ ^ -^^^ iii.i,iltflll

System.out.println(firstNames[i]
" " + lastNames[i]);

iicc,v:. ..o las c piones. ,.C6mo puede es :_

^ s^ pros

System.out.println(firstNames[i]
+ " " + lastNamesfi]);

importar el tipo:

int len = bea leSpeak.length;

Listas, lgica y ciclos


Da 5

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(

La lnea 23 llama a printNamesO para mostrar a qu se parece el objeto nicialmcnie.

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

rS?..* a -n.- ArrayTest();


a.printNanesO;
Svsteit.out.printlnt

void main (String arguaentsl))

23: 21: 25:

ix.stHa.es 10] - 'Ri

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;

esperara. Los resultados se muestran en las ltimas cuatro lneas de la salida.

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

U<alida tic: ?r-.rama es como sigue:

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

lor inicia! en la, pospones.

f irstNames, dcoWo a que

multidimensionales: arreglos con ms de un subndice que permiten la representacin de ms


de una dimensin.

c, mismo nmero de P

inici,. Cuando ,: usa en un

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.

las poMCione: d .irn-pi

Da 5

Listas, lgica y ciclos

1191

intUIl coords = newint[i2]H2);

0 %
.I

coordsiaiiei = 1". coordsi0lli] = 2;

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
. ; . ,

Hay dos variables definidas en este mtodo: x y y. El alcance de la variable y es el bloque

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

os cinco das, entre oirs

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

cosas, p;ira las dos siguientes:

Una condicional es una instruccin de programacin que slo se ejecuta si se


cumple una condicin especfica.

. P-in definir las instrucciones que ,


t tiui uLMiii

i > st' pucvlo visar hhio

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

dentro de una definicin de clase.

condicin: Si el valor de la variable age es mayor que 39:


variables

if

(age > 39)

System.out.println("You cali that a haircut?");

tote mls dn,,o de n Ww

, ,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)

ti alcance de una variable es el bloque en e

restaurant = else restaurant =

"Benihana's"; "Burrito Hut";

La condicional if ejecuta diferentes instrucciones basadas en el resultado de una prueba


void testBlock() int x = 10;
{ //
=

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

Listas, lgica y cicl

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" )

La salida del programa es como sigue:


' Valu is i.
Valu is 2. Stevenl

System.out.printlnCThe jabberwock is angry ), _ Systemiout.println ("Have you made out a will? )l;

...

m
#

} VyVtea.out.println ("The jabberwock is in a good rnood.'); f ^"T/stem.out.printlnCIt still is hungry, though.");


else System.out.println("It wanoers off.");

Valu is 54.
Stevenl Valu is 77.

Valu is 1346. Steven!

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

Bste ejemplo usa .a prueba (attitude -- "angry , para determinan si ^^

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

parte de la expresin es un mtodo abreviado comn en programacin.

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.

operandos. Si el residuo de un nmero dividido entre 2 es O, es un nmero par.


mtodos con argumentos.)

La prueba del mdulo del da 3, "Los ABCs de Java" devuelve el residuo de la divisin de sus

Si el nmero es par, se despliega Steven! (Maana aprender ms sobre la definicin de

ESCWBA
1:
2: 3:
4:

Listado 5.2. El texto computo de evensteven.java.

class EvenSteven { void evenCheck(int val) {

mente los valores que son pares obtienen un mensaje Steven!


is

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:

if (val "s 2 == 6) System.out.printlnf"Steven!");

+ 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:

pubLic static void main (String arguments[]) {


EvenSteven e = new EvenSteven();
e.evenCheck(1);
e.evncheck(2);
e.evenCheck(54);

11:
12: 13:
14:

cutado. El operador condicional es ms .il en condicionales cortas o simples y luce como en


la siguiente lnea:

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:

test ? trueresult : falseresult;

Listas, lgica y ciclos


Da 5

1231

switch

case ;a; ; ' ' "" System.out.println("Great job -- an Al"); .


break;
'B':

(grade)

case

. cas
'

System.out.println("Good job -- a Bi");,


break;,

'C: System;out.println("Your grade was a C.");


break; .

default: System.out.println("An F - consider cheating!");


int ourBestScore;

if (myScore > yourScore)


p i e g

La instruccin switch se basa en una prueba; en el ejemplo anterior, la prueba est en el


valor de la variable grade. Dicha variable, que puede ser de cualquiera de los tipos primitivos byte, char, short o int se compara con cada uno de los valores case. Si despus de la prueba se encuentra una coincidencia, se ejecutan la instruccin o instrucciones; si no se
encuentra, se ejecutan la instruccin o instrucciones default. La pane default es opcional.

ourBestScore - yScore,

El

Si se omite y no hay coincidencia para ninguna de las instrucciones case, la instruccin


switch finaliza sin ejecutar nada.

labia 3.6 del da 3.

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

else if (oper == '')


multargs(arp,

else if (oper == '")

subargs(arg1,
break; case ' -':

arg2);

else if (oper == '/')

multargs(argi, break;

arg2);

case

'/': divargs(arg1,
break;

Un mtodo abreviad - para las instn.cc.oncs

lenguajes de prograi lacin es agrupar proel

switch, la cual se compona como en C.

Centre s en una sola instruccin. En

arg2);

jav-, puede hacer lo antenor mediante la in:

El Gueme es un cumplo del uso de switch

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

Listas, lgica y ciclos

is:

16:

default:

return "

funcione. La segunda son .as ,=


,nslri,cion break en una seco instruccioneS para esa co,nc,

ase^ una

^
^

.^.^ ^ ^ hasla ^ ^ , ,0

^^

17:

se

18:

19:
28:

cncuen.

* brea* o el fin. Je swltC^bn B

nc , >

debcr incluir break para asegu-

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: }.

System.out.println(-413 converts to " + nua);

la Sjouienie llave que cierra ()).

Un uso 0,,, -e h ^ * break .cede


misn1as instrucciones. Para cumphr con
cncucnl,,.

He aqu la salida del programa:


^

nillgun resuhado; switch ejeeman, las


la guem

Pr ejemplo, en
^ x is

413 converts to four one three

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:

sv.tem.out.printlnrx is an even nu.ber.


d.f.ult:

);

de esto maana, cuando vea cmo definir mtodos.


pero veamos este miodo rpidamente.

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

No se necesitan instrucciones break en el programa NumberReader debido a que se usa la

Hasta aqu, probablemente ha visto suficientes mtodos main () para saber qu est pasando,
conver-tlt().

La lnea 20 crea una instancia nueva de la clase NumberReader.

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:

{
"

La lnea 22 despliega el resultado.

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

Listas, lgica y cicios

'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

inicio del ciclo f or tiene tres partes:

(ndice de,

notPnme (), el cual tericamente tiene forma de averiguarlo.)


for (i = 4001; notPrime(i); i += 2)
J

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

Usted tambin puede tener una;instruccin vaca como el cuerpo de su ciclo

leales al ciclo.

dcl. Li! prueba debe ser una

linea que incluye la instruccin for;


for (i = 0; i < 10; i++).

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
;

(pero devuelve la misma salida).

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:

Listado 5.4. El texto completo de namesloop . java.

class NaoesLoop {

2:

j,
: ndice se compara con saluta

3:
4:

5:

String[] lastNames = new StringrfirstNames.length];


void printNames() {

sn firstNans = { "Dennis", "Grace", -Bjarne", "James" };

6: 7:
8:

ion. Cuando el ndice es .gual o

9: 10:

for (int i = e; i < firstNames.length; i++)

SyStem.out.println(firstNa.i.es[i] + + lastNames [i]);

11:
12: 13:
14: 15: 16:

publie static'v'oid main (String argumentsr]) {


NanesLoop a = new NamesLoop();
a.printNames();

a.lastNames[6] = "Ritchie"; a.lastNames[1] = "Hopper";

System.out.printlnC

");

Listas, lgica y ciclos

Listado 5.4. continuacin


17:

18:

a.lastNames[2] = "Stroustrup"; .lastNames[3] = "Gosling";


a.printNames();

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

dds m ms tarde agrega otra instruccin dentro del ciclo.

CUand US3X l3S "aVeS " "" nngn pr0blema- stas l

21:

La salida del programa es:

m nto es , eT 77 t ""'"
1:

mentos es 1, el ciclo finalizar inmediatamente

cada
en ese punto.

9
#

Dennis nuil Grace nuil Bjarne nuil James nuil


Dennis
Gracs

' Listado 5.5. El texto completo de copvARRAmLE. JAVA.


2: 3:
4: 5:

class CopyArrayWhile {

Ritchie
Hopper

publie static void main (String argun,entS[]) /


intf] arrayl = { 7, 4, 8, 1, 4, 1, 4 }; Tl,oat[] array2 = new float[array1 .length] ;

#
#

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:

while ( count < arrayl.length &t arrayl[count] != 1) { System.out.print(array2|count++] + " );


System.out.println(" J");
}

Ciclos while y do

16:
17: 18:

19:
20:

La salida del programa es:

Salida

arrayl: array2:

[7481414] [ 7.0 4.0 8.0 J

He aqu lo que sucede en el mtodo main ():


while (i <

cuerpo del ciclo

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

e.m, .<18>. Si la cxprcs.on devuelve true

Listas, lgica y ciclos

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:

Listado 5.6. El texto completo de dotest.java.


public static void main (String arguraents[]) {
int x do {

class DoTest {

2:
3:
4:

1;

6:
7:

System.out.println("Looping, round " + x);


x++;

8:

} while
.-,}

(x <= 16);

9:

10:

La salida del programa es como sigue:

Salida

Looping, Looping, Looping,


Looping,

round

round 2 round 3 round 4 round 5 round 6


round
round 7 8 10

Looping, Looping,
Looping,

Looping,

Looping, Looping,

round 9
round

Interrupcin de los ciclos


cin.povloqicsistaes

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

Los celos de se parecen a esto:

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++ //

cuerpo del ciclo

} while (i < 10>;

if

(i X++ > 400)


break out;

//.aqu va el ciclo interno


ciclo:

// aqu va el ciclo externo

while (count < userDatai.length) {


if (userDatai[count] == 1)

int count = e

userSaSTcunt] = (float) userDatai[count++];

na al celo intenor y reanudara la ejecucin con el ciclo externo

#
f or anida-

cuatro, ambos ciclos finalizan al mismo tiempo.

l T e

Escriba Listado 5.7. El texto completo de labeltest. java.


2que llevar registr . de dos contadores de arreglo d.lcrenies:
int count = 8
int count2 = J; ,

t #
#

1: class LabelTest {

public static void main (String argumentsf]) {


for (int i = 1; i <= 5; 1++)
for (int j = 1; } <= 3; J++) {

4:
5:
6:
7:

thisLoop:

while (counf* <= userDatai .length) {


if (userCatai[count) =- 1)
contii ue;
userData

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

La salida del programa es:

Salida
con

. c<k . dio o la 8"'

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

ciclo fuera d I ciclo actual.

L la etique: , despus de la palabra clave, como en el

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

w ile (x < 50) {

( nt i = 0; i <1

Da 5

cic,Os y lgica, puede hacer que la computadora

Ahora que ya ha sido introduc, o a a


decida cundo desp.egar repetiente

Semana 1

usted aprendi como deCarar una

cambiar elemenios del arreglo. Con las ,n

girsc a pa.es diferentes de unpro,- basado^ J ^ ^^ ^ ^ ^ UM p0,

ueco

^^f y tch. t. puede p d,n^^ ^^ . aprenJl0

Vale ,a pena repet. Usted usar


jaa. Us

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

que usled puchera necesitar (String, Math y similares).


ciases e identificar lo siguiente:

laS daSeS de Ia biblio[e ^ Java

Hc^usted va a ,a cabezade la Case por lo que ha aprendido de,,enla, al crear


Las panes de una definicin de clase

La creacin y uso de variables de instancia


La creacin y uso de mtodos

El mtodo main () que se utiliza en las aplicaciones Java

M
HUS

El uso de argumentos pasados a una aplicacin Java

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

L forma germinada, las clases heredan de ,a Case Object. la cual es la sudase de


todas las clases en la jerarqua de clases de Java.

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

Una variable booleana que es true si el jabberwock est hambriento y f alse

en caso contrario

La edad del jabberwock en aos

#
#

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".

variables locaies. 1a siguiente seccin detalla los mtodos.

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

Definicin de variables de instancia


e! da 3, Ene! da 3,

objeto. En Java, usted puede crear constantes para todos los linos de variables: instancia, clase
y local.

"Los / BCs de Java", aprend. cmo declarar e ini Los / .bu uc v , t

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".

cual hereda de su : uperclase, ReptUe.

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;

1: class Jabtxrwock extends Reptile {


2:

final int numberOfJenny = 8675309;


String color;

3:

i
final int LEFT = B;

Creacin de mtodos
desempear durare su existencia).

V 'aS dlVerSaS IarCaS ^C sle

final int RIGHT = 1;

alignment se declara como un int:

Definicin de mtodos

con lo siguiente:

- -

Las definiciones de mtodo tienen cuatro panes bsicas


El nombre del mtodo

El upo de objcio o tipo primiiivo devuclio por el mtodo


Una lista de parmetros
El cuerpo de un mtodo

thxs.alignn-ent = CENTER;
Tambin puede verificar una alineactn dada:

switch (this.alignment) {

Las tres primeras partes de una definicin de mtodo conforman Jo que

se denominay/w del

^fLargarse de .lin..cion L
break;

C88' "lTnUr.r.. <* alin..ci6n derecna


break;

Encargarse Oe .Iinci6n central


breaK;

alende, acerca de estas partes de la ^^Z^^Z'*

this.alignment = CENTER;
this.alignment = 2;

Variables de clase
Como aprendi en las lecciones an^enojc

dc dMe aplican B una clase como un


^ ,a dase

do. en ve, de ser almacenadas ,ndw,dua,n

^
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.

Upa,b,a Cave static se usa en la declaran de clase par

^^t maXObjects - 1.;

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: }

r:,o:rS^e!r, as se usa en lo, ejcmp.os de este li.ro, co.no el siguiente:


intl] makeRange(int lower, int upper) {
// cuerpo de este mtodo

Lasalida 'del programa es la siguiente:

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. ;

L lista de parmetros del mtodo es un conjunto de declaraciones de variables, separadas por

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

for para nnpnmtr los valores del nuevo arreglo.

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.

La palabra clave this


objeto o pasar el objeto

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

"

gUmem a UIVm1Od- COm Val0r ^vuelto para el mtodo

class

2: 3:
4:

in [] makeRange(int lower, int upper) {

langeClass {

int arrU = "*" *ntl <uPPer " lower)


arr[i] = lower++;

this.resetData(this,; // llanda al mtodo resetData, definido en


// esta clase y pasndolo // al objeto actual
return this; ,, devuelve el objeT) actual

//la variable de instancia x para este objeto

5: 6:
7:

for (int i = e; i < arr.length; i++) {


}
return arr;

8: 9: 18:
11 :

puMic static void main(String arguments[]) {


int theArray[];

i..,.,..:, v
tM pc,.

tjUc esto se ssume en orm:i *iiitnmiir"i prtP

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:

ui.> esta implcita en esas referencias Por lo [-inr~i

'

i*

""' 'f 0S Prlmeros dos

"k-

'14:
15: 16:
17:

resetDatafthis); // namada al mtodo resetData method, definido


// en esta clase

t = X>'

/; la friable de instancia x para este objeto

18:

19: 26:

Systera.out.println(*]");

Mota

local. En la prxima seccin ver ms acerca de este tema.

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

variable deja Ce existir cando la pane

1n'

d ,a pane que dcf.nc c. alcance ta cenado su ejecucin.

this ble: loca

o2 Z

oca? ' el 7m.smo nombre, pero > con ^^ d Valr local 10 L test dentro local con el valor 20. C" La variable

"mbre >- definici" La primera, una

"

0Cl1 ) riW

aislar este prob.ema mediante

- E1 "^odo printT..t(, to

S1 USar test Para referi- a la varia-

^ ^ ^

Us variables d : clase y de msu...al .t

^^ ^ (lo sl| clslsl.

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

h"13 m, fiC3da- Otra aI'a dC P"*^ ^ cuando us.ed conv.erte por

PreV'r!S Para Cambar ^ Valr de Una Va"ible dc """i pero ,a varia-

Wi'ble

na subclase

ble de insume.. o de clase en, .

encontrarla.

est en uso en un nivel superior en la jerarqua de clases.

.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

Paso de argumentos a mtodos


dentro del mtodo, afecta a los objetos originales. Tenga presente que entre tales objetos se mcluyen los arreglos y todos los objetos que es.n contenidos en arreglos. Cuando pasa un arreglo a un mtodo y modifica sus contenidos, el arreglo original es afectado. Los tipos
cuerpo del mtodo son pasados por referencia. Cualquier cosa que usted le haga a los objetos

Cuando usted llama a un mtodo con parmetros de objeto, los objetos que pasan dentro del

primitivos, por otro lado, son pasados por valor.

El listado 6.4 demuestra cmo funciona esto:


Listado 6.4. U clase passbvbeference.

3:

2:

1: class PassByReference {
int count = 6;

. int onetoZero(int arg[])

Creacin de clases
Da 6
144

1451

L.STADO 6.4. CONTINUADOR


4:

'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:

for (int i = 6; i < arg.length; i**) {


if (arg[i] == D i
arg[i]

6:
7: 8:

lneas en la primera lnea de salida.

Las lneas 18-22 imprimen los valores iniciales del arreglo; usted puede ver la salida de estas

9: 10: 11: 12: 13:


14: 15:

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.

16: 17: 18:

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:

funcionan los mlodos de clase y de instancia.

La relacin entre las variables de clase y de instancia es directamente comparable a cmo

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:

sta es la sal da del programa

i- cualquiera de sus diferentes tipos de nmeros, como en el ejemplo a continuacin:


float ro'pt = Math.sqrt(453.0);
345087 0 34

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

Val jes of the ar-ay: [1


Nunoer of.Ones = 3 Nev vales of th '. array:

System.out.print("The larger of x and y is " + Math.max(x, y));

Para definir los mtodos de clase, utilice la palabra clave static delante de la definicin del

. cucnn el nmero de un en e, arreg.o y devuelve ese va,or.


. Sumi iye con un 0 a c: a 1 en el arreglo.

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:

d^sTd: I3' C"' d mtOd main'' M l0 Prmer *" SC llama- A ^ ** ""da

La clase punto de inicio para su aplicacin slo necesita una cosa: un mtodo main() Al

int count -

p.r..lnt(, -o un entero

publie static void main(String argumentsm /


//
'I

cuerpo del mtodo


!

En ,a instruccin anterior, el valo

con un lor de 42, y ste es almacenado

La ralta de una palabra Cave .tic a. frente de. n-

Rancia. Los mtodos de jns opera en un , ^ ^

-t

He aqu un recorrido de las partes del mtodo main()

Publie significa que este mtodo est disponible para otras clases y objetos. El mtodo
publie y prvate.

mainf) debe ser declarado public. Durante la semana 3 aprender ms acerca de

static significa que main () es un mtodo de clase.

void significa que el mtodo main () no devuelve un valor.

main () toma un parmetro, el cual es un arreglo de cadenas. Est, argumento se usa


para argumentos de programa, que conocer en la prxima seccin.

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^^^^

ella en el mtodo main ().

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

appleu requic :n un poco n* *


naveBador. as como para d>bujar y

e, $islema grffico
pequeas

programa.

est listado en su variable de ambiente CLASSPATH.

Si est usando el JDK, las clases deben ser accesibles desde un directorio que

cla qm

sirve pomo pumo de

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

mtodos dentro de varias clases y objetos usados en su programa

dos cuando realmente se ejecute el programa.

Aplicaciones Java y argumentos de lnea


de comandos
la depuracin de entrada o indicar un nombre de anduvo para ser cargado.
Escriba
1 2 3
4

class EchoArgs {

,.public static void main(String argu^ents]) {

5 6:

System.out.printlnrArgun.ent + i + -..

m
+ arguroentsfi]);

Paso de argumentos a las aplicaciones Java

7: }

L0SgUem es un eJemP' d^ ^'rada para ejecutar este programa


lnea de comandos.

java EchoArgs Wilhelm Niekro Hough 49

P,,, pasar argumentos a un programa Java en Windows o Solaris, se deben agregar a la lnea

Loman^,. ejecutar e> programa. Lo sigincn.c muestra un WU,


java MyProgram argumentOne ? three

Salida

En los ejemplos anteriores se pasaron tres argumentos a un programa: argu.entOne. e,

Sl 2 y thr... Observe Muc cada argumento es, separado por un c,u,


dob.es. Por ejemplo, e, argumento -Noyes ,o SJx^J^

Argument Argument Argument Argument

0: Wilhelm 1: Niekro 2: Hough


3: 49

Para agrupar argumentos quc ,ncWyen ^^

He aqu otro ejemplo de entrada para ejecutar este programa:


java EchoArgs "Hoyt Wilhelm- Charlie Hough
Y aqu la salida que produce:

cuanl es enviado al programa y recibido u.ilizando el mtodo maxn(,.

Salida

Manejo de argumentos en su aplicacin Java


"cadenas y pasa el arreglo al mtodo mam() de la jplit.icion. kl
main():

Argument 2: Hough

Argument 8: Hoyt Wilhelm Argument 1: Charlie

Cuando una apUeaci.n se escuta con <^^^^Z


public static void main(String argumentsl)) {
// cuerpo del mtodo

a^e > H
Nota

ta: I"!"* entre


una unidad

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

mtodo, como sigue

^:;: r crnirios ^^ ilamad ParSeInt' Cambie <* '/ 6 para usar ese

sum += Integer.parselntargumentsfi]);

El programa se compila exitosamente. Ejecute ia apcacin de ,a siguiente n.anera:


java SumAverage 1 2 3

La salida producida que usted debera ver es:


|, Average is: 2
Sum is: 6

Zcl * y - de averigua, qu hace.


A SUMAVERAGE.JAVA.

Resumen

1:

usted sola usar con


int sum =

"'^ ;l ' '

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:

cabiae r rr de en:Aprendi cmo deciar


h

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

SumAverage.java:6: Incompatible type


java.lang.String to

c:

+=. can't convert

Hasta maana, la leccin ha terminado.

sum += arguments[il;

_ Aun cuando usictl

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-

[i interrump abruptamente su ejecucin con un error de tiempo de ejecucon.

R ,,.-,, de !a canudad y ,ipt. He ^umentos que W^^"


r si no lo ha recibido. devuel >c un mensaje de error

Uso de mtodos para realizar tareas


.Los mtodos son, defini.ivan.enie. la pane ms importante de cualquier lenguaje
orientado a objetos, debido a que definen toda accin de un objeto.

hacer y cmo inleracia con otras clases y objetos);

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

der acerca de las siguientes caractersticas:

sus objetos y clases sean ms eficientes y ms sencillos de entender) Hoy .pren

conocimiento a crear programas Java. Sin embargo, podra llegar a olvidar algunas caractersticas que hacen poderosos a los mtodos (caractersticas que hacen que

Ayer aprendi bastante acerca de Ja definicin de mtodos, y pudo aplicar este

,.

: ,

,. Sobrecarga de mtodos. Cmo crear mtodos con mltiples firmas y definidones,, pero con el mismo nombre.

Creacin de mtodos constructores. Los mtodos que le permiten inicializar


objetos para establecer su estado inicial cuando se crean.

Da 7

J .-I

Uso de mtodos para realizar tareas

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

Listado 7.1. Los inicios de myrect . java.

class MyRect { int x1 = 0;


int y1 = 0;

int x2 = 0;

io.cca de clases de Ja dosvalueOf O tremes.


dad de aromemos cpie toman.

int y2 = 0;

de, lro por dos cosas:

Mota
d co I

' LaUin'1'

. l'.l li|>11 l'': t''"ns

"" ,-.U); ^ c;k1:i aip"01


J

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

this.x2 = x2; ' this.y2 = y2;


return this;

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

MyRect buildRect(Point topLeft, Point bottomRight) i


= topLeft.x; y1 = topLeft.y;

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);

,,y2 = (yi + h);


return this;

31:

U. lr,na:i.osib,e de dcmir el ,ee,ngulo es usar ul,a quina, supe, u,r. un aUo y un ancho.
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

""'
-

;;

-x2 = (x"1 + w) ; "


y2 = (yi + h);
return this;

-vi-'- topLeft.y;

39:
40: 41:

rect = new MyRect();


Syste;out.prlntlnrcalling

}'"

42:
43:

,a de clul con todos sus mtodos: tres mtodos bu


un mtodo main(). :
Listado 7.2. El texto completo de myrect .java,

44: 45:
46:

System.out.println("**");
points

rect.printRect();

rect.buildRect(25, 25, 56, 50)-

47: 48:
49:
1:

import

java.awt.Point;

50: 51:
52: 53: 54: 55:

System.out.println("***");

2:
3:
4:

class MyRect int x1


int y1
mt int x2 y2

= 6;
= 0;
= = 8; a;

5:

6:
7:

56:
57:

Systei. out. println ("**-");

rect.printRect();

rect.buildRect(new Point(ie,i0)

50

5e).

)j

8: 9:
10:

MyRect uildUectlint S1, int y1,


.'. '
. -

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:

MyRect buildRect(P0int topLeft, Point bottornRight)


x1
yi
x2

18:
19: 28:

=
=
=

topLeft.x;
topLeft.y;
bottomRight.x;

21: 22: 23:


24:

y2

bottomRight.y; this;

point

return

Uso de mtodos para realizar tareas

n llamados. Puede de ar el componam.emo ron.cr

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.

en las lneas 17-23


MyRect

bottOmRight)

*Escriba
1:

: topLeft.y,

Listado 7.3. La clase person.

o argi.mcn.o

os cn.cros. Con

2: 3:
4: 5: 6:

'

class Person { String ame;


int age;

Person(String n, int a) {
ame = n; -

7:
8:

age

= a;

9:

10: 11:
12: 13:

void printPerson() {

System.out.printCHi, my name is Sy.tM..ut.printlnr. X ..-*.,.

14: 15:
16:
;

17: 18: 19:


20:
21:

22:

23:,
24: }

System.out.println("

P = new Person("Laura", 35)p.printPerson();

System.out.prlntln("

P = new Person("Luke", 50)p.printPerson();

");

);

Lo siguiente es la salida del programa:

Todos los ejemplos que usted ha creado

Jijm Hi-_my ame is Luke. I am 50 years od.


my ame is Laura. I aro 35 years od.

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

Uso de mtodos para realizar tareas

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 ().

constructor definido en la clase actual:


this(arg1, arg2, arg3);

Escriba
1:

Listado 7.4. El te:<tq coMnn^mrrr.JAW

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;

> lnt x2-iBt

MyCircle(int xPoint, int yPoint, int rad.usLength) <


this.x = xPoint;

13: 14:

this.x2 = x2; this.y2 = y2;

this.y = yPoint; this.radius = radiusLengtn;

15: 16:
17:

l,.yCircle(int xPoint, int yPoint) {


tnis(xPoint, yPoint, 1);

18:
19:
20:

21:,,
22: 23:
24:

>

y2 = bottomRight.y;

x2 = bottomRight.x;

y1 = topLeft.y;

1 point

MyRect2(Point topL.ft, int w, int h)


y1 = topLeft.y;
X2 = (xi + w);
. . : .

25:

x1 = topLeft.x;

26:
27:

Sobrecama de mtodos constructores

31:

3e:

29:,

28: '!.. }'

y2 = (VI + h);
' .Mi. i .-

.,'

void printRect() {,

32:

33:

^
'

Syit..out.println(V + x2 + ",

System.out.printCMyRect: <- + x1
y2

diferentes tipos de entrada.


* hoy temprano haran

35:'
36:

34:

Da 7
162

Uso de mtodos para realizar tareas

existentes

Creacin de mtodos que sobrepongan a mtodos

, 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:

System.out.println("x is " + x + ", y is + y) System.out.println("I am an instance of the class


this.getClass().getName());

9: 10:

El listado 7.6 muestra una clase llamada PrintSubClass, que es una subclase de
MyRect

: <25, 25, 68.

tiene una variable de instancia z.

PrintClass. La nica diferencia entre PrintClass y PrintSubClass es que es.a ltima

Escriba Listado 7.6. El texto completo de printsubclass.java.


2:
3:

1: class PrintSubClass extends PrintClass f


int z = 3;

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

cla del objeto. Si no la encuentra pasa 1 Han ^ ^ ^^ ^ y ,. mclodos


^ ^.^

8:

6: 7-

4: 5:
}

publie static void main(String arguments[]) { PrintSubClass obj = new PrintSubClass():


}
obj.printMe):

He aqu la salida del programa:


x is 0, y is 1

Sin embargo, podra haber ocasiones en que u

Swdo. pero q- tenga un componam.e *-mo ^^ ^ qu mtodo de una


0. defina un mtodo en una subclase

a es miodo para sobreponer


^ ^ subdase y se ejccula

I am an instance of the class PrintSubClass

vez

Usd de mtodos para realizar tareas


Da 7

165 I

Cmo llamar al mtodo original


Suele haber dos razones por las que usted necesita sobreponer un mlodo ya implemcntado
por una superclase:

Para remplazar por completo la definicin del mtodo original.


ver en la salida anterior.

Para agregar comportamiento adicional al mtodo original.


En cuanto a la primera razn usted ya lo ha aprendido: sobreponer un mtodo y liarle una nueva definicin, oculta la definicin del mlodo original. Hay veces, sin embargo, en que el
comportamiento debera ser agregado a la definicin original en vez de remplazara por com pleto, sobre lodo cuando el comportamiento est duplicado tanto en el mtodo original como
S6I0 U Case c,ue usted este

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.

aplicacin y por tanto, .eeun

ejecutando con el interprete o,

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.

posiblemente hay que hacer algo ms aqu

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:

Listado 7.8. Los mtodos printme ).

// desde PrintClass
void printMe() {

3: 4: 5: 6:

System.out.printlnCx is

"

+ x +

",

y is

" + y) ;

SysteiB.out.println("I am an instance of the class"


this.getClass().getName());

7:
v se ll.ma al mciCHloprintMeO.s

8: 9: 16:

//desde PrintSubClass2 void printMe() {


yis

11:

Systen.out.println("x

z is

-*

System.out.println("I an an instance of the class


this.getClass().getName());

Da 7

tamicnto adicional sin problemas:


// desde PrintClass

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

aistintas de cualquiera de los constructores de la superclase.


X is 0 Y iS 1
Z is 3

ns cu ,au'PUe efear "" ^ "" ^ CnStrUCtreS C" firmas opiatamente


un, V

Sobreposicin de constructores Tcnicamente, los mtodos constructores


el mismo nombre que la clase actua . los
Sl, dase, se manda Humar al constructor
a W ve, nunda Uamar-n cndor

nomb e

da adicional/

-"

cual extiende la clase Point de,

J nucws sll ccaos en vez

illicializar x

^ ^ m,loi)o conM,,ltMOr de

dc SC1- .ccd.dos. Este sistema e, ^n


in,a;,,,Mc,n ocurre en .odas panes du
Si,, emha,,o. a!

Listado 7.9. La clase nameopoint.


import java.awt.Point;

dc su superclasc. y ese constructor


ar

succsivamcnu-. Por lo tanto, la

class NamedPoint extends Point {


String ame;

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-

NamedPoint(int x, int y, string ame) {


super(x,y);

this.name = name;

Para llamar a un mtodo en una P^l^ de m,Odo a llamar, se un.iza .a .orma


Como los mtodos constructores no tienen un
siguiente:

uli,cc super.noneretfeJ mtodo (argumentos).

'

publie static void main (StringJ] arguments) {


System.out.println("x is " + np.x); System.out.println("y is " + np.y);

NamedPoint np = new NamedPoint(5, 5, "SmallPoint"):

System.out.println("Name is " + np.'name);

super(argi, arg2, );

168

Da 7

Uso de mtodos para realizar tareas

La salida del programa es como sigue:


x
y

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

-os mtodos que eiminan

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.

El mtodo finalizado,' es f inalize(). La clase Object define un mtodo finalizador prede


sobreponer el mtodo f inalize {) usando esta firma:
protected void finalize() throws Throwable <
super.finalize();

finido que no hace nada. Para crear un mtodo finalizador para sus propias clases, nene que

Preguntas y respuestas

P Vo cre dos mtodos con las firmas siguiles-

Nota

La parte throws Throwable de esta definicin de mtodo se refiere a los

errores que pudieran ocurrir cuando se llama a este mtodo. En Java a

da 16 "Circunstancias excepcionales: manejo de errores y segundad". Por

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

misma l,Ma de parmetros, cmo sabra Java a cul llamar''

re"? <* -> P"edo crear mtodos ,.

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

9 Cmo mejorar la apariencia de


fuentes y color
y sonido sus programas con grficos,

10 Adicin de imgenes, animacin

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

Respuesta a la entrada del

14 Desarrollo de interfaces de

usuario avanzadas con el AWT

SlSi

Semana 2

Da

3m
>".'

Cmo poner programas interactivos en Web

i1 ii
I

Li

de programadores an estn aprendiendo e, lenguaje para ,,cn^ applts


loci. u.xL,,,tc. une, de los prognun.s tJUC llslc,| clvrt ,,, ; |ic.li;ioi , . semana pasar al desarrollo de applets. "-.u.h.i.ln J.,v.,. I.M..

s aden's ^ Web una eran

i* MI

^!^ZVT.enfoc a apremier ;lcerCil deI lcng^e Jav:i ps- ~-

Da 8
174

Cmo poner programas interactivos en Web

Hoy usted inicia con lo bsico: .Las diferencias enueapplets y aplicaciones.

Restricciones de seguridad de applets

Cmo crear un applet sencillo.

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-'"

.Cmo colocar un apple. en una pgina Web.

recolecte informacin privada del sistema y cometa otras infracciones de seguridad.


seguro que lamentarlo". Un appie! no puede hacer nada de lo siguiente:

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 <

Ejecutar ningn programa en el sistema del usuario. "

Cargar programas almacenados en el sistema del usuario, como programas ejecutables


y bibliotecas de rutinas compartidas.

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

A guisa de ejemplo, la herramienta appletviewer permite configurar una lista de control de

navegador que implememe las ms estrictas medidas de seguridad.


aprovechar por completo las capacidades de Java.

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

ion v la n<crfaz del naveSador'

Es posible que un programa de ava nc


r^^

Tir^cio funcione tanto como un applet


procedimientos para crear
ser gradas a, correr elpro.ar.a

como ActiveX, pero todos los usuarios de navegadores deberan familiari


zarse por si mismos completamente con este tema.

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

SL aleacin. Aunque ^ ^ X entre s. Las caracterstica

Dia8

Cmo poner programas interactivos en Web

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.

Control de seguridad mejorado


El modelo de seguridad descrito hasta este punto es el que se introdujo con Java ! .0.2, La versin actual de Java incluye una forma para que un usuario de Web pueda confiar en un
applet, de modo que ese applet se pueda ejecutar sin restriccin en el sistema del usuario, tal
como lo hace una aplicacin.

Java 2 habilita controles de seguridad muy especficos para ser colocados en un lugar o ser
direccin Web:
http://java.sun.com/products

removidos de los applets y aplicaciones. Esto se loca durante el da 16, "Circunstancias


excepcionales: manejo de errores y seguridad".

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.

sisiema con un intrprete de Java 2.

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 funcionar como pune de un navegador y manejar ocurrencias


como la recarga de la pgina en el navegador.

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:

putolic class yourApplet extends java.applet.Applet { // aqu va el cdigo del applet

}
mroduje.ronallenouajecnJaval.lo2

Da 8

public void start() { // aqu va el cdigo

HH5
la case Applet cuando ocurren eventos especficos.
Paro

omportarse en forma diferente.

,as pecffic al

necesita ser desplegada o redesplegada.

public void stop() { // aqu va el cdigo

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

ponga el mtodo destroy () como sigue:


public void destroyf) {
// aqu va el cdigo

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-

sobreponer cl mciodo init () como sigue public void init() {


// aqu va el cdigo

en si mismo.

proposito general para un objeto sencillo de todo tipo de limpieza posterior

destroy() se aplica slo a los appiets en tamo que f inalizef) es de

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

Este app|et sobrepone el mtodo paint O

"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
;

Dibujo del applet.


40^

ang a salami, I'm a !lsagna ho&

Da 8

Si usted implementa los mtodos correctos del applel en su clase (init(), start(),
de un punto de salida explcita.

siop() paTnt (), y as sucesivamente), su app.e. funcionar sin problemas y n neces.dad

Inclusin de un applet en una pgina Web


en archivos de clases, debe crear una pgina Web para colocar el applet.

18: <Mpplet> 11: </B0Dy> 12: </HTML>

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

Tallo definas Web con. Home Page de Car, y Dreamwcaver de Macromed.a,


qUe se pueden utilizar para agregar applcis a una pgina s.n usar HTML.
relacin a otras partes de la pgina.

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

--. web que :

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

*' ^PP-C en un programa, L

u^de^ '

"'Ur SgUro dc Proporcionar una ventana lo

Nota

c ibir pginas HTML o que sabe utilizar una herramienta de desarrol o en

P^a generar HTML. Si requiere ayuda en esta rea, le sugenmos las

siguiente: Aprendiendo s puoHcar en Wet con HTML de Laura Lema,

en el lugar del apple,.


La etiqueta <APPLET>
:M istado

l algo entre <APPLET> y <MPPJT> .

d-endo de de ver ver un un aPP,eI aPP,eI de de Java Java

porque su 1Z1^J.T " Cnil! 4UC * ^ 'd l sopona. Si usted no especifica navL^dor no lo

s que no pueden manej.r

' " naVe-;id"re^ fue no .soportan Java no despliegan nada

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

alterno con.que se ,eS h


does not support

Listado 8.2. El texto completo de palindromepase.html


1: <HTML>

Cmo probar el resultado

2:

3: <TITLE>The Palindrome Page</TITLE>


4: </HEAD>

<HEAD>

5:

<BODY>

yd

Da8

~~~~~~~

Cmo poner programas interactivos en Web


-~"~- ____

-*-"pSE
Figura 8.2

tos app'eli

Ms acerca de la etiqueta <APPLET>


dentro del diseo lotal de una pgina Web.

TaSTnT;hlTtV:m^.aprOp^ ye~ <"* y ** => ^PP'et en ese aspa-

En su forma ms simple, la etiqueta <APPLET> utiliza los atributos CODE, WIDTH y HEIGHT

f ,<APPLET> inclu>* * iribuu.s que le pueden ayudar a integrar mejor un

- Ui i>a'n(i Web
PalindromePage.html

\ota
Mfammcfl>

<APPLET> son casi idnticos a los de la

V: en Navigator.

Go hang a salami, I'm a lasagna h)g.


ALIGN
panes de la pagina, liste atributo puede tener uno ele nueve valores:

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.

Cmo poner applets en Web

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.

valor es lo mismo que ALIGN-BOTTOM, pero ALIG^BASELINE es un nombre ms

sd nc=c <* de servido, Vv*

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.

<BR CLEAR=RIGHT> contina desplegando en el siguiente margen derecho disponible.

Cmo poner programas interactivos en Web


. <BR CLEAR=ALL> contina desplegando en el siguiente margen izquierdo y derecho
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 _-, *....-->

(>l>iinili-\ ilr iliiii-n-

cin del a>i>lcl.

.,-. jr ._.i.~~i-

la pgina

pgina Web que contiene el appJ


:
7

dei

^ mismo
es u un es

orio que I, pgi,,, Web:

"amado Bix'class dcl -"ismo d.rec-

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

sitio Web aherno, para cargar I

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 CODE=-ShOWSmiley.class- WIDTH=45 HEIGHT=42


ALIGN=LEFT VSPACE=50 HSPACE=10>
Requires Java

</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

Cmo poner programas interactivos en Web

cuso*

i' archivo de texl cualc!uier <** sa).


a <OBJECT> .orna la forma siguiente: hf1gHT-40

e toma obtene, un applei y todo lo que necesita pai ejeem-us

?,

W " servidorquecontengael archivo.

" CneXn ^ S "^ ^*


"" archivo *

te de <APPLET> a <OBJECT> requiere los cambios siguientes:

archivo JAR. el

- ->rMw jar ^ ^

cantidad de arch
...r*.*.-.*
que el tamao

;: fadrTncqueblenerddscrvidonusleJpualc**y*"Tior jlg

el lado del na.e.

7 escomprimir y ejecutar los archivos)


d

Cn!ar CS0S lTchtw< ' J^K incluye una hc,T,,n,cnu,


describen posteriormente.

ores ravisaiore imemet Exptrer > T ""^ demr "" "^ MR" Li ianic el lonnaio Zip C o empacados sin compresin

listado 8.2

jar cf Anate, iar -.class vgi

1:

<HTML>

que el nombre nombdJ del


que

2:

3:
4:

:mLE>The PaHndrone Page</TITLE>


</HEAD>

ieme.

Tambin puede aadir i--h:- i- .

vo del archivero seguir como uno de los argumentos siguiemes. i


-r

'

""''

rwi.s ^puo/lcos a un archivero Java con un comando como el sigu-

5:
6:
7:

:;>!Tf.vorit. ,eat-related palindro.e 1.:

jar cf Smiley.jar ShowSniley.class ShowSmaley.html spinhead.gif


Tiiiey . jar que contiene tres archivos: ShowSmiley.class,

8: 9:
10:

</OBJECT> </BODY>
</HTML>

11:

12:

Archiveros ch.veros JAVA jmvm


La manera estndar de colocar un applei de Jun navegador con soporte para Java. Cualesquier

<0BJECT> para .ndicar el archivo de ^ ~ ^^ archvos requeridos por e,


aPple. se obtienen desde el servidor Web.

^ es mediame <APPLET> u ^ ^ obcne y ejccuU,

appiti con etK|iieias como la-, .siguientes:

pZ n ,

i' ^ " " Ca


- archive-smiley.jar- width=45 heiBht=42>
jar comcnc |<m ^^

La etiqueta especifica ,,uc :la-,livo JAR |hml;ldo Smiley. j


H.nIrn . , .

por el applei. TO navegadores v hi.o-,,.,; ., .


.. . .."
' t -

aentro del archivo indimH.- u ^^

o inalado los dems archivos que se necesitan conforme se ejecuta el applet.

> "tminiiLMUs de navegacionque soportan archivos JAK buscar,,

Dia 8

Cmo poner programas interactivos en Web

i
Precaucin
Aunque un archivero Java puede contener archivos de clase, el atributo

ARCHIVE no elimina la necesidad del atributo CODE. Un navegador requiere

conocer el nombre del archivo de la clase principal del applet para cargarlo.

t:rf''lc lm *

Otros formatos de almacenamiento

An.cs de que los desarrollados de Java introdujeran el formato de archivo JAR. lamo Netscape

Lo Microsoft ofrecieron sus propias so.uciones de almacenamiento. No ofrecen algunas de


las ventajas de los archiveros Java, pero tienen el beneficio de trabajar con navegadores con soporte para Java que todava no soportan las versiones de Java mas alia de 1.0.2.

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>

Paso de parmetros a los applets

"!!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>

HS y el valor de e.bb.., e establece para e. nombre de. archivo . c.b. Lo s,gu,emc .s


<APPLET CODE=-DanceFever.class WIDTH=200 HEIGHT=450>
<PARAM NAME="cabbase' VALUE="DanceFever.cab >
</APPLET>

un ejemplo:

valor de

, y uno nombrado size con un valor 24.


que usan la etiqueta <0BJECT> en

dos pariinelros del applei

vez de la etiqueta <APPLET>.

El uso de la e.ique.a <PARAM> es e| mismo para los app.ets

Cmo poner programas interactivos en Web


Da 8

1931

Listado 8.4.

El texto- inicial para newpalindhome . java.

Los parmctrU son pasados a, carg^

recuperarlos parmetros con e mto

1:

import
iraport

java.awt.Graphics;
java.awt.Color;

S^4
initffcomola siguiente

2:
3:

import java.awt.Font;

4:
5:
6:
7:

publie class NewPalindrome extends. java.applet.Applet {


Font f = new Font("TiraesRonian", Font.BOLD, 36);

"

'

-:

8: 9: 18:

publie void paint(Graphics screen)


screen.setFontff); screen.setColor(Color.red);

tneFontName * getParameter( -fonf );

11:

screen..drawString("Go hang a salami, I'm a lasagna hog.", 5,


40);

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");

if (palindrome == nuil) palindrome = "Dennis and Edna sinned";

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,

U '"" ",,,.|0 !. .na Er,.

screen.drawString("Go hang a salami, I'm a lasagna hog.", 5, 58);


Para dibujar la nueva cadena que usted almacen en la variable de instancia palindrome.

todo lo que necesitar es substituir dicha variable por la cadena literal:


screen.drawString(palindrome, 5, 50);

,icie c<ipiando la clase Palindrome original, c


decase, como muestra el lisiado 8.4.

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

Cmo poner programas interactivos en Web

1951

Listado 8.5. El texto completo de newpalindrome.java.


1:
2:
3:

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 -

publie class NewPalindrome extends


Font f = new Font("TimesRoman",
String palindrome;

java.applet.Applet
Font.BOLD, 36);

".. -J..

6:
7:

carnada con Netscape


Navigator.

8:
9:
10:

No, sir, prefer prison

publie

void

paint(Graphics

screen)

screen.setFont(f); screen.setCoJor(Color.red);

11:

12:
13: 14:

screen.drawString(palindrome,

5,

50);

15: 16: 17: 18:

publie void init()


if

{
nuil)

irfi.-j-,. .-

f
-

Al
.*

palindrome = getPararaeter("palindrome");
(palindrome ==

Si no se especifica un palndromo en el cdigo para NewPalindrome. el valor predeterminado


es Dennis and Edna sinned . El lisuuJo 8.7 croa un archivo HTML sin im:i etiqueta de
pramenos para AME.

palindrome =

"Dennis and Edna

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:

Listado 8.7. El texto completo de newpalindrome2 . htul.


<HTML>
, ir

2:

<HEAD>

3:

<TITLE>The New Palindrome Page</TITLE>


</HEAD>
<BODY> <P>

Escriba
1:
2:

Listado 8.6. El texto completo de newpalindrome . html.

4:
5: 6:

<HTML>
<HEAD>

3:
4:
5: 6:

<TITLE>The New Palindrome Page</TITLE>


</HEAO>
<BODY> <P>

7: 8:
9: 10:

Your

<APPLET CODE="NewPalindrome.class" WIDTH=600 HEIGHT=100> browser does not support Java!

</APPLET> </BODY>

7:

<APPLET CODE="NewPalindrorae.class"

WIDTH=600 HEIGHT=100>

8:
9:
10:

<PARAM NAME=palindrome VALUE="No,


Your browser does not support
</APPLET>

sir,

prefer prison">

Como aqu no se proporcion ningn nombre, el applet usa el predeterminado, y el resultado


es lo que usted esperaba. Dle un vistazo a la figura 8.6.

: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

bsqueda AltaVista en http://www.altavista.digital.com, hay ms de 1.200,000 pgi


nas Web que contienen applets.

196

Da 8

Cmo poner programas interactivos en Web

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?

NewPa Iii<frome2. html


iirgoilti ton NiScu*e.

-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

dor Web puedan presentar applets de Java en pginas Web?

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

documentos HTML, archivos de imgenes y olro.s archivl)S. Mudl()s c |os puqucltfS dc

Hoy aprendi las bases para la creacin de applcls. incluyendo lo siguiente:

. 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

P Los applets no tienen una lnea de comandos o un (lujo dc salida estndar,


System.out.printlnO?

como puedo hacer una salida de depuracin sencilla en un applet como

paintO. Estos mtodos son sobrepuestos para darle funcionalidad a un applet.

. 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.)

usar los archivos de archivero de Java, el atributo ARCHIVE de Netscape, y el parmetro

. 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

de sus programas con grficos, fuentes y color


asombrado de su pericia como programador.
mas que usan grficos, fuentes y colores.

Cmo mejorar la apariencia


Una de las mejores formas de impresionar a un conocido que no sea programador

muestra la secuencia animada de un pequeo bailando -La galliniia". quedar

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

Hoy empezar a aprender a ganar amigos e influenciar a la cerne al escribir progra

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

Cmo mejorar la apariencia de sus programas con grficos, fuentes v color


Listado 9.2. El texto completo de
2: <dlv align="center">
5: </dlv>

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>

Patrones de relleno degradados,


Dibujo de lneas-de anchos diferentes.

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.

La figura 9.1 muestra la pgina y el app|cl cargados en Nc.scape Navigator.


Figura 9.1

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.

Listado 9.1. El texto inicial de map . java.

1:
2'

iniport |ava.awt.Graphics;

3: publie class Map extends java.applet.Applet {


A:
5:

publie void paint(Graphics screen) {


screen.drawString("Florida",

e!

' }

185, 75);

ninguna parte del dibujo quede fuera.

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

Cmo mejorar la apariencia de sus programas con grficos


Lneas

El sistema de coordenadas para grficos


Como draString(), todos los mtodos de dibujo tienen argumentos que indican las coorde coordenada x, y pra identificar su pumo de inicio y .ira coordenada x, y para su pimo Imal.
nadas x y Algunos toman ms de un conjunto de coordenadas, como una lnea, que tiene una

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).

Agregue la siguiente instruccin al mtodo paint() del apple, Map.


screen.drawLine(185,80,222,80);

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

Axregado de una Unen al apitlel.

?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

texto y su edrtor de cdigo fuente de Java, la versin final de Map. Java se

Para preven,, las molestias producidas de voltear repetidamente entre este

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

Ambos mtodos toman cuatro argumentos:

Nota

Tambin puede dibujar archivos de mapas de bits, como los archivos GIF y
JPG, mediante la clase Image. Maana aprender sobre esto.

Las coordenadas x y y de la esquina superior izquierda del rectngulo.


El ancho del rectngulo.

La altura del rectngulo.

Da 9

grfico, fuentes y co.or

#
#

Agregue la siguiente instruccin al applet Map: >


screen.drawRect(2, 2, 345, 345);

Esto weoa un contorno cttrecingul justo dentro de !as orillas exteriores de la ventana de. ^sTcn ve, d, ello se hadado e, mtodo* illRectO ^angu^hdo podna
llenar la mayor parte del rea del apple. y ocultar el texto subrayado Florida.
Les rcengulos con esquinas redondeadas redondeadas reque requieren los mtodos drawRoundRect () y on esquinas 3Sfe tos de lo, rectngulos norm 3fe , que toman los primeros cuatro argumentos normales.
con doVnrgU/iicntos aadidos 'il final. "

del aPL.;
Figura 9.5
Agregado de un
al applet.

ancho y 8 de aho El

e" I:l fieura 95- " acercamiento de una porcin

rcdondea^ & 10 pixeles de

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

Los Pohgonos se pueden dibujar con ,os mtodos drawPolygon

() y nilPoIygon,,

"o tS,e n anl de 30 y una altura de ,0 para cada esquina redondeada. Otro nene un ancho

,, f,..un 9 4 muestra vanos ejemplos de rectngulos con qsquinas redondeadas. Un rec.ngu-

de 20 y una altura de 2()!y luce mucho ms como un crculo que como un rectangu.o.
10

Puede especificar eslas coordenadas de dos

maneras

Figura 9.4
dondeadus.

Polygon poly = new Polygon();

El s,guienie ejemplo muestra el uso de este constructor:


Agregue la siguiente insiruccin a! mtodo paint() del applel Map:
screen.drawRoundRect(182,61,43,24,10,8);

, e, cual especifica e, aneg.o de pumos x. e. arreglo de pun.I y "c., ,'id- c


= { ia, 20, 30| 48| 50 }.

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[]

Polygon poly = neW Polygon(x, y, points);

mt points = x.length;

int y[] = { 15, 25, 35, 45, 55 };'

Da 9
I 206

Cmo mejorar la apariencia de sus programas con grficos, fuentes y color


Figura 9.6
Agregado de un pol
gono al applel.

ejemplo:
,
Cuando tenga ,

65);

cde dibujarlo con los

mtodos

drawPo

objeto Polygon, como se muestra aqu>:


.cre.n.dr.*oly0-n(poly>".
^ ^

de correspondencia

valos
Precaucin

Crculos y valos se dibujan mediante los mtodos drawOvalf) y mi0val().


Estos loman cuatro argumentos:
Las coordenadas x, y del valo.

El ancho y alto del valo, que son del mismo tamao en crculos.

, 253. 261,3-, 336, 295,253,

a la izquierda y arriba del mismo valo real .

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

Regresemos al applet Map y agregue las instrucciones siguientes:


screen.fillOval(245,130,15,15);

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

Figura 9.8 l^gjggffg*^

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:

lcs y un alio c]0

instruccin dibuja el ve veo

Figura 9.9
Un arco.

Las coordenadas x, y del valo.


El ancho y alio del valo.
E! ngulo de inicio del arco.

El nmero de grados cursados por el 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

tro areumentos que no cambian

""' " ***


.0 Pele>,

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:

118, 56, 68, 49, int pts = x.length;

int y[] = { 12,-15, 25, 71, 209, 278, 310, 274, 18B, 171, 174,
12 };

medios crculos.

Polygon poly = new Polygon(x, y, pts);


screen.drawPolygon(poly);

, ,,. *
valores x y y

,a. ,. , *

18:
19:

AlV,da .as instrucciones

s.guientes a. mtodo p.int () del apple. Map:

20:

21: 22: 23:


24: }

screen.fill0val(245,130,15,15); for (int ax = 50; ax < 150; ax += 10)

screen.fillDval(235,140,15,15); screen.fillOval(225,130,15,15);

#&:!. mmm.

for (int ay = 120; ay < 320 ; ay += 10)


screen.drawArcfax, ay, 10, 10, 0, -180);

00,0 - **, . < * P-*


denadas x, y creadas por el ciclo:
50.120
50.130

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

ciclo ay se ejecuta nuevamente.

# #

incluyendo todas las instrucciones de d.bujo que se v.eron durante c.

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.

34: public cas, Map extends i^


s". P
l\
\-

public void paint(Graphics s r en

screen.drawStringCFlonda", 185, 75),


screen.drawLine(185,88,222,80);

I'

8:

Screen.drawRect(2, 2, 345, 345);

Da 9

Cmo mejorar la apariencia de sus programas con grficos, fuentes y color

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

. E. mtodo clearRect;), limpia una regin rectangular de la ventana del applet.


El mtodo copyArea () toma seis argumentos:

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.

Cree objetos Font


Un objeto Font se crea al enviar tres argumentos i su constructor:
El nombre de la fuente.
El estilo de la fuenlc.
f-i-'.'-i'

. Los coordenadas x, y de la regin rectangular a copiar.


. F! ancho y alio de esa regin.
jrar una copia de ellu.

.. La rancia horizomal y vertical, en pixeles, para reurarse de .a reg.n antes de desple-

El tamao del punto de la fuente.

La siguiente inaccin copia una regin de 100x100 Pieles a un rea de 50 pixel* a la


dcnvha y 25 pixi-les ih.ij.v.
screen.copyArea(8,0,100,188,50,25); .

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.

aprender hoy a conhg.rar el color de fondo, posterior.ne.nic.

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

que representan las dimensiones del applet.

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:

Se pueden seleccionar tres estilos de fuenle mediante las constantes Font.PLAIN,


Font. BOLD y Font. ITALIC. Estas constantes son enteros y usted las puede agregar para
combinar efectos.

screen.clearRect(e; 0, size() .width,

El ltimo argumento del constructor Font() es el tamao en pumos de la fuente.

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);

nombre es parte del esfuerzo de JavaSoft para tener nombres de ,


consistentes a travs de la biblioteca de clases.

Dibujo de caracteres y cadenas


Para configurar la fuente actual, el mtodo setFont () de la clase Graphics se usa con un
objeto Font. La instruccin siguiente utiliza un objeto Font llamado f t:
screen.setFont(ft);

\1

Cmo mejorar la apariencia de

sus programas con grficos, fuentes y color

215

4:

J| Pblic class SoLong extends iava.applet.Applet {


:
dianie setFont ().
lual a dicho obje9:

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:

tanas de distinto tamao.


Figura 9.11

Dos copias del applei


viccnlc, como el ancho y al.o de escures

^"J^^^^r'-v -- '-
a

dicha cadena.
charWidth(char)

Dado un carcc, devuelve el ancho de ese c:,,a.c,

getHeightl)

wses Font y FontMetrics. El applci SoLong

V ,

I i/port ]ava.at.FontMetrics;

import java.awt.Font; imoort java.awt.Graphics;

217

Color
usar las

y ColorSpace del paquete j ava. awt para que sus aPPlel!| >'

y
s

--coior Para crear un color:


numeros de pumo floiame que

;es emeros que represemen ^ ^


sea

"mbin puede traducir un color de un sistema de descripcin de colores a otio.

En forma predeterminad, Java usa co.ores de acuerdo a un sistema de Opcin de -lores

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

X -I tde alH tienen la R.G. y B de Red. Orcen y Blue, Cada uno de ,. ^


^ . ^ .^

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

de tales espacios. Otro lo es CMYK. un s.stema usado por ,m.sore


sean la cantidad que contienen de cyan, magenta, amarillo > nefcro.

Un sistema de desenpcin de colores se llama un e^uo de


l

^^?
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.

con nmeros de punto tate

males, por ,nto. cuando vea una , ^

Cases y mtodos ./i::;

'ores se suelen Z5 ," pgina Web medi

el da 3, "Los ABCs de Java". Los co-

; ^^

como si configurar un fondo para

"^ '^^ eS eS quo quo esI esI tr^


actuales

ar9umentos hexadeci-

HTML. Ninguna de las

color ol a sKGB. y y

;;c se est usando en un programa. Un dispositivo de salida. mon,,o, o ,


tiene su propio espacio Je color.

I , representacn mema de colores de Java medame sRGB es slo un espacio de co

' el miodo setColor() de la clase

CU-.VO v.s,ed desnlieo aprime ulso de un co.or designado, el disposi.Ko de salida podr:,

=SEHSS==

>les mo

o ms colores que se aproximan al color no existente.

s co,o,,s usan las s,guienlCs variable., Color (con valores sRGB ind.cados en(re pa.nteblack (0,0,0)

U realidad practica de la admin^ion de ^ sRGB no est disponible en todos los dispositivos de s


java awt. color primado en Java 2.

'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

Cmo mejorar la apariencia de

Lu i,nca siE-ic,c e--h.cc e, * vgfin,c de, .*Jc.o screen a u^s Uc u. - ,,,s


variables de clase estndar.
screen.setColor(Color.pink);

Eptre Jas caractersticas de Java2D se incluyen las siguientes:

' Plantillas de llenado especiales, como degradados y lexlUras


Trazos que definen el ancho y estilo de un trazo de dibujo

Si usted na creado un objeto Color, lo puede estab.ecer de una .aera utan


Color brush=newcolor(255,204,102);
screen.setColor(brush);

Procesos de suavizado para redondear los bordes de los objetos dibujados.

s de estab,ecer e, coior actual, todas ,as operaciones de d,buJ0 ocurrirn en ese co!or.

Espacios de coordenadas de usuario y de dispositivo I


Trmino Nuevo

El m,odo setBackground<) es

stablecer el color de fondo de la ventana de, applc Este

toma un argumento sencillo, un objeto Color.


setBackground(Color.white);

> las coordenadas que se usaron para dibujar lneas, textos y otros elementos

color como el fondo del applet:


screen.setColor(getBackgroundO);

;is ;'cerca los


Conversin por cast de un objeto Graphics2D
do paint ()

Operaciones grficas avanzadas mediante


lk,,s * ;D o .*. mi. "^" ;.;n.n,-. o.,,;...,.,....>
ha aprndalo hy

es cb t0r

dbUJ " ^ SOn

desde un objeto

"

Pa'a

public void paint(Graphics screen) {

GraRhics2D screen2D = (Graphics2D)screen;

do las otras clases y programas que las implementan.

objeto screen conven.do desde la clase Graphics a la clase GraPhics2D.


es parte del paquete java.awt.

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

Cmo mejorar la apariencia de

sus programas con grficos, fuentes y color

Especificacin de los

Addico

Cclico

Figura 9.12

cclicos.
y muchas otras caractersticas.

Desplazamientos de degradados aa'clicos y

2D

funciona de la misma mane-

screen2D.setColcr(Color.black)

* -

sea con el mismo p

d "*

Figura 9.13 litis rectngulas con


el mismo

GradientPaint.

Patrones de relleno
LS patrn, s de relleno

ad0 Con JaVa2D **

puede usar m color sol.do. 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 ^

paint se implementa por cualquier


entPaint.TexturePaint, y Color,
con setPaintO es io mismo que

"Z^::Tzrel co]or

ccl,C0.

uar con ,n color s.ido como p.tr6n

de

=
.sacclicos y cclicos emre blanco y u

GradientPaintfx!,yi,colon,X2,y2,colora,true,-

- ^ -d, lo que es un **

fera ,12 muestra los ejemplos de


. de coordenadas en

es insertados.

refieren eren direcumentc a pu

untos en

el objeto

i de d usuano y Heren a, espacio

screen2D.setPamt(pat) ;

relleno hasta que se elija ouo.

Todas las operaciones subsecuentes de dibujo pan, el

usaran e.sie palron de

' \

Cmo mejorar .a aparlendade


I 222

Creacin de objetos para dibujar

del d.a de hoy, .

lneas, rectngulos, elipses, arcos y polgonos

BasicS

os de unln se apUcan a Unes que

Td

daSseguido de las coordenadas x, y de Ja o.ra. Aqu est un , y de un punto '" fina,

s: ,a ,as uan, an^nu-s:

Line2D.Float ln = new Line2D.Float(60F.5F,13F.28F);


gumentos. pues de otra manera e, compilador Java asum.r. que son entero,

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

Esto crea un rectngulo en 10.13 que es de 40 pixeles de ancho y 20 de alto. '


Figura 9.15

RectanSle2D.Float re = new Rectangle2D.Float(10F,13F,40F>20F);

Elipses

faliltn de unin Je minto fui"1-

Tl pse2D'Float Toma cualro ar8umemos: ia coordenada x-ia


Ellipse2D.Float ee = new Ellipse2D.Float(ii3,25,22,40)

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.

programas con grficos, fuentes y color

225

Un objeto GeneralPat, puede ser creado si,, nillj.,m :1I,lmlcnl0, ^ sc ,_, ^


GeneralPath polly = new GeneralPath();
El mtodo moveTof) de

'

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

toma dos argumentos: las coordenadas x y y y y de. de. nue nuevo

> se usa ei

Las instrucciones siguientes aaden tres lneas al objeto polly:


polly.lineTo(5,

POlly.lineTc(205f, 90f);
90f);

polly.HneTo(205f, 0f);

Csira cluia uno do estos eslilos

y moveTo
St quiere cerrar un polgono, utilice el mtodo closePath( )s in
polly.closePath();

argumentos como se muestra

m odo lmeTo() , ,r Pe Ce'Ta mtodo que conecta al punto original.


uia Mguiendo Mguiendo los los mtodos mtodos raw() y fin O I-'I ohi.-K, Mn guia n 5,0, ' V en 5,0, 2050 205,0, 20590 205,90, y y 590 5.90.

ado por el

uraT[! ? uraTrend[l'!" P'?On0

ad' "Sled ' ^ede dib^r con,o cualquier otra ,

" "" lvcli"lllll> CW l'lllllos

Dibujo de objetos

ccrr:.r:i como una rebanada de pastel

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

U',cn es pane d,l paquete iava.awt.geoa

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);

fl.lineTo(i9iF,neF) fl.lineTo(12OF,56F); fl.lineTo(94F,68F)'

screen2D.setColor(C

// Dibujar valos

2:

importe java.awt.*; importe java.awt.geom.*;

screen2D.fill(e3);

screen2D.fiii(e2),'

screen2D.fill(e1).

Float(245)130) 15,15) ;

S:-;;i;:?;

3:
4: 5:

publie class Map2D extends java.applet.Applet {


publie void paint(Graphics screen) {
Graphics2D screen2D =
setBackground(Color.blue);

6:
7:

(Graphics2D)screen;

8: 9: 10:
11: 12:

// Dibujar olas screen2D.setColor(Color.white);

BasicStroke pen = new BasicStroke(2F, BasicStroke.CAP.BUTT, BasicStroke.JOIN_R0UND),

13:
14:

for (int ax = 10; ax < 348; ax += 10)

screen2D.setStroke(pen);

appletviewer maneja las et.quetas Por lo que no hay motivo para crear

raren, appletviewer lncl "

navegador que soporte esta versin delln

breve que io

^ PUCde SCr V!iIU -nbir es,e libro, a

for (int ay = 30; ay < 340 ; ay += 10) <


screen2D.draw(wave);

5"la CmplCada para al8 ^ 1 slo podr

15: 16: 17:


18:

Arc2D.Float wave = new Arc2D.Float(ax, ay, 16, 16, 6, 180, Arc2D.0PEN);

19:
20:

bpaini^ new GradientPaint<eF,OF,Color.green,


50F,50F,Color.orange.true);
screen2D.setPaint(gp); fl.moveTo(10F,12F);
fl.lineTo(234F,15F); fl.lineTo(253F,25F); fl.lineTo(261F,71F);

21:
22: 23:
24:

GeneralPath fl = new GeneralPath();

Algunas observaciones acerca del aPplet Map2D-

25: 26: 27: 28:

nibles bajo Java.awt

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);

Cl bjCI0 Graphics ^ represe.ua la ven.ana del


lnea

Pnes de dibuJ

33:
34:

mrodo setStroke,, de

Da 9

Cmo mejorar la apariencia de :

ventana del applci en Map2D.

co,or verde en 0 0 al
para l0

y el objeto gp recin creado.

se al estado de Florida y

=Preguntas y respuestas
en negrtlS a la n.i.ad.

relleno actual.

d
la

l no-, y o.ro para

19;

de d.bujar como p,r;, ;lo,cu:,, el espacio que )e sigue

de un applet. Ya puede

ventana de app"-i. "

\ \

Semana 2

Da

10
<">

SE-''.

Adicin de imgenes, animacin y sonido

11

Da 10
234

Adicin de i

y sonido

235|

aliciar el progr.ima

:; l*.

public void start() { if (runner == nuil) { ;runner = new Thread(this)


runner.start();

ejemplo previo:

Para ejecutar un subproceso, se llama a su mtodo startn

"'cioao start (), como en esta instruccin del

runner.start();

.mo extends como implements.


implements Runnable *

public void run() {

// lo que hace realmente el applet

vi . 1

, que * o.ro n,odo o

^
npommtao.

cosas emre

"gUrando10 C '(>d<)'"

appl:con subprotess-Sc '" pan, los d.b.jos y cambiar


SUbprCeS0S - '^'^ op() pnra
U^"^amiento que el subproceso

detener e, subproeTo '

p;ir:, iniciar mi suhproceso.

1"'
ia instrucci11 sigllieme;

haber sid

Ul ..ase Tnrea. es pane de,

Precaucin

Tnread runner;

v-iriable runner tendr el

eTecucin 1, '' PrCeS '^^dades en el ambiente de ejecucin del programa y puede introducir errores en su operacin que son

S psr::r?Tha desaprobado de ia ^^." ss^

Hay un mtodo stop() que podra ser llamado en objetos Thread para

Sor nuil has.aquee.obje sea creado rearme.

Da 10
1236

runner.start();

d. .OTO P.<> *"


cesos mltiples.

public void stop()

if (runner 1= nuil)
}
runner = nuil-

I asociado con el applei. y usar los


: en un programa con >ubpro,vsos.

public void run()

Cmo poner todo junto

vc

cn

2sr,2S?
repaintf);
{ try

> catch (InterruptedException e) { }


li/.ncioncs a

Thread.sleep(ieee);

Public void Paint(GraPhics screen) /


Figura 10.1
/ ///</e/ Dln<
en Netscape
Navigator.

^
Sun Mar 08 11:09:10 EST 1998

screen.drawstring(" + theDate.toString(), i6, 50);

screen.setFont(theFot);

theDate = new Date();

u coIqueien

r^^zr
ya que

iroport

java.awt.oraphics;

import java.awt.Font; import java.til.Date;

public class DigitalCloc implements Runnable

.-""4)i
g. Date theDate;

10'.

Thread runner;

I!!
1

public void start() {

13:
14:

if (runner == nuil) {

runner = ne Thread(ttus);

Da 10

V sonido

239 i

accin incluso dibujar. En realidad nunca vera nada en pantalla porque

ciclo whae(,,an,es de hacercua,qUier oleosa.

| 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.

a que todo io que hacen es cOnfigu


k

"o hacen.otra cosa que crear y

Jos subprocesos utilizados por el

len o^eos Representan la fuente actual y , fecha actual, respectivamente. Despus


aprender ms acerca de esto.

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

mi.isegundos (1 segundo) antes de que se rep.ta el c.Jo.

El parpadeo y cmo evitarlo


mtodo paint().
repaint(). ste llama el

S:S=H

nunejar errores si se presentan. Estas instrucciones sern desemas en el


"Circunstancias excepcionales: manejo de errores y segundad .

3 Este objeto nuevo Date se asigna a la variable de msianc.a

el -b de cadro,

a PlZu\ se crea un nuevo objeto theDate que contiene .a fecha y hora

Pp>dc,,,.

l d,b.jo y la ,mpra; ,

Ha, do, ,,,,,e prtn

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

Adicin de imgenes, animacin y sonido

0.sot

public void start() { if (runner == nuil) {


runner.startf);

runner = new Thread(this)

paint(g);

public void stop() {


runner = nuil;

o.

public vold run()

de updateO par:, reducir el parpadeo.

Una solucin: no limpiar la pantalla


solucin funciona slo para algunos app e s P
despliega una cadena sencilla (Look to t

Color.getHSBColorfe, (float)1.0,(float),.0).
^ ^^ ^ presenta en colores
parpadea terriblemente

' La primera solucin para reducir el ^^^Z^^!7^


^^^
^^

int i = 0;

// itera entre los colores

10.2 muestra el resultado.


Figura 10.2
CnlorSwirl nmliaiw

wnile (runner == thisThread) { setForeground(colorsi) )


repaint();
;

Thread thisThread = Thread.currentThreadf);

try

Netscape NnviS"1'"'-

Look to the Cookie! 3


^

if (i == colors.length ) i = 0;

} caten (InterruptedException e) i

Thread.sleep(200);

public void paint(Graphics screen) {


screen.setFont(f);

screen.drawStPinoCLook to the Cookie.., 15, 50);

import

java.awt.;

i public class Cdorswirl extends Java.appXet.*ppl.t


6. implements Runnable {

V
9.
,1(J':

F0nt f - new Font("TinlesRoman", Font.BOLD, 48);


color colorst] = new Color[58];
Thread runner;

L. Une. 9 define un vanab.e de ins.anc,:, colors. ,a cua, es un lrre2,o de 50


tos. Al lnitIJr el app,L.,, ,0 primcr, quc UMe ^

Adicin de imgenes, animacin


Al crear de antemano lodoi loi objelos, usieil
,c1 precatalat ..o,

21.30, e, llenarloeo.

color

Aprender ms tarde otro mtodo para reducir el parpadeo; una tcnica ^ ^ ^

Re^^'f" y Uso de imgenes


APPlet y Graphics para

las Cses

*pida y fcil de crear el arreglo de colores.

Cmo obtener imgenes

-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:

el proceso se repiie hasta el infinito.

*
, He

. y
es sencilla: sobreponer upcJatel) y quitar la part = donde s _l. P ' no se necesha limpiar porpue no esta c:o - P^ lcx(o update (,

com/]ava21/images/booK
presen, .,

applei ColorSwirl modificado,

public void update(Graphics screen) {


paint(screen);

)
Al agregar estas tres

lneas se detiene el parpadeo.

^^^

Nota

Ued puede enerar ,a primera ^^j^^T^


nombre en el sitio Web de este l.bro, en http^ I P' y en el mismo lugar la versin mejorada como BetterSwiri. ]

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 """ ^ !" ^ "

ara cainhiar |;l apariencia de lo q,,e se des,,|i,v , .... -

r
Java.

pane ele! app|c,.

""'"'uon. el cu.-uln, m;ls ,cim,l. |;| iriibiijo real .erre en o.ra

lF o JP1G, cmo obtenerlas del


' usarlas en la 'os a

PreCaUCin

solicitudes para dibujar e El mtodo repaint () es

Aunque pu

m'd P-i"tO. drt^. hacer todas as

esto, cuando llame a repaint Oo-r-r "" ^ d"Plie9Ue' MaS tarde ver paint (> Pr cre^r una secuencia animada.

an rpido como puc

start() y stop() son llamados cuando un applei nica y termina su ejecucin

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 /

Con la animacin y oros annle* de i-k-i .-

stoP(, :t.^;: '!"L ::;::i ^^-v ai ^ ^ - ^~ > ^ los .,p,,|u.s ,lo necesitaron usar paint () una ve/.
' '' "" P'CeN0 >' c'"e M ^cuum l P"-""- *

^pucesoUd, a, sistema de manejo de ven.anas d. Ja. quc

|;l vclllana con el

Control de la animacin mediante subprocesos


War en sus

mciodo repaintO.

' prorama

^ de-una .rea
.iempo de proce-

Ai

solicitudes a repaint,) se
)a, acunas podran ser
llamada a repaint O y

c ' ". ventana es insignificante.

' acin de d,buJOs repeis pa', crear

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

La palabra clave this

Para^desp-egar un archivo grfico almacenado en el objeto img, utilice e, siguieme mtodo


imaaeU,
'U, = getImage(getDocumentBase() , "book.gif );
public void paint(Graphics screen) {
screen.drawlmage(img,

10, 10, this);

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

La palabra clave this

Medame alguno de estos mtodos, usted hace posible


pgina Web y no se hagan cambios al programa.

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

archivos de clase en el archivo JAR

entero, y el mtodo getWidthf) que devuelve la altura.

V..

|248

Da 10

Cmo crear animacin mediante imgenes


1 U^
imgenes para hojear entre s, en vez de un conjunto de dibujos.

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.

'os mismo! mtodos y .os mismos procedimientos para dibujo. reP,n,a o y

a desplegar.

para tener un seguimiento de la imagen actual

"" aiTeS' de obJelos

siguientes declaran esIOS objetos:


Image nekoPics[] = new imaQe[9]. , Image currentlmg; y l J"

""agen actual- LaS "nicciones

imgenes tiene nueve posiciones (0 a 8)>

que

1 as imgenes con que usted trabaja en el apple. Neko les parecern familiares a muchos

El ejemplo Neko

Neko se mover

usuarios^ sistemas Macntosh, as como a otros usuarios de algunas otras P ^J;


del ratn, duerme y se compona en forma parecida al juguete Tamagotch..

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.

pre el mismo valor- 50 Las

' '""mecones s.guientes crean es.as variables:

inj

VariabIe emcra V lendrf siem"

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,

. mauHan!. se rascar .. oreja, domurf un poco y luego desacera por la Je....,,


Paso 1: re na sus imgenes

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.

(int i=0; i < nekoPics.length; i nekop.csfi] = getlrcagegetCo^


images/" + nekoSrcfi]);

,,,, estar HsH, ,an, es,e proyecto, copie , o. dison ^ creado previa,,, me, los siguientes nueve archivos de imagen del s...

http://wvw.pi efect.com/java21 de este libro: Awakel . gxf, RiBht i.Qif' Rlht2-lf-

crltchi.Bif scratch2.gif, Sleepi.gif. Sleep2.gif. Stop.g.fyvawn.gxf.

Paso 2- organice y cargue las imgenes en su applet


para crear la i\\ ariencia de movimiento.

Paso 3: anime las imgenes

:;: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

Neko tiene el siguiente comportamiento en el

programa:

Da 10

.
.

Ejecu,a desde el lado izquierdo de la pantalla


se detiene a la mitad y bosteza

void nekoRunfint start, int end) { for (int i = start- i < ehd; i+=i0)
x = i;
i

. So rasca cuatro veces

// intercambiar imgenes if (currentlmg = = nekoPics[0])


currentlmg =

". se leTama y corre


2r:

hacia fuera por la derecha de la panta.la


}

repaint();

else currentimg = nekoPicsf0];

nekoPics[i j ;

pause(150);

orden de los pasos como se desee.

La ltima i

pane de la instruccin for() inc incrcmeni-i,-I,-i-i "'"'-rcmui.i d udo

1/1 pixeles i 10 cachi ve/, empujndola

para el cuerpo del mtodo:

vid nekorun(int start, int end) {


// pendiente de hacer

publie void paint(Graphics screen) {

-*

ld.s e los etemenios y I del


jra d cicl0 , , valort, ,r,

if (currentlmg = nuil) screen.drawlmage(currentlmg, x, y, this);

'd obieT^
ZllZ ""I
) co

asi, el objeto tendra un valor nuil.

9('' C'

S, no o hiciera

'-" conl-

travs del L-icl)-

nekoRun(0, size().width / 2);

//corre de un lado de la pantalla hacxa el centro

<-t*"no

imecnes sea, retiradas y aparezca una nueva.

Precaucin

UU por lo que si usted est escribiendo este applet para permanecer con

El mtodo size( j de la clase Applet ha sido desaprobado despus de Java

pause () al af plet que se pu

como se iiHies ra aqu:

Jf'M T rempla2ar con 9etSi"< ) q^ modifica la llamada a () a lo siguiente:

void pause( .nt time) {


try {

nekoRun(0, getSize().width / 2);

} 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 ^ ^ ^ ^

mente en vez de ser implemenlado con sus j)ropios miodos.

i 252

Da 10

J^^ejmgenes. animacin y sonido


repaint(); Pause(250);
'epaintO;

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

. Hacer una pausa por determinado lapso de tiempo.


He aqu el cdigo:

pause(250);

// detenerse y hacer una pausa

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;

'- brecha. He qu ,as ?nilnicci


M
repaint();
pause(500)

en ~

mclod

(, p;,, ^ c aIIalIj,a por

eces se ha de desplegar cuando Neko se rasca la oreja. vece

lllilllilcilH, ,K,r ... Mc ukK

nekoRunfx, si2e().width +

Paso 4: finalice
siguientes comprenden el mtodo,
void nekoScratch(int numTimes) <

for (int i = numTimes; i > 0; i--M


currentlmg = nekoPics!4];
repaint();
pause('i5S);
repaint();

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);

"icio del mtodo run().

Para que cada cuadro se mez -| > |

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

En ese appiei hay mucho cdigo go que miz. i :

v ,'

Den.ro de. mtodo run, de, applet, se llama a, mtodo r.ekoScratch,, con argumento
de 4:
// rascarse cuatro veces

nekoScratch(4);

"l*lo I el jpplei Neto.

void nekoSleep(int numTimes)

for (int i = numTimes; i > 0; i--J) \


currentlmg = nekoPics[6];

nekoSleep(5);
3:
4:

public class Neko extends java.applet.Applet


implements Runnable {

repaint();
pause(580);

6:
7:

nekoRUn(x, size(,.width

8: 9: 10: 11: 12:

Iroage nekoPics[] = new Image[9];


Image
Thread
int x;

currentlmg;
runner;

int y = 58;

13:
14: 15:

go^t! = ( Ti.Kti...
awake.gif" };

16:
17:

stop.gif", "yawn.gif", -scratch1.gi scratch2.gif.-sleep1.gif", "sleepS

// intercambiar imgenes " (currentlmg == nekoPicsfei)

Pause(i58);

pt0r CrrtI

currentlmg = nekoPicsri

18:
19:

20:
21:
22: 23: 24:

for (int i=e; i < nekoPics.legth; i) {


nekoPics[i] = getlmagefgetCodeBaseW, "images/" + nekoSrc[i]);

r (int i = numTimes; i I . ..
currentlmg = nekoPics[4]' repaintf); ' ''
pause(150);
repaint();

nekoscratch(int numTimes) {

25:
26: 27:

28: 29:
38:

public void start() { if (runner == nuil) { runner = new Thread(this);


runner.start ()

currentlmg = nekoPicsfsi-

pause(150);

31:
32:

33:
34:

public void stop()


runner = nuil;

fr (i"t i = numTimes; i > 0; ..,


repaint();

nekosie.p(int numTimes) /

35: 36: 37:


38: 39:
40:

currentlmg = nekopicsrei-

public void run() {

Pause(258);

^r^oSrdl; pantalla nacia el centro


nekoRun(8, size().width / 2);
// detenerse y hacer una pausa currentlmg = nekoPics[2);
repaint(); pause(ieee);
// bostezar

repaintf);

currentlmg = nekoPicsm-

l ''

pause(258);

41: 42: 43:


44:

void pause(int time) {


try { l

45: 46:
47:

currentlmg = nekoPics[3];
repaint();

J caten (InterruptedException e)

Thread.sleep(time);

48: 49: 58:

pause(1808); // rascarse cuatro veces


nekoScratch(4);

public void paint(GraPhics screen) {

51:

//

dormir por cinco

"turnos

Dia 10
256

Adicin de imgenes, animacin y sonido

L.STADO 10I4^0NTINUAON_ 77 (currentlng != nuil) (crre


101: lT l
screen.drawImage(c

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

riel JDK I 2, los mensajes de precau-

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.

Hay Cua,ro pasos princpales para aadjr e dobe b .^ a ^

del applet NeKo tenga un ancho


resultado.

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

&

para esa imagen:

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

offscreenlmage = createlmage(si2e().width offsereen = offscreenlmage.getGraphicsf);

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

Al final de su mtodo paint, despus que se ha terminado todo el dibujado de la imagen


U^ ui rea no visible an

Ul CP!U1Ia"a'agrCUe 'a 'nCa

la P:'M"

irea ..era !e pantalla es .o ,ue se Han.


, a uperncie c

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

public void update(Graphics g) {

lili

del nuivinic uo.

Da 10

259 i

Ahora revise estos cuatro pasos:

,
,

AgrcgUe vanables de instancia para


Agg

contener la imagen y el contexto grfico para e.

bfer"fuera de pantalla.

dirrme"'

3. Rea.ice todo el dibujo de su applet en el bfer fuera de pantal.a, no en e, rea de d.bujo

en y Cree una imagen y un un c

contexto grfico cuando se iniciahee su applet. g

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;

manejar espacia de bfer fuera de pantalla.

::;;rr

Es.e mtodo se llama sin argumentos, como se muestra en este


publie void destroyO {
offscreen.dxsposeO ;

WWic ot paint(Grapl.ics scre.n, ,

offsereen.filiHectfO, 0, ,m \'m). offsereen. setColor(Color.*vhite)


offsereen.fillOval(xPos, 5, 90

offsereen.setColor(Color.black)

// dibujar fondo

El applet Checkers

offsereen.setColor(Color.red)-

// dibujar ficha

! SCeenfUReCt(100 0 1" '

SCreen-drawIma9e(offscreenlms'0 ;

g0)
tnis).

del applet.

Pantana, ,,ena ^

(0,0). Debido a que

csn

**

^finalizar, se elimina ei 0,et0 of f screen


publie void destroy() {

tinuamente en el mtodo run().

offsereen.dispose();

Da 10

Adicin de imgenes, animacin y sonido


47:
48:

E, ,istado 10.5 muestra el c6digo fuen.e completo para e. aPP.et ChecKers.

I
1:
iraport java.awi. ,

49: 50: 51:


52:

2:
3: A:

pubUc cu.. Oneces extends ^va.applet.Applet i^ple.ents Runnable (


Thread runner;

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:

int xPos = 5; int xMove =4; Image offscreenlmg;


Graphics offscreen;

57: 58:
59:

offscreen.dispose(i;

8:
9:

10: 11: 12:


13: 14:

^:eS;i;reateImage(
offscreen = offscreenlmg.ge

;th,

siZe(>

15: 16: 17: 18:

Figura 10.6

public void start() { if (runner == nuil) { runner = new Thread(this);


runner.start();

El applei Checkera.

19:
20:
21: 22:

23:
24:

public void stopO {


runner = nuil;

25:

26:
27:

28:

Sr;Vhi.r.d - Thread.currentThre.dO;
while (runner == thisThread) {
xPos += xMove;

Recuperacin y uso de sonidos

29: 30: 31:


32:

if ((xPos > 105) ! (xpos < 5>>


xMove *= -1;
{

33:
34:

repaint();
try

35:

} caten (InterruptedException e) { }
}

Thread.sleep(100);

36: 37:
38:

39:
40:
41:

public void updatefGraphics screen) {


paint(screen);

42:

43:
44: 45: , 46:

public void paint(Graphics screen) {


offscreen.setolor(Color.black);
// dibujar fondo

s IaSas ^ ^s.'eo pueden i de

Da 10

Si ios mtodos
,.,...,. ,, espacio de audio alma, un objeto URL, carga y rep.oducc ,-,

pXay (,con un argumento

objeto Audiociip.

debe venficar esta condicin antes de usa usar

un

ciado, durante su

do. Si un usuano de mismo lugar que el applct:


play(getCodeBase(), "zap.au');

cambia a o^r

f s^proceso del apple. que es. comen-

Escriba
us;lo

o, un programa d.beri r

U 1-icnu Itrucci6n carga un archivo de sonido dentro de, on.eto dxp:


Audi0Clipclip.QetAudi0Clip(QetC0deB.8.(). "audi i/marimba.wav ) );

AudioClip bgSound;
AudioClip beep; Thread runner;

publie void start() {


if (runner == nuil) {
runner = new Thread(this);
runner.start();

AudioCli . clip -

; 1

new

AUdioClipCaudio/ariba.waV);

publie void stop() { if (runner != nuil) { if (bgSound 1= nuil) bgSound.stopO;


runner = nuil;

publie void init()

Da 10
I 264

Adicin de imgenes, animacin y sonido

Listado

27:

28:

cuyo resultado se despliega en la pantalla en el ltimo momento posible.


public void run() { if (bgSound 1= nuil)

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:

hile (runner == thisThread) {


trv { Thread.sleepSaee);

mtodos play () y getAudioClip ().

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

> catch (interruptedException e) { }

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!

41: 42: 43:


44:

mtodo nit(). Me parece que podra tomarle i Java mucho tiempo cargar todas

10);

Kones al principio del mtodo run()?

45 46
47

R Cosas extraas suceden detrs de la escena. ll mtodo getlinageO realmente no


cree una p>ina Web con una ventana de applel

carga la imagen; de hecho, devuelve un objeto Image casi instantneamente, por lo

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

CSIC ,n,odo no * hace n.ngun -


,lienlc. ,o cua, daa por -Hado a

"

^ ^ ^ ^ as ,neas 32 y

bgsound y DeeP. Esto sera

R Eso es lo que precisamente sucede. Como en realidad la carga de imgenes no sucede

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.

Hov usted aprendi acerca de una pltora de ^

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

^.^^

m,;ir y usar sllbp,o-

de imagen para asegurarse que no haya parles de la animacin que se reproduzcan


antes de que las imgenes hayansido cargadas. Para ms detalles revise la docu
mentacin de la nterfaz ImageObserver.

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

sencillas para applets


de la v,da. la hbenad y el objetivo de lograr un buen plan de retiro.

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

una o ms tareas que representen un reto para un desarrollador novato.

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

laces grficas de usuario.

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-

como la versin estndar del lenguaje emre la audiencia de usuarios de applets.

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:

ta acerca de los observadores de imgenes


"

!l^ >odo dra() es ,a pa.abra Cave thi.. Corno recordara por,.


s se puede utilizar dentro de un objeto para rcfer-rse a s,

Para preparar la prueba del applet Fillmore, haga |o Slguienle:

'

Cree un subdirectorio nuevo en el directorio \j2iwork llamado images

'f1eSlC d'-^ elesde e .si.io Web de es.e er archivo ch . jpg PrJ1 uier que ya est en su sistema
h

2S SECl'X^ -ras le es,, cargando U, arcb,,S de ..neos.

y width para hacer espac

""" * SUS P'PS archivos

Cmo poner a trabajar las imgenes


carga de una imagen desde un URL > de piedle
d

rara un ejemplo ilc

Figura 10.3
f/

Fillmore.

en el lisudo I0.3 despliega un. .magen de M.llaol F Hn e, p en e


,lll1CT,l, el ltimo de los Wl Wli.es US

^ ^^ UmJos ^

" I"''l'^ '"ttu

1:

import java.awt.Graphics;
import java.awt.lmage;

2:
3:
4:

public class Filiar, extends java.applet.Applet {


Image whig;

5: 6: 7:

8: 9:
10: 11:

public void init() { P Whig = getin.age(getCodeBase()I


images/fillmoreopg );
}

12: 13:
14:

public void paint(Graphics screenj {


int xPos = 10;

getlmagef) en las lneas 8-9.

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-

int int iWidth iHeight = = *hi9"9etWdthl!,his)whig.getHe^ght(this),


Icreen.drawlmagetwhig, xPos, 16,
iWidth / 4, iHeight / 4, thit),

15: 16:
17:

escaLde

nan susTl'^4 "^ 96tWdth( J y 9etHei9ht' > d< '<>dos de |a clase Inage y a.muc,-

escala de la imagen en las lneas 17-18.

Cm T**" "^ ^ *

18: 19: 20:

ms grande aparezca 10 pixeles a la derecha de la versin ms pequea

l pdeme R.lmo. En la lnea 20. es.a variable se incremen.a pan, que |0 feo

21:
22:

23

Da 11

Construccin de interfaces de usuario sencillas para applets

CmpOnemeS' cn'enedoreS y administradores de diseo que usted


responsable del control del usuano. ^ ^^
^ Swngl,

Cuando haya aprendido a crear programas m


de Java 2 para crear aplicaciones en el da U, u

algo

s acerca de Smo usar otras clases que heredan de |a ,nis,na splase.

El AWT
. de. usuano

v-nfinas mejor c onocido como AWT. es un

o desde e, r,,6n ye, tedado.

y re
a genera, y funcionad en todos ,os s,s-

Componentes de una interfaz de

usuano

temas en que se ejecute.

al crear applets de Java con el AWT es que algunas

Un componente se agrega a un contenedor a travs de los pasos siguientes:


Crear el componente.
funcionar una interta
appiets con ventanas en ianio>
I

Adicin de componentes a un contenedor


Llamar al mtodo add () del contenedor con el componente.

ma5

navegadores como sea pos.ble.

e, para agregar un componente en forma directa a la ventana del apple.


neda ser colocada en una inierlaz de usuar>o,

TL

S aPP'elS S" C0mened0reS' USIcd I** -r e, mtodo add,, dentro de

Mediante elAWT.unainterfa.de usuano consta de tres cosas:

. Componen*. Cualquier cosa que p

^^^ dcsplazahlcSi mens o

zio dd awt - la etiqueia dei boi


Button panic = new Button("Panicl");
>ed puede

habilitados para hatur ci

.- -,,.
Un ob c .-o cM mu ,malu/i pcro jcll.

sta crea un objeto Button que se etiqueta con el texto "Panic! .


T
del contenedor con el componente como su nico argumento
a un un conten contenedor !la de Wrio a

CI1 U1, contenedor. Usted no vera el adm.msu.

nitv;imcn,c ver los resultados de su trabajo.

Todas las clases de. AWT son parte del P*luc


estn dispoiubles en un programa, se puec
ror de un archivo de cdigo fuente:

i i .nueie 1 ava . awt. Para hacer que lodas las clases

b ^^^ siguicnlc cn la parlc supe-

t' se podra usar ia instmccin s

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

- >flj "S CJ S -a "o


o

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

"" X) " fl)


o

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

Puede crear un botn mediante alguno de los constructores siguiemes:


Button (, crea un botn sin una etique.a de texto que indica su funcin Button(string) crea un botn con la cadena dada como una etique*.
18.
n".
12: 13:
14:

public void init() {


setFo(); setFont(lf);
add(lefty);
add(center); setLayout(layout);

;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

apple, VCR, elciual despliega vanos comandos ft ft.ni.iaa. en

15:

add(righty);

16:

17:

Escriba Listado 11.3. El texto coMHFTn D vcr.java.


de este applet con ,a siguiente iqueu, ique
SB widtn=i75>

<APPLET>:

1:

Pn.ebe el funciona-niemo
<.ppl.t

2: 3:
4:

import java.awt.1

public cl... VCR extends java.applet.Applet


Button ff = new Button("Fast Forward")Button play = new Button (Play)

5: 6:
7:

Button rewind = new Buttonf Rewind");

rramicnia a usarse para

.Hardllnerr se coloca en el

8:

9:

Button eat = new Button(Eat Tap");


public void init()
add(rewind);
add(play);
add(ff);

Button stop = new Button("Stop")


{

10:
11: 12:

Figura 11.2
El applet Labels.

SE3E
BUcdlnfl hcartl

321

1.3:
14:
15:

add(stop);
add(eat);

16: 17:

Pruebe el funcionamiento del applet VCR con el sig guiente cdigo


width=300>

HTML:

1J ., a

"
olones.

^ do

l,"

,7lnea debid u que ll h"Ma -ficien ** -1"'-

ewer. Observe q,,. ,1 bo.n .,

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:

Listado 11.4. El texto completo de checkaczech

HTML,

import java.awt.*;
publie class Checkbox

Casillas de verificacin
Las casillas de

5:
6: 7:

Checkbox
Checkbox

8:

Checkbox Checkbox

donadas" o vacas. Por lo

aU. So- P

9:
10: 11:

c5 = new Checkbox("Ivana Trump");'


{

C4 = new Checkbox("Toro Stoppard")-

c3 = new Checkbox("Ivan Reitman")-

c2 = new Checkbox("Paulina Porizkova")

c1 = new Checkbox("Milos Forman");

CheckACzech extends java.applet.Applet f

publie void init()


add(d);

12:
13: 14:

add(c2); add(c3); add(c4); add(c5);


]

c2.setState(true);

Figura 11.4
</ /iV

15: 16:
17:

ro) ca.fi//<M

18:

siguiente etiqueta <APPLET>:

La figura 11.5 muestra la salida de e.s.e nppiet, cuyo funcionamiento puede ser verificado con la

dcseleccionadas al mismo tiempo.

Figura 11.5

-lalx
HtM

sanaba cualquier oto de los .mes que e

El npplcl

j P P~W.. P.u o..


r i.. ii..o

r im>5im d
r i> i,^

cada como una etiqueta

r seleccionada a la vez. se crea un objc.o CheckboxGroup empleando una insiniccion como


la i|iie sigue:

Para organizar varias casillas de verificacin den.ro de un grupo, de modo que s,0 una pucda

verificacin est seleccionada o no

CheckboxGroup radio = new CheckboxGroup();

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);

con ,a cadena dada que penen^ n *


icrccr argumento es igual a true si w >-

^.^ c QIra ,mncru cs t8l...

14:

add(P2); add(P3); add(p4);

16:
17:

add(P5);
}

18:

Precaucin

Java 2 e, mtodo constructor

E1 ejcnp.0 sigu.en.e crea un grupo y dos easiHas de verifican u,e ,e penen**,


CneckboxGroup betterDarrin = new Checkt,oxGroup(> . ^ ^.

Figura 11.6

Elapplet PickAPole.

H, obje,o beerD ,rin se usa .^^ITP^-^-"'


nl,e,nh,-o de, grupc a la ve., por llo que e es ,m^. ,m^. nineuna casilla selt :xonada.

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

" ""

^ "Cu- O. e. cual devuelve la

raySor Kieslow .ki. c! di-cor de /,/. Bhwro v /f^.

Checkt*

sus:
http://www.mcp.com/personal/

illl lili

Construccin de interfaces de

usuario sencillas para applets

* many lm.s P' * do you access y

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>

o^Las instructores siguientes agregan dos elementos a la lisi:. do sesin *xo.


gender.addltem("i.'.ale");

SelectASpaniard.

gender.addltem("Female") ;

A cont.nuacn puede ^ .O - ^ - ' ^ "^ ^ ^ " '" ^^


do la lista de seleccin a un contenedor.

Trecaucin

,,,.

lNl.Il,H.li,.i,,ii

Ia - - Posicin

El mtodo 9etselectedltem(, dcv.oK, eI Iexl0 del elemcmo ^


E mtodo ,.lect( Jnt, seleccjona e| ^

;-r

E, meiodo ulntl8tring) seltcciomt |


1: import java.awt.*;

3! publie class SelectASpaniard extends java.applet.Applet {


4:
5:

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:

),

Puede crear un campo de texto medame a.guno de ,

construc.ores ,guiemcs:

10:

span.addltemCXavier Cugaf');

TextField,) crea un campo de ,cx.o vaco sin un ancho especuleado. '

Da 11

^
Escriba

para app,ets

Tcon T.xtFi.ld(S^n9. int, para applets -superiores a la


. TextField(Strin9) crea un campo de .cx.o Heno con el ,cx,o espechcado y s,n

1:

' Et TEXT0 COMPLETO DE OUTOFSITE

2:

3:
4:

. TcxtFloid(Strinto, i> crea ,.., campo do ,cx. con ,. ,, y :K-h especilos.


ancho de un campo de texto nicamente tiene relevancia bajo un administrado,-

ningn ancho especificado.

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:

publie void init() { add(siteLabel);


add(site);

m
#

TextField nume = new TextField(3B);

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);

Te.tField n3n,e = new T8xtField(-Puddin N. Tae", 30);

contrasea a n iradas indiscretas.

En J-.V, I -> ,ara configurar un carc.er comn se utiliza el mtodo setEchoCharacter

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;

campo de texto .establece un signo (*> como e, carcter que se

diseo

omparable a la fisura 11 9 Fn I, - 'J"M'"

iseo para prevenir este probieJa ,

^ SeCC'dn ^"^ " USar 'S ad'^^ore.s de

"lU"> dC ':' Vt""l:l":1 Pilr" )o.lucr una *:ilid

mostrar en ci amo el texto se escriba en el campo:


TextField p;sskey = new TextField(i6);
passkey.setE:hoCharacter('#') ;

Figura 11.9

&<'PpleiOutOfSite.

e est escribii ndo.

ene v.,os m.odos ql,e ,, Jlttfcll ll/ar

El mtodo B.tText (, devue)ve e|

Eln.dodosetTextfSfrinp) llenada "upo con el

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-

usuario sencillas para applets

283 i

-Editas () devuelve un va.or boo.eano ind.cando s, e, campo puede ser


;

! *

eJ funcionanliemo de) apple(

ediiable (t.rue) o no (false).

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.

Para crear un rea de texto, utilice alguno de los constructores siguientes:

. TexTArea() crea un rea de texto vaca de un ancho y alto especificado.

. 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,

(prinicr averno) y c. ancho de caracas (sequo argu.ncuo).

de texto cuando se inicia la ejecucin del programa.

1:

import

java.awt.

2: 3:
4:

publie class Virginia extends java.applet.Appiet {


String letter = "Dear Editor:\n +

5:

6:
7: 8: 9: 16: 11:

"is there a Santa Claus?\n\n


"Virginia 0'Hanlon\n"
"New York"; TextArea lt;

me the truth,\n"

Listas desplazables

12: 13:
14: 15:

"115 West 95th Street\n" +

16: 17:

publie void init()


add(lt);

lt = new TextArea(letter, 16, 50),

18:

Da 11
I 284

Construccin de interfaces de usuario sencillas para applets


En .a figura 11., i se muestra la sa]ida del app)et; la etj

tjque[a

i siguiente:

Figura 11.11

seleccionado a.la vez.

indicada de elementos

El applei Hamlet con Chmilius, Polonius, y

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 ,-,

'fplaable se pucdc cicgir ms

^
zable con siete . lementos.

sicin del mdicc para cada elemento seleccionado.


cont.enen el texto de cada elemento seleccionado.

^ 9]etSieleCteInes<) "vuelve un arreglo de enteros que contiene ,a

El mtodo getselectedltems () devuelve un arreglo de cadenas de caracteres que

Listad. >J_2JL
1: import jsva.awt.*;
2: 3:
4:

Barras de desplazamiento y deslizadores


H"e Perneen a un valor ser se.ecconado a,
aza

T
im.addItem("Hamlef);
m.addItem("Claudius );

P** funcionalidad de barras de,

5: 6:
7:

^ b- * despla.n.ento puede

ISIM dP'-bles. La cl.se

c void init() {

8:

9:
10: 11:

,m.addItem("Gertrude"

,m.addItem("Polonius");
,m.addItem("Horatio-);

mximos que se pueden establecer mediante el componente.

K*Jo comn las harn.s de despla.a.nic,,,,, w m,m pccinculo los vata, mnunos y

Para crear una barra de desplazamiento, utilice los constructores siguien.es:


ScroUbarf) crea una barra de desplazamiento vertical con sus valores mximo v
mnimo iniciales igual a 0.

,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'.

Construccin de interfaces de usuario sencillas


Figura 11.12

Tibien Puede usar -

^ ^ eslc m,lodo Can en orden ,.:

constructor con cinco argumentos enteros: Scrollbar, int.

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:

public void init() {


setLayout(gl);
add(bar);

5:

4-

3: public ca., Crosshair extends java.applet.Applet {


MyCanvas can = new MyCanvas(); public void init() {
add(can);

10:
11:

9:
11:
12: 13: 14:

8:

7:

setLayout(gl);

15: 16:
17:
18:

class MyCanvas extends java.awt.Canvas {


public void paint(Graphics g) { i-nt x = size().width / 2; int y = sizeO.height / 2; g.setColor(Color.black); g.drawLine(x-10,y,x-2,y);

19:

barras de dcsplazam.enlo:

.F=lm,odofl.tV.lu.(, devuelve e. va.or

ac.ua. . U baua d,

desplaZamien,o

20: 21: 22:

. E, mtodo setvalue(inr) asignad vaior actual.

23:
24:

g.drawLine(x+10,y,x+2,y); g.drawLine(x,y-10,x,y-2); g.drawLine(x,y+i0jX!y+2);

para app,ets

<3pplet code-crosshair.class"
</applet>

width=10C>

Resumen
El AWT

los componentes del AWT.


unpos 4ue us.ed

Figura 11.13
El applet Crosshair.
contenedor.

i'"a ^ applct. cen el niclodo add() del

m
m

hacer til |a inlerfa2 grn


Canvas.

ns acerca de lo que se necesi,. para

un,

Lo simiente est sucediendo en la clase Crosshair:


nara la clase en la lnea 8

- -* de estos

.Y, Hnea 4 crea un objeto Gri-L.yout que ser, crecido co.no c. adulador de

Preguntas y respuestas

p^

sido extremadamente lentos p ,


es lo que sucede en la clase:

.0.2,

im >d'

te navegadores han

' . Us Hnea, ,6 y .7 determinan e, punto en e,


Hace Crnicamente cada vez que
y S12e ()

o un applet de Java , .0.2

r evUar .os avisos de desaprobacin cuando comp.lc


r:lt*l ,,,,
, i Mvmrox y p;ira dibnar cuatro laic

habilhadc* para J;lv, pucda corL o, ^


rlos CII

desaguadores de ^1^^ el cual hara poib.e ^^

es.ndar cuando se escriben 1DDH V

libro-Microso/i

'"" Vereiones dd ' Java '-0'2 St'Ue Sendo el

=,

para desarrollar una interfaz


de Java.

Sin embargo, usar el AWT


beneficios en otras reas

Semana 2

Da

12

Organizacin de los interfaz de usuario


Rara poder dar algn tipo de forma a una merfaz dlscld
ld

componentes en una

CQn

las diversas pla

s que soportan el lenguaje

El punto de inicio est en los administradores de diseo bsico.

292

Da 12

_22f2fffldelos.componentes en
void lnit() setLayout(lm); {

#
una interfaz de usuario

2#

Diseo bsico de interfaces


nenies a posiciones que no tena consideradas.

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

El administrador FiowLay out

Mediante el AWT. un programador ohtiene ms control sobre la apariencia de una in.crfaz


mediante los administradores de diseo.

::
slSu

Diseo de una interfaz


agregados a un contenedor.

Un administrador de diseo determina cmo se habrn de organizar los co.nponen.es al ser

f -pierdo o derecho d^ owLayout. RIGHT debena ser e, J

d7 7constructor, como en lay instruccin del

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.

clTdcl hay ms'espacio, empieza ^mediatamente un nuevo rengln de componentes


debajo del primero, y continuar de izqu.erda a derecha, en ese orden.
El AWT incluye cinco administradores de diseo bsicos: FiowLayout, GridLayout, Bo^erLayout CardLayout y GridBagLayout. Pan, crear ,m ulnnis.nulor de ;Mseno
siguiente:

La variable de ciase FlowLavout

Tfmtpd

pan!oledor, se L una instancia de, contenedor mediante una instruccon co.no la


1: 2:

FiowLayout fio = new FiowLayout();

Despus de crear un administrador de d.seo, usted lo convierte en el administrador de un


comedor a ,r:,vcs de su ,n,odo setLayout (). Hl admimstrador de d.seno ya ueK esta,
csllh,,cido antes de agregar cualquier componente a! contenedor. Si no se esped.ca un
administrador de diseo, se usar el diseo de Unjo.

3:
4: 5:

6: 7:
8:

Butto

n c b = . new ntw Butto Butt0

(>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:

Button d - new Button("Deadbea ');


yout lm

= MW Butt0"("Evidence-
f = new ButtonCFBiti
9

public void init() {


add(a);

setLayout(lm)

15:

add(b);

Da 12

Listado 12.1. continuacin


16: 17:

i-

add(c);

add(d);

18:
19: 28: 21:

add(e);

add(f);

"
ut(10,3);

do ;,,

Piira producir la salida mostrada en la figura ,2.1 con e, appletv.ewer s


siguiente diquela <APPLET>:

se utiliz la

<applet cod.-Alph.b.t.cl.
</applet>

vertical de 8 pixeles:

de cuadrcula con ]0 renglones 3 colum, 1


''

componed, componed, coT^^ofadS^;,"1' eSPaC ^'^ ^* * horijMn horijMntal


"*' "" CSpltao hor>^ de 5 pixeles yu pixeles y un

T"" S'8UCn": cre:1 un disc

espacio

Figura 12.1

Seis bolones organizalos cu mi diseo ile


flujo.

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

. La alineaoi, que debe ser FlowLayout .CENTER, FlowLayout .LEFT o


FlowLayout.RIGHT.

. El espacio horizontal entre componentes, en pixeles.

Button 9reg = new ButtonC'Greg-,; Btton jan = new Button("Jan", : Button alice = new Button(-Ali.-|.
BUttoncindy
Utton

newBuno

er);

B Cierne cons.rucor crea un admmistrador de d.se.o de Jjo con componen.es cenado


un espacio horizontal de 30 pixeles y un espacio honzontal de 10.
FlowLayout fio = new FlowLayout(FlowLayout.CENTER, 30, ie);

. 1-1 espacio vertical, en pixeles.

Bul]""^"""onCMik.-?; Button bobby = new Button(Bobby-,;


publie void init() { setUyout(family};
add(marcia); add(carol); add(greg);

add(jan);

add(cindy);

add(alice); add(peter);

a la derecha. Cuando todas las celdas del re

Organizacin de los componentes


296

en una interfaz de usuario

Listado

12.2. continuacin

los
La figura 12 2 muestra este applet en una pgina con
</applet>

la siguiente etiqueta <APPLET>:


que U!ltd ,, h. vim
diama .

ppl.t cod.-Bunch.cl." height=i68 width=i60>


ws^CEE
u.

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

El listado 12.3 contiene e, app.e, que se u.Hiz para producir Ja fgma


Escriba
1:

2:

import java.awt.*-

la ventana del applet.

3:
4:

El administrador BorderLayout

5:

crd.PL.yout. dividen un conncdor

6:
7:-

8:
9:

trari con o se organizan estas secciones.

10:

Button west * new Button("West" ' Button center = new Button("Centn");


publie void init() { setLayout(b); add("North", north)add("South" south); add("East", east); add("Wesf", west);
}

Button east = new Button( "East")

Button south = new Button( "South"

north = new Button("North");'

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

'*

una nterfaz de usuario


u ,:rB !wemt ,8rega
<aPPlet </applet>

h.iht-12. width-18.>

pane.add(dialogue);
e|

Cmo mezclar administradores de diseo


ZX t
El administrador CardLay out
dos cosas que tener en mente cuando se trabaja con paneles:
. El panel tiene su propio administrador de diseo.

Diseo de interfaces avanzadas


, en- el *

"- " ^ ,1:1 n,..,,,!,, C.

,.

' . 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:

Panel p; ne = new Panel O;

heredan . 1 co

:ls inwr lcc,Ones luientes crean un


llamado >ane:

administrador de diseo y lo aplican a un objeto Panel


setLayout(cc)

Borden ayout bo = new BorderLayout();


.setLayout(bo);

^u dor o componente que es el mitv'' ntain&r)- bl ^undo argumento especilcy el c-omone-

add Strinn

"" """'"^ 'd0S 'S ""Pes * deben aga-

#
interte Ce sunrio
13:
14;

15i
16:

runner.start();

runner = new Thread(this)

17:

naipe el nombre de "Options Card":

puons

18:

19:
20:

publie void stop() {


runner = nuil;

21:
22:

addCOptions Card", options);

23: 24:

publie void init() {

25:

gM u.. naipe. III m.odo show() toma dos urgumenUis:

26:
27:

28: 29:
30:

p
i j "

El nombre que le ha dado al naipe.

31:
32:
33:

for (int i = 0; i < 6. i++)

setLayout(card); .'

lab[5] = new Label(Burma Shav.,'' add<"Card - + 1/iabfi]);

-auei[

Divorce.")-

34:

do ce:

35:

publie void run() {

cc.shcwtthis, "Fact Card");

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);

Para p^ucir Ja saIida que s


1:

i iport

java.awt.*;

2:

. 3:
4:

p.blic class BurmaShave extends java.applet.Applet


implements Runnable {

5:

6: 7: 8:
9:

CardLayout card = new CardLayout(); Label[] lab = new Label[6);


int current = 0;
runner; Thread

Algunas observaciones acerca del applet:

10: 12:

publie void start() { if (runner == nuil) {

L,nea 8 -Se eSIableCe )a vanare cu.rent. As se registra el naipe actual a desplegar.

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() ;

. Lnea ^8 -El valor de current se incrementa en 1.

Figura 12.4 Un naipe desplegado

constraints.weightx = 30- ' constraints.weighty = 30'

constraints.gridwidth'= t constraints.gridheight = -

constraints.gridx =0constraints.gridy = a-

en un diseo de mullnaipe.

,.,

"nejar ,po d ,in,,nS , J Jf


Paso uno: disee la cuadrcula

, ,eTOr un ,,,

l ], cSmooren.e puede tomar ms de una celda en la cuadrcula,

maneras.

iIUX| ,r llamada G

Grldagconstraints se dcHnen ccUIr posicin, dimensiones, alineacin ;cslncLncsy cada componente, dcnnc

lades de cada componente que se coloque en la

La relacin entre la cuadrcula de bolsa, las


entes:

En w rom- n,s .enera,, ,a creacin de una cuadrcula de bolsa .mpl.ca los ^ >

Crear un obJCto ori-.t^y


3.

' como lo hara para cualquier administrador de diseo.


Establecer las restricciones para un componente.

"

2. Crear una nueva instancia de GridBagConstraints.

y los campos de tex.o enen


celdas.

rengfn final, que abarca d coLI

ponen,e puede

^Xc^s I

c UMN

* V (como en el botn OK en el

PrPiaS CUadnCUlaS

' botn ocupa dos columnas de

Da 12

Organizan de los compone en una interfaz de usuario

Figura 12.5
Un diseo de cuadrcula de bolsa.

gbc.gridx = gx; gbc.gridy = gy;

Figura 12.6
El diseo de cuadrcu

la de bolsa de la figu
ra 12.5, con una cuadrcula impuesta.

gbc. weighty = wy

9bcgridwidth = gw; Qbc.gridheight = gh; gbc.weightx = wx;

lc ^dara pstenoste. *^> ^^ a la derecha de eU. es la ,.0.


celda. La celda supenor .zqrnenta es W L

- ceidas con sus coordenadas , y ^^

L1 cclda a la derecha de sta es 0. P-ando

.uicnla es ,l,la gu,c,Hc c o -, ' cuando desarrolle e. cd.go para este

succsiv;1111,,llc. Bisele sus ccM:,s o


constraints.fill = GriOBagConstraints.BOTH;

^ ^ ffl ,,

publie void init() {

Figura 12.7 El diseo de cui drcu-

Iti de bolsa de l< figu


ra 12.5. con coi rilenadas de celda.

' * pci"i
^ ^^ cn la cuad,alla y

ca. por ) que

,.

Paso ios: cree la cuadricula

Ahora r pesemos . Java y empecemos a m*^ ~^


en pape . En principio, usted se va , enU, exc u las pr0l orciones correctas. Para esto, podna se

^ ^^ ^ marcadores ^ ^^ y definen dara.

// etiqueta de nombre

buildConstraintsfconstraints, 0, 0 i Button labeli = new Buttoncla:

%ba9"nStrantSabl

100 1B(U. 100-100)-

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.

la ocupacin (0,2). Aqu, a diferencia de los com^Z e o


Gi

^^Z^^

que ocup. dos co.umnas en el

""" /X'UL'"la- lh""fc C11"*

2 (ocupa dQS cona -"'- ^o a que , Ce,da ocupa varias coiumnas.


y 9 ^feight es I (ocupa nicamente un rengln):

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.

no est quecosas). pasando nada extrao


Figura 12.8

Ce que la caadrfeuta sea funciona,, que ,^ e, 1 ^ '" ^ "^""^ ^ a"U


c ,d
q

exactas aqu, o asegurar que todo es. alineado De , "" PreCUparSe de ias ^porciones

-estra , resu)lado en este ^TS^fnoT CmPneme a) ^ La - "

al administrador del diseo v lu.an

^^^?::::^:;: 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.

Diseo de cuadrcula de bolsa, primer paso.

ame '!'
I ''!'.>'

V .-."
J
OK

Password'

'.^'':'. ';'-' ' " -'M': v

puede auregar el botn al pane).

Paso tres: determine las proporciones


-nos espacio que

estab,ecen mediante las

spacio que , cuad o I e o L C"qllClilS.(nOmhrc >' ~-a) par:, que ocupen

ecen mediante las res^i^"^^ '"" ^ ^ * "" ^-


r
9 J W619hty ^ lodos su^ componemes, entonces, debern

ambos pesos (por ahora) son 106:

sumar 100.

ce.da. Los valores de we m* weQ*" 1 "^ ' "'^ ^ Sd0 cslab'^ P"r o,i

>
#

buildConstraints(constraints,

;:=::;;:

contrasea est en I,I (segunda columna, segundo rengln):


buildConstraintslconstraints, 1, 1, 1, 1

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

-ed dibujo, parece que el bo,onlnee

los argumentos Weignty. A tiene^'" "e9ht* - ". usted se puede IllVcr

Ahora que los tonda, de todas las

cada uno). Como conToS va,o ^ C * ** ""*** de '<

"J' ^e "bre cuadrcula

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

buno-constraintsconstraints . "nitr'int8" Con * pesos en su lugar.


J""Constraints(const.-aints 1'
La figura

HC aqU ias cinc nadas finales a buiidConstr


' '

Mire las cinco-llamadas a buildConstraints() hechas en el paso anterior:


buildConstraintsiconstraints, 0,, 0, 1, 1, 10,
buildConstraintsico,

buildCon;traints(constraints, i, 8, 8 1., 1 1, 1 100, 100 1).! 1)! //* nombre


buildConstraintsfconstraints, 0,

>): //nombre

\' )' l> //texto contrasea '


' '' ' 20)-' //botn 0K
Proporciones correctas

' ! V> //texto nombre ' 0' 40^ //contrasea

buildConstraxntslconstraints, 1, 1, 1, 1, 100, 100)1 /'texto contrasena


buildConstraints(constraints, 0, 2, 2, 1, 100, 100); //botn 0K

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

grandes espera que sear]

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:

-'ed.obtiene si utili,, , m,smas


componentes reales.

ena funcionar a ,a

puede remplazar los botones marcadores es- Puesto que ya ha configurado todo.
como antes y remplaza los botones con los

asi. La figura J2.10 muestra lo que

Figura 12.10

buildCoistraints<constrair.ts, 0, 1, 1, 1, 0, 100); //contrasea


biiildCMStraintslconstraints,

buildCcistraints(constraints, 0, 2, 2, 1, 0, 100); //botn 0K

1,1,1,1,0-

100); //texto contrasena

Diseo de cuadrcula d^ bolsa, casi lisia.

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

alores, definid como variables en la clase GridBagConstramts:

. GridBagConstraints.BOTH, extiende el componente para llenar la celda en ambas


. 6rid iagConstraints.NONE, hace que el componente se despliegue en su .amano mas
direoiones. ,

. GridBagConstraints.HORIZONTAL, hace que el componente se cxt.end;. en la d.rcc-

pequeo.

=.

. GridI1aoConstraints.VERTICAL. extiende el componente en la .Ihvcco v,n,d.


'. c '""'''"' "Cados hori/iWitalinenlc (p;;i que inicien 1111:1 lnoi niili

cin lorizontal.

S 00,,,.

se extiendan al ancho de la celda).

Nota

Tenga presente que este diseo es dinmico. Usted no va a establee

dLenones en pixeles reales para ningn componente; en vez de ello,


J
panel puede ser de cualquier tamao.

las

El boln no tendr f ill y estar alineado al centro,

le indica a esos elementos en qu direcci6n pueden crecer ya que un

lisio se re/'leja en el cdigo completo al lina) de es,;l seccin.

Paso cinco: haga ajustes

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

el'cdigo ,ar., este ejemplo, se agreg esta lnea al mtodo imt( ):


constraiits.fill = GridBagConstraints.BOTH;

ces es, i no J tener un diseo casi linnles,

IT

perfecto cada vez.

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

a tr de es e nH]S al SeZ la Pon hasta este punto, podra seHe til


S "ea Pr lnea' a*Purind0* c ent.ende las distintas partes que ,o
texto completo de amepass. java
Listado 12.5. El

e'rl

1 WT dnde colocar al componente dentro de la celda. Los valores pos,ble, pa.aK

n anchor son GridBaoXonstraints.CENTER, que alinea el componen* tamo non-

1: import java.awt.*;

3: publie el... , ,n,M, ),,.,!.,.,,, {

Gr.dBaiconstraints.NORTHEAST GridBa Constraints.EAST


GridBaConstraints.SOUTHEAST

GridBagConstramts.SOUTHWEST GridBagConstraints.WEST
GridBagConstraints.NORTHWEST

"

Da 12
312

Organizacin de los componentes en una interfaz de usuario


' ~ ~

LISTADO 12.5. CONTINUADOR


7:
8: 9: 10:

Button okb = new Button("OK");

gbc.gridx

gx;

gbc.gridy

ay;
= gw;

gbc.gridWidth

11:
12: 13:

gbc.gridheight = gh;
gbc.weightx = wx;

La sigui

La siguiente etiqueta <APPLET> sirvi para probar e, funcionamiento de este applef

gbc.weighty = wy;

14:
15: 16: 17:

XtCOd""

* width-24t>
<

18: 19: 20:

setLayout(gridbag); de nombre

c^rrzrr'*dbi
Relleno de celdas

Cuando compile eSte app,et, la llamada al mlodo setEchoCharacter(, en I, linca linca 48

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:

// campo de texto de nombre

! cuai se apreaa com ms fa


ipadx agrega espacio a cualquier lado del componente, e ipady lo agreda arriba y abajo. -

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

T"lar Camdad d eSPaC' lrededr dl Panei m- L clase Insets

42: 43:
44:

// campo de texto de contrasea TextField tfpass = new TextFieMU.


tfpass.etEchoCh.r.et.r{'>,
add(tfpass);
gridbag.setconstraints(tfpass,

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
!-

Respuesta a la entrada del usuario en un applet

Sng, aprende. . manejar Jos ^

Sador Web que sopc^ L. D ra T

maneje los eventos para que sus oraran,,

Hoy aprender, aplicando las tcnicas de Java I 0 > c,n h

*C^

applcI

1318

Da 13

J^fstaa la entrada del

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.

Manejo de los clics del rat ratn


az del programa.
en cualquier parle de |a

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).

botn y un evento ratn arriba .,


en diferentes etapas del clic.

permile 1ue s"dan cosas dtferen-

Tedas presionadas. Tecla presionada, tecla liberada y tecla digitada (presionada y libe
rada).

Eventos de interfaz de usuario. Botn presionado, movimiento de la barra de desplaza


miento hacia arriba y abajo, activacin de mens contextales, etctera.

". El siguiente un ejemplo de1 Z


c boxean mouseDown(Event

ii; ust:d sobrepone ia *"

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

JffPfftaaJa entrada del

usuario en un applet

del evento al entrar a travs de los argumentos x y y al mtodo


CVI> int x,
y)

variiihles"scparadas para hacer mas fcil su manejo.

ejemplo: Spots
>
Figura 13.1

Aauf .enemos un mtodo sencillo que muestra la informad*, acerca de la ocurrencia de un


evento ratn abajo:

poblie boolean mouseDown(Event evt. int x, int_y) {


Sy

return

true;

Si incluve es.c m.odo en su

su app.et, este mensaje aparece en el disposuivo de saHda es.ndar

f (tpplet Spots

cada ve/. t|ie un usuario hace clic dentro del applei.

Nota

Fl .., de Svstem out.printlnO en un applet provoca un comportamiento

rente enaTbientes'distintos. El aPP.etv.e*er despliega la linea en

Lma ventana en la que se emiti el comando apolew.ewe, Ncape

import java.awt.Event,'

Ser mponada _ ldo app)e[

os.lcvulvcrn un \alor true.

La clase Spots tiene cuatro vari

.ibu/ar, yn
s, applci. lisie inunU se parece al mouseDownl

, eoor.e-

numero del pumo actual.

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

applet, tampoco tiene un mtodo run(). Por qu no? Porque en realidad

os puntos viejos adems de] ^


pu-uos vlejos se borrarn

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);

PubHc void paint(Graphics o, /

Ahora, .sigamos con el mtodo paint()

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.

La accin principal de este applet se da con el mtodo mouseDownO, as que agregelo


ahora:

publie biolean mouseDown(Event evt, int x, int y) {


if ( urrspots < MAXSPOTS)
jddspot(x.y);
-eturn true;

s"dol3' nos"
Escriba
*Port java.a^t.Color

elsf

import java.awt.Graphics

System.out.println("Too many spots."); return false;

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:

System.out.println("Too many spots.");

ic boolean iiouseDown(Event

evt

f #
,

25:
26: 27:

void addspot(int x,int y)


xspots[currspots] = x;

28: 29: 30:

yspots[currspots]
currspots++;

y;

Click count: 1 Click count: 2 Click count: 3

repaint();

31:
32:
33:
34:

public void paint(Graphics g)


g.setColor(Color.blue);

{
10, 20, 20)5

35: 36:
37:

for (int i = 0; i < currspots; i++) {


g.fillOval(xspots[i]

- 10, yspots[i]

38:

Manejo de los movimientos del


*
doS ,po,

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

Eventos de arrastre y movimiento del rat ratn


mancr i:

**

publdc boolean n>ouseDown(Event evt, int x, int y) {


:*itch (evt.clickCount) { case 1: // clic sencillo case 2: // doble clic case 3: // triple clic

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

public boolean mouseDrag(Event evt, int x, int y) {

import java.awt.Point;

import java.awt.Event'

mport java.awt.Color-

import java.awt.Graphics;

Los eventos ratn entra y ratn sale

PUb
anchor; ,,

luientes ros muestran las firmas para nouseEnter,) y


II...

public bcolean ,rouseEnter(Event evt, int x, int y) {

currline . ,; }

currentpoint;

ter"ini6n

public void init() {

setBackground(Color.White);

public

bcolean m

ouseExxt(Event evt, int x, int y) {

esos puntos, usted debe

representa una coordenada *

Un ejemplo: dibujo de lneas

^i: ;;: oava-awt-point)

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

mantiene e> punto actua, dc tenninacion de h ^ qug se ^ ^

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

insumen iniciales y un mtodo init() senc.llo:

public boolean mou

evt int *

if (currline < maxlines

anchor = new Point(x,y);

I 328

Da 13

Respuesta a /a entran* ^ i

_[f_entrada_del usuario en un applet

return true;

elSeSystem.out.println("Too many lines.1


return false;

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

PUt1// Hhid paint5raPhics g, {

-" He *,, cl 111|O(|O.painto^T^ " "nim-c'ln *> 'a "'"- en proceso, dblcljl

currentpoint respectivamente,. P ra Zl^'T '""""* ^"^ ^ ' ""^ >'

y ends. as con.o la linca ;lL,J CI1 ,,

Dibujar el apple, significa dbu.

( '""* VM* ""nada, en los arreglos starts

# 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-

publie boolean mouseDrag(Event evt, int x, int y) {


if (currline < MAXLINES) { currentpoint = new Point(x,y);
repaint();
return true;

// dibuja la lnea actual 9-setColor(Color.blue)lf (c^rentpoint != nuil) fl-arawunefanchor.x. anchor y x, currentpoint .

else return false;

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:

publie b-'Olean mouseUp(Event evt, int x, int y) {


if (iurrline < MAXLINES) {
addl.ne(x,y);
retu n true;

una aplicacin bsica de dibujo en s

"^sMa. Oso es 1()d,,; , s,o 6 line

(y -Mecer e, valor a nuil, en e, ^

Z7 " ' 1S l"'C 7 "^ Al <*' tpoint


r ""^ dlb"J;lr ^^^ lo <i

^^

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:

curn ntpoint = nuil; anch ir = nuil;


repa.nt() ;

10:

11:

Da 13

Respuesta a la entrada del usuario en un applet


58:

331

Listado 13.2
12:

59:

// nmero de lineas

60:
61:
62:

:.

ends[i].y);

13:

14: 15:

public void init() {


}

setBackground(Color.white);

63: 64:

16:

# #
_

17:
16:
19:

public boolean ouseDovm(Event evt, int x, int y) {


if (currline < MAXUNES), {
return true;

65:
66: 67: 68:
}

if (currentpoint 1= nuil)

// dibuja la lnea actual g.setColor(Color.blue)-

g.drawLine(anchor.x,anchor.y currentpoint.x,currentpoint.y,;

20:
21:
22:

anchor = new Point(x,y);

23:
24: 25: 26:

elSeSyte.out.println("Too many Unes.");


return false;

Pruebe esle applet con el siguiente HTML:

27: 28:
29:

public boolean mouseUp(Event evt, int x, int y) {


if (currline < MAXLINES)
addline(x,y);
return true;

30:

Manejo de los eventos de teclado

31:
32: 33:
34:

^r ;:r:tz:t teela teela se se genera gene un eventde

else return false;

35: 36:
37:

public boolean mouseDrag(Event evt, int x, int y) {


if (currline < MAXLINES) { currentpoint = new Point(x,y);
repaintO;
return true;

38:

39:

^^
#

40:
41: 42:
43:
44:

else

return false;

/l8urar para que tengan,.

de enfoque. Es ms fci, eme'der f S escribir en ese cL^o con" cTn ^ que recba e, enfoque. Tol ^ i"" 0"

para recibir entradas Ms adelarn^ Zc H

COn eVentos

.ex.0. E?cursor Pa;;;;, ca:e; 7:si picnsa picns en un


*

C'
. Poden con-

45: 46: 47:

void addline(int x.int y) {

starts[currline] = anchor;
currline++;

#
#
#

48: 49: 50: 51: 52: 53:


54:

ends[currline] = new Point(x,y);


currentpoint = nuil;
anchor = nuil;
repaintO;

enfoque a un

quit.requestFocusf)

'"

Puede asignar el enfoque a una ventana de apple, lla.ando a, mtodo request.ocus () de,

55:

public void paint(Graphics 9)

56:
57:

for (int i = B; i < currline; i++) {

// dibuja las lneas existentes

apple,

Los eventos tecla abajo y tecla arriba


Para manejar .os eventos en un teclado, utilice el mtodo keyDown():
public boolean keyDown(Event evt, int key) {

^^IlUSBTNDAR
Tecla inicio
;i fin

Tecla RePg (Pagc Upj


caracteres, ilc este modo:
currentchar = (char)key;

Tecla AvPg (Page Down) Plecha hacia arriba

P'<x-hu liacia abajo


F'ccha a la 2tjUicrc|

cnid,, vo q votocs son producidos po. ]U carjclc


.printlnCCharacter: + (char)key)

a la derecha
Tecla F]

Tecla F2

Tecla F3
Tecla F4
Tecla F5
Tecla F6

public boolean keyUp(Event evt, int key)

Tecla F7 Tecla F8
Tecla F9

Teclas predeterminadas

Tecla FIO
Tecla Fl

lisa es,as , ^as. usted puede

L (Lusa a, usar estas

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

tana de app.et. mejor use r^^"^ 6' enf^e " ven-

usen eventos de teclado Para pedi ex .

as, la ventana del arJet n u requestFoc^(); de no' teciado. Recuerde esta dife encTa "a21 i' '"^ ^ '3 6
Pfband applets

y los valores de ese carcter. sta es la definicin de la clase .mc.al:


import
import

java.awt.Graphics;
java.awt.Event;

import

java.awt.Font;

import

java.awt.Color;

case Event.DOWN:
curry += 5-

publie class Keys extends java.applet.Applet {


char
int int

break; case Event.UP:


curry .= 5;

currkey;
currx; curry;

break; case Event.lEFT:


currx -= 5;

break;

l). Aqu, init() es responsable de tres larcas:

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() {

o de letra del applet (en este caso. Helvtica negrita

case Event.filGHT:
currx += 5;

break;

default:

currkey = (char)key;
repaintf); return true;

currx = (size().width / 2) 8; curry = (size().height / 2) 16;


setBackground(Color.white);

setFont(new Font("Helvtica", Font.BOLD, 36)),


requestFocusO;

f" del carcter. Si el evento


l

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 \) "- " >-

entoque tic cniiuM .i i.i vtm.m.i uti .

el componente que la maneja, la ventana del applet en este caso.

nada que dibujar, as que ^ ^


Nota
En versiones anteriores de Java no era necesario llamar a r.qu..tFoc )

"do que us,cd dibuja,. e, :lpp)e, s6,o

no tiene un carcter inicial y


0, de

para que la ventana del applet recibiera entrada desde el tee .do. pod

publie void paintfGraphics g, {


if (currkey l= 0} {
9drasti

enfocar la ventana haciendo clic en ella. Esto funcona todav.a en las ult.mas

336

Dh-13

-l^Pfja entrada del usuario en un applet

El listado 13.3 muestra el cdigo fuente completo del applet Keys.


Listado 13.3. Texto completo de keys .java.
1:

48:

}'' "T ;:/.-1 .. ,..,.,,,,, :

import import import


import

Java.awt.Graphi.es; java.awt.Event; java.awt.Font;


java.awt.Color;

2:

3:
4:

5:

6:
7:

public class Keys extends java.applet.Applet {


char currkey;
int currx;

8: 9: 10: 11: 12:

int

curry;

public void init()


curry =

13:
14:
15:

currx = (size().width / 2) -8;


(sizep .height / 2) -16;

// predeterminado

16:
17:
18: 19:

setBackground(Color.white);

setFont(new Font("Helvtica",Font.B0LD,36));
requestFocusO;

20:
21:
22:

public boolean keyDown(Event evt, int key) {


switch
case

(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:

public void paint(Graphics g)


if (currkey != 0) {

del ratn, los eventos de

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

Pbijc-oolan handleEvent(Event evt, {

E| tdo handleEvent(:) luce as':' > '

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

*
}

else // maneja un clic normal

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; '

define odo.un.grUpo de co^t^^^ * "" frtUna' " ^ ^

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

case Event.MOUSE UP:

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.

.,;
': .

System.out.pFintlnCMouseUp+ evt-x + "> + evt.y);


-

^case Event.MOUSE MOVE:


- return true;

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

' Systen.out.printlnCMouseMoveevt.x + , + evt.y)' '

botones de le s que est acoslumbrado a usar. En este caso, piense en la convemencia de


de su progra na.

reTngir su nterfaz a un solo botn de. ratn, o dar informacin o ayuda que exphque e, uso

>' : System.out.printlnCMouseDrao>.:;,-,,.; evt.x + -,- + evt ,.


return true; default: .
' return false;

case Event.MOUSE_DRAG-

.
. .,:

"
.

El manejador de eventos genrico

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.

En el mioc o predeterminado handleEvent () se procesan los eventos bsicos y se llama a

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

ve os par. las barras de desplazamiento u otros elementos de la imerfaz de usuano), cam

ratn:

eventos. nc:csi:i modificar handleEvent () en los programas que usted luiga.

(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).

* Eventos de accin Son

. Event .MOUSE_DRAG se genera al mover el ratn con el boln presionado (igual que en
el mtodo mouseDragO).

. Event. MOUSE_ENTER se genera cuando el ratn entra al applet (o a un componente de


ese applel). Tambin puede utilizar el mtodo mouseEnter().

dc VMc

. Event. MOUSE_EXIT se genera cuando el ratn sale del applel. Tambin puede usar el
mtodo mouseExit ().

Observe que s, sobrepone el handleEvent () en su clase, ninguno de los mtodos predetermi


nlos del manejo de eventos que aprendi hoy ser llamado, a menos que los llame explta mele en c- cuerpo de handleEvent (). De modo que sea muy cuidadoso en caso de que decida sobreponer este evento. La mejor forma de evitar este problema es probar el evento
que le interesa y, si se^nocs el even.o. llame a super. handleEvent () para que la supeclase que define handleEvent () pueda procesar cosas. He aqu un ejemplo:
publie boolean handleEvent(Event evt) {
if (evt. id == Event.M0USE_D0WN) // procesa el ratn abajo
return true;

Sea en que mediante ]. tecIa Tab. ..Qb

Por " Pane de un dp,aniic

else

return super.handleEvent(evt);

<=' ratn y ei teclado.

mtodo especial para manejarlo ex * """^ "^ U"JJZaao *

^n evento de accin es el evento d

Manejo de eventos de accin


e*eme igua] que os mlodos de ^^ ^.-como

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

Manejo de los eventos de componentes


Las tcnicas que ha aprendido hasta aqu para el manejo de eventos, se han enfocado en las
nl facciones del usuario (hacer clic con el ratn, oprimir teclas, etctera,. Tambin hay eventos mr. manejar otros eventos especficos que tienen lugar en componentes como botones, arcas de

mer tlpo de ciase.

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

else if (evt.id == Event.LIST_DESELECT)


handleDeselect(Event);

SCROLL_LINE_UP

else return super.handleEvent(evt);

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

public boolean lostFocus(Event evt, Object arg) {


// .

Figura 13.4

El' upplet SetBack.


'..'.'.m-i^i ".'

Fstas l.stas generan res tipos diferentes de eventos: seleccionar o defeccionar un etanento

Eventos de listas desplazables

^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.

probar los IDs de eventos LIST_SELECT y LIST_DESELECT.

Eventos de la barra de desplazamiento

S, le -usu, manipular los even.os, us.ed va a adorar las barras de desplaxamiemo. Ha, lo o

tos que harn .rabajar al app]et.

'os componen,, y d disenfy aS ^

VM ben' anles de conectar los e.,n-

hay i|iic busca, y los movimientos que los activan.

-jor en es.a distr.bucin y requiere pl

r p

rr/an ser ms senciiios- ei ^


"" dSe *

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:

public class SetBack extends java.applet.Applet {


ButtonredButton.blueButton.greenButton.wniteButton.blackButton;

* ador de Java. La habi,.

5: 6:
7: 8:

public void init() { setBackground(Color.white);

9:
1C:

setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)),


redButton = new Button("Red");
add(redButton);

reuTcB

! in

cutarf caractersticas como las ventanas


ion-

redondear sus conocimientos

"*
^

11:
12:

13:
14:

blueButton = new Button("Blue );


add(blueButton);

Preguntas y respuestas
P T

15:
16: 17:

greenButton = new Button("Green );

whiteButton = new Button("White );


add(whiteButton);

add(greenButton);

18: 19: 20:

blackButton = new Button("Black );


add(blackButton);

Presiona e, botn), pero no

madas para este botn (es'

para

a
funcin-En 's "*
ejec"te un '"dtod>

n7 lmpIemCntar "evoluciones de Ha-

arbitrario. En C++, slo

21:
22:

23: 24:
25: 26:

public boolean action(Event evt

if (evt.target instanceof Button) {


return true;

Object arg) {

changeColor((Button)evt.target);

27:

} else return false;

28:
29: 30:

31:
32:

void changeColor(Button b) { d,. if h redButton) setBackground(Color.reci),

c6dgo de ,a interfa2yde u;uCUJnd0 " Cd'= del ,o no e.s. demaso ligado al

es mucho ms fcil y eficienie cumHn '. -T

o -de, de ,llaneJ0 e :p:;;^: :iuie;;:T(:vacrazones por ias 'SUS propios """ponentes

dase de su botn. Este aspecto delT

crear un componamiento di reme

actiono, elcual de^ar comendo ent'"" dC

-; ;

^^ e ! T" ^ *"

"' neCeS"a CTCar UIW subc' en la

-.i if (b -= blueButton) SetBackground(Colcr.blue);


,
else setBackground(Color.black);

33:
34:

fu: if !b == 52tt.n) setBackground(COlor.white);


repaint();

b - areenButton) setBackground(Color.green);

35: 36
37

38
39

Pruebe el applet con el siguiente HTML:


<applet code='SetBack.class- wid
</applet>

Semana 2

Da 14
con el AWT

de usuario avanzadas
* awt <ki *

Desarrollo de interfaces

apren-

. tanfa M

Cn,o tacta ,os

aun. , , ,,
Mens.

Cmo crear aplicaciones AWT independlientes.

Da 14

35,

Ventanas, marcos y <^dros de dij^ogo

^
Tn :"ewFrame<"My Cool Window)
n..ddccnt.r-,

-
Corth, !!ne B? in.atdCNorth-

dcn.cn * ,n,c,te de ^* ^ j ,,,,,, ,>M~,nc

r:::;:s;r:,- * - - -
pendientes de Java.

- - -

in.setLayout(new BorderLayo

les de ancho por 200 de al.o


win.resize(100, 200);

r^pT
n

#
g aJUSla eI lamao de !a ^ a 100 pixe-

B. U-- -

pequeas para otra.

cada plataforma. Las ventana, qui

soluciones para esos pIxe,es> es dific

Puesto que distintos sistemas tieren diCerenie, l

lamail0 "CXiJa" n b>en con una, podran ser muy graildes muy
Ei

mira contener esos bmoes

los agrega a la vemana , cS

administrador de diseo y de ,o, mir 1"

Aerando J^^S^^Z
p

a al '-o m, pcqueo posible que per-

C h venlana' dd S8Uenle crea

Button ok = new BuTton("OK") Button cancel . new Buttonfe onuent al appleu

FlowLayout fio = new FlowLayout)

tarna.0, botones de

i
lenido de esa a dicacion.

win.pack();

win.add(cancel);

win.add(ok);

P:ir;, ca.ar arco, utilice alguno de los constructores siguienu-s:


. newFra,e() crea un marco bsico sin ttulo.
a que I- s marcos heredan de Wxndow

win.showf);

a de nuevo puede utilizar hide();

. new Frs ,., String) crea un marco Wsico con un mulo.

da c,e Compone -t. los >narcos se ^^^


A\VT. Los mar. os son contenedores, al igual que

lcs, de modo que usted puede

s de.

medio de un aviso en la venena mi mili


mismo navegado, (Ree e e ! cTa Z7 ^

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

.isShow window. showM;

Window-),
O

y"

errores y seguridad".

(window.isShowing/))
window.hde();
return true;

26:
27:

una ventana. Tanto el app.et como la e- <*


botones: uno para mostrarla ventana y el otro P^*

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.;

/:/ ni'i'lei >' l vaiumu


que produce.

class BaseFramel extends Frane { String^essage -Th is . window...


BaseFramel(String title, {
super(title);

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:

public class PopUpWindow extends java.applet.Applet {


Fratne window;

18:

return new lnsets(2e,0,25,(


}

5:

Button open,

cise;

19:

6:
7: 8:

9:
11:

add(open);

cise = new Buttonf"Cise


add(close);

height=200 width=200>

12: 13:
14:

window = new BaseFraneiCA Pop UpWindoW);

window.resiie(150,i58);

15:

16:
17: 18:

19:

String label = (String)arg;

""'

Da 14

J^rrollode nterfaces de

"suarioavanzadas con el AWT

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

clase en ese constructor.

Cuadros de dilogo
Figura 14.2
cin cspccJica. etctera.

El cuadro Enier Texi.

cierren.)

ttulo botones de cierre.

E
cionar

de csi-ir en posibilidad de hacer cualquier 01ra eos, c.i lI s


ci.l y ^ aicna son cuadros de dilogos modales comunes.

ar el archivo especfico de-la plataforma.

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

di = new TextDialog(this, "Enter Text", truej;


dl.resize(i5Q,i58);

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);

ias o.as dos vemanas en este 7L O dilogo funciona como su propio

Hay algunos puntos que debe

ame2. Ob

#
*

El rcsio del nuevo comportamiento va en la clase TextDialog, cuyo cdigo se muestra en el


listado 14.3.
Listado 14.3. Texto computo de textdialog .java.
1:
2:

iraport

java.awt.*;

3: class TextDialog extends Dialog {


4: TextField tf;

definida en Ja clase BaseFrame2

y ia lnea 10 estableced v'albie *

"nea 8 es la llamada para qUe el con

-perdase, que es exactamen.e i

cons^

?me- *ms *

^ COneCte > -^ con el marco,


esPecfica d ' clase Frame

lba" al co'r de la * 8 y 10 dci iisIado '4.3. La

Da 14

361

I--I rosto tlcl c..sl.m-l,.r del TextDinlo simplemente cslal.kvc U. ,<" li.ll:. Jd '-: " campo de texto y un botn en un diseo de borde. El mtodo getlnsets () agrega algunos mrgenes y el mtodo' action(), que maneja la accin del botn OK del dialogo. El mtodo action() hace dos cosas: oculta el dilogo en la lnea 28 y lo retira, y en la lnea 29 cambia el valor de la etiqueta del marco ancestro y lo convierte en el nuevo valor del texto. hacen complicado al applet. Aunque, en este punto, debe estar tranquilo de cmo cada parte
sus parles.

Objetos de dilogo de archivo

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

Cmo adjuntar dilogos a ios applets


Los d>logos slo se pueden adjuntar a los marcos. Para crear un dilogo, .tiene que pasar una

instancia de la cas, Frame a uno de los mtodos constructores del dilogo. Esto implica que no puede crear cuadios de dilogo que estn adjuntos a los applets. Como los applets no enen marcos explcitos, usted no le puede dar un argumento de narco a la clase Dialog. S.n
embargo recurriendo a una trampa de cdigo puede acceder al objeto frame que cont.enc ese
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

Ma frma Crea m dilogo para cargar un archivo.


* U" d^ * archivo, pero se usa

nrchiro

de tener a.xeso a una instancia de Frame. ste es el cdigo que puede poner dentro del
applet:

Object anchorpoint = getParent()

f-

while (!

anchorpoint = (

(anchorpoint instanceof Frame))

(Component) anchorpoint ).getParent ();

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

-memo, podra abnr e, J

QetFile(,. Ambos le desvuelven c dZ

nmbe'd'el ^^ ^
"

* <>* ' cienx- us^i puede (,b,enor el


S 9etDireory,, y

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);

con la variable de instancia id

1362

Da 14

363 i
Tabla 14.1. Eventos de ventanas.

Nombre del evento


WINDOWJJESTROY

Cundo se presenta

Se genera al destruir una ventana mediante el cuadro Closc, o el


elemento Cise en el men.

WINDOW_EXPOSE

Se genera cuando la ventana estaba oculta por otra y es trada


al frente.

WINDOW_ICONIFY
WINDOW_DEIC0NIFY WINDOW_M0VED

Se genera al minimizar la ventana. Se genera al restaurar la ventana.


Se genera al mover la ventana.

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.

Mens y barras de mens


Termino Nuevo

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:

MenuBar mbar = new 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

^^ ^ ^^ am ,, j;ll,,1,1 ^ t.llu> ,Ul|ll,1;

tcC JavJorcan un Cemento separador de men y lo agregan ,1 men .yMenu.


Menultem msep = new Menultem("-");
myMenu.add(msep);

Dentro de) mtodo main n

Cualquier elemento de men se puede desactivar con el mtodo dxsable<, v se acuva c

L-vo medame enable(). l-s clc.ncn.os desac.ivados no son m,jc.os le ^u,,


Menultem item = new Menultem("Fill");
rjyMenu.add (item);
item.csable();

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-

eccin de lisia, los cuales se pueden manejar mediante handlrfvent ().

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.

Para controlar y maneiar I

u.i,ar de la misma

isma forma en las aplicaciones de Java y en los app.ets.

1366

Da 14

public void windowClosing(WindowEvent e)


win.hideO;

win.destroyO; System.exit(0);

U mejor forma de iniciar Ja

1 diseo de/applet

Un ejemplo completo: el convertidor


RGB a HSB
Como una oportunidad para darle otra utilidad al material de das anicriorcs, presentamos un

ejemplo de applet que nos muestra la creacin del diseo, los paneles anidados, la creacin de
la interfaz y el manejo de los eventos.

La figura 14.3 muestra el applet que usted crear en este ejemplo. El applet ColorTest le permite tomar colores de los espacios de color sRGB y HSB. los cuales describen los colores
basados c. el contenido de rojo, verde y azul, o los valores de tono, saturacin y brillante/.
respectivamente.

Figura 14.3
Eluplcl Color
Test.

El applet ColorTest tiene tres parles principales: un cuadro de color en el lado izquierdo y dos grupos de campos de texto en el derecho. El primer grupo indica los valores sRGB; el
segundo los HSB. Si cambia cualquiera de los valores en cualquiera de los cuadros de texto,

actualizar el cuadro de color con el color nuevo, con los mismos valores del otro grupo de
cuadros de texto.

Este applet utiliza dos clases:

ColorTest, que hereda de Applet. sta es la clase que controla al applet.

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.

Al final de esta seccin se muestra el cdigo completo para este applet.

del upo Colore T Para controlar los orcontrols P

Da 14

con el AWT

369 I

ColorControls RGBcontrols, HSBcontrols;


Canvas swatch;

Ahora puede avanzar a. mtodo init (), donde tiene lugar toda la iniciacin bsica y el
diseo del applet. Para inicializar el applet siga estos tres pasos:

, Gree el diseo de las partes grandes del applet. Aunque aqu funcionara un diseo de
' flujo es mejor crear una cuadrcula con una fila y tres columnas.

2. Cree e inicialice los tres componentes de este applet: un lienzo para el cuadro de color
y dos subpaneles para los campos de texto.

heredarla de Panel; 1 Import java.awt.*; .,,-.'...

. -belase de Applet porque en reaL/d

q^ rePreSenIan ,os valores RGB y ^^

La ciase ColorControls tendr m

Definicin de los subpaneles i


-anejar los subpane.es

Pant;'- Defnala para

^ColorControls extendV Panel {

3. Agregue esos componentes al applet.

El paso 1 es el diseo. Utilice un diseo de cuadrcula con un espacio de 10 pumos para


separar cada componente:

setLayout(new GridLayout(1, 3, 5, 15));

**

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();

*referenca a una instancia de ia


ColorTest applet;

<
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

RGBcontrols = new ColorControls(...); HSBcontrols = new ColorControls(...);

El paso 3 es agregar los tres componentes ai panel del appleu en esta forma:
add(swatch);

constructor har mucho de lo

-ar , campos de texto y

add(RGBcontrols);

add(HSBcontrols);

^''"" ^ ^ *"*" **" "' m^1'


co"s'rucl^ ' ColorTest. Tambin

M.n.ras trabaja en el diseo, agregue ios mrgenes para el apple. 00 puntos a lo largo de
todos los bordes):

pecto: las etique.as para e. ,exo-

pueda utilizar en ios campos' RGB . ''

publie Insets getlnsetsO

return new Insets(i0, 10, 10, 10)L

]- 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.

necesita uno ms: ]a referencia del

UMed puede plr e< ^ X

^ ' baS'S'me t>cnrica como '':lra 1UC la dfiere" dncamcnlc e" Un


'nChjldo' misma W ambin puede ob.ener de)
i '

init () con dos constructores incompletos y un mtodo getlnsetsO en su clase

ColorControls(ColorTest parent

entos de)

Stri"9 11, Stringl2;stringI3)

1370

Da 14

1 i
Inicie esle constructor estableciendo primero el valor de parent a la variable de instancia
applet:
applet = parent; . . :

constructores:

thisipara pasar l objeto CoIorT est

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:

"titear vafores ne.lador forma para un Zl

ppet en afgn otro ^

son o, por eso po

' los va(or" <*

'"-alizar

^^^ontrois para

tfieldi

= new TextField("0");

tfield2 = new TextField("0");

tfield3 = 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);

Label.RIGHT)); Label.RIGHT)); Label.RIGHT));

Manejo de eventos

add(new Label(12,
add(tfield2);

add(new Label(13,
add(tfield3);

opuesto para reflejar el

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() {

-*

return new Insets(10, }

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.

else return false;

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

al mtodo correcto en el momento prec so

que refleje los nuevos valores. Debido a que e la actualizacin, precisamen.e por eso ne eslta enT *"

as/fue, ,lame al mJ0 upd.t.^^^Tr

sa es la nica accin que va

disPonib)es

de ,cxro.

d aPP'et'

"acer ,oda

"ue Pueda

Da 14

con el AWT

Actualizacin del resultado

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

No interferir este mtodo con el mtodo update() del sistema? No.

newcolor(value1> value2, vales);

Recuerde que los mtodos pueden tener I mismo nombre, pero eferentes firmas y definiciones. Debido a que este uadate () tiene un solo argumento

de tipo Colorcontrols. no interfiere con la otra versin de update(). Por o


comn, todos los mtodos llamados update () deberan significar o m.smo.
se no es el caso y esto es slo un ejemplo.

hara pruebas para as de da,o, aunque este

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) {

Ahora; convierta los valores RGB

probando si el argumento que recibi del panel es el mismo de los subpaneles que guardo en

if (controlPanel RGBcontrols) {
II..

// RGB ha cambiado, actualizar HSB

else

// HSB ha cambiado, actualizar RGB

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-

Tnl vales = neger.parselnt(controlPanel.tfield3.getText());

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:

'a ciase del apple, ColorTest, y ej

HSBcontrols.tfieldi.setText(StrinQ.ValueOf((int)HSBW));

HSBcontrols.tfield2.setText<Strin0.value0f

HSBcontrols.tfield3.setText(String.value0f((int)HSB[2])),

int HSB 1

d puede Segur Jas ihmL

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,

publlc void init() {

swatch = new CanvaS()-

setUyout<new GrldLayoutM

' '

'

geTnSBColor e's un objeto Color. De ah en ade.ante, simplemente puede asonar el objeto a


(float)value2 / 100, (float)value3 / 1

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 ));

}
),

Public Insets getlnsets() 1

retur" "*w Insets(10, 1e, 1e, ,.

BGBcontrols.tfield2.setText(String.valueOf c.oetGreen

RGBcontrols.tfield3.setText(String.valueOf(c.getBlue())),

void pd.t.(ColorControl, controlPanel)

Por ltimo, y

sin que importe s, cambiaron los valores de RGB o HSB

cnnbiar el color. Asimismo, observe que setBacXground no red.ln.ja la p


auu.mlica. as que csiablezca de inmedialo mi nieiodo repaint ():
swatch.setBackground(c);

sv/atch. repaint();

HSB[0J .= 36e.
HSB[1] .= 10e.

floatrj HSB = Colop.BGBtoHSBv.Sei ' ' vales, (new floatf31))l >>>


= 180;

c = new Color(valuei, value2, value3)-

Ya est! Lo logr. Ahora, compile las clases ColorTest y ColorControls. cree un arehivo
HTML para cargar el applel ColorTest, y verifquelo.

HSB[2]

Desarrollo de ir.terfaces de usuario avanzadas con el AWT


31:

Listado 14.4. continuacin

32:

33:
35: } .

ele return false;

}.'

return true;

41:
42:
43:
44:

na, con el siguiente HTML:

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:

class ColorControls extends Panel {


ColorTest applet;

TlT
,,,.,.

5: 6:
7:

TextField tfieldi, tfield2, tfield3,


ColorControls(ColorTest parent

8:

String 11, String 12, String 13) {

De cualquier manera se merece este reconocimiento: Felicidades por su buen trabajo! .

9:
10:
11 :
12:

Afielen = new TextField(-B")

y(llridL.yoot(1,,

Preguntas y respuestas

13:
14:

tfield2 = new T.xtField ; tfield3 = new TextField( 8 ), add(tfieldi);

P En su comentario sobre las aplicaciones independientes, tengo la impresin de que


no hay n.nguna d.ferencia entre un apple. y una aplicacin. Cmo es eso'
m.entos para construir los componentes, desplegarlos y manejar los eventos. Dejando

15:

,dd(new Label(H, Label.RIGHT)); add(new Label(12, Label.RIGHT)),


add(tfield2);

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.

public Insets getlnsets() {


}

25:

return new Insets(10, 10, 8, 8),

26:
27 28

29 30

public bool.an actiOn(Event .vt


applet.update(this);

if (evt.target instanceof TextField) {

Obj.cit ,rB) {

como un applet y como una aplicacin.

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

P He creado una aplicacin independiente, pero cuando hago clic en la casilla de

cierre, no sucede nada. Qu debo hacer para cerrar la aplicacin?


K < 'npliiK- el i-viMiln 1-iTi-nr Vfliliiim cmi WINUOW_CLU en el nnli-ln ik- cvi-iilos .le Jiv:i

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

15 Funciones de las clases: paquetes

17
18 Comunicacin a travs de
Internet

19
20 Diseo de una interfaz de
usuario con Swing

21 con Manejo de eventos de usuario Swing

caractersticas

l utihzan palabras Cave modificadoras de. lenguaje de Java.

cambiar sufsignificado.

E> .encava tiene una amplia variedad de modificadores, incluyendo:

. Modificadores para controlar el acceso a Cases, mtodos o variab.es: pubUc.


. El modificador static, para crear mtodos y variables de clase.
protected,y prvate.

Acceso predeterminado

. E1 modificador fin* p finis .as imp.ementaciones de Cases, me.odos y n-b.es.


boolean digThatCra2yBeat() {
> return true'

se muestra en los siguientes ejemplos:

publie class MyApplet extends java.applet.Applet <


prvate boolean kiUJabberwock;

static final double weeks = 9.5;

protected static final int MEANINGOFLIFE = 42;

publie static void main(String argumentsl)) { .}

Si es, ufando ms de un mod.ficador en una *^J ^J%


los modificadores.

para usarlos.

Control de acceso a mtodos y variables

ue no pertenecen a ningn otro paquete

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

forma que lo desee.

clase tendr libertad para cambiar las

-chos ,ugare p:!Z

de Una clase >" )Iam^ * sus mtodos en la

Ts" 7 ^ *" *" "^

es fiante eI modincador

" COmroIa el a0teso' CU3^"

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.

que blaCk no tendr J^

clase Color; Esta variable se

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;

l) ' '" !mOli''aS pudieran

IZZL mbin cambiara de manera importante. Para protegerse de est


puede declarar la variable winHatio como una variable prvate.

escenano.

System.out.println("Touchdowni")-

La clase siguiente utiliza un control de acceso privado:


class Writer { prvate boolean writersBlock = true; prvate String mbod; prvate int ir.come = 8;

siguiente:

" ~r"~~"es escmas. con una instruccin como la

lie static void main(String[] arguments) {

prvate void getldea(lnspiration in) {


//

wanuscript createManuscript<int nurcDays, long numPages) {

: ;r**
-todos los mtodos
Acceso protegido
y una variabie a ,
son

Las subclases de una clase.

Las dems clases del mismo paquete


Wrater. pe ro

ienen el acceso para haeeilo. no tiene

Para hacer eso ulIce eI modjficador pr(Jtecteji

protected boolean weNeedMoreCalgon true;

Da 15

387|

Nota

Tambin se preguntar por qu son diferentes estos dos grupos. Despus


de todo qu las subclases no forman parte del mismo paquete que su

superclase? No siempre. Applet es un ejemplo. sta es una subclase de

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

De cualquier clase fuera del paquete De una subclase


en el mismo paquete
s
s
no

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

.De una subclase fuera ,


del mismo paquete

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,

Control de acceso y herencia


.do' original.
comral de ,raso

quiz la quisiera hacer prvate. Un segmento de AudioPlayer se vera asi:


class AudioPlayer {

private boolean openSpeaker(Speaker sp) { // detalles de la implementacin

tacer
ic en las subclases;

Este codioo funciona bien s. no se derivaran subclases de AudioPlayer. Pero, qu pasara si


usted fuer"a a crear una clase llamada StreaningAudioPlayer que fuera una subclase de AudioPlayer? Esta clase podra requerir acceso al mtodo openSpeaker() para sobrepo nerlo y proporcionar una corriente de inicializacin especfica de audio para las bocinas. Usted no quiere que el mtodo est disponible para cualquier objeto (por lo tanto no debera
ser publie), pero s quiere que la subclase tenga acceso a el.

de aceeso

Comparacin de los niveles de control de acceso

Las diferencias entre los diversos tipos de proleccin se pueden volver muy confusas, particu
larmente en el caso de los mtodos y variables protected. La tabla 15.1, que resume con

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).

rabie de En Estados Unidos, un cd^ po17^7


9' Per tr0S emerOS fuera
r ""

rango no pueden ser cdigos

CnC d8itos: son v)idos Ios

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

, es lllejot. uliliar c| nJ^ h cIase- P-o en ei caso de las variables

puede usar el nombre de un objeto d

ei " Cl0r-&lack "rcle.pi

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:

Mtodos y variables estticos


como en el ejemplo siguiente:
publie class Circle

11: 12:
13: 14: 15: 16:

-Creacin de clases". El modificador static sirve para crear mtodos y variables de clase,
{

Un modificador que ya ha utilizado en los programas es static. presentado-durante el da 6.

Countlnstances() {

^""""^"s.addlnstanceo;

17:
18:

publie

publie static float pi = 3.14159265F;


publie float
return pi

19: .20: ; 21:,


22: 23: 24: }

area(float r)
* r * r;

Da 15

La salida de este programa es la siguiente:

Salida

Started with 0 instances


Creates 10 instances

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-

tener el nmero de instancias (llamadas numlnstances). Es una variable de clase (declarada


static) porque el nmero de instancias es importante para la clase como un todo, no para cualquier instancia individual. Adems es privada, de modo que sigue las m.smas reglas de
los mtodos de acceso de las variables de instancia..

para darle . cada objeto>

ia constante ^
U

C0n ,as variables el

""""*eambian SU Va'Or^ .tic para convertir . nu""- tiene muchas razones

vanable de clase con la

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()

..adicin al lenguaje de las clases internas

" cambi como P de la

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:

^odtficador f mal en la declaracin de clase, como en el ejem-

establecer en cualquier valor aleatorio. Por lo tanto, en vez de crear un mtodo de acceso, lo
mema el valor de numlnstances en 1.

.^.final void getMaxwellSmart() {

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.

encontrar e, mtOdo. ,a secute" SL00"011111^ ^ " * ^^ haSta


nunca va a carnbiar aunouel soLpZZ

Java. ejecuta un mtodo.Trime^ ver Sea 1 T"


verifica a su superclase y poTZ"

:rrrmo fres para hacer

7 ^ """ etUxmttar ei

o,

*" "" PC de Velocidad " aras de la flexibilidad


cdigo de by,es

Clases, mtodos y variables final


siguiente:

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.

desmente este cambio J


La biblioteca

mtodos a ml0d0s de tipo f inal de que el mtodo sea sobrep

muchas
pa a

ms

T UM SUbC'aSe' de -o que analice cuida-

e'imina la "Osibilidad

. Un mtodo final no puede ser sobrepuesto por ninguna subclase.


Una variable final no puede cambiar su valor.

1392

Da 15

^Pf^te^nterfaces y otras caractersticas

Nota

Los mtodos prvate son finales aunque no se declaren asi porque no


pueden ser heredados por las subclases bajo ninguna circunstancia.

.Publie abstract:class BradwayBoogieWcogie {

s Cases mediante e. modificador final en la declaracin de ,a clase, como en el


ejemplo siguiente:

publie final class AnotherFineMess {

un objeto Component en un programa

componente genrico que se ueda agreg" iu> M 7

es ia dos y variabies que son tiles par 2T.1 sT 7"


^

P'' CS nunca lcndrf ^"e crear

una clase

duce algunos i introduce algunos beneficie de velocidad en el lenguaje de Java, a expon** ^ la

final no se pueden derivar subclases. Al igual que con los mtodo, finales, este

flexibilidad.

abstractos, mejor toe una imer^^ ^^^

-todo abstracto en una clase no ablc e^\^^- No puede declarar un

ta. Los mtodos abstrac.os se decLn on"l ^dT T'3" '" SUbdaSeS de la clase ^c

mtodos sin implementacin. Estos mtodcs se m 1

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

Clases v mtodos abstractos


os comunes a todas las Cases. E. comportamiento y los a.nbutos
caern hacia algn punto en la parte baja de la jerarqua.

Lo, p,,ntle, , la

"=

comportamiento comn y los atributos compartidos por las subclases.

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

_i2>nes de las cl^es:

^!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

trate se utilizara si usted se refiriera a la clase Def enestrate en su propio programa, de la


siguiente manera:

Defenestrate outWindow = new Defenestrate("Phil");

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

Funciones de las clases:


caractersticas
399 i

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

liz.au el-mismo mimbre.

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

Creacin de la estructura de una carpeta


que corresponda al nombre del paquete. Si su paquete liene un solo nombre (mypackafle). debe
crear una carpe.a para ese nombre. Si el nombre del paquete consta de vanas panes, debe crear dentro de pref ect. Entonces, sus archivos de clases y de cdigo fuente podran ,r en el d.rectorio pref ect.

* -* - ,:;

Para permitir que una clase se-i v

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.

as y soJo pueden ser uliIJ2jl

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:

"^ ^efecto de los cambios maj


r que ciases desea decl

solo sirvan a su impieme


Parama par que

El listado 15.2 nos muestra dos Ca^

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;
"_^~ '

Control de acceso a los paquetes y las clases

*;

3: publie el.,, LinkedList {


prvate Node root;

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=

//

...

En oso de no especificar un modificador, las clases tienen un control de acceso predetermi

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.

el archivo, crear archivos separados . class para cada defn.e.on de clase

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.

* comp,ic,ds coo ,a " . , un, & las i

JO. v. ..^[ioiK'.s Cuido |,,

lon > ' -inbi'ii'icdMi. Y


'i mu,:pe en l'avor (|c

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.

*ces peonan mucha ms funcionalidad a Java y al diseo de clase, y objetos qu, u,

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

Veamos un ejemplo sencillo, Ja creacin , buena implementacin de Ja clase Fruit v

~ "' "Ue' iuponS.a flue ya tiene una

* Pr

*fi'one. de esa, interfaces, hoy aprender ms sobre

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 {

class Fruit impleroents Fruitlike i Prvate Color myColor{


prvate int daysTilifiot;

Implementacin y uso de las interfaces


propias interfaces. Por ahora, comience con la primera. prp

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 {

En este ejemplo, Java.applat .Applet es la superc.ase, pero la imerfaz Runnable ampla c.


comportamiento que est implementado.

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

class sphere implements Spherelike prvate float radius; llke

// extiende Object

abracas: las subclases de estas ltimas pueden elegir qu mt


ner e ignorar los otros.)

class Orange extends Sphere implercents Fruitlike /

- -os usuarios de Oranoe nunca necean{saber del cambi0

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

Implementacin de mltiples interfaces


clases, y su ciase lmp,enremarf e,
componamiemo conibi-

no Le que agregar !a pa.abra Cave i.ple.ents en su propia def.mcon de Cas.

Da 15

nado de todas .as interfaces incluidas.' Para incluir interfaces mltiples en una Case, slo
separe los nombres con comas:

Dublic class NeVo extends java.applet.Applet

impleents Runnable, Eatable, Sortable, Observable {


/ /

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.

y(): /; des^P0Sicin ..qul8h0. y aplastado de la fruta


.sph.r.iik..to,.(;;
'anOrange.toss();
aFruitlike.tossn //

. Si los nw.odos tienen listas diferentes de parmetros, es un casosimplc de soluta


del mtodo; inclemente ambas firmas de mtodo, y cada defin.con saus.ace a su
respectiva definicin de interfaz.

'

. Si los mtodos tienen las mismas listas de parmetros, pero difieren en e, upo devueho.

.anOrange.squisno';
anOrange.rotate(};

anOrange.ciecay()

// i

nara"l pueden hacer todo eso

usted no puede crear un m.odo que satisfaga a ambos (cuaje. *f*V*

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.

Otros usos de las interfaces


Recuerde que en casi en todo aquello en que pueda util.ar una clase. cambio. Por ejemplo, usted puede declarar una variable para que sea un upo o. ,,..u
Runnable aRunnableObject = new MyAnimationClassU
e
, ,,

Cuando una vanab.e es declarada como un tipo de interfaz, sign.fica simplemente que

Cmo crear y extender las interfaces


"
Interfaces nuevas
Para crear una inIerfa2 nueva, dec]are ,o si publie interface Growable {
sigllienle.

UpoRunnable. la suposicin es que usted puede llamar a

l punto imponante que debemos captar es que aunque se espera que aRunnableObj ect

i.
3;
i :

406

Da 15

_[^[les de 'as clases:

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

r parme.ras par. cear genricos

se pueda usar un nombre de clase


que s

y .,ui.(). Tamban

t. De qu lipo w a

como

publie abstract void growlt();

// explcitamente publico y abstracto

" <-'- que f n que sea u .si.nplcmente:

9er"'i

// implcitamente pblico y abstracto

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.

ic abstract germinate(F ruitlika

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 {

class Orange extends Fruit { '

;i) ubJeio aprojiia,

9erminate(Fruitlike self) / ,, "9e the0^9e = (Orange,self;

publie static final int increment = 10;

long maxnum = 1000800; // se vuelve pblica, esttica y final


publie abstract void growlt(); //explcitamente pblico y abstracto void growItBiggerO; // implcitamente pblico y abstracto

'
}

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,^ ^ "

-erfaz hereda de olra inlerfaz, e^^^ '

Al 'gual que con Jas ciases ustrH

Cmo extender interfaces


4
en una .jerarqufa. Cuando una

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

Mtodos dentro de las interfaces


Hay un mico acerca de los mtodos dentro de las inicrfaces: se supone que eslos mlodos m>.i abstractos y se aplican a cualquier tipo de clase, pero cmo puede definir los parmetros paia

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

lote de otras interfaces:

amos una definicin para una imejfa2 .

deber contener una

-merfaces necesite (separada ^ cornTs^

^ herencia mllpIe. ^ por ^7"" de ^-s, |a jeraiqua dc imt,f;lc,s

Tambin debemos notar que, a diferencia h . i

SenClla M PUCde

deno.mnada Busylnterface que hereda de iodo un

' ""lrtdos ^ con.stan.es ances.rale,. Aqupresen-

i 408

Da 15

public interface Busylnterface extends Runnable,


Observable {

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.

Un ejemplo: enumeracin de listas vinculadas


Para finalizar la leccin de hoy, veamos el ejemplo siguiente, el cual utiliza paquetes, protec

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.
_

es un u.so tpico del enumerador

Listado 15.3. Texto completo de lnkedlist. java.


collections; class LinkedList
Node root;

package public

2:
3:
4: prvate

5: 6:
7:

public Enumeration enumrate))


return

8:

new LinkedListEnuraerator(root);

9:
0:

11 :
12:

class

Node

{
Object contents;

13:
14:

private

prvate

Node

next;

15: 16:
17: 18: 19: 20:

public Object contents()


return contents;

deJ ob

21:
22:

public Node next()


return next;

rango de snuaciones.

derSa melfo puede apJcar en

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

clases soportadas por el lenguaje.

S mife como chses 2

Da 15

r
411

A'p-irtir de Java 1 1, usted poda definir una clase dentro de otra clase, como s. fuera un
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

P~|HSs..o limitado. Un el applc, !nnor dehiJo , '


El nombre de u
y componamjento complejo lo ms __," M'

'

dase Blu.Button, e. nombre !Cu tT f T"' "" C' J


couiTon. cl

^ol^^^Z,^^^0^:de la c)ase que ia comienee deben incluir


el aPP,et

acjable es .mplemen.arla como clase interna.

tton "l> Cl""ic"c '"'"'* ^nl.u.

'"" ^""^ Cxislc <W:' ""

1: 2: 3:
4:

import

java.awt.Color;

publie class Inner extends java.applet.Applet {


Button b1 = new Button("0ne"); BlueButton b2 = new BlueButton("Two");

5: 6: 7:

8:
9: 10:

publie void init()


add(>1);
add(b2);

Inner. class e InnerS-

11: 12:
13:
14:

class BlueButton extends Button {


BlueButton(String label) {
super(label); this.setBackground(Color.blue);

15:

16:
17:

18:

La figura 15.1 se produjo en appletviewer con la siguiente etiqueta HTML:


opplet :ode="Inner.class" witn=i00 height=i00>
</applet>

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

Finalmente, aprendi a implementar interfaces y clases internas, dos estructuras de mucha


utilidad para disear una jerarqua de clases.

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

puc e. No est permitida la herencia de mtodos de clase.

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 ^^ ** ""*

'" ?'' CSC""bi

d 'aS b"enas inIC-

M anonrates

tiempo suficiente para


--iones
co

n yr

corruptos que no tienen ,a

se imagine.

nan, d.spositivos de hardware que no

^ "

tOne*lones dc red 4ue no fH1,c0.

solares, gremlins, lo que

l^\?\'

asad?

14

DUi 1G

i^exceP<nales: ^^lflf^ores y,a seguridad

En Java a este tipo de eventos extraos, que pueden hacer que un programa falle, se les
llama excepciones. Java define un cierto nmero de carac.erslicas del lenguaje que imian con
esas excepciones, incluyendo las siguientes:

. Cmo manejarlas en su cdigo, y recuperarse con estilo de esos problemas potenciales.


: . Cmo decirle a Java, y a los usuarios de sus mtodos, que usled espera que se presente una excepcin potencial-. . Cmo creai una excepcin, si es i|ue la delecta.

CUm Un e Status diferente a ,).

. Las limitaciones de su cdigo, y cmo se va haciendo ms robusto a partir de bexcepciones.

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.

Cuando usted comienza a

Excepciones, la forma vieja y confusa

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

// na su;edido algo anormal, descrbalo


(s atus) 2: { case cas<
case

!= 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

Las excepciones de Java


cometi un error en su cdigo

Da 16

I 416

^
Exception es

Otras excepdones ,aleS como Z0FJepl


CeSn K explcita, por .os programas que escribe usted.
,:, u,-,ninn l!.n/.i.r".fs apropio, po..,.* > n ;ir;i c M, ,,,,,

cui-txceptionyMalformedURLEx

^Sc >'rde la ciase ^ NuilPoi^erExcePtion

-e decir "ha sucedido un error'

Precaucin

tratar con el--;-: -r^riemai incis


Figura 16.1

Ui jerarqua di' clusts

-ceden cuando us.ed leyeSndo

'" que eSl SUcediel al

El ltimo grupo de excepciones es

^ordrdas j
excepciones, y esa, exceones se
(EOFException, FileNotFo
i
Tnrowab e ,icnc des subclases

es extendida por otras clases en p^


de comunicaciones

Paque,e java. io define una clase de

de dases- Por Wlo. el

dems pa.ue.es definen o.ras

^Exceptxon, ,a cual no slo

de ^'la y salid.

imcrnos , d ambieme de la u,

mucho

plieda h,cer con ellos

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.

Verficacn|de la consistencia de las excepciones


Cuanto ms trabaje con las bibliotecas de clases de Java, ms factible ser que caiga en un
error del compilador (juna excepcin!) similar a ste:
BoogieDown.java:32:
of this metliod.

Exception

java.lang.InterruptedException

must be caught or it must be declared in the throws clause

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.

Proteccin de cdigo y captura de excepciones


Supongamos que ha estado codificando tranquilamente y de pronto aparece un mensaje de excepcin durante una compilacin de prueba. De acuerdo con el mensaje usted tiene dos
opciones, atrapar el error o declarar que su mtodo lo lanza. Vamos a tratar con el pnmer
caso: cmo atrapar las excepciones potenciales.

Para atrapar una excepcin, puede hacer dos cosas:

try

Proteger el cdigo que contiene el mtodo que podra lanzar una excepcin dentro de
un bloque try.

} caThread-SIeePd000)

Hacer una prueba y manejar una excepcin dentro de un bloque catch.

Influjos de W\ La

1422

Da 16

Listado 16.1. continuacin


13:
14:

void readNumbers(int[]

numArray)

inticount = 6;

15:
16: 17: 18: 19:

try{
'
}

int|lastNum = 8;

while

if (lastNum == -1)
return;

lastNum = numArray[count++];

(count < numArray.length)

{'

20: 21:
22:

finally

23: 24:
25:

{ System.out.println("Last

number

read:

lastNum);

}
return;

26: 27:

La salida de este programa es la siguiente:


First
Second

array:

Last number read:


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.

Cmo declarar mtodos que podran lanzar


excepciones
Un ejemplos anteriores, aprendi cmo tratar con mtodos que pudieran lanzar excepciones (protegiendo el cdigo y atrapando cualquier excepcin que pudiera ocurrir). El compilador

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.

Qu excepciones debera lanzar'

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.

ejecutado. y el resto ser ignorado.

""tas clusulas. En un bloque mltiple catch el l" hl "^ * "^ mUc las dlsP b'qUe CatCh cuc acuerde ser

bloque extemo en e. que est e, Jo ue \t Z T?" "tCh *( ' ^-ce de,

Dado que el alcance de las variables lcala

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:

ry while (numBytes <= mybuffer.length) {


mylnputStream.reacl(myBuffer);

numBytes++;
10 Exception - only read + nu.By.es);
// otro cdigo de limpieza

")_

try. . .catch. . .finaliy:


try {

'"lly. E) ejemplo ligu3Ille nos Les,


readTextfilet);

pnu ,xMr 1 de ese cod.go dentro de una panf opcio^i

Wn recurso ex.erno que se haya adqu id

P''

eso seria duplicar e, m.ismo cd.go en ^

S1* E

dc d

-a cop,

esIra

u estruaurado un bloque

} catch (lOException e) <


closeTextfile();

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.

el ultimo caso, unlice una insLccin t"y ^


Escriba
1:
2: 3:
4:

para ejecutar un cdigo de limpieza d-spu de " eXCCpCI"CS; lumbi"

En realidad la instruccin finaliy es mil fucra ,. ,

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.

per sin la instruccin-catch

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-

intfj numi = { 12j 15j

10j 8j

_^ 7

= { 1. 5, 20, 8, 1, 13 );

5: 6:
7: 8:

\ catch (lOException e) {

\ catch (ClassNotFoundException e2)

// maneja excepciones de entrada y salida


//maneja excepciones de clase no encontrada
// maneja excepciones de interrupcin

9:

10:
11: 12:

fin.readNumbersrin.numi)'' Systen,.oUt.println(SecOn<; array. ... fln-'-eadNurabers(fin.num2); ''

System.out.println("First array ")

an

in = new Finalf)-

v catch (interruptedException e3) {

[la -16

Circur

son ian comunes (no comn.!, por su naiu

lralar con elta,. En particular, ^^^^*Z thrOws. Tiene,, un


cualquiera de sus subclases) -o uenen que 1 *

,;

RuntimeException (o

numBytes;++

mylnputStream.read(myBuffer) '
... '

yer.length)

lratamicnto especia, porque pueden ocun r cn.cu.lqu,^

"

,,.,, ,>

dc Jl,vu.

2=s=ss=
W^w^/fcto.pc no

.cheque preocuparse por ellas.


.c

Usted no tiene que declarar que su mtodo las lanza.

Desde luego que, si lo desea, tambin

^^

Nota

ella. En

NBta

esos errores y excepciones que se lanzan <

seccin aprender como lanzar excepciones.

clusula throws, 9*'^"**^ excepciones que no sean de tiempo


de ejecucin.
..

throws y herencia
0

Todas las dems excepciones se aenomman ever/x ,^W< . .

, -; ,,/.r r-nic'wi v son candidatos poten-

cales de una clusula throws en su mtodo.

!
e,,K es n.

publie class RadioPlay {

public void startPlayingf) throws SoundException'{'

"

public class StereoPlay extends RadioPlay {


public void startPlaying() {

I 426

Da 16

ii^^fi^epciona/es:

^S^if^ores y la seguridad

Lo contrario de esta regla no es verdadero: un mtodo de subclase no puede lanzar ms excep


ciones (ya sean excepciones'de tipos diferentes, o de clases ms generales) que el de su superclase.
mngn vaIor. Si e) n)(odo

Cmo crear y lanzar sus propias excepciones


'Coda excepcin licu dos lados: el que lanza la excepcin y el que la atrapa. Una excepcin
se puede lan/ar varias veces hacia varios mlodos mies de que la alrapen. pero a la larga ser capturada y manejada.

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.

Cmo lanzar excepciones


Declarar que su mtodo lanza una excepcin, le sirve solamente a los usuarios de su mtodo y

Pe

a q.ue csld cre;|,uJo ^

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

Normalmente las clases

tenga esa instancia, ulilice la instruccin throw para lanzarla. La forma ms simple de lanzar
una excepcin es la siguiente:
NotInServiceException()
throw nis;

nis = new NotInServiceException();

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.

s all de estas tres ].

^^

~ las otras Cases. Las puede

class SunSpotException
Nula

Cm ' "an'a C" lras ^

Dependiendo de la clase de excepcin que est utilizando, sta podra tener tambin argu

mentos. El ms comn de ellos es un argumento de cadena, el cual le permite describir el

Combine throws, try

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

public void responsibUExceptionalMethodO throws iOException .{


MessageReader mr = new MessageReaderO; ; .
i

try { }

catch

mr.loadHeader();

// coloque el cdigo que manejar


// la excepcin

(lOException e)

throw e; // vuelva a lanzar la excepcin


}

' 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

Cundo no usar excepciones

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

Cundo usar excepciones y cundo no


ser muy confusos, aqu damos un resumen rpido de cundo y que hacer.

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:

que estn fuero de su control.

e su programa.Ls excep ,1- debe T

e" CaS0S realmenle excepcionales.

. Manejar la excepcin mediante las instrucciones try y catch.

. ,.:,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.

general de sus clases

excepciones que tengan mZ^^d T ^^ *"* U""2arla edare ^ ' Probab-I.dad de ocumr y qUe .engan sentido para el diseo

m. excepciones pueda ,anzar su m ,o o mTc "T' hmUChaS eXCCPCneS' >a ^

aconsejable declarar un mtodo para que lncelo

- 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

Mal estilo al usar las excepciones


apropiadas para hacer ambas cosas) deiar c-,er ,vn

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.

anad)r una clausu,a vaca catch o una instruccin tTows u D "'

P P' me'd (y ^^ razoncs

^ *" '^

1430

Da 16

I^2!^e*pconales: :H!22i~res V 'a seguridad

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

Cmo usar firmas digitales para identificar


los applets
Una de las suposiciones fundamentales de la estrategia de segundad de los applets de Java. ,-

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

applet debe mp|ementar aa^^J mmento de escribir es,o. un


omina uno de ,lte le ser
vaya a ejecuta, Por fortuna

"ar en sus navegadores. "ej 1lsZ^" ^^ *' ^"^ *>*'*

y Microsoft han presen Ido si

otro de los navegado es qule da P' "^^^-a V en

"^ ^ * J*Va 2'

. Escribir archivos en el sistema en el que se est ejecutando el applet.


Olitcner informacin sobre un archivo del sistema.
Borrar un archivo del sistema.
i no puede nacer n-Hi . j

. Conectarse a cualquier mquina distinta a la que entreg la pgina Web que contiene c;

ases llamadas permisos.

Lcr ndaa que pueda ser cai-

. 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.

<* a no ser que la persOna que |os desam)JJe

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.|*

fishhead Software ofrece >


Imenie. esta capacidad no es

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

JJJ* estn clarante identificados. Hga

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.

era, a,8uien ms podra pre,end r "lT* - W su Cave privada. j

^^^bTJ^ZI^IT^ZT-^ COrKSph^"le- Pino demifican


;sr
*

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.

esta Cav, pblica y compararla c


^su.u.o de clasificadores pa

e' o We, We, Como Como par,e par,e de de ^ e ssu su p p^

Dado que las cJaVes p pblicas se se e e pueden pueden d d

^in Prmcipai es asegr;rq^:i

Cuando Signatures 'R'

'" --ave privad, dc Fis,lhcad.

- El cenmeado que se eLc Lc est est

rarla conavc a qu 1 , ' "' *?"* '"' ^ ^ eXa^M

^^7 ^^7 ^^ ^^ ^ ^ " "< -

^"^ 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:

pama independiente bien establecida.

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.

Al momemo de cscrihir ,. . i-i

Firmas especficas para navegador


.

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 >

Par, ., prop,,,s . Si us^",^, *^""" * *O y l u

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 |

Para firmar un applet y usarlo en Microsoft Internet Explorer, se requiere lo siguiente:

. Una identificacin digital Microsoft Authenticode, de una empresa como VeriSign c


Thawte, cqmpaas que comprobarn su identidad.
. Internet Explorer 4.0 o superior.

. Las siguiefiles herramienias del Microsoft Java Software Developiiicnt Kil:


signer. di. Este kil est disponible descargndolo de Microsoft en: http://vlw.microsoft.com/java/download.htiii.

a visin general de la
w,,, , , ,

cabarc.efe, chktrust.exe, signcode.exe, y los archivos javasign.dll y

Para firmar un applei y usarlo en Netscape Navigator se requiere lo siguiente:

. 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

muxk> quc stc ^

Systems, ha recopilado un excelente recurso de firma para el cdigo Java

Adems de la informaci

J ambin aprendi Jas b

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

error de secundad al ejecutarlas en su sistema. Esto ocurre porque el establecimiento de M


todas las caractersticas disponibles a las aplicaciones.

poltica dc"seguridad, durante la instalacin del JDK, es lo ms liberal posible permit.endok


La poltica de securidad est guardada en un archivo llamado java.policy. Este archivo

est en la subearpeta lib\security\ de la carpeta principal de instalacin del JDK. Emc

norma, de, cdigo de Java, yPaunquc

ocuparan por e,,os. Las excepciones e ^7

^ 7* * 'enera" 'X>' "' *iA

^'

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.

ae /os flujos de Java

Mane; de datos a travs

M;/';;^--

,,, ,,,. aum

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

trario se aplica a los flujos de salida.

'

C1OM,,

Los flujos son un mecanismo poderoso para manejar datos, pero usted no pagar por esa

potencia fon clases difciles de implementar.

Introduccin a los flujos


En Java,,lodos los datos se escriben y leen usando flujos. Los Mujas, ni igual que los cuerpos
de agua que eomp.inen el misino nombre, llevan algo de un lugar .1 olio.
r

es I*

'" ""'i-ieres individuales

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

pueden expresar en frmalo de byles, incluyendo dalos numricos, programas ejecutables,


comunicaciones de Inlernel y cdigos de byles; estos ltimos son archivos de clase ejecutados

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.

Cmo utilizar un flujo


Ya sea que est utilizando un flujo de byles o de caracteres, el proccdimienlo para usarlos en Java es casi el mismo. Ames de que empiece a trabajar con los detalles especlicos de las

uso puede asociar un fh

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.

do esto suena confuso en lo h las siguien(es ^^

,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:

while (newByte !=' . u

int newByte = 0;

FilelnputStream y FileOutputStream

Son flujos de bytcs guardados en archivos

de disco, CD-ROMs, o en otros dispositivos de almacenamiento.

System-O"t.Print(newByte

newByte = df.readf)-

);

DatalnputStreara y DataOutputStream Son flujos de bytcs en los que se pueden


leer datos como enteros y nmeros de punto flotante.

InputStream es la superclase de todos los flujos de entrada.

; ;

de un carcter de espacio. Tambin vo. Usted se -'-

Este ciclo lee todo el archivo referido por

" '"

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.

<ema, asociados con el archivo abierto

de leer el ltimo by,e es.e arch.vo E

entrada de archivo. El mtodo cise (, del ! T*

La aP''caci" ^Bytes del listado J7 , ....

>arecida pura lcer ""


^ Jbcrar '< ocursos del sis

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.*;

Flujos de entrada de archivo


Un flujo de entrada de archivo se puede crear con el constructor FileInputStream( string). B argumento de cadena debe ser el nombre del archivo. Puede incluir una referencia de ruta con el nombre del archivo, lo cual permite colocar el archivo en una carpeta diferente a la clase que lo
carga. La siguiente instruccin crea un flujo de entrada de archivo desde el archivo scores. dat:
FilelnputStream fis - new FileInputStream("scores.dat");

publie class ReadBytes {

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 .

int input = fiie.read(,;

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

En este programa tiene lugar lo siguiente:

Sy-

De suyo estas cas


tracin.

. Lneas 5-10 Se crea un arreglo enteros llamado data con 66 elementos.

. Lneas 12 y 13 Se crea un flujo de salida de archivo con el nombre de archivo


pie gif. en la misma carpeta que el archivo WriteBytes. class.

utStrea. que manejan ;, esplleos Je III-

. Lneas 14 y 15 Mediante un ciclo, se circula a travs del arreglo data y se escribe


cada elemento en el flujo del archivo.

Filtros de bytes

. Linca 16 Se cierra el flujo de salida de archivo.

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

gador Wet o herramienta edT.ora de grficos. E, un archivo pequeo de imagen en formato

Como un ejemP,o de ,o an.erior, imagine ,u) de ,s

lgU'en ie Presta un )bro y us,ed lo lee complco

El archivo pie. gif


(agranitado).

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.

Flujos almacenados en bfer

ongmal del flujo. Es.o es mucho ms efici

qUe 1Od;iv:i " ha ^ nlancen Mfcr es il!linJ

Cn ei fl"J" va a rcm.S;,r los PSfuerZ,;

" -^i
Filtrado de un flujo
FilterOutputStream.

Flujos filtrados son los que modifican la informacin enviada a travs de un

nu/o ya existente. Se crean mediante las subclases FilterlnputStrea. o

disponible, devolver -i

que represema e Unlo y e 2\ nu f


'

f'"al M u-> V h:'>

5.

curad,, c cual carga los da,os de. nujo c un L

Tambin puede utilizar el mtodo read(6yre/;

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,

. BufferedOutputStreamf OutputStream) Crea un flujo de salida almacenado en


bfer para el objeto especfico OutputStream.

. BufferedOutputStrean(OutputStream, int) Crea el flujo especfico


OutputStream almacenado en un bfer de tamao int.

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 finish = 255;

int start = O;

25:

ArBStrea(lnt st, int fin) /


finish = fin;

Nota

Aunque el mtodo write() toma un entero como entrada, el valor debera


ser desde 0 a 255 Si usted especifica un nmero mayor que 255, sera guar

26:
27: 28:
29:

start = st;

dado como el residuo del nmero dividido entre 256. Esto lo podr probar

cuando ejecute el proyecto que crear ms adelante en esta misma seccin.

30: 31: 32:

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

33: 34: 35:

FileOutputStreamf-numbers.dat") BufferedOutputStream buff = ne


fUf!eredOutPtsf
t; out =

FileOutputStream file = new

36: 37: 38:


39:
40:
41:

System.out.'printf- + out).
buff.cise();
return true;

42:

"tch (lOException e) {
return false;

Despus de escribir en el archivo delex.o. Buf f erDe.o crea un Hujo de en.rada^

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:

46: 47: 48:

boolean readStream() {
try {

49:

import

java.io.*;

50: 51:

FilelnputStrean file = new

#
+

3: publie class BufferDemo {

4:

publie static void main(String[] arguments) {


int start = 6;

52:
53: 54: 55:

BufferedlnputStream buff = " *


int in = e;
do {

FilelnputStream( "nunibers. dat"

BufferedlnputStream(fiie)

5:

6:

7. 'i

int finish = 255;

; ;

if (argunents.length > 1) { start = integer.parselnt(arguments[ej);

56:
57:

-T (in != -1)

in = buff.readM;

finish = integer.parselnt(arguments[1]);

58:

Systera.out.print(" +in)

(in != -1);

'

Listado 17.3. continuacin


return true;

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

Por otra pane, un flujo de salida de da.os necesi,, ci ccns.ruc .or


de en,,-

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 .

. Por ejemplo, el m.odo readFloat,, devuelve un valor f loat

d.,

do read () se utiliza para recibir datos.

. Se cierra el flujo almacenado en bfer.

1450

Da 17

los flujos de Java

451

Como una alternativa, puede esperar que una EOFException (excepcin de fin de archivo)

36: 37: 38:


39:
40:
41:

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:

LisIado 17.4. Texto completo de writeprimes.java.


java.io.*;

2:

import java.io.*;

3: 4:
5:

class ReadPrimes {

inporf

2: 3:
4:

6:

class WritePrimes

publie static void main(String arguments[])


int[]
int

7:
8: 9:

FilelnputStream me = new

5: 6:
7:

primes = new int[480];


= 0;

ril!InPUtStre<" ni<10<)P'i'"es
utStream buff = new

numPrimes

//

candidato:

el nmero que podra ser primo {


{
candidate; =

10:

8:
9:
10: 11:

int candidate = 2;

11:
12:

while
if

(numPrimes < 408)

DatalnputStream data = new Datalnputstreain(buff};


try {

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:

// Escribe en el disco la salida


FileOutputStream file = new File0utputStreamC468primes.dat");
BufferedOutputStream DataOutputStream data buff = new
BufferedOutputStream(file);

21: 22: 23: 24:

} 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:

primos, se cscnbe,, en ,;,s ,,11CJ n


+ e.toStringO);

30: 31: 32:

System.out.println("Error

33:
34:

publie static boolean isPrime(int checkNumber)


double root = Math.sqrt(checkNumber);

{
nuevo fluj0 de sa)ida

-' ** ^ -ociado con un arch.vo ,,aniado


de sa,ida a,macen;,do
asocia con ., flujo , ^

35:

' II

=
FileReader("index' ;KK|,>s incluidos en

na ve. que tenga ""''^"^f^vo:1' ^ ^


, para leer la

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

, ^^^

de bytes. En vez vez de de ^ ^


,e,eron. o devuelve-1M
El mtodo siente carga un ar,v
despliega sus caracteres.

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:

}
}

8yt..,out.prlntln("Error -. + e.t tb5tring());.

23:

. BufferedReadertfleader, int) Crea un flujo de caracteres almacenado:en blcr,


asociado con el Reader especificado y con un bfer de tamao int.

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')

areljivo ReadSource3 Java"0""5 ^ e'l da: C' hjCI FileReatJer asociado w. el

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,

. Un carcter de retorno de carro ( ' \ r')

Cmo escribir archivos de texto


Unicode en bytes.

. Un carcier de retorno de carro seguido de una lnea nueva

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""

para convenir enaceres de

import

java.io.*:

clases de escritura de flujos debe


,de,

* -o, e, aumento booiJno

la cual puede incluir una ruta para

bolean). La cadena indica el nombre

Hay dos constructores Filewriter: FileWriter, ct


1

" nujo de coraciere.


> -"- actual

4ue con las

2: 3:
4:

publie class ReadSource {


try {

publie static void .iiUStringl] arguments) {


FileReader file = new FileReader("ReadSource.java

5: 6: 7: 8: 9: 10: 11:

);

write(ii7t) Escribe un carcicr.

BufferedReader buff = new BufferedReader(file);

boolean eof = false;


while

con el punto de'into'y

# #

12: 13:
14:

String line = buff.readLine()r if (line == nuil)


eof
else

(!eof)

true;

15:

16:
17:

System:out.println(line);

18:
19:

buff.cise();

} caten (IOException e)

Manejo de datos a travs de los

confusin con las


para eliminar crpelas

os estos miodos se deben nuinej.ii <.

Un, vet comwklo en nyscula,

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:

AllCaps (String sourceArg)


sourceName =

como TempFile. java.


ejecutar AUCapsDemOi como en , j

Allc^^emo. java y darle un nombre


la lnea de comandos, al

sourceArg;

El nombre del archivo que se va a

16:
17: 18:

void convert)
try {

avaAUCapsDemo TempFile. java


+ sourceName +
,

19:

// crea objetos de archivo

20:
21:
22:

File source = new File(sourceName);

File temp = new File("cap"


// crea flujos de entrada
FileReader fr = new
FileReader(source);

".tmp")

23:

24:

25: 26:

Resumen

BufferedReader

in =

new

27:
28:

BufferedReader(fr);

29:
30: 31: 32:

//

crea flujos de salida


fw = new
out = new

FileWriter

Filewriter(temp);
BufferedWriter

=---=

33:
34: 35:

BufferedWriter(fw);

boolean eof
int inChar =

false;
8;

36:

37: 38:
39:
40:

do

inChar = in.read(); if (inChar != -1) { char outChar = Character.toUpperCase(


out.write(outChar);
} else
eof = true;

(char)inChar

41: 42:

43:
44:

} while

(!eof);

45:
46:
47:

in.close(); out.close();
, t, ^ it , ^ e

48: 49: 56: 51: 52:

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

-^!^l^il^ide ,os flujo.


class.dat

Si usted ejecuta este programa, obtendr el siguiente mensaje de error:


Error -java.io.FileNotFoundException:

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

Tenga mucho cuidado aJ especificar w ,,-

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 .\

y'L cn el Jrcf"vo, uiilice el mtodo cise ()

Los usuarios de UNIX pueden escribir lo siguiente en una lnea de comandos:


cp ReadBytes.class class.dat

" d

de

Cuando ejecute el programa, cada byte de class.dat se desplegar, seguido de un comeo

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

3 0 16 43 182 0 25 182 0 18 182 0 24 182 0 22 177 0 1 0 0 0 93 0 S


607010 53 000 90 0 22 0005000604070606010

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

185, 285, 84 254, 105, 33

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;

> catch (IOExc.ption e) /

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

y la creacin de sockets bsicos tipo UNIX.

conexa y recuperacin de archivos por medio de pro.ocolos com 1 de w b

abstracciones de p^aforma cruzada para operaciones simpes n2 2 ,,as I.

comun.cacn en una red con sus programas de Java. El paquele p oporcio a

La biblioteca de clases de Java incluye el paquete java.net, que hace posible la

escnb.r arch.vos en la red es tan c, como leer y escrib,

Si utilizamos este paquete conjuntamente con flujos de entra

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

Wide Web e Investigar cmo se crean los programas cliente-servidor.

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

Cargar sus archivos de clase

=r~ rr

Ejecutar su navecador en I-,

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.

-* - Para recuperar archivos de Web vav. i

Las clases de socket, Socket y ServerSocket, que le permiten abrir conexiones estndar de socket a liosts, y leer y escribir de esas conexiones.

Apertura de conexiones con Web


En vez de pedirle al navegador que slo cargue el contenido de un archivo, sera mejor sacar proveera-del contenido de ese archivo para usarlo en su applel. Si el archivo que desea abrir
esl guardado en Web y se le puede accesar a travs de las formas ms comunes ilc URL

w"^ aya a los mtodos y Jas ciases.

(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

::;:::;:r *> - > - * - * -

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

Comunicacin a travs de Internet

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:

GetFile frame = new GetFile O;

25: 26:
27:

WindowListener 1 = new WindowAdapterO / publie void windowClosing<windowEvent e) /


System.exit(e); l

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:

if (frame.runner == nuil) { frame.runner.start()i

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

frame.runner = new Thread(frame,;

Figura 18.1
La aplicacin
Ge t File.

40:
41:

publie void run()

42:

w,01H=11! HEKWfcJM B0R0E1M UOM.M-IMCK f

.HJAUON*RtOKTWO 6S

43: 44:
45:

String line;

BufferedReader data;'

URLConnection coj^n = nuil; InputStreamReader in;

46:
47:

StringBuffer buf = new StringBufferf)j


conn.connect();

Listado 18.1. Texto completo de getfile.java.


1 : 2 :
3 4

48: 49:

conn = this.page.openConnectionf)-

import import import import

java.awt.*; java.awt.event.*; java.net.*; java.io.*;

50: 51:
52:

53: SU:
55:

5 6
7

i publie class GetFile extends Frame implements Runnable {


Thread URL runner;

box.setText("Reading data ') while ((line = d.ta.re.dLine())'!= nuil, {


bf.appendfline + "\n");

in = new InputStreamReaderfconn.getlputStreamM ) data = new BufferedReader(in) r "iream(j),

box.setTextC'Connection opened

)-

56:

9
10 11

TextArea box = new TextArea("Gettmg text ...


publie GetFile() { super("Get File");
add(box);

page;

);

57:
58:
59:

box.setText(buf.toString());
catch (IOException e) {

60:
61:

}
}

System.out.println(IO Error:" + e.getMessage());

12 13
14

62:
= new

try

{
"URL(-http://www.prefect.com/java21/index.html
page

15

);

16:
17:

18:

catch (MalformedURLException e) { System.out.println("Bad URL: "

+ page);
l proce-

19: 26: 21:

22:

publie static void main(String[) arguments) {

e venZas d V "ecib 7 T ^

y recibir entradas de usuario.

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,

-d ms oCnerale }P J;lv, Z2 r Para ap'CaCOnes"* conectividad de * ,S tcnicas de ^Z^^"* ~ un, abstrae


Nota
j ava. net.

Puralasaplicacioncsdeconectividaddcredmisill.il.

InputStreamReader y BufferedReader. Adems, se crean dos objetos para guardar los


datos cuando lleguen: un String y un StringBuffer.

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.

."">

connection . new Socket(nombreHost, nu.Puerto);

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

la aplicacin se cierre correctamente cuando se cierre su ventana; durante el


da 21 aprender ms sobre "Manejo de eventos de usuario con Swing".

"*" "'"" "'" !"""'

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:

ServerSocket sConnection = new ServerSocket(8B88);

^ 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.

Diseo del programa Trivia


ma que vige un puerto determinado, para las conex one

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-

re Je diseo se ajusta a la n,ela original de las Cases par., socU-ts . i^

e, fcn resumen, el servidor realiza las tareas siguientes:

merTun mecan.smo de encrip.acin como el SSL) o tener mluples implementacones de


sockets por cada unidad de tiempo de ejecuc.on de Java.

1- Espera la conexin de un cliente.


2. Acepia la conexin del cliente.
3. Enva una pregunta al azar. 4. Espera la respuesta del cliente.

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.

clase! de estas clases, que utilicen la .mplementacin predeterminada de sockets, o una de su


Hay otras caractersticas nuevas que se han agregado al paquete java.net:

5. Verifica la respuesta y notifica al cliente.

6. Le pregunta a! cuente si desea que le haga otra pregunta.


7. Espera la respuesta del cliente.

. Nuevas opciones para socke.s. basadas en las opciones BSD (por ejemplo. TCPJWDE
LAY IP_MULTICAST_LOOP, SO_BINDADDR).

8. Repite el paso 3, en caso necesario

. Muchas nuevas subclases de la clase SocketExcepticn, para representar errores

de red en un nivel de granularidad ms fino que el de Java 1.0.2 (por ejemplo,


NoRouteToHostException o ConnectException).

Trivia: ivia: un un socket socket simple p tipo p cliente-servidor


Para terminar el comentario

' 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

Comunicacin a travs de Internet

String inLine = is.readLine(); if (inLine.length() > 8) < outLine = processInput(inLine);


os.println(outLine);
os.flushf);

break;

State = WAITFORCONFIRM
'

UtS-r W-ant^- ~- - - * ansWerS[num)


'

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;

El mtodo run() analiza primero las preguntas y respuestas llamando a initQnA(). En un

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

llevar ,a informacn hasta e,

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

case WAITFORCLIENT: hace una

outStr = questions[num]; state = WAITFORANSWER;


break;

case WAITFORANSWER: // verifica la respuesta if (inStr.equalsIgnoreCase(answers(num]))

outStr = -Triar s correct! want another? (y/n)


else

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

Is the Earth a perfect sphere?

(in millions of miles)?

catch (FileNotFoundException e, {
quesUon

:
catch (IOException e) {

Wliat is the internal temperature of the Earth


9000

(in degrees F)?

?)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

inFile = new File( "ClnA. txt"); FilelnputStream inStream = new FilelnputStream(inFile);

,,

- *-

ha(11

l|os;ir ;i|

*. .

lijBj

byte[)

data = new byte[ (int)inFile. length() ];

// lee las preguntas y respuestas en un arreglo de bytes


if
answers");

(inStream.read(data) <= 0) { System.err.println("Error: couldn't return false;

read questions

and

arguments)

serven, start M-

TriaServer() ;

// ve cuntos pares de preguntas/respuestas hay for (int i = 0; if i < data.length; (data[i) ==


numQuestions++;

i++)

(byte)' \n' )

^^
Escriba
1 :

numQuestions /= 2; questions = new String[numQuestions]; answers = new String[numQuestions;

2: 3: 4: 5:

// coloca las preguntas y respuestas en arreglos de cadenas


int start = 0, ndex = 0;
boolean isO = true;

import java.til.Randoro;

import java.io.*; import java.net.*;

6:

for

if

(int i = 0; i < data.length; (data[i) == (byte)'\n'J {


if (isQ) {

i++)

7:

8: 9: 18: 11: 12:


13:

questionsjindex] = new Stringfdata, start, i start D.


isQ = false;

}
else {

answers(ndex) = new String(data, start, i - start -1);


isQ = true;

Prvate int nUm = e

P^vate int numQuestions-

prvate ServerSocket serverSocket


'

pnvate StringfJ answers;

'

\\

476

Da 18

.Comunicacina travs de Internet


60:

477

Listado 18.2 continuacin


15: 16:
17: 18:

private lnt state = WAITFORCLIENT;

61: 62:
63:

private Random rand = new Random();


public TriviaSorver() { super("TriviaServer");
try

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:'

serverSocket = new ServerSocket(PORTNUM); System.out.println("TriviaServer up and running

...");

67: 68:
69:

caten (IOException e) { System.err.println("Exception:


System.exit(i);

OS.flush();

os.println(outLine);

couldn't crate sockef);

70: 71: 72:

6:

27:
28: 29: 30:

73:

74:

if (inLine.length() > 0) {
os.fiush();

?' Salida a la entrada del usuario ring nune = is.readUne()


os.println(outLine)break;

public static void main(String[] arguments) {


TriviaServer server = new TriviaServer();
server.start();

75:

31:
32: 33r 34: 35:

76: 77: 78:


79: 80:

outLine = processInput(inLine);

if (outLine.equals("Bye "))

public void run()

36:
37:

Socket clientSocket = nuil; // inicia los arreglos de preguntas y respuestas


if (linitQnAO)

81:
82:
83:

// limpia todo
os.close();

38:
39:
40: 41:

System.err.println("Error:
and answers");
return;

84: 85: 86: 87:

couldn't initialize questions

is.close();

clientSocket.closef)
catch (Exception e) {

42:

88:
89:
90: 91:

43:
44: 45:

// busca clientes y hace preguntas de la trivia


while (true) { // espera un cliente

e-printStackTrace();

Systeni.err.println("Exception-

46: 47: 48:


49: 50:

92:
93:
94:

if
try

(serverSocket == nuil)
return;

clientSocket = serverSocket.accept();

95:
96: 97: 98: 99: 100:
101:

private boolean initQnA) i

try {

51 :
52:

W * File inFile = new FileCQnA.txt");

53:
54:

catch (IOException e) { Systei.err.println("Exception:


client sockef);
System.exit(i);

couldn't connect to

55:

} // ejecuta el procesamiento de pregunta/respuesta


try { InputStreawReader isr = new

102:
103:

en un arre9ide bytes
return false;

56:

57:
58:

104: 105:

59:

InputStreanReader(clientSocket.getlnputStreain());

I 470

Dla 18

't
471

1. Conectarse con el servidor.


2. Esperar una pregunta.

3.

Desplegar la pregunta y aceptar una respuesta.

caten (IOException e) { System.err.Drintin/c

4. 5.

Enviar la respuesta al servidor. Esperar una contestacin del servidor.


i

?r^Un( Exception: couldn't crate- socket-",;

6.
7.

Desplegar lafconlestacin y pedirle al usuario que confirme si desea otra pregunta.


Enviar la respuesta del usuario.

publie void run() {

8. Volver al pa|o 2, en caso necesario.

Socket clientsocket = nuil;

r()

- :::

Triylltm.r

^'
respuestas

Implementacin del servidor Trivia


F.l corazn del ejemplo Trivia csi en el servidor. El programa del servidor Trivia se llama
TriviaServer. Las variables de instancia definidas en la clase TriviaServer son:
private
private

static final
static final

int

PORTNUM =

1234;
0;

int WAITFORCLIENT =

private

static final

int WAITFORANSWER =

1;

private
private

static final int WAITFORCONFIRM = 2;

private StringM questions;


String[] answers;

""">

.,,

espera a un cliente
try

private ServerSocket private


prvate prvate int int num = 0;

serverSocket;

if (serverSocket == nuil)
return-

int numQuestions;
state = WAITFORCLIENT;

private Random rand = new Random();


Todas las variables WAITFORCLIENT, WAITFORANSWER y WAITFORCONFIRM son constantes

>
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

L:l constructor TriviaServer no hace mucho, excepto crear un ServerSocket en vez de un


DatagramSocket. Vcrifquclo:
puulic TriviaServer() {

super("TriviaServer");

try

{ serverSocket

= new ServerSocket(PORTNUM); up and running ...");

System.out.println("TriviaServer

entrada del

usuari0

|478

Da 18

Listado 18.2 continuacin


106: 107: 108:

149: 150:

for (int i = 0; i < data.len'gth; i++)


if (data[i] == (byte)'\n')
numQuestions++;

// ve cuntos pares de preguntas/respuestas hay

151:
152:

break;

outStr = questionstnumj; state = WAITFORANSWER'

109:
110:

153: 154:

111:
112:
113:
114:

numQuestions /= 2; questions = new String[numQuestions];

case WAITFORANSWER:

155: 156:
157:

// verifica la respuesta

answers = new String[numQuestions];

strequ"r

// coloca las preguntas y respuestas en arreglos de


// cadenas

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;

". Want another? (y/n)"-

' '

(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);

outStr = questionsnuml; State = WAITFORANSWER;


else {

: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:

couldn't find the question

177:
178:

file");
133:
134:

135: 136:
137:

catch

System.err.printlnC'Exception:
questions");
return false;

(lOException e)

1/0 error trying to read

Implementacin del cliente Trivia


comandos. Ta, ve

138: 139: 140:


141:

^'^ "mo una aplicacin de ,a Un


r

return

true;

de los eventos de clie_n,e se llama


{

""" h"C "^ '-" '


^ de.

142: 143:
144:

String processlnput(String inStr)


String outStr = nuil; switch (state)
// hace

145:

146:
147:

{
una pregunta

case WAITFOHCLIENT:

ncluveene, Ido 8

mtodo dennido en

;isc Trivia m

""d ^^ T:""b' **y un ,1o

148:

480

Da 18
481

Listado 18.3. Texto completo de thivia.java.


1:

47:
46: 49:

import
import

java.io.*;
java.net.*;

2:
3:
4:

50: 51: 52: 53:

out.flush();

out.println(str.tostringo)';

System.out.println(-ciienf " + ,tPl.

''

str.setLength(e);
out.close();

public class Trivia {

5:
6: 7:

prvate static final int PORTNUM =

1234;

// limpia todo

public static void roain(String[]


Socket socket = nuil; InputStreamReader isr = nuil;
BufferedReader
String address;

arguments)

54:
55: 56: 57:

8:
9:
10:

in.close(); socket.cise();

9 m

in

nuil;

58:
59:

11:
12: 13:
14:

PrintWriter out = nuil;

}
}

catch (lOException e) {

y.t....rr.prlBtln(.I/0 error; -+ e.tostring()).

60: 61:

// verifica la direccin del host en los argumentos de Ja


// lnea de comandos

15:
16: 17: 18:
19: 20: 21: 22:

if

(arguments.length != 1) { System.out.println("Usage:
return;

java Trivia <address>");

else

address = arguments[0];

//
try

inicializa el socket y los flujos socket = new Socket(address,


isr =
{

23:
24:

25:
26: 27:

new lnputStreamReader(socket.getInputStream());

PORTNUM);

o. iDe ah e, argumenl0

^ coudos. S cod a

del cliente, tiene que codificar 3

rvidor predeterminado, por lo que uZ e

^ applct, no basta conectarse de nuevo con el s

* con,

^1^

?f

T ? "'" aplk"M'>n de J:'Vi' y n0 V" C' PP'e'; " hl>' U"


lgn can.

el ^ Ce ,fmM

in = new BufferedReader(isr); out = new PrintWriter(socket.getOutputStream(),true); caten {lOException e) { System.err.println("Exception:

28:
29:

3e:

couldn't

crate

stream

31:
32:

socket " + e.getMessageO);


System.exit(i);

el nomore de dorninio

correr el servidor Trivia

En algunos sistema operativos puede oroh

hadend

:-

>

33: 34:

35:
36: 37:

// procesa la entrada del usuario y las respuestas del servidor


try

StringBuffer str = new StringBuffer(128);


String inStr;
int c;

38: 39:
40:

41:
42:
43:
44:

while ((inStr = in.readLine())


System.out.println("Server: if (inStr.equals("Bye."))
break;

!= nuil)
"

+ inStr);

45: 46:

while ((c = System.in.read())


str.append((char)c);

!=

'\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

sacar informacin desde Web y meterla en sus programas.

Hoy hemos aprendido a utilizar URLs y conexiones URL, jumo con flujos de entrada para

Java, listo se hale desde una lnea de comandos como sta:


java TriviaServer

ma scmdor se sita en un puerto de Internet, esperando un cliente que haga contacto con*I.

Tambin aprendi a escribir programas cliente-servidor en Java y la forma en que un para

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"

POST. Si usa GET, la informacin se codificar en el URL, algo as como:

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

Server: What is the internal temperature of the Earth (in degrer


Client:

F)?

Server: Server:

Wrong,
y

meteorites

formulario. Es todo loque necesita para formularios simples.


(y/n)

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

httP=//www. blah.com/cgi-bin/myscript7f oo=Ubar=2&narae=Laura

the correct answer is 9800. Want anolher?

Client:
Client:

I' Cmo puedo hacer envos de formularios con POST?

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)

Server: Wrong, Server:


F)? Client: y

93

Abra un sockel en el servidor y enve los dalos, lo cual se ve como lo siguiente, (l-l fr

Client:

What is the internal temperature of the Earth


9008
n
Bye.

Contentype: application/xwww-formuriencoded

POST /cgi-bin/mailto.cgi HTTP/1.0

Server: That's correct! Want another?


Client:
Server:

{sus datos codificados van aqu}

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

JavaBeans y otras caractersticas avanzadas


procesamiento de imgenes 2D.

consto caractersticas avanzadas como JavaBeans, JavaDatubase Cornee i vi,y y

TJZkTJT T que n rpid0 Java-es fcilversin semirsedelaber^uajeL la gran cam.dad de clases ofrece como Sun. Cada nueva

conocamos hacia nuevas reas conforme las vaya necesitando.


as recentes ediciones de Java, incluyendo l,s siguientes:
Jiiviillriins.

atencn en los paquetes y clases necesarios en su rea de inters, y ampIar sus

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

Hoy le presentaremos algunas de las caractersticas avanzadas que se ofrecen en hs


JDBC: Conectividad para Bases de Dalos de Java.
RMI: Invocacin a Mtodos Remotos.
Seguridad.

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

datos1 y comunificin entre un applct y el navegador.

JavaBeans

i 'i

""<>""> * <lcsnrro,,o c' et 's e m

" "'" dc"m"lado' * seleccionad

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

tantas vtecs como sea posible, agilizando as todo el proceso de desarrollo.

-:~,

Quiz la mayor dificultad a la que se ha enfrentado el software de componentes, es la gran

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

sus applcs de j!na

especficas

verse la forma en que Microsoft resolver el tema de la dependencia de


plataforma.

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

Algunas tecnologas de componentes tambin sufren por haber sido desarrolladas en un

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

necesario en cualquier arquitectura TZ^^^ *'^ * "" ^'l


interno. En JavaBe-mt i>
ns.

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

pers.stenca se maneja en frlna autom|c;, po,. ,)lct(j() ^ ^.^

1488

Da 19

Jf^Beansyotras caractersticas avanzadas

489 |

nio de sealizacin existente en Java. La sealizacin es el proceso de guardar o recuperar


informacin a travs de un protocolo estndar. En forma alternativa, y cada vez que sea nece

sario, los programadores pueden desarrollar soluciones persistentes personalizadas.

Aunque ste no es un elemento central de la arquitectura de JavaBeans, tambin proporciona


soporte para computacin distribuida. Los programadores de componentes de JavaBeans

tienen la opcin de seleccionar el enfoque de computacin distribuida que se ajuste mejor a


sus necesidades. JavaBeans ofrece una solucin en su tecnologa RMI (Invocacin Remota <le Mtodos), aunque los desairo!ladores de JavaBeans no estn atados de ninguna forma a esta solucin. Otras opciones incluyen CORBA (Arquitectura Comn Intermediaria para Solicitud
de Objetos) y DCOM (Modelo de Objetos Componentes Distribuido). Je Mii/rosiill. entre
otras.

Trmino Nuevo

-^invisibies-todo eii d * -r::rJ;lva Mta


ue no tenga una sa,,da vis,

nenes. De esta manera. JavaBe su ,Z^ f"" " ^^ ^

de JavaBeans que rea.icen algnI Z2n ^T^ """^

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! " , ' "**""

sus propias interfaces y proporcionan ln n ,Jd

de empo a intervalos espejeos Est0 c

botones y mens, esto le PLce neme es simP,ememe un PZgma r visible. Un buen ejemplo esTncZn

"***" *

"

' el * * tos

IBCUente ** W c?C' reqUS' ^ecr *


- o, de

*' 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

"Pi-ein sin tener qL escrib, J Z

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.

estndar de clases de Java

Cmo se relacionan JavaBeans y Java


Aunque la naturaleza orientada a objetos de Java proporciona los medios para que los objetos
trabajen en conjunto, hay reglas o estndares que gobiernan la forma en que se conduce esta interaccin. Estos tipos de reglas son necesarios para obtener soluciones robustas para los
componentes de software, y estn disponibles a travs de JavaBeans.

sta de los

Combinacin de in.erfaces grficas de usuario


Persistencia * Manejo de eventos

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

' Soporte para herramientas de construccin de aplicaciones

JavaUeans proporciona el marco de trabajo que hace posible la comunicacin del compo

nente. An ms importante es el hecho de que los componentes de JavaBeans se puedan

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.

forma de pequeas APls dentro de la API de Zu^n^^ ^''^ ** mPtemenla

1490

Da 19

JavaBeans y otrascaracteri.tir,. avanzadas


v,

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

Las-especincaciones de JavlBeans estn dispon.bfes en el sitio Web * Java:


\ http://www.sun.com

componentes y sus|contenedores.
Las APls de persistencia especifican el mecanismo por el cual se pueden guardar y recuper

Trucos con applets


TTrmino Nuevo

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

Informacin del applet


proporciona, i cin.

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

Las APls de soporte de herramientas de construccin de aplicaciones, proporcional) los ele


mentos necesarios para editar y manejar los componentes al momento del diseo. Al construir

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

publie String getAppietInfo() {

return "GetRaven Copyright 1998 Laura Lemay";

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.

r::rera ::r crear----- ^:;t:~;:l

para decirle a, navegador que cargue una pahu n et UnTd

la capacidad de ese navegador para cargnr nuevas ^ W*v, T

Puesto que los apple.s se ejecutan dentro de los n,adows Web

Creacin de vnculos dentro de los applets

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

Al utilizar el constructor URL (String), tendr que tratar con objetos


nuacin:

MalformedURLException. Podra usar un bloque try.. .caten como se muestra a conti


try { theURL = new URL("http://www.mcp.com ); } catch (MalformedURLException e) { System.out.println("Bad URL: " + theURL);
4:

5:

6:
7: 8:

publie volt) init() {

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.

bLi$t[2J- new BookmarkCJavaSoff


nttp://java.sun.com");

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

publie boolean action(Event .*, Ofject arg,


if (evt.target instanceof Button) /
return true;

linkTof (String)arg );

else return false;

1494

Da 19

ft
i++) {.

495

Listado 19.1 continuacin


28:

29:
30:

void|linkTo(String ame) {
|6r

31:
32:

IJRL theURL = nuil;


(int i = 0;

i< bmList.length;

'*.* de su ap ,,".,,

tiene que hacer es repetir varias veces I

Habr veces en que desee tener una pein. HTMl

Comunicacin entre applets

C" Va

"

S aPP'C'S- '^ CSI' 'd il)

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)

46: 47: 48:


49:

try
}

this.url = new URL(theURL);


catch (MalformedURLException e) {

50: 51:
52:

System.out.println("Bad URL:

"

+ theURL);

53:

Este upplet se puede probar con e! siguiente HTML:


<APPLET CODE="ButtonLink.class"
</APPLET>

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.

un ciclo for que se parece a

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'

nion es una instancia e de su

con una-de ios QCCCSO ;l cada e'cmento dl

496

Dia 19

a un mtodo en un applet especfico, es. un poco ms compcado.Para hacer es.o


cdigo de ese applet.

nombre a sus app.ets y luego refirase a ello, por nombre dentro de. cuerpo de.

datos de un componente a otro

pegarlo entre campos y reas de lexiol Pd

^ * pudieran tr;"ltifa
#

Para darle nombre a un applet, utilice el atributo^AME para <APPLET> en su archivo HTML:

<p>This applet sends information:


NAME="sender"> </APPLET>

<APPLET COOE-'Mypplet.class" WIOTH-iee HEIGHT-15


!

<p>This applet receives information from the sender: <APPLET CODE="MyApplet.Class" WIDTH=100 HEIGHT=150
NAME="receiver ">

Creacin de objetos transferidles

</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

Applet receiver = (MyAppletSubclass) getAppletContext().getApplet("receiver'); // le dice que se actualice a si mismo


receiver.update(text, valu);

En csic ejemplo, usted utiliza el nilodo getApplet () pan, obicncr una referencia del appici denominado "receiver". Observe que el objeto devueho por getApplet () es una mstancia de
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.

Cortar, copiar y pegar

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.

urdedo,que represen, una Case de


,.v.,.ri.Uz..

CZ funcionalidad incluida en sus plataformas nativas (por ejemplo, se poda cop.ar texto y

1498

Da 19

DataFlavor{String,

String) crea un sabor de datos que representa un tipo MIME,

en el que el primer argumento es el tipo MIME y el Segundo es la cadena "legible" para

el usuario. La clase que representa este sabor ser InfcutStream.


Con ese objet de sabor de datos, y para negociar la forma en que se transferir la informa
cin, puede pjegunlai por sus valores o comparar los lipos MIMI: con oros objetos tic salior.

pegar entre los componentes en un apple[.

i::!:^n::iivii:si"ei"b^-p-^u,i,iZarsu1Pmf" P?nWes "".o para copiar y


g puede mili, ,

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

"7 71"'- ~del portapapelex).

,,,

nterfaz Transf erable.)


Por medio deios objetos DataFlavor y la nterfaz Transf erable, la clase StringSelection inipleinenla ji objeio simple iransfcrible para transmitir cadenas de texto. Si su inters principal

Sr"" * - *

:.,

: .

^nsferable que lamb.en puede implcncniar al dueo

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

para crear ponapapeles especiales o conjuntos mltiples de ponapapeles especializados.


I:n Java los.portapapeles estn representados por la clase Clipboard. la cual tambin es

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()

stH. el cdigo para es.e ejemplo:


Figura 19.2

;kl() ly- <

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

JBeans y otras caractersticas


50:

avanzadas

Listado T9.2. Texto completo de copvpaste.java.


1:

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:

public class CopyPaste extends Frame implements ActionListener, ClipboardOwner {


Button copy, paste;

55:
56: 57:

8: 9:
10:

58:
59: 60:
61:

TextField tfCopy,
Clipboard clip;

tfPaste;

11:
12: 13:
14:

public static void main(String[] argunejits)

62:

15: 16:
17:

CopyPaste test = new CopyPastef); WindowListener 1 = new WindowAdapter() { public void windowClosing(WindowEvent e)
System.exit(O);

63:
64:

Paste-setEnabled(false)} catch (Exception e) { } SyStem.out.println(-Error

.setText(txt)-

#.toStrlng(

j.

65: 66:
67: 68:

18:
19:
20: 21:

test.addWindowListener(l);

};

69:
70: 71:

public void ctionP.rfor.ed(ActionEvent e)


it (e.getSourcef) == COpy)
docopy();

test.setSize(200,
test.showf);

150);

22: 23:
24:

72:
73: 74: 75: 76:
77: 78: }

else if (e.getsourceo == paste)


doPaste();

CopyPaste()

25:

26:
27: 28:

super("Copy and Paste"); clip = getToolkit().getSystemClipboard();

contents)

FlowLayout fio = new FlowLayout();


setLayout(flo);

29:
30:
31:
32:

copy = new Button("Copy From");


tfCopy = new TextField(25); paste = new Button("Paste To");

33:
34: 35:

tfPaste = new TextField(25);


copy.addActionListener(this);

prximos dos das,


cacioncs de Swino

* ^"^ M USUaria Duranle los ^ ""*"* ^ d-"-do 'as aP,,

36:
37: 38:

paste.addActionListener(this);
paste.setEnabled(false);

Las insirucciones especficas para copiar y pegar son:

39:

add(copy); add(tfCopy);
add(paste);

46:
41: 42: 43:
44:

\\ !t nrrn,mPOrt ha" d^ * qe J.v....dltatr.n,f.r.


indica que es.a clase implementar la ir

add(tfPast);

ani un
void doCopy() {

45:

46: 47: 48:


49:

if (tfCopy.getText()

!= nuil)

String txt = tfCopy.getText();

ei
Cl b'n C^ Fr-- * "na .11 m-o-

StringSelection trans = new StringSelection(txt);


clip.setContents(trans, this);

en el campo de texto de Copy From, el texto se saca del

1502

Da .19

JavaBeans y otras caractersticas avanzadas

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

Debido a que la clase implemenia la inierl'az ClipboardOwner, se

requiere de un mtodo Iost0wnership(). Sin embargo, aqu no se ha hecho nada re


ferente a cambios de propietario, por lo tamo el mtodo est vaco.

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.

Invocacin a Mtodos Remotos


La RMJ (Invocacin a Mtodos Remotos) se utiliza para crear aplicaciones de Java que pueden comunicarse con otras aplicaciones de Java en una red. Para ser ms especficos, la RMl permile que una aplicacin llame a mtodos de otra aplicacin testas aplicaciones

CI ion lo

Servidor

podran ejecutarse en diversos entornos de Java o en sistemas difercmes) y pasar objetos de


ida y vuella en una conexin de red. Puesto i|tie los mecanismos y protocolos por Ion que

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 (Jo rclc-ruicia


remola

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

Estas tres capas de la RMl permiten el control o .a imp.ementacin independiente de cada

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

'-gan conexiones y Halda, no a

"Kior de bridad pan, ese servid, rn

* implememara los mtodos deTto^re


I^ T

servidor,

^^^

lado del

* ^^ CrCar e inSlalar u"

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

tos ms interesantes de la RMI. Esta conversin se denomina sealizacin. Mientras un

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.

Creac'n de ap!lr?ciones RMI


Para crea, una aplicacin que utilice RMI, debe usar las clases e interfaces definidas rior los
paquetes ava.rmi, entre los cuales se incluyen los siguientes:
java.activation Para activar los objetos remolos.

java.rmi.server

Para las clases del lado del servidor.

ja* a. rtni. registry


en 'in sistema local.

Contiene las clases para localizar y registrar los servidores RMI

j a' a. rmi. dgc

Para recolectar la basura de los objetos distribuidos.

En s el piquete java.rmi contiene las interfaces, clases y excepciones RMI generales.

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-

Ce hcamien-as de desarro.lo J^Z^

JDBC cuenta con el respaldo de los lderes de I, in

-ca en bases de datos, la cn^^'^

as herramientas tradicionales Esto debe" d7aT

medio de JDBC, no difiere mucho de laTntaccio

cas para desarrollar bases e^^Z,^^ *"" ^ ".* a ls ,ce,,i-

""" "" * dat0S SQL P" dio

C" """ ^ de da'S SQL PW

506

Da 19

JavaBeans y otras caractersticas avanzadas

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

csi.iuo i mis lecidrcs?

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

*n , ...i .^in, vi, u.Hto,,,-

rn.res de NullPomterException. Qu6 .si^.ific, esto"

t se des.ruven con

jar coniroladores, establecer conexiones con las bases de datos, construir consullas SQL y
procesar los resultados.

El sitio Web de Sun contiene una amplia informacin y especificaciones de JDBC.

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??

p"leLs- " la )<>'"" - M Sun, y ,a

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

usuario con Swing


al PJ, ,mpei,1INlar , nlerta Je u

Diseo de una interfaz de

Swing ofrece una funcionalidad muy mejorada con rcpeco a

Diseo de una interfaz de usuario con Swing

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.

Todos Jos componentes de Swing son subclases de la clase JComponent.

Los beneficios de Swing


!:

Estructura de una aplicacin


El primer paso para crear una aplicacin simple de Swing es crear una clase que sea una sub clase de JFrame. La clase JFrame es una extensin de Frame, y se puede utilizar de manera
similar.

sa con r

imerto grHca de usuano y e

El cdigo que aparece en el listado 20.1 puede ser una estructura para cyalesquier aplica
ciones (|iie cree medanle una ventana principal.

Listado 20.1. Texto completo de framework . java.


1:

2:

e inc,USo Ce! usuario de, programa.

^ ^ ^ ^

3:
4:

iraport java.awt.GridLayout; import java.awt.event.; import javax.swing.*; publie class Framework extends JFrame {
publie Framework() {

Es... caracterstica ofrece e, cambio us ^^ ^ MStema ,iaUV0 de operacin, conu,


p^ma de Java con una interfaz que_
^dowsoSolan.ounnuevoesu.oun.eodeJa

u ^ui

^ ^ ^^.^ M(uiL

5:
6: 7: 8: 9:

A herencia de sus P^decesores, ,u -^^T,^^ co.npa.ibi.i- a


.swing. Para poder uiili^ar una

super('Application Title");

10:
11:

// Agregue aqu los componentes

12: 13:
14:

publie static void main(String[]


JFrame

args)

frame = new Framework();

15: 16: siguiente:


17:

WindowListener 1 = new WindowAdapter()


System.exit(0);

18: 19:

publie void windowClosing(WindowEvent e)

frame.addWindowListener(l);
frame.pack();

frame.setVisible(true);

Diseo de una interfaz de usuario con Swing


Da'20

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".

Listado 20.2. Texto completo de swinger.java.


1:

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:

String note = "1 receive a disproportipnate amount of


JButton hotButton = new JButton(note);

"joy from being clicked. Please iriteract with me.";

13:

cierne pau, ello.

Setvisit>le(.ooleano). S. el

14: 15: 16: 17:

JPanel pane = new JPanel();


pane.add(hotButton);

aniumen,o

fuera f al.e en vez de xrue.

setContentPane(pane);

18:
19:

m;lrco se abrir al tama


gar ant.s c Los componemes se enen que ag&

..

20: 21:
22:

publie static void main(String[] JFrame frame = new Swinger();


WindowListener

args)

23:

1 = new WindowAdaper()

{ e) {

a-al.
25:
26: 27:

puDlic void windowClosing(WindowEvent


System.exit(0);

28:
29:
30:

frame.addWindowListener(l);
frame.pack();
frame.setVisible(true) ;

};

31: 32: 33:

fe

La figura 20.1 muestra la salida de esla aplicacin.

"

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

Se crea un objeto JButton mediante una cadena como su etiqueta,

liste uso es idntico al de uno de los constructores de la clase Button.

pane.add(button);

pane = new JPanel()

Lneas 14 y 15 Lnea 17

Se crea un objeto JPanel y se agrega el botn a este panel.

Con el mtodo setContentPane( Contenedor) se hace el panel que ser el

setContentPane(pane);
Figura 20.2
Un cuno en un
JButton.

panel de contenido del marco.

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.

PUede utilizar Para sus

est en e, archivo unabo gii


A trabajar con Swing
Hny componentes de Swing para cada uno de los componentes del AWT que ha aprendido hasta este punto. En la mayora de los casos hay un constructor para el componente de S.wing
que concuerda con su similar del AWT, de modo que no tiene que aprender nada nuevo para
trabajar con los componentes de Swing.

y el nilco de, .cono

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

texto, icono yaneacin

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

es del awt ...,. etiquea de icono o una

Diseo de una interfaz de usuario con Swing


Da 20
,16

517

JCheckBox( Icono)

Una casilla de verificacin con la etiqueta de icono especificada.


Una casilla de verificacin con la diquela de
Una casilla de verificacin con las etiquetas especifi

JCheckBox (Icono, booleano)


jButton

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,

JChockBox(Cir/o/)fl, Icono, boolomto)


nienid sea true.

I ln;i casilla de Vfrilkai-in con las etique

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 ^

agregarle casillas de verificacin con el mtodo add(Componente).

w
Ikaclos.

-* *<*
iw. unc;h

En Swina, los botones de opcin se implememan a travs de la clase JRadioButton. Los


mtodos constructores son los mismos que los de la clase JCheckBox.

Bl cambio de nombre de CheckboxGroup a SuttonGroup refleja la ampliacin Je la fun


cionalidad; ahora ya se pueden agrupar botones y botones de opcin. .

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.

Para crear una lista de seleccin d los pasos siguientes:


!. El constructor JComboBox () se utiliza sin argumentos.

2. Para agregar eiemenios a la lista, se usa el niciodo addltem( Objeto) de los cuadros
combinados.
jTextArea(int columnas.
JTextArea(Cacena,

3. El mtodo setEditable(tiooJeanD). de los cuadros combinados, se usa con el argu


^ de lexlo con

el nmero especificado de

mento f alse.

Este ltimo mtodo convierte el cuadro combinado en una lista de seleccin: las nicas selec

texto, filas y columnas.

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)

Es una barra de desplazamiento con la orientacin especificada.

, jScrollBar(int, int, int, int, int) i Es una barra de desplazamiento con la

29

30
31:

orientacin, valor inicial, tamao del cuadro ele desplazamiento, valor mnimo y valor
mximo especificados.

WindowListener 1 = new windo-Ad.pt.rO {


System.exit(0);

32: 33:
34:

PbUc void windowClosing(WindowEvent e)


'

La orientacin se indica con las variables de clase HORIZONTAL o VERTICAL de


SwingConstants.

35:

36: 37:
38:
39:
40:

fraine.addWindowListener(l) ;
! frame.setVisible(true);
publie Insets getlnsets() {
frane.pack();

Un ejemplo: la aplicacin SwingCoiorTest


Si recuerda bien, uno de los proyectos del da 14, "Desarrollo de interfaces de usuario avan

zadas con el AWT". era el applet ColorTest, el cual permita seleccionar un color a travs de
sus valores RGB o-HSB.

41:

42: 43: 44: 45:


46: 47:

return new Insets(i0, 10,

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.

class SwingColorControls extends JPanel {


JTextField tfieldi, tfield2, tfield3;
SwingCoiorTest frame;

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:

publie class SwingCoiorTest extends JFrame { SwingColorControls RGBcontrols, HSBcontrols;


JPanel swatch;

55: 56: 57:

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))

setLayoutfnew GridLayout(3,2,i0)le),. tfieldi = new JTextFieldf"0")

11:

61: 62: 63:


64:

add(tfield2);

add(new JLabel(12, JLabel.RIGHT))

12:
13:
14:

JPanel pane = new JPanel();

pane.setLayout(new GridLayout(1, 3, 5, 15));


swatch = new JPanel(); swatch.setBackground(Color.blacK); "Green", "Blue");

add(tfield3);

add(new JLabel(13, JLabel.RIGHT));

"'

15: 16:
17:

65:

RGBcontrols = new SwingColorControls(this,


HSBcontrols = new SwingColorControls(this,
Saturation",
pane.add(swatch);

"Red",
"Hue ,

66: 67:

publie Insets getlnsets() {


return new Insets(10,
}

18:

68:
69:

10, 0, 0);

19:
20: 21: 22:

"Brightness");

pane.add(RGBcontrols); pane.add(HSBcontrols);
setContentPane(pane);

23:
24:

25:

26:
27:

ntenaz son iguales a Jas de sus similares no Swing.


publie statie void main(StringI] args) {
JFrame fraroe = new SwingCoiorTest();

28:

i-'-l

520

Da 20

Figura 20.3
La aplicacin
SwingColorTest.

Cmo establecer la apariencia

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.

Las clases SwingColorTest y SwingColorControls sobreponen el mtodo getlnsetsf). lo


cual permite que estos componentes se inserten desde los mrgenes de su contenedor en un

nmero designado de pixeles. Al igual que muchos otros aspectos de Swing, sie liene el
mismo soporte que los componentes del AWT.

Apariencia de Windows 95 o Windows NT Apariencia en el sistema Motif X-Window

La clase SwingColorControls es una subclase de JPanel. Esta clase se actualiz para

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.

Metal, la nueva apariencia de Swing de plataforma cruzada

En la clase SwingColorTest, los cambios siguientes actualizaron el cdigo de manejo de


ventanas para que trabajen con Swing en vez de con el AWT:
El programa es una subclase de JFrame.

El objeto swatch, el cual muestra el color seleccionado, se convierte en un objeto


JPanel en vez de un Canvas. De hecho, no hay objetos Canvas en Swing, por lo que
se deben usar paneles en su lugar. Se crea un objeto JPanel para que sea el panel principa! ele contenido del marco. Los componentes swatch, RGBcontrols y HSBcontrols se aiuien a! pan':! do con

que representa ,a apanenda Me,a. de plataforma cruja de Java que representa la apariencia de su sisicma.

'*'*o ^vuelve lH1objc,o

tenido en vez de a la ventana principal del programa.

UnsupportedLookAndFeelException.
ciones siguientes:
try {

Si el mtodo setLookAnoTee., ,> no ?uet e^bleccr la aparca |n7, un

"

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.

Para designar Metal como la apariencia en cu,,,u,er


UlManager.setLookAndFeel(
} caten (Exception e) {

programa, se debcrn ,, ,

Las nuevas caractersticas de Swing


Adems de los componentes y contenedores que amplan la funcionalidad del AWT. Swing ofrece mi lucrosas caractersticas completamente nuevas, incluyendo una apariencia definible, mtodos abreviados, informacin sobre herramientas y cuadros de dilogo estndar.

System.err.printlnccan-t set look and feel: +


e res I d t'U''

e)r

apariencia de Windows 95. l^sZl^^^n^ZZ

...

SU MMc'":l' 1M|I|(-'C 9etSystemLookAndFeelClassName().


' ' ( s srstemas operativos. Si uiili/.;i

1522

Da 20

Diseo de unajnterfaz de

usuario con Swing

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

* la cadena debe ser la descripcin de. ,exto

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.

JButton quit = new JButton("Quit")

El ejemplo siente establece la descripcin de un objeto JButton-

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

^^1 sc pucdc utu


el nombre de un campo de textoL

El mtodo setAccessibleNa-eC**, ruilt,OIli|

infoButton.setMnemonic('i');

JTextField nm = new JTextField)

Si presiona Alt+I el componente infoButton ser seleccionado.

Informacin sobre herramientas


Otra Corma de hucerque un programa sea ms amigable para el usuario, es asociando nlomi:i-

Cuadros de dilogo estndar

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.

cuadro de dilogo bajo ,a apariencia de Meta.


Figura 20.4
estndar.

Proporcionan un nL^n

: rros que se pucden TTE'"S *

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.

ll ejemplo siguientecrea un componente JScrollBar y se asocia a una informacin sobre


herramientas.
JScrollBar speed = new JScrollBar();

speed.setToolTipText("Move to set aniroation speed-);

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

Hay cuatro cuadros de dilogo estndar:.

Descripciones y nombres de los componentes


Otra forma de hacer ms accesible una interfaz, es proporcionando una descripcin del texto
de un componente de Swing. Esto se logra a travs de un proceso de dos pasos:

524

Da 20

Diseo de una interfaz.de usuario con Swing

525i

. inputDialog

Es un cuadro de dilogo que le pide una entrada de texto.

,. MessageDialog . optionDialog

Es un cuadro de dilogo que despliega un mensaje. Es un cuadro de dilogo que incluye los otros tres tipos de cuadros.

. .. ,,

'''"' "'!! Cj:I:,-V ..;,,,-. ,f.':-....

'.

' ': JOptionPane. YES_NO_OPTION,


^, .. ,

JOptionPane.ERROR_MESSAGE)

...

''

'

'

La figura 2p.5,mue$tra e] cuadro de dilogo resallante bajo la apariencia de Windows,

Cada cuadro de dilogo tiene su propio mtodo en la clase JOptionPane.

Figura 20.5
de confirmacin.

Cuadros de dilogo de confirmacin


El modo ms fcil de crear un cuadro de dilogo S/No/Cancelar es con la siguiente llamada a
mtodo: showConf irmDialog(Componente, Objeto). El argumento del componente especifica el contenedor que se debe considerar como el ancestro del cuadro de dilogo, y con

Un cuadro de dilogo

esta informacin se determina en qu pane de la pantalla se debe desplegar la ventana de


dilogo. Si sanos nuil en vez de un contenedor, o si el contenedor no es un objeto Frame.
el cuadro aparecer centrado en la pantalla.

Cuadros de dilogo de entrada


la respuesta. La figura 20.6 nos muestra un ejemplo con la apariencia de Molif.
Figura 20.6
Un cuadro de dilogo
de entrada.

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

icono, se desplegar el objeto en lugar de un mensaje de texto.

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.

El siguiente es un ejemplo que utiliza un cuadro de dilogo de confinacin con un mensaje


de texto y almacena la respuesta en la \ anuble response:
int

response = JOptionPane.showConfirmDialog(nuil, "Should I delete all of your irreplaceable personal files );

response;

el componente, o el icono que se va a desplegar en el cuadro.

Dialog (Componente, Objeto). Los argumentos son el componente ancestro y la cadena,

La forma ms fcil de crear un dilogo de entrada es llamando al mtodo showlnput -

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:"); '

String response = JOptionPane.showInputDi'alog(nul

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,

TI0NJ1ESSAGE o WANINGJUESSAGE. Con este argumento se determina qu icono se ha

Una de las cinco variables de clase que describen e! tipo de cuadro de dilogo:
WARNING_MESSAGE.

ERROR_MESSAGE,INFORMATION_MESSAGE, PLAIN_MESSAGE, OUESTION MESSAGE O

int response = JOptionPane.showConfirmDialog(null,

Error reading file. Want to try again?",


"File Input Error",

La instruccin siguiente crea un cuadro de dilogo de entrada a travs de este mtodo:


String response = JOptionPane.showInputDialognull
"Enter ZIP Code",

"What is your ZIP code?",

'

JOptionPane.QUESTI0N_MESSAGE);

Da 20

Diseo de una interfaz de usuario con Swing

'El icono que va a desplegar, con las variables de clase ERROR_MESSAGE, INFORMAliteral 0 si no va a utilizar ninguno.

TION MESSAGE, PLAIN_MESSAGE, QUESTION^ESSAGE, WaWnG MESSGE ola


~

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.

Si no se utilizan las opciones YES_NO_OPTION y YES_NO_CANCEU, el objeto que repre


senta la opcin predeterminada.

lorma de especificar otro administrador.

desphegan por med.o de. administrador de diseos de flujo, porque denuo del dilogo no hay

wu comb.nac.on de varios componentes como un arreglo de obje.os. Estos componcn.es se

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

que aparece cu la ilgura 20.7:

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

int responsa = JOptionPane.showOptionDialog(null,'


devuelve un valor.

gender[2] = new JButtonf"None of Your Business")-

0,

rsir Asteroid Destruction

JOptionPane.INFORMATlON MESSAGE
nuil,

joptionPane.WARNING.MESSAGE);

Alert ,

gender,

.. gender[2]);

Cuadros de dilogo de opcin

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.

H, c adro de d.ogo ma-s complejo es e, ^^


Objeto).

comb,na las caractensticas de todos los otrosd,aU, Sepuede

showOptionDialogtComponente, O*je, Cadena, mt.

Los argumento* pan, este mciodo son los siguicn.es:


'. El componente ancestro del dilogo.

Un ejemplo: la aplicacin inf o


cual es colocada en los campos de texto de la ventana principal de la aplicacin

. El .ex.o. cono o componente que se va a desplegar.

. Una cadena para desplegar en la barra de ttulo.

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

Diseo de una nterfaz de usuario con Swing

529 I

Escriba el listado 20.4 y compile el resultado.


Listado 20.4. Texto completo de wc java.

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.*;

public static void maln(Strlng[] arg) {


try {

5^ public class Info extends JFrarae {

l\

prvate JLabel titleLabel = new JLabel( Title.


SwingConstants.RIGHT);

56:
57:

UIManager.setLookAndFeel(
} catch (Exception e) {

UIManager.getSystemLokAndFeelClassNameO);
+ "look and feel: " + e);

7".

I
1B

prlvae Slidr^bel - new JLabel("Address: ",


SwingConstants.RIGHT);

58: 59:
60:

System.err.println("Couldn't use the systera "

61:

11:
12: 13:
14:

private JTextField address;


SwingConstants.RIGHT);

private JLabel typeLabel = new JLabeK Type.


private JTextField type;

__

62:

JFrame frame = new lnfo();

63:
64:

65: 66:

WindowListener 1 = new WindowAdapter() { public void windowClosing(WindowEvent e)


Systera.exit(O);

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:

"What type of site is it? ,


"Site Type",

'

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:

type = new jTextField(choices[responSe3],


jPanel pane = new JPaneK); pane.add(titleLsbel);
pane.add(tltle);

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:

pane.setLayout(new GridLayout(3, 2)),

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

Es un dilogo similar al anterior, utilizado para pedir una direccin de

pane.add(addressLabel):
pane.add(address);

sitio que se utilizar en el constructor de otro objeto JTextField.

46:

530

Da 20

Lnea 30

Se crea un arreglo de objetos String llamado choices, con tres elementos

que son valores dados.

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

de opcin de upo del


sitio.

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.

usuario con Swing

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

Anvs de un conjunto de clases llamadas luchadores de e ventos.

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

Manejo de eventos de usuario con Swing

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-

Mtodos como mouseDown(), keyDown() y action(), se podran sobreponer en cualquier


programa del AWT que quisiera manejar esos eventos.

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.

Cmo establecer los componentes

Cada escuchador maneja un tipo especfico de evento, y una clase puede implementar tamos
escuchadores de eventos como sea necesario.

He aqu los siguientes escuchadores de eventos disponibles:

7Zrd P mtodos Hr del componente:


addActionListener(, Componentes de JButton, JCheckBox, JCo.boBox,
JTextField, y JRadioButton.

ActionListener

Eventos de accin que se generan cuando un usuario realiza una

accin en un componente, por ejemplo hacer clic en un botn.

. AdjustmentListener

Eventos de ajuste al activar un componente, como el

addAdjustmentListenern Componemos de JScrollBar.

movimiento de una barra de desplazamiento.

addFociisListenerf) Todos los componentes de Swing.


JRadioButton.

FocusListener . Eventos de enfoque de teclado que surjen cuando un componente, por ejemplo un campo de texto, gana o pierde el enfoque.

addltemListenero Componentes de JButton, JCheckBox, JComooBox v

. itemListener

Son eventos de elemento que se dan al cambiar un elemento, como

addKeyListener() Todos los componentes de Swing.

una casilla de verificacin.

KeyListener
teclado.

Eventos de teclado que suceden cuando un usuario escribe texto con el

addMouseListener-0 Todos los componentes de Swing.

. MouseListener

Eventos de ratn generados por clics de un ratn al entrar a (y salir


Son eventos de movimiento de ratn que han servido para

addWindowListener) Todos los componentes de JWindow y jFranm.

addMouseMotioiiListenerO Todos los componentes de Swing.

de) un rea del componente.

. MouseMotionListener

llevar un registro de todos los movimientos del ratn en un componente.

'" windowListener

Eventos de ventana generados al aumentar, disminuir, mover o

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

cerrar la ventana de la aplicacin principal.

nente al contenedor, tiene que agregarle los escuchadores de ev-enjer otra configuradoa pue

sern ignorados al ejecutar el programa.

El ejemplo siguiente crea un objeto JButton y le

asocia un escuchador de evento de accin:

1534

Da 21

Manejo de eventoide
JButton zap = new JButton("Zap");
zap.addActionListener(this);

u!uarin con Swing

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.

else if (src == sortRecords)


sortRecords();

quitProgram();

'

Mtodos manejadores de eventos


Cuando usied asocia una interfaz a una clase, la clase debe manejar lodos los eventos con
tenidos en la interfaz.

sortRecords ()

el

evento, llamara al mtodo

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

imple-menta deben tener un mtodo con una estructura como la siguiente:


publie void actionPerformed(ActionEvent evt) // maneje el evento aqu } {

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.

Quiz habr notado en el mtodo actionPerformedf )que, cuando se llama ni mtodo, se


enva un objeto ActionEvent como argumento. Hste objeto se puede utilizar para descubrir
los detalles acerca del componenie que gener el evento.

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.

Listado 21.1. Texto completo de changft.t, p . JAVA.

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 javax.swing.*; import java.awt.*;

import java.awt.event.*;

publie void actionPerforraed(ActionEvent evt) {


Object src = evt.getSource();

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:

JPanel pane = new JPanelf);

bi.addActionListener(this); b2.addActionListener(this);

536

Da 21 "

Listado 21.1. continuacin


15: 16:
17:

pane.add(b1);

pane.add(b2);
setContentPane(pane);

18: 19: 28: 21: 22:

public

static void main(String[]


=

args)

Trabajo con mtodos


{
e) {

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:

JCneckBox, JCoroboBox, jTextFieldo

35:
36:

public if

void actionPerformed(ActiortEvent souree = evt.getSource(); (souree == b1)


setTitle("Rosencrantz"); (souree =b2)

evt)

Object

37: 38:
39:

ese componente.

que genere un evento d act, n no


'

it

e 4UK;ra 't"10" '"* lentos ele accin de

else if

40:

setTitle("Guildenstern"); repaint(); }

41:
42:

vold actionPerformedfActionEvent evt, {

43:

Esta aplicacin se muestra en la figura 21.1,


Figura 21.1
La aplicacin
ChangeTtle.

,, , su
dc,

* -

"f "" "

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 12 y 13 agregan escuchadores de eventos de accin a los dos objetos


JButton.

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

Manejo de eventos de usuario con Swinq

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.*;

el... WellAdJlted extend. JFrarae lrapleraents AdJustBentUstener


' 7:
8:
9:

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:

bar -new JSer.lltar(8.i,c.n.t.nt.. HORIZONTAL,


public WelUdjusted() {
super("Well Adjusted");

valu = new JTextField)

"eW Td.rL.yout

11:
12:
13:

14:

adjustmentValueChanged[EventoDeAjuste): Toma la,forma siguiente:


public void adjustmentValueChanged(AdjustmentEvent evt)
// ..

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");

llame al mtodo getValue () en el objeto AdjustmentEvent. Este mtodo devuelve un

entero que representa el valor de la barra de desplazamiento.

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:

26: 27: 28: 2S:


30: 31:

public static void main(String[] args, /


JFrame frame = new WellAdjusted(,;
:

UNIT INCREMENT
. UNIT_DECREMENT

Es un aumento de 1 en el valor, el cual puede ser causado dando


Es una reduccin de 1 en el valor.

clics en una flecha de la barra de desplazamiento o usando una tecla de cursor.

WindowListener 1 = new WindowAdapterf) / .,. public void windowCloSing(WindowEvent e) /


System.exit(0,; ' X

32:
33:

. BLOCK_INCREMENT

desplazamiento, en el rea entre el cuadro de desplazamiento y la flecha.


Es una reduccin mayor al valor.

Es un aumento mayor al valor, causado al dar clics en la barra de

34:

frame.addWindowListener(l);
frame.pack(,;

35: 36:
37:

. BLOCK_DECREMENT
.
mienio.

frame.setVisible(true,;
'

TRACk" Es un cambio en el valor causado por un movimiento del cuadro de desplaza-

38:

' 39: '


40: 41: 42:

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:

int newValue = bar.getValue(, valu.setText(" + newValue);

46: 47: }

repaint();

540

Da 21

Manejo do eventos de usuario con Swing

541

La figura 21.2 muestra una pantalla de la aplicacin.


Figura 21.2

Eventos de elemento
, Trmino Nuevo
elmmo

' 1 Iw

!ul
j

Im xalitla (/ l i'l'Hcucin WellAdjusted.

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.

Listado 21.3. Texto completo de selectitem..


1:

Para manejar un evento de enfoque, deber implementer la interfaz FocusListener desde


una clase. Hay dos mtodos en las interfaces focusGained(EventoDeEnfoque) y

2:

3:
4:

iniport javax.swing.*; import java.awt.*;

import java.awt.event.*;

ocj.i.i.t;E-/etoDeEn-roque), de e modo toman a forma siguieme:


publie void focusGained(FocusEvent evt)
}
{

b: 6:
7: 8:

9: 18:
11: 12:

JComboBox pick = new JComboBox();


publie Selectltem() { super("Select tem");

JTextField result = new JTextField(27

bord = new BorderLayout)

ItemLiStener

publie void focusLost(FocusEvent evt)

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.addltem("Navigator"); pick.addltein(-lnternet Explorer") Pick.addItem("Opera"); pick.setEditable(false)


JPanel pane = new JPanel();

pick.addltemUstener(this);

19: 20: 21: 22:

Pane.setLayout(bord); pane.add(result, "South");

Da 21

Manejo de eventosdeus^ri con Swing

543 |

21.3. CONTINUACIN
23:
24: 25:

pane.add(pick,

"Center");

siguiente:

Y ke^, que toman la forma

setContentPane(pane);

26:

public void KeyPressedtKeyEvent evt) {

27:
28: ;

public statlc vold main(String[] args) {


JFrame trame = new Selectltem():

29:

30:

31:
32:

WindowListener 1 = new WindowAdapter(') {


System.exit(B);

public void keyReleasedKevEvent evt) {


public void keyTypeddCeyEvent

public void windowClosing(WindowEvent e) {

33: 34:
35: 36:

}
frarae.addWindowListener(1); frame.pack(); trame.setVisible(true);

evt)

37: 38:
39: 40:

41: 42:
43:
44:

public void itemStateChanged(ItemEvent evt) { Object source = evt.getSource();


if (source == pick)

Eventos de ratn
Los eventos de ratn se generan por
);

45:
46:
47:

Object newPick = evt.getltem{);

varios tipos diferentes de interacciones del

result.setText(newPick.toString() + ' is the selection.

Un clic de ratn.

usuano:

4B:

repaint();

49:

Un ratn entrando al rea de un componente. Un ratn saliendo del rea de un componente

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.

Cada uno toma la misma forma bsicade n

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

public void ouseReleased(MoseEvent evt) {


}

Los mtodos siguientes funcionan para los objetos MouseEve

544

21*

getClickCount ()
con el ratn. i

Devuelve, como un entero, el nmero de veces que dio un clic

getPoint()

Devuelve, como un objeto Point, las coordenadas x,y dentro del com

ponente en el que dio clics con el ratn.


getX() Devuelve la posicin x.

windowDeiconified(EventoDeVentana) windowlconifiB(EventoDeVentana)

getY()

Devuelve la posicin y.

Eventos de movimiento del ratn


Los eventos de movimiento del ratn ocurren cada vez que se mueve el ratn en un compo
nente. Al igual que con cualquier otro evento de ratn, cualquier componente puede generar

"indowOpene(EventoDeVentana) Todos toman la misma forma del mtodo window0pened( )


void windowOpenedfWindowEvent evt) <

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-

mientoDelRatn) y mouseMoved(EventoDeMovimientoDelRatn), y toman la forma


siguiente:

pa" Un ejemplo: la aplicacin SwingColorTest

public void mouseDragged(MouseEvent evt) //

public void mouseMoved(MouseEvent evt)

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.

"class Syvingcolorcontrols extends JPanel

Hay siete mtodos en la interfaz WindowListener:

windowActivated(venroDeVentana)
windowClosed(EventoDeVentana) windowClosing{EventoDeVentana)

implements ActionListener, FocusListener {


P

despus de

"CUChadores de rentos se deben aadir

546

Da 21 -

Manejo de eventos de usuario con Swing

tfieldi.addFocusListener(this); tfield2.addFocusListener(this); tfield3.addFocusListener(this);

-'

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:

publie class SwingColorTest extends J

"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:

JPanel pane = new JPanel()-

editar otro campo diferente, lo cual genera un evento de enfoque.


Las instrucciones siguientes implementan los intodos actionPerformed() y focusLost()

16:
17: 18:
19:
28:

RCBCSrO1=e:^Cl
pane.add(swatch);

swatch.setBackground(Color.black)

pane.setLayout(new GridLayoutd, 3, 5 15))swatch = new JPanel(); ' '>'

que se deben agregar a la clase:


publie void actionPerformed(ActionEvent evt) {

Saturation", "Brlghtness")

21: 22:

if

(evt.getSourcp()

instanceof TextField)

f rame.update(tfiis);

23:
24: 25:

pane.add(ReBcontrols); pane.add(HSBcontrols); setContentPane(pane);

publie void focusLost(FocusEvent frame.update(this);

evt)

26: 27: 28: . . 29: 36: 31:


32:

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);

publie void windowClosing(WindowEvent e)

publie void focus6ained(FocusEvent evt)

{ }

33: 34:
35:
36:

Los mtodos manejadores de eventos agregados a SwingColorControls, llaman a un mto


do en su clase madre, update(SwingColorControls).

};

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) {

a la versin creada durante el da 14, "Desarrollo de interfaces de usuario avanzadas con el


AWT".

El listado 21.4 contiene la aplicacin, incluyendo las clases SwingColorTest y


SwingColorControls.

return new Insets(18, le, 10,

ie);

44: 45: 46:

void update(SwingColorControls controlPanel)


Color c;

548

Da 21

Listado 21.4. continuacin


47:

valores = de
en

96: ;
97: 98:

//
//

obtiene
y los

cadena
enteros

de

cadena de

los

campos

de texto

48:
49: 50:

convierte

int int int


if

valuel

Integer.parselnt(controlPanel.tfieldi.getText());

'99: 100:
101:

value2 = Integer.parseInt(controlPanel.tfield2.getText()); value3 = Integer.parseInt(controlPanel.tfield3.getText());


(controlPanel == // RGB ha RGBcontrols) actualiza { HSB

tfield2 = new JTextFieldfO" j ' tfield3 = new JTextFleld("e")

= 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

109: 110: 111:


112:

60:

61:
62: 63:
64:

113:
restablece los

add(tfield3);

addfnew JLabel(12, JLabel.RIGHT))add(tfield2); "' add(new JLabel(13, JLabel.RIGHT))-

add(tfieldi);

addfnew JLabel(H, JLabel.RIGHT))'

tfieldi.addFocsListener(this) tfield2.addFocusListener(this); tfield3. addFocsListener (this )' tfieldi.addActionListener(thisj tfield2.sddActionListener(this) tfield3.addActlonListener(this)-

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 {

public Insets getlnsets() {


return new Insets(10,

116:

10, 0, 0);

117:
118:
119:

66: 69: 70:


71 :

public void actionPerformed(ActionEvent evt) {


if (evt.getSource() instanceof JTextField)
frame.update(this);

//
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

124: 125: 126:


127: 128: }

public void focusLost(Focusvent evt) i


frame.update(this);

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:

public void focusGained(FocusEvent evt) { >

79:
80: // actualiza la muestra

81:
82:

swatch.setBackground(c);

swatch.repaint();

La figura 2!.4 muestra el producto terminado.


Figura 21.4

83:
84:

85:

86:
87:

class SwingColorControls extends JPanel


implements ActionListener, SwingColorTest frame; FocusListener {

Im aplicacin SwingColorTest.

l JJBJ

88: 89: 90:


91 :
92:

jTextField tfieldi,

tfield2,

tfield3;
parent,

Resumen
{

SwingColorControls(SwingColorTest

93:
94:

String
frame =

11,

String

12,

String 13)

para que maneje nuevos tipos de interacciones de usuario.

Zd Pr SWi"8 es ch "-s robus.0 y de

95:

parent;

programudor. El manejo de eventos se ^reg. .1 programa , travs de los mismos pasos:

Por fuera el nuevo sistema tambin debe tener ms sentido, desde el punto de vista de un

/^

1550

Da 21

Manejo de eventos de usuario con Swinc,


' Unainterfaz escuchadora de eventos se agrega a la clase que deber contener los mto
dos para el manejo df eventos. . ;

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.

Este libro tiene un sitio oficial en Web: http: //www.prefect.com/java2i.

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.

Java, como su similar con cafena, puede crear hbilo.

Nota

"No dejen que acabe as. Dganles que dije algo."

ltimas palabras de Pancho Villa (1877-1923)

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

propios programas. Si separa el diseo de la interfaz y el cdigo de manejo de eventos,

1
Si-

Apndices
A Resumen del lenguaje Java

B Recursos de Java en Internet


C Configuracin del JDK

D Uso de un editor de texto con


el JDK

Apndice

Resumen del lenguaje Java


libro.

Esie apndice contiene un resumen del lenguaje Java, tal u.n.o se describe en csic

incluye una gramtica completa.

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\

de arreglos). En caso de que haya varias opciones que se excluyan mutuamente, se


presentan separadas con smbolos de canalizacin () como esto:

Las partes opcionales se indican entre corchetes (excepto en la seccin de sintaxis

t publie prvate protected ) tipo nombrevariable

556

Apndice A

Resumen del lenguaje Java

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

referirse a clases, mtodos o nombres de variables:


abstrct

nmero[ d

D]

do

import

return

void

1 +

]nmero

Tipo ouble
Con signo

nmero[e E]nmero
'carcter'

booleah
break

double else extends final

instanceof int

short
static
super

volatile
while

Expolente Un solo carcter

"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

Avance de hoja Relorno de carro

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

Las palabras true,

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 //

abarcar varias lineas*/

ste es un comentario de una sola linea

Declaracin de variables
int ! long , nmbrenle Entero (seieccionar un tipo) double , nortrenrM. FIo,:,me ^.^ ^
cnar nombrevariable

/**ste es un comentario Javadoc */

Literales
nmero

Doolean nombrevariable
Tipo int
L]

Caracteres

nombreclase nombrevariable

t-

Booleano

nmeroll

Tipo int
Entero hexadecimal Entero hexadecimal Entero octal

Qxnmhexadecimal (dXnmhexadecimal Qsnmoctal

nombrevariable

tipo nombrevariable, nombrevarxable,

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 arB 1=


&&

arg
arg

Asignacin de variables
variable = valor

arg

ar9 !
! arg

arg

ANO Jsia)

Asignacin
Incremento posterior

OR lgico
NOT lgico
AND
OR

variable** ++variable variable--variable variable variable += = valor valor

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

Rosla y asigna Multiplica y asigna


Divide y asigna

variable
variable

*=
1=

valor
valor

~ arg

Desplaza a la derecha y rellena con ceros


Complnenlo

(tipo) cosa

variable %= valor
variable &= valor

Obtiene el residuo y asigna


AND y asigna

arg instanceof clase

Conversin mediante casi


Instancia de

test ? trueOp : falseOp

variable
variable

'=

valor
valor

OR y asigna
XOR y asigna

Operador ternario (if)

variable

<<=

valor

Desplaza a la izquierda y asigna Desplaza a la derecha y asigna

Objetos
new clase();

variable
variable

>>= valor
>?>= valor

Rellena do ceros, desplaza a la derecha y asigna

new clase(arg, arg, arg.


new tW(arg, arg, arp.

Crea una nueva inslancia

Nueva instancia con parmetros


Crea una nueva instancia de
una clase annima
arg.

Operadores
arg arg + arg arg

ew tipo(arg,
Suma
Resta

arg,

Crea una nueva inslaucia de


una clase annima

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)
..}

objeto.mtodoiarg, arg, arg.

'I

Mlodo de inslancia

560

Apndice A

objeto. classmethodO

'

Mtodo de clase (sin


argumentos)

break [etiqueta J
continu [ etiqueta ]
label:

interrupcin de ciclo o switcl) Continuacin de ciclo


Etiquetado de ciclo

objeteKdassmethod(arg, arg, arg...)


Clase.mtodoclase()

Mtodo de clase

Mtodo de clase (sin


argumentos)

Ciase.ititodoclase(arg, arg, arg...)

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

A la definicin de clase se le puede apegar cuak,uiera de los' siguientes siguiente modificadores


( final ] class
nombreclase bloque

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)

new tipo] {inicializador)


arreglo/ndice] arreglo.longitud

Nuevo objeto de arreglo annimo


Acceso a un elemento

publie 1 class
nombreclase bloque

Longitud de arreglo

class nombreclase ( extends


Superclase ] bloque

Hereda de una superclase

class nombreclase

Ciclos y condicionales
if (
if i

limplements interfaces] bloque


interface nombrelnterfaz
Condicional
Condicional con else

Implemenla una o ms interfaces


Definicin de interfaz simple

prueba

) bloque

Iextends otralnterfaz,
... ) bloque

prueba ) bloaue

m m

else bloque

switch

( prueba

{}

switch (slo con tipos integer o char)

case valorinstrucciones case valorinstrucciones

Definiciones de mtodos y constructores


void:

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

(parmetro, parmetro. . . )bloque

Mtodo con parmetros

do bloque

Ciclo do

Los parmetros de mtodo aparecen as:


tipo nombreParmetro

while (prueba)

m *

562

, Apndice A

Resumendel, lenguaje Java

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

. ,

package nombrePaquete [ public ] interface

Importa todas las clases del paquete


Las clases en este archivo
pertenecen a este paquete

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

Espera un bloqueo sobre el objeto

Los constructores lucen as:


nombreclase() bloque

Constructor bsico

caten ( excepcin ) bloque


[ finally bloque )

Instrucciones protegidas Se ejecuta si se l:in/.i una excepcin


Se ejecuta siempre

nombrec. ase(parmetro,
parmetiv...) bloque

parmetro,

Constructor con
parmetros

publii

private

protected

Control de acceso

try bloque [ caten ( excepcin ) bloque ) finally bloque]

Igual al anterior (se puede utilizar la opcional caten finally ahora,


pero no ambos)

nombrec. ase()

bloque

En c! cuerpo del mtodo/constructor, utilice estas referencias y mtodos:


this nombreclsse.this
super

1
flr

Se refiere al objeto actual

Se refiere a un objeto particular de clase interna Se refiere a la superclase


Llama a un mtodo de la superclase

super.nonbreMtodo(}

this(...
super(.. .)

Llama a un constructor de la misma clase


Llama a un constructor de la superclase Devuelve el objeto de clase para el tipo
]

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

Sitio Web de este libro


Web, en la direccin siguiente:

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

Recursos de Java en Internet

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. :

dichos nmeros son necesarios p

E5S

Documentaon
970. 7-O85-6

Son artculos relacionados con el lenguaje, orientados hacia el publi

co que descubre Java por primera ve/,. ste es un buen punto para iniciar porque pre
senta temas pensando en los principiantes.

Producs & APIs

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

http://www.gamelan.com y el JARS (Servicio Java de Clasificacin de Applels ) en


http://www.jars. com.

034"'

n,lSBN:968-8S0-804-0

For Developers

un recurso establecido de soporte oficial de Sun. as como la documentacin para el


lenguaje Java en formato HTML. Aqu encontrar informacin de las conferencias
sobre el lenguaje, libros oficiales de Java y otros recursos.

ste es un pumo de partida hacia JDC (Java Developcr Conneclion),

Java in the Real Worid

tosas" del lenguaje Java en lugares tan diversos como U.S. Postal Service. UCLA
Medical Cerner, Ergon lnformatik y la misin Mars Pathfmder.

Caractersticas y lneas de tiempo sobre las -hislonas exi

Webd: los autores.

Business & Licensing

Proporciona los lincamientos para obtener licencias y regis

E| sitio de 5un
la sig lente direccin:
http-.// java.sun.com

tros para el uso de los productos de Java.

Support & Services


y venias.

Un listado de los servicios de soporte tcnico, soporte a clientes

Tal ce molo aprendi durame el

. Employment
biblioteca de clases de

Una lista actualizada de oportunidades de trabajo en ingeniera, escritu

ra tcnica, mercadotecnia/ventas y oros departamentos de Sun.

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

Un catlogo de la mercanca oficia! de Java que se puede adquirir a travs

ii
i: :
'

i:

I i'

i.

568

Apndice B

Recursos de Java en Internet

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

mejores presentaciones en su directorio de la pgina:

miembros del equipo Gamelan actualizan el sitio diariamente. Camelan tambin realiza las

http://www.gamelan.com/special/picks.html

Otros sitios Web sobre Java


Debido a que gran parte del fenmeno Java se ha inspirado en su uso en pginas Web, un
gran nmero de sitios Web estn enfocados en Java y su programacin.

Han, arcesar a otro directorio de clasificacin de npplm de Java, dirija su navegador hacia la
http://www.jars.com

Servicio de clasificacin de applets de Java

#
ft

La pgina de libros de Java


Como una forma de seleccin entre los cientos de libros publicados sobre Java, se han compi lado varios sitios de revisin que contienen listas de libros nuevos, actualizados y fuera de

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-

-iva, y otra informacin de utilidad.

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

siguiente direccin Web:

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

Directorio Java de Gamelan


Puesto que Java es un lenguaje de programacin orientado a objetos, es fcil ulili/ar en sus propios programas recursos creados por otros programadores. Antes de iniciar un programa importante de Java, debe explorar en Web en busca de recursos que pudiera utilizar en mi pro
grama.

o/rece un applet de Java que muestra a ieccin.

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.

Preguntas ms frecuentes en Java

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

Grupos de noticias de Java


Uno de los mejores recursos para los programadores de Java, tanto principiantes como experi
mentados, es Usenet; la red internacional de grupos de discusin disponible para la mayora

Oportunidades de empleo S. est aprendiendo Java como un medio mr,


omo un medio mr,

de Usuarios de Internet. A continuacin se describen algunos de los grupos de discusin de


Java en Usenet:

cuentan con una seccin dedicada , |,s ,m , ,7 ,

tas relacionadas lid con ese tema en Web C listas C77" '^^ ** **"' "^ de h
''> <>pomini<ad.s de Iralxijo .

"W* ^ a"arccen en eMc

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.

seccin Add , Resource, de Gamehm

Java. Para averiguar ema regis," ^

Pirfa tar como resultadotna eom^i ^"T'' ^"'

ellj^srArarse a!d T"'" T C'

PtIM"lllnicnlc- d>ri

' " ^ M"

' 'lirv., s.gu.e.e. en la

comp.lang. java.announce Este grupo difunde anuncios, publicidad y artculos de


nteres para la comunidad de desabolladores de Java. P.s un grupo moderado, por lo

que lodos los artculos se deben someter a su aprobacin antes de difundirlos.

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

- ^ Caveto,: 12n7Z1TMh C" U'S l|UC P"alC b"Slllxtrnet Nl d

Pero el servicio es gratuito, y hay ms de 1000

cionadas con la programacin de Java. Esto lo conviene en otro buen lugar que deben
frecuentar los nuevos programadores.

comp.lang. java.security Este grupo de discusin est dedicado a temas de seguri


dad relacionados con Java, en particular los que se refieren a la ejecucin de los progra mas de Java y cualquier otro contenido susceptible de correr en Web.

comp.lang. java, setup Este grupo proporciona un lugar para presentar problemas de

instalacin, relacionados con las herramientas de programacin de Java y temas simi


lares.

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

su adaptacin a las nuevas mquinas, las especificaciones de la JVM (Mquina Virtual


de Java) y otros temas similares.

Apndice

Configuracin del JDK


El JDK, o Kil de Desarrollo de Java, es un conjunto de utileras de lnea de coman
dos que sirven para crear, compilar y ejecutar programas de Java. El JDK requiere

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.

Al utilizar el indicador de comandos del MS-DOS, se abre una ventana en la que


puede escribir comandos del MS-DOS para navegar a travs de las carpetas de su

sistema. La carpeta de inicio estar en la carpeta \WINDOWS de su disco duro (nor


malmente en C: \WINDOWS).

Confiquracin riel JDK


Apndice

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

^ e) cual es p.ne de! JDK. E. argumento.

Verifique la instruccin path


Para asegurarse que su sistema est buscando los archivos del JDK 1.2 en el lugar correcto,

Esle comando ejecuta el interpre.


Esle

Si

csu'i

utilizan

^a un intento con este

e comando y ,c despea -

necesita buscar la configuracin PATH en su sistema. Cuando escribe el nombre de un progra

ma en un indicador de comandos de MS-DOS (como java -versin), PATH establece el sitio


dnde buscar el programa.

mensaje en respuesta:

Para desplegar la configuracin actual de PATH, escriba lo siguieme en el indicador de

distinto.

rsrt,, o un mensaje de File not

"-*--

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.

Cambie su configuracin de path


La configuracin de PATH s cambia editando autoexec.bat. que es un archivo de texto

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

Configuracin del JDK Apndice C


576

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.

Si al utilizar el compilador de Java en un archivo fuente obtiene el error Class notJ


C:\jdk1 .2\bin

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

Los usuarios de Windows pueden utiliza, el comando din, en un ;-;

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.

^^

Lpteo de cada archivo se desp.egara en 1. columna que est mas a la derec:ha * . h


apLe en el lado izquierdo de la lista se deben ignorar, ya que son nombre, que uuhza

Figura C.2
Lista de archivos en

una ventana de es de las carpen,.

cl cu,,or a, final de la l.nca

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.

Cmo reparar los

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.

el JDK (como se muestra en la figura D.3).

Configuracin del JDK

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.

Cmo cambiar la configuracin de su classpath


Figura C.3
Resultado de uno

La configuracin de CLASSPATH se debe cambiar editando autoexec. bat. un archivo de icmo

ubicado en la crpela ra?, del disco duro (normalmente es el dispositivo C).

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

CLASSPATH, podr compilar programas con xito.

Problema: no hay una carpeta JDK 1.2 en la instruccin classpath


Si encuentra una instruccin CLASSPATH en el archivo autoexec . bat que no contenga refe rencias de la ubicacin correcta de tools. jar, busque el texto V)AVA_HOME% en esa lnea.
Puede ser que encuentre %JAVA_HOME% seguido del texto UibUools. jar, conloen CLASSPATH=SJAVA_HOMES\lb\tOOls.jaroCLASSPATH=%JAVA_HOMr:S,\..\lib\

voesin scp .dos porp

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

Configuracin del JDK

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

con xito ..rogramas de muestra, como HelloDan.

Configuracin de UNIX
. login ui a lnea como la siguiente:

set path= (-/java/bin/ Spath)

ruta de e< cucin.

.login, :I comando source ser el siguiente:


source /.login

] i
i
r

Repa! acin de errores Class notfound en otras

ment

e al momento de iniciar la sesin


ver se estab,eci6 CLASSPATH,

escriba lo s,gU,en,e en e, indicador de comandos:

ec,6 un va,or de CLASSPATH. puede borrar.o escnbiendo e, comando siguiente:


blec,

PPIW echo SCLASSPATH

Apndice

Uso de un editor de texto


con el JDK
A diferencia de las herramientas de desarrollo de Java, como Visual Caf y el Java

WorkShop de SunSoft, el JDK (Kil de Desarrollo de Java) no incluye un editor de


texto que se pueda utili/.ar para crear archivos lueiile.

En este apndice aprender a seleccionar un editor para usarlo con el JDK y a confisurnr su sistema para que trabaje con el editor.

Seleccione un editor de texto


Para que un editor o procesador de palabras pueda trabajar con el JDK, debe tener
la capacidad de guardar textos sin formato.

documento o establezca sus propiedades, busque una opcin de formato como las
siguientes:

Esta caracterstica toma nombres distintos segn el editor. Cuando guarde un

Texto simple Texto ASC11

Uso

de un editor de texto coneUPK_

Apndice D

guente error'^nenuio por el compador del


, nassFont

not-found

intype

declararon.

Bs,c error .neluye un si.no de dos pu.os . ^u

archivo fuente de Java. El numero es la hm.a q^

^ ^.^

b0,n inicio, es un

^fc
,;l

a tas el mor. E n """ ' ^ " , , > tad, , d

lcxlo. Slo puede ma.u.j

*p.m un pro,. ^;':::":,"" "i,-.-

-'- -

vez en texto mpte > ve mcn,os mcn,os con con que que irab..jo y

de MU^f^. Al,mvo. Z \\- formatos fo d . bmar desde el d

sdc un M^

& tcxU)

Cmo crear una

asociacin de archivos

en
, sor.

MS-DOS, pero "cli "

Une, Une en que se cnc-cnuav

d.tando

csl presente

dio en

la carpo,.

,,,

"

,, i,lc,,rra la O
K,,a croar -a

S5

(vea la figura E.2).

Figura D.2

Figura D.1

Crt'ic/tiM / un docu
mento nuevo de texto

en una curpeiu de
Windows 95.

Se cea

. *

Uso de un editor de texto con el JDK


Apndice D

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

Sucediera algo extrao, debe borrar


nueva asociacin.

la asociacin ex.stente d. . .va.

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 borrar una asociacin de archivo


cn 0,

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

abtrf , ven, de Opciones con .,

Figura D.3

extensin de archivo
con un programa.

/^, ficha FU'1 Tyi"'s-

Para crear una asociacin de archivo .java, d los pasos siguientes:

. En el cuadro de texto Description of -java' files (Descripcin dr archivos "java")


escriba Archivo fuente de Java o algo parecido.

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

Cmo asociar un icono con un tipo de archivo


le asigna un icono a todos los archivos . java de su sistema.

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

encontrar el que est asociado con la extensin de archivo JAVA.

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-

jjc] '? -Il ' .-rgflg^'


- '.* .'

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

|.Acfci *;:;>,' -^-"-"

fichiov* '

DtfK* |

si :'.:i'V
dilereme pan desplegar todos los archivos .java.

* (""IM-Tsaml), 83 * (asterisco), 180, 305

Seleccione C hange Icn (Cambiar icono) en la ventana Edil File Type y podr decir un cu

A (circunflejo), 83
= (sigilo igual)

I ) (Havi-j), r7, US I 1 'crcheles), 112

ci>iicxiiine< de socket, 4(0

ejemplo. 2O"-211
relleno, 20y

inexiunes cu Web. I62-1(,3 ""os en Internet

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

' (si8no de exclamacin)


1(15

operador igual, 105

trazos de dilmjo. 222

deil-ile, aplicacin de
miiesira. 464-4M)

''perador csiuual ('-i

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

coordinar espacios. 21')

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),

I (t)arra verlical), X3 operador de concaienacin

lneas, 203, 223


valos, 207
polgonos

Crap!uV.s2D. ohjeuis, 21';

'unciones co|)iar/peyai. 212

AbstIacl\Vil,rio,vln(,-,O()JkiI
i AWT
acceso

operador de incrememo(++1
XI
; (puni y coiii), C6

''

agregar punios a. 2(l(>

herencia. 387
Paquetes

elementos de arreglo, 114.) 5

control de. .182-383, .186-387

dibujo. 205. 22-J-225


icciangiilos

mtodos de. 387-388,412


predeterminado. 30.S privado. 38-1-385
protegido. 385-386

/-../anotacin de comentario,
/**...*/anotacin de
comentario, 73

dibujo, 203. 223

esquinas redondeadas
r0-l-205
patrones de relleno, 204

pblico. 385. 39X-3yy


variables

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

Swing, marco ele irahujo


511-512

WAITFORCONFIRM,
eslado, 473 aplicaciones

ejemplo, 300-302
especificacin, 292-293 mrgenes, 313, ulcunce
clases internas. 411

caplurur imgenes, 24K

SwingOilorTesi. 518-520
clases,-545
escuchas de eventos. 545

cuadros de dilogo, anexar. 360

Checkers. 258
doble biifer, 259

accin, evenlos (le, manejo,


341-343,537.

color de fondo, 25? compilacin, 256

AIICapsDemo, 457-459
argumentos

HdiunO, mlodo argumentos. 341-342


definicin, 341

copiar imgenes, 24X-249


lisiado del cdigo fuente
253-256

listado del cdigo fuenie.


546-549 .,
mtodos. 545

listado del cdigo fuenie. 260-261

manejo, 148-151
pasar. 148

definicin de. 11
depurar salida. 197 desplii-pio en panlalla. 1X0 destruccin. 179-180

definicin de, 118 de lxico, 134

valor devuelto, 342 AcliunLislencr, escucha de


evento, 532, 537
aelioiil'crforimdl), mtodo, 534,537

lcnica de animacin.

ArrayTest
clase, 116

Irivia clientc/scrviiliir. 4(x


ejecucin. 482

de variables, 142-143

249-253
punorama.231-232
parpadeo

AIJGN (i'liquvla <A1MM.BT>).


atribulo, 185 alineacin

cdigo fuenie, 115-116 main(), mlodo, 117

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

lisiado del cdigo fuenie,


236-237
p.unn). mtodo. 238

salida. 116

diseos de bordes, 296-298


diseos de cuadrcula. 295-296

piular/repintar, 232-233
sonido

BaseFramc 1, 355-356
cerrar, 378

vea laminen applets: lisiados Applel, clase. 177

uddltcmO, inlodu, 278


addUncO. mlodo. 32X

ciclos. 262-264
ejecucin, 2(>2

clases auxiliares, 147-148


comparadas con appleis. 13, 174. 377 C'opyArrayWhile
cdigo fuenie, 129

<AI'I'!.ET> iliqutta (HIM1.I.


dO

repainu). mlodo. 238


ninj. mlodo. 238

uddl'oinlO, mtodo, 2116 addSpolO, mtodo, 322 Adjustmentl.istencr, escucha de


i-vcnlu, 532 adjuslnieniValueChangedl),

diseos de cuadrcula de

frmalos de archivo, 261


subproeesos

atribuios

sleepl I, mlodo. 23S

bolsa, 302-313
diseos de flujo. 293-294 diseos de naipe. 299-302

AUGN. 185
C'ODI-:. IN3. ISfi

variables de instancia. 238

Dminos, 12
cicmplo l'alimliome

definicin, 233
DigialClock, ejemplo.

inain(), mlodo. 129-130


salida. 129

mlodo 538
programa de miiesir.i.
538-54(1

mrgenes, 313
paneles, 298-299

236-239
ejecucin. 234-236

COIiUASK. 1.S7 IISHACB, 186


VSPACE. 186
ejemplo, 182-183

aichivo H'I'ML, 182- 1X3

lisiado del cklig<i Ja\,i.


I SO-181

AiiHM.-buMiilli.javu, programn,

inicio, 235 paro, 235


vea atnbii'n grficos aplicacin lcTriva (sockt't

adjusimenlValutChangedO
n.cl..d>,, 538 adininislrailores de diseo

(ejemplo aritmtico sencillo),


78-7!

Copyl'asie, 500-501 ChangcTule, 535-537 de compilacin

applels, 11-13

painid. miihlo. 181

plataformas de Windows,
28-30
sisinnas Solans. 31

asociar informacin con. 491


cargar un servidor Wch. IS4

l-'illmore. 246-247 firmas digitales


autoridades de certifi cacin. 431

ampersand (&), 83
ampliacin de nterfaces,
407-408

aliernali 'as de, 315 combina , 298-299


creacin 292

cliente/servidor). 468
cteme disear. 469-470

dase Applel. 177


colores de fondo. 2IK

definicin, 146
DoTest. 131

anchor, restriccin, 310-311 AND, operadores, 83 Andrecssen, Marc, 14


animacin
de imgenes

ColorSwirl, 240-24 I
ColorTesi. 366 diseo. 367 inicio, 368

cvililicados. A'MI ejemplo. 431-433


navegador especfico,

dcinieit n de, 268 de bord< s, 296-298


de cuad1 cula, 294-296 de cuad cula de bolsa

ejecuiar, 482 lisiado del cdigo fuenie,


479-481
servidor

EchoArgs, 149

EvenSleven. 120-121
HclloDan archivo fuente, 26-28

433-434

lisiado de cdigo fuenie.


375-377

lormaios de archivado
archivos CAU. 190
archivos JAR. I8S-I89

ere; cin. 304-307


de- rminar proporciones, 3-17-309 diw o, 303-304

carga, 243
dibujo, 245

consirucior. 470

compilacin, 28-31 ejecucin, 30-31

ejecuiar, 482
inilQnAO, niiodo. 474-475

manejo de eventos. 371


marcado de HTML. 377
- resultados de actua

archivos Zip, 189-190

muestra del applet Rumore. 246-247


observadores, 246 recuperacin. 243
rulas rclalivas de aivhivo. 244

independientes del AWT.


364-365
Info, 527-530

HTML. marcado
alineacin. I85-IS6 <APPLET>, etiqueta, 182-185
espaciado. 186

lisiado del cdigo fuenie.

eje nplo, 311-313


org mi/:ic'U>i) tic

475-479
inainO. muuio. 475
pUKVSvIlipillO, IIKMihK).

lizacin, 372-374

LabelTeM. 133 mainO. mtodo. 147

subpaneles, 369-370
comparado con las aplica ciones, 13, 174. 377

CHiipoucnles. 3O9-. II

'

panorama, 302
relleno de celdas, 31?
de flujo

472-473 QnA.lM, archivo, 474

doble bfer creacin, 257-258 definicin de, 257

NamesLoop, 127-128 NumberReader, 124-125


polticas de seguridad, 434-135

comunicacin enire

<O13JL:CT>, entnela.

run(), mtodo, 471-472 variables de insianciu, 470

gelAppletO, mlodo, 496


gelAppleiComexiO,
mlodo, 495 gelAppletsO, mtodo, 495 creacin. 177-178

187-188 <PARAM>, eiiijueta. 191-192


rompimienios de lnea. 185-186

ejemplo. 293-294

Flowl.ayouK), constructor, 294

ejemplo de applet
Checkers, 258-261

WAITFORANSWER.
eslado, 473

PopUpWindow, 354-356 SeeMeihod (ejemplo de


reflexin), 108-109 SumAverage, 150

inicio. 178-179. 233 liiniaciones, 175

1592

ndice

lnea de estado, 491.


lneas

init(), mlodo, 346


listado del cdigo fuente, 348 marcado de HTML, 348 Spots

Zip, 190 conos de tipo de archivo, 646

addl.inc(), mtodo. 328


inill. mlodo, 326

objetos File, 456


262-264

asignacin

archivos de ciclos de sonidos: reas de texto


conhol. 2X3

resiricciones a componemes
306

animacin applei Neko. 248-256


cargar imagen. 243

definicin. 356

listado del cdigo fuenie,

ejemplo de Te.MDialog,
357-360
modal, 356

329-331 maicadu de IITML. 3.11 mouseDownQ, mlodo,


327-328 mouscDragO. mtodo,
328

addSpoiO. mlodo. 322


definicin de clase, 321 iniO, mlodo, 322 lisiado del cdigo fuente,
323-324 mareado de HTML. 324

valores variables, 68, l~i 88


558

creacin, 282

asistentes, JDK Sctup, 23-24


asociacin
componentes con escuchas de
eventos, 533-534

ejemplo de, 282-283


manejo de evcnios. 344
Swing. 5I(>

Graphics, 256 observadores de imagen


246

doble bfer, 257-261 eliminacin de un objeto

dibujo de imgenes, 245

objetos de archivo de
dilogo, 361
ventanas de dilogo. 357

diferencias en plaiaformas,
268
marcos

mouseUpO, mlodo, 328 paint(), ml(idi). 329


Pciims, clase. 327
manejo de ovemos

mouseDownO, mtodo, 322 painlQ. mtodo. 323


repainu), mlodo. 323

Ar(".Slream(), mtodo, 448


argumentos

informacin con applcls, 491


asterisco (), 180,395

parpadeo, 239-243

manejo, 1-18 lichoArgs. ejemplo. M9

atrapar excepciones, 418

piniar/rcpiniar, 232-233
recuperacin ,lc maten

crcauii, 352

ches de raln, 31 y-325

teclas. 333 definicin de clase, 334


inil(), mlodo, 334

SumAveragc, cjcniplo,
150-151
pasar a:

bloques try...caich, 419-421 instruccin finally, 421-422


atribuios de eliminacin
(.Invn2l>)

243
resumen, 231-232

ilchimuin de. 352

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

rulas relativas do aichivii.


2-l-J

keyDownf), mtodo, 335 listado del cdigo fuente,


336-337 maivado de HTML, 337

aplicaciones. 148

color, 220

t i
9

applels. 191-195
mindos. 143-145
iiTasIrar y colocar

patrones de relleno. 220-221


trazos de dibujo. 222

sonidos. 261-264

de' plazamiento, 344 de ic;lado. 331-338


cjen pi de applet

paintO, mtodo. 335 vea tambin aplicaciones: lislados

definicin. 16 paquete java.awi.dnd


clases. 577

"tribuios, de clase, 38-39 atributos (HTMI.j


<APPLET>. etiqueta
ALIGN, 185

subprocesos. 233-239 aplicaciones independiemos


364-365 clases. 268, 569

acii\.ir. 363

barras Uc mens. 362


.lo-.aoiiv.il. 363

elemeiitiis do nicm.s.
.i63-.t(,4
ovenlos. 364 poor. 3I.S

t
1

ColorTest. applel. 366


diseo, 367

Se Back, 345-348

versiones Java, 176-177 vinculacin. 491 BuuonLink, ejemplo.


492-494

inierfaces. 576
ArraylmlexOulOfltounds.

han. leEvemO. mlodo,

CODE, 60. 183, 187 CODEBASE, 187


HEICHT, 60, 183 HSPACE, 186

inicio, 368

listado del cdigo luenic


375-377
manejo de evcnios, 371

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

despliegue, 353 ejemplo de una ventana


coniiM.iu.il. 354-356

3:5-331 lipr; de eventos, 318


Map2r , 225-228 mlod s. 178
NewP. lindrome

linkToO. mlodo, 494 objetos URL. 492


visualizacin. 60-61
appletviewer, herramienta, 611-61

VSPACE. 186 W1DTH.60, 183


audio

marcado de HTML. 377

<PARAM> etiqueta, 190

resullados de actualiza
cin, 372-374

eventos. 361-302

mensaje llnsigned Java


Applel Window, 353

frmalos de archivo. 261


reproduccin

subpaneles. 369-370
componemos

ocultar. 353
'fu iwiihit'-ti grlia; JPC

arihivn HTML. 194-195 Jigo fuente de Java,


93-194
p;iN2i parmetros a

apuntadores (C/C++). 100


vea ambin referencias
arcos

arreglos, 5611
elememos

ciclos, 262-264 play (), mlodo 262

agregar a coillonodoios.

269-270 reas de lexio. 282-283

accesar, 114-115 cambiar. I 15-117


lipos de dalos, 1 14

dibujo

c cmpUi, 192-195 :iParameier(), mlodo,


19!

Arc2D.Flo.it. clase 22-1

AWT (Kit de herramientas de manejo abstracto de


ventanas)

barras de desplazamiento.
2S5-2X6 botones, 273
campos de lexio.

B
liad ciimniand o error en nom
bre de archivo, mensaje, 26

mlodo ilrawArci). 208 ejemplo. 2O'--2II


lelleno. 209
archivos

iinplenicniacin. 112 muliidimensionales, 117-118


objetos, 113-1 14
programa de muestra

adminisiradores de diseo
aliernalivas, 315
combinar, 298-299 creacin, 292

PAKAM>. eliuucla. 191

279-2X2

haras de desplazamiento
creacin, 285-286

> :ilores nulos. 192, 195 poli cas de seguridad.


'>'."

asociacioner

ArrayTest, clase, 116

A? 1-435
pru. la. I 83-1 4

borrar. 457

cdigo fuenie, 115-1 16 mainO, mlodo, 117


pnniNamesO, mlodo. 116 salida, 116
subndices. 1 14

de bordes. 296-298 de cuadrcula, 294-296 de flujo, 293-294


de rejilla de bolsa, 302-313
de trjela, 299-302

casillas de verificacin. 274-277


etiquetas, 271-272 lien/os. 2X7-2SX

ejemplo, 286

manejar valores de. 286


manejo de eventos. 344-345.
538-540

cambiar not bre. 457


class.dat. 4-2

seg ridad. 177


Sel lack. 345 aolionO, mlodo. 3-16-347

lista de seleccin,
277-279

devolver lai lao. 457


frmalos

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

barras de niems. 362 llaselM-aiiiol, a|>lioaoiiiri, 3SS-3SC,

BasicPermissiun, clase, 610


beans, rea JavaHeans l>ibliolecas de ciases, .18

1594

Indi"

bloques, 118-119 definicin, 67

CABBASE (etiqueta

Cerrar aplicaciones, 378 conexiones de socket. 467


Unjas. 4.W

i
herencia mltiple, 54, 401
panorama, 48-50

<PARAM>), atributo, 190


cadenas, 76-77
clases

try...calch. 419-421
ltoole, (corgc, 42

BorderLayouK), mlodo, 297


borrar archivos 457
botones

StringSclection, 498, 576 StringTokenizer, 620


de caracteres, 76-77

certificados (firmas digitales),


430-431

simple, 54. 401

TcxiFielu. 27'). 574 TJmmable, 4I(> UlManager, 521


variables de clase, 138

disea 3fi7

iniciit, 36S

Certifcale
clase, 613

importar, 5K, 180, 395

listado del cdigo fuente,


375-377 mam-jti de cvcnitu. 371 marcado de HTML, 377
rcsiillaiis dt- la actua

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,

clculo distribuido, 488 cambio elementos de un arreglo,


115-117

inierrupcin de, 131-132 repeticin de, 128-130

creacin, 274
ejemplo, 275-277
Swing, 517

ventajas, 410

Class not fuind. mensaje di


error, 30-31, 397

Windows, 352

lizacin, 372-374

dibujar, 207
do...\vhile, 130-131
lor

JRuiinn. 5I.S

Jabberwock example, 45-47

fuentes de eiiquetas, 271 valores de variable de clase, 96


valores de variable de instancia, 94-95

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

class, palabra clave, 136 class.dal, archivo. 442

siihpaiiclf.-. 369-370 siMcnia de color KG,B, 216


tramado. 216

ruliirrs'<li< IoikIo. 218

de elcmenios, 541-5-'.'

creacin, 50-52 mtodos, 53 JI-raniL'. 51 I JLabei, 515

clave de interrupcin. 13)


privadas, 433

ColorSivirl, i|i|)lrl, 240-241 ColorTest, ippltt, 366


diseo. 367

Swing, 515-516
BR, eliqucla, 185-186 Itreaklterator, clase, 616
ItiifTcrcdliipiifSlrcaniO, mlodo, 445

instrucciones vacas. 127 panorama, 125-126

campos de texto
caracteres de ocultamiento,
280

valores de ndice, 126


whilc. 128-130
circunflejo (A), 83

pblicas. 433 ileai Uiii( i, iiHJiodii, 212

iniciali/acin, 3(>S lisi.jdo del ckIl'u fuente CiilorConiiiils. clase


.!7d-.t77

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

clases, 35-36, 62, 135 abstractas, 392-393

AbstraciColleclion. 618
agregar a paquetes. 39S

BufferedWrilerO, mtodo, 456


buildConstraintsO, mtod .,
304-309

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

clickCount, variable, 324


clientes aplicacin de Tiivia
ejecucin, 4X_>

ColoiTcsi. clase 375-376


marcado de HTML, 377

manejo de evenios, 371

lisiado del i-ilijrn lianic


479-4NI
soekels. 4fi7

resultadas de la actualizacin
-VIII-SCu!,,,!), IIICIikIi,
37-1

ii

buildKcctO, mlodo

Swing, 5)6

atribuios, 38-39, 620

Clipboard, 498

declinacin, 155-156
sobrecarga, J56
bullonO, mtodo, 273

cupucidades de Java, panora


ma, 1J caracteres de fin de lnea, 454-456

auxiliares, 147-148
UullonGroup, 517

aplicacin de muestra
499-502

liCiUiollSlio. mtodo. 373 updaiel;, mlodo. 372

buildReciQ, mlodo
155-i 56

CLASSPATH. variable. 397


compilar, 43-44

ClipboardOwner. imerfa/
499

subpanclcs, 369-370
comando cd, 28

BultonGroup, clase, 517

BultonLink, applet de r.ueslra,


492-494 bylcs, lili ros de, 445

CardLayoutO, mtodo, 299


cargar

conflictos de nombre, 396


constantes, 137-I3S Constructor, 109 Countlnstances, 3S9
creacin definicin de, -11

lisiado del cdigo luenic


156-157

definicin de clase, 155

operaciones de copiar/pegar
499

combinar administradores de diseo, 298-299


loincniariiis, 72-73

clases, 180

MyRect2, 161-162
NamedPoini, 167 Pcr.son, 159

bylcs, Hujos de, 438-44 I archivos de entrada


creacin, 44

imgenes, 243, 24S-249


cargar applcts a un servidor
Web, 184

lectura. 440-442

casillas de verificacin botones de opcin, 274-27 ' creacin, 274 devolver estado de, 274 ejemplo, 274
manejo de eventos

mtodos, 42-43 variables de instancia.


41

PriniClass, 163 PrimSubClass, 163

CMYK, sistema de color, 216 CODE (etiqueta <AI>]'lj;i>),


atributo, 183, 187

close), mtodo, 439 closePathO, mtodo, 225

comparacin eiure objelos,

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

<AITLET>), atribulo, 187 CodeSource, clase, 610

bytes, tipos de datos, 7i

Socketlmpl, 468 SiringSeleciion. 498


subclases creacin. 55-60

cdigo de mquina, ](,

269-270.512-514 alineacin, 292-293


diseos de borde. 296-298 diseos de cuadrcula. 295-296 diseos de cuadricula de
bolsa. 302-313

eventos de accin, 53*


eventos de elemento,

Ellipse2D.FIoai, 223 Error, 416 Field, 109

cdigos de escupe, 75
color

541-542

definicin. 48. 62
superclases

atributo de transformacin
220, 2I6-2IK

CAB (gabinete), archi eros,


190-191

no excluyentes, 274 Swing, 516-517

FileDialog, 361
finales, 392 FontMetrics, 214

CABarc, herramienta 190

verificar/no verificar, 274

definicin. 48, 63 indicar, 136

bsqueda del color actual.218 CMYK. sisiema de color, 216


de fondo. 218

TextDialog. 358-359

diseos de (lujo. 293-294 diseos de naipes. 299-302


mrgenes. 313
paneles, 298-299

ColorTesi, applei. 366

596

ndice

reas de icxio

comparados con Java,

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

conversin por cast

ejemplo, 282-283
Swing. 516 asociacin con escuchas de
evento, 533-534-

ejemplos, 120-12) palabra clave else. 119


operador condicional, 121-122 switch

definicin, 101 objetos a clases, 103-104 a interfaecs. 104, 405 Ciraphics2D. 219

definicin de, 497


sabores de dalos. 497-498
so|X>rtc para, 496-497

charWidlhO, mtodo, 214


clieckboxO, mtodo, 274

i
*

CheckhoxGroup, clase, 275-276


Clicckcrs, upplcl, 258
doble bler. 259

CniiKlnsiiincrs. clase, .W
eoini(lluiiiM), mtodo, 27V cuadricula de liolsa,

barras de desplazamiento creacin, 285-286 manejo de valores de, 286


Swiiig. M7-3I8
bolones

porttil, 487

tipos primitivos, 102 invertidor KCH a USt, 366


diseo del applei. 367 inicio, 368

lisiado ik-l entilan fleme,

sealizacin, 488 sitio Web, 491


distribuida, 488 lemas de tiempo de
diseo. 4X8

ejemplos. 123-125

limitaciones. 123
conectividad de redes conexiones Web, 462-463

administrador del di.sio de


comparado con el admi

260-261

iluikl.venl), mtodo, 12] ClKiee. clase, 277-279

soporte de computacin

creacin, 273
. ejemplo. 273 diquelar, 273
Swing, 515-516

definicin, 462
finjas
HitITciedRcadcr, objetos.

listado del cdigo fuente ColorControls. clase,


376-377

nistrador del diseo de


cuadrcula; 302
componentes, arreglo de 309-3II

lienzos. 2S7-2K8
listas de seleccin

464

ColorTest, ciase, 375-376 manejo de cvcnlos, 371


marcado de HTML. 377 resultados de la actualizacin

D
DalaHawirO, lili'loiln, 497 DalaliipiilSlrenniO, mtodo,
44'*

creacin, 302-303

bolones de opcin, 274-277, 517


campos de texto caracteres de

agregar a contenedores. 278

(Jcll'ilc Suipk-, apli


cacin, 464-46C
getInputStream(), mtodo,

diseo de muestra. .I l-.ii;


relleno de celdas. 313
cuadrculas
creacin, 305

agregar elementos a, 278 control, 279


creacin, 277-278
ejemplo, 278-279

gclHSBColorO, mtodo
374

DuluOulpiiiStrciiiiK), mtodo,
4-IV

(cuitamiento, 2X0
control. 2X1-282

463
UKLConnccion. objetos. 463 sockets

RCBtoHSBO, mtodo
373

administrador del diseo


de cuadrcula. 295-29(>

dalos, llnjos de

creacin, 279-280 ejemplo, 2*0-281 Swing. 51 * >


casillas de ver ficacin

Swing, conjunto, 517


listas dcsplazables
agregar a contenedores.

dul lado del cliente, 467


del lado del servidor.
467-46K

updateO, rnlodo, 372 subpanclcs, 369-370


coiivcrtlfO, mtodo, 124

administrador del diseo de cuadrcula de bolsa.


304-307

aplicaciones *le muestra

Ueadl'nmes. 451
WritePrimcs, 450-451
cieacin. 449

t 3

creacin. 2 74
ejemplo. 2 4

2S4

converlNumQ, mtodo, 125

diseo. 303-304

agregar elementos a. 284 control, 285


creacin. 283-2S4

implemcntacin de la

coordnate spuecs, (grneos),


219

proporciones rengln/colum
na, 307-31)9

lectura, 449

dalos, sabores de
cieaciiin. 497-49S

estado de ci:volucin, 274


no excluye ites, 274

capa de transpone. 46S


Trivia, aplicacin. 468

Swing, coi junto, 516-517


verifiejr/n verificar, 274

ejemplo, 284-285
mtodos abreviados de

diseo, 469-470

coordnale syslem, (grficos), 202 copiar/pegar, operaciones


Clipboard, 498-499

relleno de celdas. .113 cuadros combinados


eventos

lifliiiicii'in ik'. 497 declaraciin


arreglos

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

de elemento, 541-542 cuadros de dilogo


anexar a los applets. 360 creacin. 357, 523-524

arreglos de irrcglns, II7-MS variables, 112-113


clases, 136, 561 consianies, 137-138

anchor, 310-311 fill, 3)0 gridheight, 306 gridwidth. 306 gridx, 306
gridy. 306
396

servidor, 470-479 conexiones en Web,


462-463

objetos transferibles
cadenas de texto, 498 definicin de. 497

aplicacin de ejemplo,
527-530

creacin. . 71 ejemplo, 171-272

imerfaces, 405-406
miudos. 139. 561-562
constructores. 562

conflictos de nombres (clases),


constantes, 137-138

fuentes, 2 ' I Swing, ce ijunto, 5!5


le.un. 271
vcniajas. !71

sabores de datos, 497-498


soporte para, 496-497

de confirmacin. 524-525
de entrada. 525

weightx. 307
weigthy. 307

Constructor, clase, 109


contenedores
componentes, agregar.

copyArcO. mtodo, 212

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

invisibles. 4> ) JavaBcans

sugerencias, 522
ventajas. 486
componentes de software, vea
componentes

269-270 definicin. 268


continu, palabra clave, 132 conversin

corchetes ([ ]), 112

API de ii rospeccin.
I'H)

corinr/pcgiir, operaciones Clipboard, 498-499

objetos de dilogo de archivo


361

API de m inejo de

comunicacin entre iipplcls

aplicacin de muestra,
499-502

TexiDialog, ejemplo,
357-360 ventanas, 357

de instancia, 136-137
mltiples, 68

eventos 490 API de pe sistencia, 490

getApplet(), mtodo, 496 getAppIeiContext(). mtodo,


495 .

de texto a maysculas. 457-459


de tipos primitivos a objeios.

ClipboardOwner, interfaz,
499

decrcmento, operador de (),


81

arquilectu a, 487

getApplets(), miodo. 495

104-105

objetos transferibles
cadenas de texto, 498

changcColorO, mtodo. 347 ChangeTitle, aplicacin,


535-537

degradados acclicos, 220 degradados cclicos, 220


dclelcO, mlodu, 457

charAtO. mtodo, 98

dcIcleOiiExiK), mtodo. 457

"I5-'

|598

ndice
599|

desarrollo, historia de Java endoso de Netscape, 14


navegador Hoava, 14

Digital Clock, applct

DOS. Edil, 584 seleccin, 641-643


ejecutar archivos de sonido

ciclo while, 237 j listado del cdigo fuente, '


236-237 mlodos, 238

mensajes

Class not found, 30-31,


634-639

etiquetas (HTML)
<APPLET>

! -t

instruccin finally, 421-422


jerarqua de clase Error, clase. 416

i--i'

proyecto Grcen, 13-14

ciclos. 262-264

versiones de Juva, 15
desborde (asignacin de variable), 88 descargar

play(), mlodo, 262


elementos en arreglos acceso, 114-115

Comando o nombre de
archivo incorrecto, 26 vea tambin excepciones

ALIGN, lribuio, 185

variables de instancia. 238


dir, comando, 29 disablc(), mtodo, 363

CODE, atributo, 183,


186

Excepiion, clase, 417


Tlirowable, clase. 416
lanzar, 422-427

cambio, 115-117 upos de dalos, 114


elipses, dibujo

escribir en flujos, 439

CODEBASE, ulribulo.
187

lOException, clase, 417

CABarc, 190
JDK, 22-23 JFC, 510 despliegue applcts applclviewcr. 60-61 painlO, mc*lodo, 1SU

diseo
clases, 36-38 conexiones de sockel,

con almacenamiento en bfer,


446-448 ,

drawOvalQ, mlodo, 207

469-470 cuadrculas, 303-304


jerarquas ik' el.'isc. 51-52

Ellipsc2D.Float. clase, 223


elsc. palabra clave, 119
Kili|>sr2l>.I'lmil. elusc. 223 empleo, oportunidades, 571

de caraclcres, 455-456 de salida de archivos,


443-444 cseiieliiis de eventos, 5.12

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

definicin de. 416


e\cc|Vnnes explcitas. 424
e.uvjvjones implcitas.

424
lemas de herencia l.'.s -I.1

dlsposcO, mlcido, 25<>


do...while, ciclos, 130-131 doble bfer
creacin, 257-258

ActionListcncr, 537

JDK, parmetros de configuracin ventanas, 353

cnable(), mtodo, 363


encapsulacin, 383 enfoque
manejo de eventos

AdjusimcniLisicner

KvenSlevcn, programa de
prueba, 120-121
eventos de ajuste, manejo, 538-540 eventos ele clic, iiumcj

Ihi'ous, palabra clave,


423

adjusnenlValueChanged().
mlodo, 538
piograitia de inucslra

limitaciones, 429

des(roy(), mlodo, 179 destruccin de applets, 179-180


diagonal (/), 72

Clieckcrs, ejemplo del applcl,


258-261 definicin, 257 limitaciones, 257 doble clic, eventos de,
324-325

Mall'nrmedURLHxcepiion,
417 ma/)cjaJures afiidatlos,
427-42.S
panorama. 436

gciFocusO, miodo.
343-344

538-540

asociar componentes con


533-534

clemenlo, 541-542
niMiiscIJowiio. inioiii)

1
f

DialogO, mtodo, 357


dibujar

losiFocusQ, mlodo,
343-344 entrada/salida ilujo.s

definicin de, 531

319-320

arcos, 209-211 Arc2D.Floai, ca e, 224

FocusLisiencr, 532, 540


importacin, 533 IlemLisicner

mouseUpO, mtodo, 320

Dminos applct, sitio Web, 12 dol, notacin, 93-94 DoTest, programa de muestra, 131

Spois, applet de muesira


321-324

pasar, 424-425 tiempo de ejecucin. 417

drawArcQ. mlo lo. 208


espacios coordenadi >. 219

almacenamicnio en bfer.

445-448
cerrar. 439

lemSlaleChangedO,
indlodo. 54 I

eventos de ratn, 3J9, 543-544

verificacin de consistencia.
4IX

imgenes, 245
lneas

bolones mltiples del ratn


337-338

exisisO, mtodo, 457


e\|)ii'si<ines

creacin, 438 definicin, 438 de hvies, 438-440


do caracteres. -438.

programa de muesira,

drawLineQ, mt >do, 203

irawArcO, mtodo, 208


iraImage(), mlodo, 245-246
irawUnel), mtodo, 2(13

541-542

doble clic, 324-325

Une2D.F!oai, c ase, 223


valos

KeyLisicncr, 542-543 MouseLislener, 543

Lines. applei de muesira,


326-331
mtodos

definicin. 66. 77 notacin de punto, 94 valores devueltos, 66. 77


W'i/ iainbin operadores

drawOval(), m odo, 207

lrawOvalO, mlodo, 27 IrawPolygonO, mlodo,


205-206

452-456 de datos, 44y-451 de entrada de archivos,

MouseMoiionLisiener,
544

Ellipse2D.FIoai. clase,
223

mouscDownO, 319-320
mouseDragO, 325

exlends, palabra clave, 136,


407

polgonos, 206, 22 i drawPolygon(' mlodo.


205
Java2D, 224-! 25 rectngulos, 204- .05

i'rawRect(), mtodo, 203


( rawKoundRect(), mtodo,
204

440-442 de salida de archivos, 443444

WindowLisiener, 544 espacio coordenado de usuario


219

mouseEnterO, 326
mouseExiK), 326
mouseMoveO, 325
mouseUpO, 320

espacios de color, 216


estilos

< raString(), mtodo, 200, 214

escribir a. 439

*
(ib
b
j

filtro, 439, 444-445


lectura, 438 enumeracin de listas enlazadas, 408-409

de enlaces (trazos de dibujo)


222

Spots, applet de muestra,


321-324
excepciones atrapar, 418

drawRcctO, n ctodo, 203


Reciangle2D. :loat, clase. 223
sistemas coorder idos, 202 icxio, 200-201 transformacin, :s|>eeill-

de lapa final (traaos de


dibujo), 222
cambiar lexio. 271 ciclos. 132-133 creacin, 271
eti(|iii'l:is

f oplion (comando de jar). 189 feedjabberwock(), mtodo, 42 Field, clase, 109


filcO, mtodo, 456

IfhoArgs, aplicacin, 149


clitores (lexlo), 26 asociaciones de archivo

envo de formas, 483 KOKKxccplion, excepciones,


417

bloques lry...calch, 419-421


creacin, 427
t'lliulil (llili/iiil.is y cii;illiKi
no, 42X-429

File, objeto. 456


l'k'))i:ii<>j!<), mtodo. .Vil
l''il>l>iuli>K, cluse, .Uil

^^

cacin de airih nos


color, 220 patrones de i ;lleno,

borrar, 586-587 creacin, 585-587

equalsO, mtodo, 105 errores, 435


Error, clase, 416

ejemplo, 271-272

definicin. 414

220-221

iconos d tipo de archivo.


588

eiiqueas de boln, 273


fuentes, 271

EOFExcepiion, 417
errores de compilador,

KilelnpulSti-vamO, mtodo, 440 FiieOutputStreamO, mtodo,


443

manejo iradicional de errores,

trazos de dit jjo, 222

Bloc de notas, 584

414-415

Swing, 515
ventajas, 271

429-430
explcitas, 424

FileReaderO, mtodo, 453


FileVVrilfrt), mtodo, 455
litro de nujiK, 439, 444-445

implcitas. 424

lili, restriccin, 310

; f;

600

ndice

nilArcO, mtodo, 208 Fillmorc, applcl de muestra,


246-247 fillOvnK), mtodo, 207

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

gelJnsctsO, mtodo, 313 gellteniO, mtodo, 279


ell.iiliclo, mtodo, 27J

atributos de transformacin
color, 220 220-221 trazos de dibujo, 222 elipses, 223
patrones de relleno.

guin (-), 81

gelKeyCharO, mtodo, 543

GUIs (Interfaces Grficas de


liMiariiil. 268-269
administradores de diseo

aplicaciones de muestra. 450-451


creacin, 449

fillPolygonO, mtodo. 205-206


ni!Rect(), mtodo, 203 flIlRound RectO. mtodo,
204

leer, 449 de lectura, 438


aplicacin de muestra,
441

getl'arcnio, mtodo, 360 gctl'oint), mtodo, 543

getMessageO, mtodo, 419 SelParamelerO, mtodo, 192

alternativas de, 315

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

gelSelt-cledlndexO, mtodo, 279

Oaphics2D, objetos, 219 GU1, componentes

funciones copiar/pegar. 212


reas de le.vio. 282-2X3

espacios coordenados. 219

combinacin, 298-299
creacin, 292

de bordes, 296-298

de cuadrcula. 294-296
de cuadrcula de bolsa, 302-313
de Unjo, 293-294

finalizeO, mtodo, 168-169


finalizer, mtodos, 154.
68-169

Gainelan, sitio Web, 32,568-569 generadores de nmeros


aleatorios, 91

gelSizeQ, mtodo, 212

gelSelectedltemO, mtodo, 279 getSelectedltcmsO, mtodo, 285

barras de desplazamiento
285-286 botones. 273
campos de lexio. 279-2X2

FocusListener, escucha de
evento, 532

Tinally, instruccin, 421-422 firmur cdigo, vea firmas digitales


firmas (digitales)
auiortdades iic ccnilicacin. 43 1

CcneralPath, clase, 225 geometra, vea formas gclAccessibltContexli), mtodo, 523 iclActionCoimnandO. mtodo,
537

focusI.o.sK), mtodo, 540 l'oldcr slruclure (paquetes), 398


folders, cretcin/lmrrur, 457

elS'vsieniCliplloiirdO, mtodo
49S

gclSourceO, mtodo, 534, 537 getStalc'O, mtodo, 274 gelSialeChangeO, mtodo, 541

de naipes. 299-302 especificacin. 292-293


migenes, 313 p.moiaiua. 292

casillas de verificacin
274-277

nei.SystemUiokAndFeelClass
Niinu-O, mtodo, 52 gelTe.vl<),mtodo, 271, 2S1

etiquetas. 271-272 lienzos. 287-2XS

aplicaciones independientes
del AWT. 3i>4-3o5

listas de seleccin.
277-27"

f'olor'li'vi. applei de muestra.


Mi(, aciuali/.i.-iii de resolla dos. 172-.74 diserto. 367

certificados, 430

FonK), mtodo, 213


FonlMetrics, clase, 214
fiir, ciclos, 125-126 ejemplo. 127-128 euores comunes, 127

ejemplo, 431-433
navegador especfico, -133-434
panorama, 4M)

getAdjustmentTypeO. mtodo,
538
g*t Ap|ilt'l('oi>le\l( J, mtodo. 491, 495

final, tipo de datos, 71

flujos abrir en Internet BuferedReader, objeh s.


4(>4

instrucciones vacas. 127


formas,
arcos

getAppletlnfoO, mtodo, 491 getAudioClipO, mtodo, 262


getClass), mtodo, 107

gelToolkilO, mtodo, 498 getValueO, mtodo. 286 j;el\Vdf|i(), mtodo, 245 elXO, mtodo, 543
KelVO, mtodo, 543

listas dcspla/ahles 283-285


conos
creacin. 514

iniciali/aciii. 368

definicin. 514 Pardon My lions! Web


site, 515 lneas. 203, 223

Iim.uJo del cdigo liiente,


375-177

(osling, James, 13
Roil-ocusO, mtodo, 343
< ni leos
animacin

manejo de esculos, 371


marcad,, de IIJML. 377

dibujo. 208

gel('lickCuiiiit). mtodo. 543 l>elCodeltusv(), mtodu, 244


gcfColor), mtodo. 218 getCrossl'iatforniLookAndrccl

GeiFilc. aplicacin de
muestra. 46-J-466

ejemplo. 209-211
relleno. 209

Map2D, ejemplo, 22.V22.V


valos, 207
panorama. J 99-200

stihpaiieles, 369-370
componentes

app.'ct Neko. 248-256

agregar a contenedores.

getlnpuiStreamO, ml ido,
463
objetos Je conexin 1. RL.

lneas, 203 valos, 207


polgonos

ClassNameO, mtodo, 521


getCurrnIO, mtodo. 277 golDocumcntllaseO, mtodo, 244

cardar imgenes, 243

4fi3

agregar puntos a, 206 dibujo, 205 rectngulos


dibujo. 203 esquinas redondeadas.

cerrar. 439
con almacenamiento en t ifer
creacin. 445-446

getFile), mtodo, 466 getFilc, aplicacin de muestra


HufferedReadcr. objeto, 4(>6 GeiFile), constructor. 466

dibujar imgenes, 245 disposicin de objetos Graphics, 256 doble bfer, 257-261 observadores de im
genes, 246

polgonos
agregar punios a. 206

2n9-27O

reas de texto. 282-283

dibujo. 205. 224-225


rectngulos

barras de desplazamiento.
285-2X6

dibujo. 203. 223

botones. 273
campos de texto, 279-282

escribir er.. 446-448


lectura. 445

panorama, 231 -232

orillas tedondeaJav 204-205


rellenar. 204

casillas de verificacin. 274-277

204-205
relleno, 204

creacin. 438 definicin, 438

geiInputSircamO, mtodo,
466

parpadeo, 239-243

pintar/repintar 232-233
recuperacin de imgenes
243

sistema coordenado, 202


texto. 200-201

etiquetas. 271-272 lienzos, 287-288


listas dcsplazables, 283-2X5

sistema de coordenadas. 202


formatos de archivado

de byies, 43^-440
flujos de entrada de

listado del cdigo fuente. 464-465


manejo de error, 466

rea tambin AWT; Gl'ls

CAB, 190 JAR, 188-189

rutas relativas de archivo


244

archivos. 440-442 flujos de salida de


archivos, 443-444 de caracteres, 43S. 452

(Jraphics2D, clase, 219 Green, proyecto, 13-14


Cridheighl, orden, 3(16

listas de seleccin, 277-279


cuadros de dilogo agregar a applets. 360

Zip, 189-190 FrameworkO, mtodo, 512


fuentes, devolver informacin acerca

readl.ineO, mtodo, 466


run(), mtodo, 466 getFontMetrlcsO, mtodo, 214

subprocesos. 233-239
arcos

(>'ridLayoul(), mtodo, 295


gridvtidth, restriccin. 306
Cridx, restriccin. 3(Wi

archivos de cscritun de icmo, 455-456

gelHelglilO, mtodo, 214, 245

dibujo, 208, 224 ejemplo. 209-21 ] relleno, 209

aplicacin de muestra.
527-530

de, 214-215

gctlISHColort), mtodo, 374


getlnputSlreamO, mtodo, 463

gridy. restriccin. 306


grupos de noticias, 32, 570

confirmar dilogos, 524-525

1602

ndice

creacin, 357, 523-524

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

marcado de HTML, 377

archivo fuente, 26-28


compilacin

HTML (Lenguaje de Marcado


de Hipertexto)
etiquetas

subpaneles; 369-370

incremento, operador de (++),


8J

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

ni, tipo de dalos, 70

dilogo, 361 TextDialog, ejemplo,


357-360

administrador de inlerfaz de usuario, 52!


reas de texto. 516
barras de desplazamiento,

<APPLET>. 182-186 <UK>. 185-186 <PARAM>, 191-J 92

plataformas de Windows.
30
sistemas Solaris, 31 herencia

<OBJECT>, 187-188

inlerfaces, 54-55, 62, 400-401 ampliacin, 407-408 ClipboardOwner, 499. 576


i-iimii liptulc vaiahlc. 4(14 comparadas con clases, 402

ventanas de dilogo, 357

diferencias en plataformas, 268


manejo de eventos

517-518

indcxOfO, mtodo,!) indicador de comandos, 25 '"'o application, (ejemplo de


inicio

conversin por casting de


objetos en. 405 creacin. 4O5-4IK)

bolones, 515-516
bolones de opcin, 517 campos de texto, 516

control de acceso. 387 definicin de, 48 excepciones. 425-426 jerarquas de clase


creacin. 50-52 diseo, 52
iconos

"ifiiili/cirn de appleis, 17
applcls. 178-179. 2.1.1

cuadro de dilogo), 527-5JM

ilc iisuaiio, 1111 (il)ls

elics de ratn. 319-325, 543-544


ChangeTitle. aplicacin de muestra. 535-537

grficas de usuario.
>: CHIls

casillas de verificacin.
516-517

asociacin con tipos de


archivos, 588
creacin, 5 14

descripciones de componentes, 522

subprocffsos. 235 i'iitj, mtodo


Keys. applel, 334 Lines. applel, 320

ImaecObscrver, 246 implenicniacin


ejemplo. 408-4IW

de accin, 341-343,537 de ajuslc, 538-540


de rea de texto, 344 de barra de

mtodos, 53
mltiple, 54, 401 panorama. 48-50

etiquetas. 515 listas de seleccin, 517


marco de trabajo de

definicin de, 514

l'ardon My Icons!, sitio Wcli


515

sobreponer, 178
ii'iiUoAd, niiou1,,, 474.475

inlerfaces mltiples.
403-40-1

sencilla, 54. 401 subclases, 55-60


herramientas CABarc, 190 jar, I S!

desplazamiento, 344-345
de elemento , 541-542

aplicacin, 511-512
mtodos abreviados de teclado, 522
nombres de componentes,

i' . instrucciones

Spots, applel de muestra. 322

inlerfaces sencillas,
lOMtl.i

ejemplos, 120-121 clse, palabra clave, 119 imgenes


carga, 243, 248-249

nscrlTcxio, inlodo, t.\


instalar el JDK

KiiMiiable 2.14

de enfoque, 343-344, 540


de lista desplazable.
344

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.

Sugerencias, 522 SwingColorTesi, apli cacin. 518-520


ventajas. 510-511
ventanas

observadores, 246
recuperacin, 243

historia de Java endoso de Nelsca|X.\ 14 Green. proyecto 13-14


Hoava, navegador, 14

inslanceof, operador, 84 ]()7


535

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

rulas relativas de archivos,


244

531-533 establecer componente, 533-534 handleEvcntO, mtodo,

instancias, vea objetos instrucciones


bloques, 67, 11S-I |y,
419-421

Infei-rupledExceptinn,
excepciones, 41')

ira tambin grficos iniplcnu'iuir

introspeccin API (Javal)eans)


490

versiones de Java. 15
Hoava, navegador. 14

despliegue, 353 evenios, 361-362 ocultar, 353


ventana desplegablc, ejemplo, 354-356

ImugcObscrver, inlerfaz, 246


interfaces

HSli (tono, matiz, brillante/)


sistema de color, convertir a,

carcter de terminacin, 66
ciclos

introspeccin, vea reflexin invocacin remola de mtodos


irallMI

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

invaking, inhKlo, 96-98

325-331.543-544
SetHack. applel de
ejemplo, 345-348

Window, clase, 352

geiHSBColorU. mtodo.
374

inlerfaces sencillas,
402-403

isKdil:il)le(). mtodo, 282 Henil.isliiur, esculla de even


tos, 532

KGBloHSHO. mtodo.

SuingColorTcsl, aplicacin. 545-549 tipos de evento. 318


marcos

soefcets de capa de transpone


4>8

condicionales. 560-561
definicin de. 11 y if, 119-121
operador condicional.

ilemSiuleChiii<>ilo. mlodo,
541

H
handlcDeselccK., mtodo, 344

373
updaieO, mtodo. 372

despliegue del applet. 367


inicio, 368

implemento palabra clave ">34 402 " '


impori, iiislruccmn, 395-3'M importacin
clases, 58, 180,395
escuchas de eventos. 533
paquete del AWT, 268 paquetes, 59. 395-396

121-122 swiich. 122-125


expresiones. 66. 77

BascFrame, ejemplo, 355-356


creacin. 352

handleEvenlO, nlodo, 318319, 338-340

listado del cdigo fuente ColorControls. clase.


376-377

handleSelectO, mtodo, HEIGHT, atril .uto (<APPLET>


etiqueta), 60

finally, 421-422 importar. 395-396


paquete. 3')8 swiich

Jalibertvuck, ejemplo de clase


atributos. 38-41 cdigo fuente, 42-47
compilar. 4.)-44

definicin, 352 dimensionar, 353

ColorTesi, clase, 375-376 manejo de eventos, 371

resumen del lenguaje Java. 563

ejemplos. 12.1-125

definicin de clase, 41 ejecucin. 4-1

I 604

indiice

ndice
Swing, administrador de inicrfaz de usuario. 521 aplicaciones, 511-512. 518-520

6051

mtodos, 39-42
fecdJabberwockO. 42.48

persistencia, 487 '

porttil, 487
propiedades de tiempo
diseo, 488

Line2D.Float, dase, 223,-

ln*a de comandos (MS-DOS)


cd, 28 ,.

ColorTest, applet

main(), 45-47

showAuributesO, "*3. 47
JAR (java archive), nrchivos,
1X8-1H9

sealizacin, 488 soporte distribuido de


computacin, 4XX
javac

dir,29

, ; ', ...

.-.. , . .

i . ColorConirols, clase,
,-: 376-377

manejo de eventos, aplicaciones

componentes, 512-518
cuadros de dilogo. 52.V5.iO

lnea de estado (applets),

ColorTest, clase, 375-376


control de acceso a paquete,

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

manejo de eventos, 531 -545


mtodos abreviados de

CopyPaste, aplicacin,
500-501

WellAdjusted, 539
Map, applet

sisiemas Solaris, 31 JavaScript, 32

teclado, 522

Countlnstances, clase, 389


Checkers, applet, 260-261 DigitalClock, applet,
236-237

archivo HTML, 201


cdigo fuente de Java,
200,210-211 Map2D, applet

panorama, 509 ventajas, 510-511 ii-j uunbit'ii AWT: grficos


Jfraine, clase, 511 Jlabel, clase, 515

Line2D.FIoat, clase, 223

Java FAQs, sitio Web, 569


Java.I'luR-in, 19, 176
Java, porttil. cdigo fuente. IX mquina virtual, 17-18 lemas de desempeo. 19 \ enlajas, 16-17

.lavaWorld, sitio Web, 569


.lliullon, clase, 515-516 JcomboBtx, clase, 517
Jchecklox, clase, 516

Unes, applet de muestra


listado del coigo fuente,
329-331

EchoArgs, aplicacin, 149


ejemplo aritmtico simple, 78-79 ejemplo de mlodo
constructor. 159

archivo HTML, 227


cdigo fuente de Java,
226-227 mtodos

marcado de HTML, 331


mtodos

JDBC (Conii.cividad de Java


Datbase), 5.S-506

JpasswordKield, clase, 516


JijdioKullon, clase, 517
Jscrollllar, clase, 517-518

addLineO, 328
inii(), 326

definicin, 140-14]
llamar a, 97 .

JDK (Kit de Desarrollo de


.lava) c<>iii"ii:iiiaan ile Windows OVWindims NI, 573-57? Class nol found. errores,

Java21), 218 ,,|>PU-i .le n.m-ra. 225-22X


3,b, 22-1

JlritArea, clase, 516


.lli-\ll"i-lil. clase. 5lh

mouseDownO, 327-328 mouseDragO, 328


inouseUpfJ, 328

Fillmore, applet, 246

flujos, aplicaciones BuTerDemo, 446-448


ReadByies, 441 ReadPrimes, 451 ReadSource, 454-455 WrileByles, 443

MyRect, clase, 155-157 MyReei2. clase, 161-162 NamedPuim, clase, 167 Neko, applet, 253-256
NewPalindrome, applet de
muestra

paintQ, 329

elipses, 223

espacios coordi lados. 219 Giaphics2D, obelos, 219


lincas, 223 polfonos, 224-225
presentar airthi tos

Points, clase, 327


lineToO, mtodo, 225 . krvDmvnl), mtodo, 332
Keyl.istencr, escucha de cenlo, 532

576-57S

CI.ASSI'ATH, instruccin.
578-580

LinkedList, clase, 619

IinkToO, mtodo, 494


list(), mlodo, 284 listados

WritePrimes, 450-451 Fom.Melrics, ejemplo de


clase, 214

archivo HTML, 194-195


cdigo fuente de Java, W2-I94

PATH. instruccin. 575-576

OBJECT, etiqueta. 188


objetos comparacin, 106
creacin, 91

color, 220

kcyl'ressedO, mtodo, 542

patrones di relleno.
220-221

configuracin UN1X,
58U-5XI

keyUeleased), mtodo, 543

adniinistradores de diseo
de bordes, 297

GetFile, aplicacin. 464-465 GU1, componentes


reas de lexto, 282-283 barras de desplazamiento,
286

u~.

Keys, applet de muestra. 333


definicin de clase. 334
listado de] cdigo fuer.ie.
336-337

trazos de
JavalU-uns

ibujo, 222

copiar, 22-23
disponibilidad. !5
instalacin

de cuadrcula, 295-296
de cuadrcula de bolsa,

l'alindrome, applel de muestra


archivo HTML, 182

rectngulos.' 23
comparada c -n Java.

311-313 de flujo, 293-294 de naipes, 300-301

bolones de opcin,

cdigo fuente de Java,


181

asisiente, 23-24 probar la instalacin.


25-26

marcado de HTML, 337


mtodos

276-277
botones, 273
campos de lexio, 2SI

488-489 definicin de 4S7

iniert;/ de ii nai io/eonsuli.lacin All.4'J0


introspecci i. APIs de,
491)

sistemas Solaris, 24-25 Windows 95, 23-24 Windows NT. 23-24 nmero de versin, verilicar.
574

initO. 334 keyDownl). 335 painK). 335

AllCapsDemo, aplicacin,
457-459
115-116

Palindrome, ejemplo de clase


cdigo fuente, 59

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

kcylmil, utilera 432

kcyTj ped(l, mtodo, 543 kcylipO, mtodo, 332

BseFramel, aplicacin,
355
bloques iry...finally, 421-422

manejo de i ventos, Al'ls de.


-. 490

lisias de seleccin, 27S

panorama, 21-22

listas desplazables, 284 HelloDan, aplicacin, 27


instrucciones

persistencia APIs de, 490


sjiio Wch, 4JI
ventajas arquilec ura compacta.

JDK, edicin de parmetros de


configuracin

BunonLink, applet, 493-494


ciclos
de audio, 263-264 labeU), mtodo, 271 do...whle, 131 i

Cl-ASSl'ATH. 579
PATH, 575

if, 120
swilch, 124-125 Jabberwock, ejemplo aplicacin, 45-46

4S7

JFC (Clases Fundamentales de


Java)

mecanis nu de descul rimiemo

l.abelTest, programa de
muestra, 133

liquelados, 132-133 for, 127-128


while, 129

ScopeTesl, programa, 142-143 SeiBack, applet, 348 Spots, applet, 323-324 SumAverage, aplicacin, 150

arrastrar y colocar, 16
descarga, 510

: ..,

clase, 42-44 Key.s applcl, 336-337

de ca e, 4S7

lienzos, 287-288

ColorSwirl, applet, 240-241

LinkedUs!, aplicacin, 408-W9

ndice

6071

Swing

lnlb. aplicacin, 528-529


in:irco de trabajo de la
aplicacin, 511'

loslFocusO, mtodo, 343

de enfoque, 540

loslOwnershipO, mtodo, 499 llamar a mtodos, 96-98, lO


llves({ |). 17. 118

de teclado, 542-543
de ventana, 361-362,
544-545

margenes

nsclsQ, mtodo, 313


Insets, clase, 572
niens
activar, 363

privado, 384-385
protegido. 385-386

llllRoundRecn). 2(H

final, inclndok. 391


finalizadores. 154. Iti8-lp9

pblico, 385 herencia. 387


convenliO, 124

SwingColo.Test. apli
cacin. 518-519

liandleliveiilO. inuxlo.
318-319

finnli/c(). lftS-l(i9. I7J


firmas. 139. 154

Swinger, aplicacin, 513

TextDialog, clase, 358-359


Trivia. aplicacin de.

M
Macmillan Compuler

JavaBcans. 490
niens, 364 mtodos

barras de, 362 definicin de, 362


desactivar. 363
elementos de

convcnNumQ, 125 copyArea). 212


coiintlienisO. 279

HowLayouiO, 293-294

IbciisGincdl 1.540
lociisl.osnl. 540

(.lenle, 480-481'
definicin. 136

actionl'crformedl), 534 gctSourceO, 534


mstanceof, palabra clave. 535

l'ublishing, sitio Web. 277,


566

creacin. 363-364
tipos. 363
eventos, 364

changeColorO. 347
charAtO, 98

l-oni(). 213

servidor. 475-479 variables de instancia


prueba/modificacin.

charWidlhO, 214
chcckrxuO. 274

FrameworkO. 512 gciAecessibleCiiniexK). 23 gciAciionComniaiidd. .:"

mainO, mtodo
firma, 147 Jabberwock.java, ejemplo.
45-47

movimientos de ratn. 544


Lines, applet de muestra.

Melliod, clase, 109

mlodos, 39-4(1, 62, 98-99,


145-146

checkEvcn). 121
Dalal-lavorO. 497

geiAdjtisinieniT\pc( i, 53S geiA|ipleiCniiicMl I. 491. 495


gelApplellllIrtl 1.491

94-95

WritePrimes, aplicacin, 430


lisias

326-331

TriviaServer, aplicacin, 475 makcRangcO, mtodo, 140-141


MalformcdLKl.Kxccplioii,

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

agregar dmenlos a. 27K


coiinol. 27')

excepciones, 417
inanejadoios de excepciones anidadas, 427-42X

immwl-.xiul. muiiio.
.'2o

valor devuelto, 342

listas de parmetros. 141)

lilis, palabra clave. 141-142 deleteO.-457 dclclr()ul:xii(). -157


dcstrovl I. 179

aciionPerformedO. 534, 537


;idclAciioiil.islci>er(). 5.17
addlieiiK). 278

viColoni. 2IS
getCrossPlailiirmLoiikAnj

miiueMove(). mtodo. 325

IvcI('I.inN.iiii>"i1. 521
.Cll'uiicill: '. -17~ geiniKiniK-niHased. 244
fetl-"ilel I. 4W>

creacin, 277-278

manejo de eventos, 531 clics de ratn, 543-544 doble clic, 324-325


mouseDownO. nitodii. 319-320

ejemplo, 278-279
desplazables

SwingColorTcst applicalion
clases. 545

addLine), 328 addPoiniO, 206


.idd.SpniO. 322

de acceso, 387-388. -112


de durada. 58I-5H2
Dialogo. 357

agregar a coniencdorcs.
284

escuchas de eventos, 545


listado del cdigo fuente,
546-549

ailjusimeniValucChangedO,
538

eeil iiiii.McincM'. 214

disableO. 363

geillcighli). 214. 245


gcillSItCnl'irl 1.374

agregar elcmcnios a, 284


control, 285

mouseUpO. mtodo, 320


Spots, applet de muestra.

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,

ColorTest applet, 371


Cli.ingeTille.java, ejempio. 535-537
escuchas de eventos

teclado, 331 keyDownO. mtodo. 332


Keys, applet de muesiia.

BorderLayoulQ. 297

BulferedlnpuiSireamO. 445
BufferedOulpiitStreamO, 446 BufleredReaderO, 454 BuffeiedWriierO. 456

gi-ilnseisi). 313 gciltemO. 279 gelKeyCliarl 1.543 gell-alx-li). 273


geiMessagcl 1.419

drawOvalU, 207
drawPolygonO, 205-2U6

333-337

278

keyUpO. mtodo. 332


tocias miidiieadoias.

control, 279 creacin. 277-278 ejemplo, 278-279

AciionLisicner, 537
Adju.NiineiiiLisieiicr.

buildConstraimsO. 304-309
buildRecK), 155-156
buttonO, 273

drawRecK). 203 drawRoundRecK). 204 drawStringO, 200.214


enahle(). 363 equals(), 105
estik-o. 3S8-39O e.\isis(). 457

getParameierO. 192 getParennl. 360 getPoiiiK), 543


getSelectedlndexO. 279

337-338

538-540
asociar componentes con.

teclas predeterminadas,
332-333

elemenlos, agregar, 278


vinculadas, enumeracin de,
408-409

CardLayoutO. 299
clearUccK). 212 dosel). 439

533-534

tipos de eventos. 318

geiSekvtedlnde.vesO. 2S5 geiSclectcdliniK. 279 geiSeleciedltemsO. 285 getS/.e(), 212

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

getSourceO. 534. 537


geiStateO, 274
getSaieChange( 1.541

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

llamar desde otro


constructor. 160

getSysiemClipBoardl). 41>S
getSysiemLiKikAndFeelCNi^

WindowListener. 544
eventos

soporte para el navegador. 19


marcos

nombres. 159 sobrecargar. 160-162

caracteres Unicodi
enteras, 73-74 numricas, 73-74

de accin, 537

de ajusie, 538-540
de elemenlos, 541-542

creacin, 352 dimensionar, 353

sobreponer. 166-168 control de acceso, 382-387 predeterminado, 383

Namcl). 521

fillOvaK). 207
ftlIPolygonl). 205-206

geiTexiO. 271. 281


gelToolkill). 498

loi:p(), mtodo, 262

filIRecu), 203

getValucO. 286

608

ndic

ndice

609 1

gelWidthO, 245

eventos de clic, 319-320 eventos de doble clic,


324-325

renameToO. 457

sobrecargados
creacin, 154-158
definicin. 153-154

mouscUpO, mtodo, 320 movcToO, mtodo, 225


MS-DOS cd, 28 comandos
ilir. 29

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

giKocusQ, 343 r,iidl.ayiu.i(). 295 handleDesclecK), 344

Lines. applet, 327


Spnls. applcl. 322 mouseDragO, 325 mouscDraggcdl), 544

ventajas, 154

Neil/Kred's (^antic l.ist of l'alindronies, sitio Web, 61


Ni'kn, applel

sobreposicin de. 53, 154,


162-164 sitper, palahra clave,

liamlloEveniO. 318-319,
338-341) Ji.tmIIi-Si-kvH). 3-l-t

rcium lypes, 139 RGUloHSBO. 373


nuil)

in.licadoi de couiaiuins, 25

culiii de lomlo. 253


compilacin, 256
imgenes

mouseEiitcrO. 326
niousclixiil). 326.

165-166
ventajas, 165
stand, I7'J, 233

multimedia
animacin
applel Neka. 248-256

liidcl). 353 indcxOfO. 98

mouseMove(), 325

appleis subprocesadas,

caiga. 248-24') conjunto. 248

mouscMovcdO. 544

235

sialic, 388-390

cargar imagen. 243

iiiO
..-'
'

inouseReleascd). 543
muuseUpO, 320
niovcTiif). 225

TriviaServer. aplicacin.
471-472

M.ipO, 179, 233 siringWidihO, 214


subslringO, 98

dibujar/iciluijar, 232-23.1
doble bl'er. 257-261
climinaciin de objetos

uviilirai'in. 2-18
lisiado del cdigo fuente,
253-256

Keys, upptci. 334

l.ines, appici. 326


Spots, ippici di: muestra,

siTollbarO. 285
sclecU 1.279
sel AcccssiblcDcscripi iiin).

-.- sobreponer. 178 322 milOnAO. 474-475

nekoRunO, 250 nekoScraicl.O, 252


nekoSleepO, 252

testUlockO. 118

Graphics, 256 imgenes de dibujo, 245


observadores de imagen, 246 panorama. 213-232 parpadeo, 239-243
rccupciaciil Je imagen.

tcnica de animacin.
249-253

lexiAieaO, 282
texi-'ieldO, 279

523

iii-kiiKiinO. mtodo, 250

ucwAudioClipO. 262
newPramel). 352

selAcccssililcNaincl), 523 sci.AciionCommanJl i. 537 seiUackgioundO. 218 sctCilorl 1.217. 220

toUppcrCascO. 98 updateO, 240-243, 372


upilaieO. 240-243

mkiiScralcliO, nitodu, 252

inscnTexH). 283

iicknSltT|i0, mtodo, 252


Nclscapr Navigator, 434

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

NelM-ape Signing liiol. 434

selConslrainlst). 3n6

valueOI'O, 98
uindoClosed(). 545
u'iiuInu'Clitsmg), 544

243
rutas relati\ a> de archivos.
244 subprocesos. 233-239

ne.\udoClipl). mtodo, 262


ne liami'l I, mtodo, 352
iirul.ii-O. mtodo, 456 NeivPalindronif, appli-l de
imu-slra

seiC'oiiieiuPaneO. 512
sctCuricntl). 277
setEehoCharO. 516

pjintO, 57-58, 178-180,


232-233 Kcys. applel. 335

windowOpenedO, 544 writeO, 439, 455 writelnK), 452 wriieStreainO, 448 Microsoft, sitio Web, 190 minscula, convenir a
mayscula, 457-459

seil-.clioC'liaracicrl i. 2SD setlldiiablct). 282 seiFonU), 213-214, 271 sctl:orcgrnund(). 2l>


selelpMenud. 363

sonido ciclos, 262-264 ejecutar, 262 frmalos de archivos, 261 vt'a amblen grficos; GUls mullitareas. 233 MvKect. clase
buiidkeci), mtodo

Jl.abelo. 515 J.SerollBarO. 518


JTcMAreaO, 516

Lino, applet, 329


para lair/r excepciones,
422-427

archivo HTML. 194-195


cdigo fucnle de java.

JTcxtRcIdO- 516
kcyDown). 332

92-IV4

cucsi iones de herencia,

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

mkdir). mtodo, 457 ni.idale.s. cuadros de dilogo,


356 ven tambin cuadro de

coiiiponenies de Swing, 523


paquetes. 397-398
variables. 69-70 NO'I. opi-radnr, 83

--keyU|H.. 332

abcl), 271

throws. palabra clave, 423

sciMciuiUaro. 362 seiMiiemonieO. 522 seil'ainK). 220


seiSuucU. 274

declai acin. 155-156 sobrecarga, 156 definicin de clase, 155 listado del cdigo fuente,
156-157

JincToO. 225
linkToi). 494

dilogo modificadores, vea palalinis


cla\e

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

.Modifivr, clase, 1(19

MvUeet2, clase. 161-162

compilacin, 28-30

playl). 262
PUS T. 483

M-iTcxin. 281. 54(1

mouse)ra|;), mtodo, 325


nHiuscDrH^jcdO, mtodo, 544 inmiMjICnlcrO, mtodo, 326

selTiHil ri|ilexH). 522


setValueO, 286 seiVisihleO. 512

ejecucin, 30 configuracin del JDK.

mainf)

primLnO, 79 primMcO, 165


prinlNamest). 116

mouscExitO, mtodo, 32ft


MuuscLislencr, escucha de
evento, 532

N
NamedPoint, clase. 1I7

23-24,631-633 Class not found errors 634-636

# m

shiiNvl). 300, 353

luma. M7 Jahhcrwock.javn, ejemplo.


45-47

processlnpuu), 472-473
read(). 438

showAttnbutesO, 43 showConfirmDialoai), 524


showInpinDialogO, 525

MuuseMotionl.istener, escucha df evento, 532

NaniesUlop, programa de muestra, 127-128


naveRadores

Cl.ASSPATH. instruccin. 636-638

TriviaScrver. aplicacin.
475

readFioalO. 449 readLine(), 454, 466

PATH. instruccin. 633-634


nuil, cadenas, 540 nuil, palabra clave, 113, 127
Nulll'ointerF.xceplion, errores

showMessagcDialogO. 526

mouseMovt'O, mtodo, 325 mouscMovcdO, mtodo, 544


miiuscKi'leasi'dO, mtodo,

makeRangeO. 140-141

readStreamO. 448

sliowOpiionDialoiriJ. 526
showSialusl 1.491 size(). 212

firmas especficas de navegador, 433-434

nikdir). 457
motiscOnwn)

readUnsignedByict 1,449
readUnsignedShonO, 449

543

HutJava. 14 Java Plug-in. 176

de. 417, 507

ndice

611

m -

.iv

Numberlteader, programa de
muestra, 124-125

ventanas, 353

iiisianccof, 535

control de acceso predeterminado, 398


pblico, 399-400 estructura de la carpeta, 398

objetos tianslciihlcs
cadenas de texto, 498

f*eatlUiLsigiiL'il.Sliori()t mlodo, 449

onetoZeroO, mtodo, 144


operadores

nmero pseudo aleatorio,


generacin, 91
nmeros

mili, 113 priivate, 384-385


protected. 385 publie, 56, 385

definicin de. 497 sabores de dalos. 497-498


soporte para. 496-497

Redante.Float, clase, 223


Kectangle2.FIuat, clase, 223 rt-cln|>ulos dibujar

asignacin, 79-80
comparacin. 82

nombre, 397-398 <1'ARAM> etiqueta (HTML),


191-192 parmetros, pasar a applvts ejemplo, 192-195
gelParamelerO mlodo, 192

de pumo fluame, 71, 74


hexadecimales, 74
negativos, representar como

concatenacin (+), 86
condicional, 121-122

slatic, 95. 138,388


super. 165-160

permisos, 431

persistencia, 487
l'erson, clase, 159

drawRccK), mtodo, 203


Kcctangle2D.FIoal, clase,

decrcmento (), 81 desigualdad (!=). 105


igualdad (==), 105 incremento (++), 81

Ihis. 141-142, 160.235


ihrows. 423 palabras reservadas, 556 wu iiimhicn palabras clave
Palindrume, applel de muestra

lcrales, 74

Personal llookshell. programa,


277

223

esquinas redondeadas. 204-205


relleno. 2(W

ocala*. 74

<PARAM> etiqueta, 191

plataforma cruzada, cuestiones


de, 11

instanceof, 84, 107

valores nuil. 192, 197


vi'it inmbin argumentos

O
<njECT> etiqueta (HTML),
TS7-188
objetos

lgicos, 83-84

archivo HTML'182-1X3. IXX

recursos de carrera, 571


recursos de Internet (en

matemticos, 77-79
new, 85

I iswdo del cdigo Java. 180-181


paintO, mtodo, 181 prueba, 183-184 Palndromo, ejemplo de clase clases importadas. 5S cJigo fuente, 59
compilacin, 59

playO, mtodo, 262


l'lug-in, 19, 176

l'ardon My Icons!, sitio Web,


515
puro

relacin con Java)

policytool, utilera, 435


polgonos
agregar puntos a. -lid

grupos tic noticias, 570


JAK.S. 569

creacin de objetos. 90-92 instanciacin de arreglos, 113

applcts. 179. 2.13


MlhjllOCCMlS, J.5
.

laxa I-'AI.K 5(i')


l.ivaSnll. 'mi(i ios

dilmjaj

arreglos, 113-114

parpadeo (animacin) ejemplo, 240


panorama, 239

drawPolygoiK J. mloo. 21 5

J.iv.iWVirIJ. 5(i9 Macmillan C"iiiii|)uter Pihlivliiiig. 566


vinas Web

cadenas de lexio, 498


comparar. 105-106
conversin por ca.sling

NOT, 83
OR. 83

Java2D, 224-225
I'opUpWindoH, aplicacin, 354-356

definicin de clase, 56-57


maivaclo de HTML. 0(1-01

precedencia, 84-85

reduccin

a clases, 103-KM

.i interfaces, 104,405
convenir a tipo-, primitivos.
104-105
creacin

ternario, 121-122 oportunidades de empleo


(Jiivu), 571

paintO, mtodo, 57-5S


paneles

doble Infcr, 257-261


sobreponer el mtodo
updaien. 240-243

I'OST, mlodo, 4H3


l'rmlClass, clase. 163 printLiU), mtodo, 79 prinlMeO, mtodo. 165
printNamesO, mtodo. 116 353

CaiiH-l.ui. 5(.K 56')

aciiiM.s ilc empico, 571


rcdimt-usionaniK'iilo de marcos.

C'nloi fot. applcl Uc niucNlia. 309-370

orden de precedencia

parselntO. mtodo, 146


pasar

administradores de

(operadores), 84-85 organizacin, vea alineacin


valos, dibujar

creacin, 29S

lU-liTcnccs'k'st.java, :i|>licacin,
lefeivncias, 99-IIMI relli-xin, 107-1119 eieiuplo. IOS

mrgenes. 313
paquetes

argumentos

l'iinlSubClass. clase, 163 l'rinlSuhClussa, clase, 164


pri<iridad (operadores), 84-85
processlnpullI, mlodn, 472-473
pnieh:i applcls. IN3-IX-J

memoria, 93

a aplicaciones. 148

argumentos, 90-91

dmwOvaK). mlodi, 207 U!!ipic2D.I-loal, clase, 223

claves. 597-601
cuniiol de acceso

aapplcis. 191-195 a mtodos. 143-145


excepciones. 424-425
I'ATI1. configuracin

cotislfucloics, 92 nuevo operador, 90-92 ClicckboxGroup, 275-276 definicin de. 35. 62

predeterminado, 398

java lang.rericvl. paquete. I(W


rt-tiiirianihi iidi>s. 132

pblico. 399-400
creacin clases, 398
ceidura de la crpela.

(parmetros del JDK) agregar. 576

instalacin del JDK. 25-20


puni (.), 93-94 punto y coma (;), 66

rt'llfiiii, 3M
rellenos de degradado, 220

"
V

determinar la clase de. 107


File, 456 Font. 213

Genc-nill'ath. 225 ' Graphics2D, 219 Random, 91-92


referencias, 99-100

pack(), mtodo, 353, 512 package, instruccin, 398 paintO, mtodo, 57-58, 178-180,
232-233

cambiar, 575 correccin de errores, 576


desplegar. 575

relleno de una celda, 313 relameTo(), mtodo, 457


renombrar archivos, 457

398

nombres, 397-398 definicin, 62

patrones de relleno
arcos, 208-209

importacin, 59, 395-396


interfaces, 597

Q-R
QnA.txt. archivo (aplicacin
TriviaServcr), 47.1
Random, clase, 91-92

repaintO, mlodo, 232-233

rrplatxTcxiO, mtodo, 283 requeslKocusO, mtodo, 335


iTshapcO, mlodo, 315 resizeO, mlodo, 353
restricciones

Keys, applet, 335

Java2D. 220-221
valos, 207 polgonos. 2W5-2O6

. sabores de datos, 497-498


; transferihlcs

Unes, applet, 329


palabras clave

Chvner, inieiiaz. 612

panorama, 55, 393


referencia

cadenas de texto, 498 definicin de, 497 sabores de datos, 497- 98


URL, 492
vea inmbin clases
ocultar

abstrae!, 392
break, 131

rectngulos, 203-204 peer, 315


pegar, operaciones de,

nombres de clase. 394


nombres de paquetes,

read(), mtodo, 43X


ivadl'loalO. iiiIimIii, 44'> readLineO, mlodo. 454. 466

anchor. 310-311
asignacin a componenics.

class, 136 continu, 132


else. 119

395

Clipboard, 498-499
aplicacin de muestra, 499-502

vea tambin clases; merfaees


ventajas, 393-394

UeadPrimes, aplicacin, 451


readStreamO, mtodo. 448
readUnsignedlIyleO. inloilo. 449

304-31(6

nn. 3io

extends. 136,407 final, 137,390

gridlicighl. 306
gridwidlh. 306 eridx. 306

caracteres en campos de
texto, 280

paquetes personalizados

ClipboardOwner, merfaz, 499

implements, 234,402

ciases, agregar. 398

I 612

ndice

gridy, 306
weighlx, 307

navegador especfico. 433-434

si-lKdioClinraclcr(). mtodo. 2S0

setliditableO, mtodo, 282 setFontO, mtodo, 213-214, 271

weighiy, 307 RGBlollSBO. mtodo, 373


KMI (Invocacin Ucmolu de

grupos de noticias, 570 pollicas. 434-435


selecto, mtodo, 279

documenlacin de Java 1.2, 73 Dminos, applet, 12

listado del cdigo Tueme.


323-324

# i
barras de desplazamiento,
517-518

sclForegroundO. mtodo, 218


selIlelpMcuuO, mtodo, 363

Gamclan. 32, 568-569


JARS. 569

marcado de HTML, 324


nilodos
aildSpoK). 322

botones, 515-516

Mtodos) aplicaciones, 504-505


arquiteciura, 503-504 panorama,502

semejante, 315 sensibilidad a maysculas y minsculas, en Java, 69


separadores (mens), 364

sctLabelO, mtodo, 273 setLayoutO, mtodo, 292, 298

Java 1.2 documentaron, 73


Java FAQs, 569

bolones de opcin. 517


campos de texto. 516


t
i
i

sclLookAndFcelO, mtodo, 521 selMenuBarf), mtodo, 362


sctMnemonicO, mtodo, 522
sctl'aintO. mtodo, 220

JavaWorld, 569
JDI3C, 506
JDK, 22

inil(), 322

mou.scDownO. 322 painlO, 323


rcpaiiiK). .123

casillas de verificacin.
516-517

sealizacin, 504 silio Web, 505


Rmiregistry, programa, SOS

sealizacin (RMI), 488, 504


ServerSocket, clase, 467

creacin de descripciones
para. 522 diquelas. 515

libros relacionados con Java.


568

Star7, sistema operativo, 13


starlO, mtodo, 233
sobrcposicirin. 1 79 slulic, mloil<i, .I.SS-39K

servidores (aplicacin de Trivia)

selStateO, mtodo, 274

UI'C (Llamadas de
I'roccdimicnlo Reino,o i, 51)2 runO, mtodo
applcts con subprocesos. 235

setStringO, mtodo, 271 MtStrokeO, mtodo, 222


sc(Text(), mlodo, 281,540

Macmillan Coinpuicr
i'ublislnng, 277. 5o5

lisias de seleccin. 517


nombrar. 523 l'.iu.ii.un.i. 511-515

constructor, 470
ejecutar, 482

Microsol'i, 190

inilQnAO. mtodo. 474-475 listado del cdigo fuenie,


475-479 inainO. mtodo. 475
processlnpui(). mtodo,

sclToolTipTextO, mtodo, 522

Neil/Fred's Giganlic List of


Palindromes, 61

stalic, |)alabra clave, 95, 138, MiH


stalic, variables, 95, 388-390
stop(), mlodo, 233

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

selValucO, mtodo, 286


sctV'isibleO, mtodo. 512
slinwO. mtodo, 300, 353

Netscape Signing Tool, 434


l'ardoii My Icous!, 515
recursos de empleo. 571

sobreponer, 179

MrinxWidtlifj, mlodo, 214

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

runO, mtodo, 471-472

showInputDialogO, mtodo, 525 slHm'McssageDialogO, mtodo,


526
shnwOplionDialogO, mtodo, 526

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.

Snckctlmpl, clase, 468


sotkets

subndices (arreglos), 114


subprocesos definicin. 233
inicio. 235
paro, 235

definicin de. 16
mancjidc eventos, 531

473

shoStatus(), mtodo, 491


Signing Tool (Netscape), 434
signo de exclamacin (), 83 signo igual (=)

aplicaciiin de Trivia, I6X


diseo, 469-470 ejecucin, 4S2

ClMiigeTle java.
ejemplo. 55-537

WA1TFORCLIENT, estado.
473

csiiKha de eventos.

aplicaciones, 378

ciclos, 131-132 ScopeTesl, programa, 142-143


SCKi)IX_A1I.SOJ.UTF.. evento,

WA1TFORCONF1RM,
estado, 473
selAccessibleDcscriplionO,

implcnicnlacin de
cliente, 479-481

programas de animacin, 233-234

531-533
CNi.rbleccr componente,
533-534 ,1c accin. 537

obrador de asignacin, 68, 72


operador de igualdad. IU5 signo ms -f- }. operador de concatenacin
( + ). 86
operador de incremento (++). 81

implemento-ion dei
senador. 470-479

DiejIaK'loik. ejemplo.
23d-2 V)

mtodo, 523 sel AccessibleNimc(), mtodo, 523 scActionCominaiidO, mtodo,


537 Selliack, applet de muestra.

del lado del clienie, 467

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,

del lado del servidor, 467

implcnicnlacin de la capa de
transpone, 468
solucin de problemas

substringO, mtodo, 98

I
)
J

Sugerencias, (informacin sobre


herramientas) 522

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

'

sistema de color UGH (rojo,


verde, azul), 216

Class not ound errors

Suida erage, aplicacin. 150


super, palabra clave, 165-166
.superclases

SCROU.J'AGK.UI', evento,
345

lisiado del cdigo l'uenle, 348 marcado de HTML, 348


mtodos actionO. 346-347

plataformas UNiX, 580-581


plataformas Windows,
576-578

sistema numrico base-J6, 74

definicin de. 4S, 63


indicacin. 36

scrollliarl), mlodo, 285


SceMclhod, aplicacin (ejemplo de reflexin), 109 seguridad applcts. 175-177
firmas digitales

sistema numrico base-8, 74


sistemas Solaris
aplicaciones de Java, compi-

changeColorO. 347
inii(), 346

manejo tradicional de errores,


414-415
i (i; itttnhit'n errores
sonido

Swing administrador de inierl'a/ de


usti.ii o. 521
aplu-aciones

mtodos abreviados de tecla do. 522


panorama. 509

lar/ejecuiar, 31 instalacin del JDK, 24-25


sistemas SPAKC, nslalacin

set)ackgroundO> mtodo, 2)8


sc-tColor method, 217, 220

wniajas. 51(1-511 SwitigC'olorTcsl, aplicacin de

formatos de archivo. 261


reproduccin

niarctj de trabajo, 511-512


componentes

autoridades de cenifi-

setConstraintsO, mtodo, 306


setContentPane(), mtodo, 512 setCurrenK), mtodo, 277 sctEclioCharO, mtodo, 516

del JDK, 24-25 sitios Web


Code Signing. pgina de recurso, 434

muestra, 518-520
clases. 545
escuchas de eventos, 545

ciclos, 262-264

cacin, 431
certificados. 430

play(), mtodo, 262

Spots, applel de muestra definicin de clase. 321

agregar a las aplicaciones.


512-514 reas de texio. 516

listado del cdigo fuente.


546-549 mlodos. 545

ejemplo. 431-433

v
#

614

ndice
ndice
615|

convertir a objetos,

pblico, 3S5 conversin por casi, 101-102


declaracin. >7. 557-55S
variables de arreglos.

104-105 TCP (Protocolo de Control de


Transmisin), sockcs

Vinculacin
appleis. 491
492-494

toUpperCaseO, mtodo, 98
tramado 216
lr_\...calch, hlui|iies

BuionLink, ejemplo. linkTnO, miodo, 494 UKI..objcios, -192

weighly, restriccin, 307 WIDTII, atriliulu (<AP1'I.KT>


elijiiela). 60

configuracin del JDK,


23-24.631-633

aplicacin de Trivia

diseo, 469-470
ejecucin. 482
implemcntacin del lado del cliente, 479-481 implementacin del lado

ejemplo, 419-421 : finally, clusula. 421-422

112-113 '
variables mltiples. 68 decrcmento, 80-81 definicin de, 67

Window, clase, 352


l'veno, 362

CLASSPATH. insimccin
636-638
errores Class or found,
d.M-i.t,

visualizacin, rea despliegue

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

desborde. 8S (silico, 388-390 finales, 391 globales. 67


incremento. SU-81

del servidor, 470-479

w
WArn-OKANSWKR, estado
(l'riviaServcr), 47J

WINDOW i:XI'().Si:, ivinl.i, .V,2


WINDOW l< (INII \, ,,,!, _\,<

del lado del clicnle, 467 del lado del servidor, 467
implemcnlacin de la capa de

WINI)OW_M()\'KI), evento, 362


indoClosedO, mtodo, 544

Wrilel'riiius, aplicacin.
450-451

transpone, 468

instancia, 39. 62, 67


acceso a valores, 93-94 cambio de valores, 94-95

YVAITKOKCI.IIiNT.iMado
(TriviaServerl, 473 W.AITFORCONI'IKM, oslado
(TriviaServer), 473
\Veb, publicacin (|c iipjjlils,
184

iidovvClosiii);(),mlodo, 544 Windoul.i.siener, escucha de


i-vrnli, 532

urilcSl reamo, inlodo, 448

teclado

Unicode Cunsonium, sitio


Weh. 76

manejo de eventos, 331.


542-543

'.>iiid(ivv()|)ened(I. mlodo.
5-14

UNIX, JDK, riinnciiracin.


580-581

definicin. 136-137 valores iniciales, 69 locales, 67


declaracin. 6X
val.>ies, o1.)

x-z
XOi, operador, H. /ip, archiveros, l*>0

keyDownO. mloJo. 332


Kcys. applei, muestra.
333-337

Windows 95/Windovvs NT
aplicaciones de Java
compilar. 2S-3I)

Unolllcil Obscurc Java FAQ.


sitio WVIi, 569

vveiglilx, restriccin, 3(17

keyUpO, mtodo. 332


ledas modificadoras.

ui><t:ile(), mtodo, 24(1-243, 372

ejccuiar. 30

URI-0, mtodo, 492


UKL, objelos, 492

mimbrar, 69-7U

337-33S
teclas predeterminadas,

tipo de inierJa/., 40-1 tipos de clases. 71


lipos de dalos 70-71

L'scnct, pimpos de milicias, 32, 570


utileras, vea herramienlas

332-333
mtodos abreviados, 522 leslilloekO, mtodo. 118

booleanos. 42 convenir j objelos.

iextAreaO, mtodo, 282 levlDialon, clase, 35f:-359 IcxtlieldO, mtodo, 279


TeslField. clase, 27!>
texto

V
valoeOK), nilodo, 98
variables

KM-105 variables de objeto, rea variables de instancia


ventanas

advertencia Je Unsipnca j.iv.i

convenir a maysculas,

alcance. 118
alcance de lxico, 134 ScopcTcsi. pruprania

Applei Window, 353 desplegar. 353


ejemplo de venuna despk1-

457-459
dibujo, 200-201

diquelas de, 271 Thawlc Ccrlificalioi , 431


Ibis, palabra clave, 16(1, 235 41-142,

142-143 asignacin, 6S. 72. 558


clase. 39. <>2. 67

gable. 356

evenios de, 3o 1-362


manejar evenios de,

definicin, 95 valores de acceso, 96 valores de cambio, 96


valores iniciales, 69

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

convenir a objei -s.

declaracin. 137-138 definicin, 137

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

control de acceso,' 382-387


predeterminado. 383

101-102

privado, 384-3S5
protegido, 385-386

^Jvi

You might also like