Está en la página 1de 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

Aprendiendo Jvj I en 21

i vi

DIa 3

65

Les ABCs de Java


instrucciones y expresiones

...66

Variables y tipos de datos ...

...67

Creacin de variables
Nomenclatura de variables

67
69

Tipos de variable

70

Asignacin de valores a las variables

72

72

Comentarios

76

Literales de c;ulcna
Expresiones y operadores

.;

Ms sobre asignacin
Incremento y decrcmento

Comparaciones

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

Lecciones de objetos
Creacin de objetos nuevos

Uso de new

Qu hace ncw

Observacin acerca de la administracin de memoria


Acc;so y establecimiento de variables de clase y de instancia
Cmo obtener valore.-.

Modificacin de valores
\arhbles de clase

Llanadas a mtodos
I. ;>s mtodos dt clase

Rel encas a objetos

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


Conversin por casi de objetos

Conversin de tipos primitivos a objetos y viceversa


Comparacin de valores de objetos \ de clases
Comparacin de objetos

Determinacin de la clase de un ob< *>

Da I

75

Literales de caracteres

,
7

Los inicios de la programacin en Java

74

Lcrales boolcanas

L onversiii por cast de tipos primitivos

Semana 1

7.1

Literales numricas

DIa 4

Introduccin

73

!.heniles

Aritmtica

Resumen de contenido
Introduccin a Java

Un vistazo a la programacin orientada a objetos

33

Los ABCs de Java

65

Lecciones de objetos

89

Listas, lgica y ciclos

111

135

77

Creacin de clases

77

Uso de mtodos para realizar tareas

153

79

80
2

X3
S4

Semana 2 Temas avanzados de Java


Da 8
9

So

87

Cmo poner programas interactivos en Web

171
173

Cmo mejorar la apariencia de sus programas con

grficos, fuentes y color

231

Adicin de imgenes, animacin y sonido

23!

11

Construccin de inierfaces de usuario sencillas para applets

267

12

Organizacin de los componentes en una nterfaz de usuario

291

90

13

Respuesta a la entrada del usuario en un applet

317

92

14

Desarrollo de interfaces de usuario avanzadas con el AWT

351

N8

89
yo

93
93
93

10

Semana 3 Afine sus conocimientos de Java

Funciones de las clases: paquetes, inierfaces y otras caractersticas

38!

95

16

Circunstancias excepcionales: manejo de errores y la seguridad

413

96

17

Manejo de datos a travs de los flujos de Java

437

18

Comunicacin a travs de Internet

461

100

19

JavaBeans y otras caractersticas avanzadas

485

102

20

Diseo de una interfaz de usuario con Swing

509

Manejo de eventos de usuario con Swing

531

44

os
'}')

103
104

105
105

107

Da 15

379

-21

Contenido

Examen de clases y mtodos con reflexin

Resumen
.
Preguntas y respuestas

553
Apndices

Apndice A

555

Resumen del lenguaje Java

Recursos de Java en Internet

Configuracin del JDK

Uso de un editor de texto con el JDK

DIa5

565

'

( jq
111

Ustas, lgica y ciclos

Arreglos

Declaracin de variables de arreglo

573

ndice

*
-.

583

Creacin de arreglos de objetos

589

Acceso a los elementos del arreglo

......

^
"
^ ]4

Modificacin de los elementos de un arreglo

^ ^

Arreglos multidimensionales

^^

Instrucciones de bloque

Condicionales if

pj

El operador condicional

Condicionales switch

Ciclos f or

]28

Ciclos while y do

Ciclos while

Ciclos do-.while

12g
120

(jj

Interrupcin de los ciclos

,32

Ciclos etiquetados

^4

Resumen
Preguntas y respuestas

134
135

DIa 6

Creacin de clases

Definicin de clases

]36

Creacin de variables de clase y de instancia

Definicin de variables de instancia

Constantes

jjg

Variables de clase

Creacin de mtodos

Definicin de mtodos

)4

La palabra clave this

]4,

Paso de argumentos a mtodos

)4<.

Mtodos de clase

,46

Alcance de variables y definiciones de mtodos

Creacin de aplicaciones en Java

]47

Clases auxiliares

Aplicaciones Java y argumentos de lnea de comandos


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

Resumen
Preguntas y respuestas
.e de un objr-io

v-

w.

]4g

^
j4g
- )5)

)52
:

Contenido

Aprendiendo Java 2 en 21 Dns

DlA 7 USO DE MTODOS PARA REALIZAR TAREAS

153

',

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


Mtodos constructores
Cmo llamar a otro mtodo constructor

Sobrecarga de mtodos constructores

Sobreposicin de mtodos

.. 160
.. I6
.. I62

.. 165

Cmo llamar al mtodo original

.. 166

Sobreposicin de constructores

.. 168

Mtodos finalizadores

Resumen

.. 158
.. 159

Mtodos constructores bsicos


!

154

Preguntas y respuestas

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

Cmo elegir una versin de Java

Control de seguridad mejorado


Creacin de applels

Actividades principales de applets


Un applet sencillo

Inclusin de un applet en una pgina Web


La etiqueta <APPLET>

Cmo probar el resultado

.. 169

.. 169

171
173
174

175
176
177
177

178
180

182
182
. 183
^

Cmo poner appieis en Web

Ms acerca de la etiqueta <APPLET>

'

185

HSPACE y VSPACE

CODE y CODEBASE
La etiqueta <OBJECT>

.uchiveros JAVA
Otros formatos de almacenamiento
] 'aso de parmetros a los applets

'Insumen
'regunias y respuestas

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


fuentes y color

La clase Graphics

El sistema de coordenadas para grficos


Dibujo y relleno

. 1S8
. 190
. 191
. 195

. 197

199

. 200
. 202

.. 202

Lneas

Rectngulos
valos
Arcos

.
:::.:

:...

::..

Copiado y limpieza

texto y fuentes

203
203
207
208
2I2

'..'.'

213

Cree objetos Font


Dibujo de caracteres y cadenas

213
213

Cmo obtener informacin acerca de una fuente

214

Color

216

Uso de objetos Color


Cmo probar y establecer los colores actuales

216
217

Operaciones grficas avanzadas mediante Java2D

218

Espacios de coordenadas de usuario y de dispositivo

219

Conversin por cast de un objeto Graphics2D


Especificacin de los atributos de modelizado

219
220

Colores 20

Creacin de objetos para dibujar


Dibujo de objetos

Resumen
Preguntas y respuestas

DIa 10 Adicin de imgenes, animacin y sonido

Animacin en Java
Pintado y repintado

220'

223
225
228
229

232
232

Inicio y paro de la ejecucin de un applet

5J

233
234

Cmo poner todo unto

2*6

Cmo reducir el parpadeo de la animacin

TO

El parpadeo y cmo evitarlo


Sobreposicin de update ()
Una solucin: no limpiar la pantalla

239
240
240

~3*

2-+3

Cmo obtener imgenes


Rutas relativas de archivo
Dibujo de imgenes

243
244
~ *

Cmo poner a trabajar las imgenes

246

Cmo crear animacin mediante imgenes

248

Una nota acerca de los observadores de imgenes

El ejemplo Neko

Doble bfer

231

Control de la animacin mediante subprocesos


Cmo escribir applets con subprocesos

Recuperacin y uso de imgenes

246

24S

256

Contenido

Aprendiendo Java 2 en 21 Das

258

Una nota acerca del borrado de objetos de Graphics


El applet Checkers
Recuperacin y uso sonidos

Resumen

V.

DIa 11 Construccin de .nterfaces de usuario sencillas para applets

El AWT

Componentes de una interfaz de usuario

Eventos de arrastre y movimiento del ratn

261

Los eventos ratn entra y ratn sale

2M

Un ejemplo: dibujo de lneas

267
.... 2(.S

....269

.... 26')

Adicin de componentes a un contenedor

.... 27I

Etiquetas

.... 273

Botones
Casillas de verificacin

. 274

0??

Listas de seleccin

.,

Campos de texto

.,<,.,

reas de texto

.^

Listas desplazabas

08J

Barras de desplazamiento y deslizadores

"^

Lienzos

Resumen
Preguntas y respuestas

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


Diseo bsico de inlerfaces

T^y

... 289
291

... 292
oy?

Diseo de una interfaz

El administrador FlowLayout

"^

El administrador GridLayout

~%

El administrador BorderLayout

"^

Cmo mezclar administradores de diseo

"^

Diseo de interfaces avanzadas

~^

El administrador CardLayout

'

El administrador GridBagLayout

,^

Relleno de celdas

^^

Mrgenes

-,l4

Resumen

3I4

Preguntas y respuestas

Ha 13 Respuesta a la entrada del usuario en un applet


Manejo de eventos
Tipos de eventos
El mtodo handleEventO

Manejo de los clics del ratn

Eventos ratn arriba y ratn abajo

Doble clic

Manejo de los movimientos del ratn

258

205

Preguntas y respuestas

317
318

XII

325

325
'.

326

326

Manejo de los eventos de teclado

331

Los eventos tecla abajo y tecla arriba

332

Teclas predeterminadas

332

Un ejemplo: escriba, despliegue y mueva caracteres

333

Prueba de las teclas modificadoras y los botones mltiples del ratn

337

El manejador de eventos genrico

338

Manejo de los eventos de componentes

340

Manejo de eventos de accin

341

Manejo de los eventos de enfoque

343

Eventos del rea de texto

344

Eventos de listas desplazable

344

Un ejemplo: el interruptor de colores de fondo

345

' Adicin del cdigo de eventos

346

Resumen

349

Preguntas y respuestas

349

DIa 14 Desarrollo de interfaces de usuario avanzadas con el AWT

351

Ventanas, marcos y cuadros de dilogo

352

La clase Window

352

Marcos

352

Cuadros de dilogo
Eventos de ventanas

356
361
362
362
363

Mens
Mens y barras de mens
Elementos de men
Evenlos de men
Creacin de aplicaciones AWT independientes

364
364

Un ejemplo completo: el convertidor RGB a HSB


El diseo del applel
Definicin de los subpaneles
Manejo de eventos
Actualizacin del resultado

El cdigo fuente completo


Resumen
'.
Preguntas y respuestas

366
367
369
371
372

375
377
377

Aprendiendo Java 2 en 21 Das

XII

Contenido

Semana 3 Afine sus conocimientos de Java

379

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


Modificadores

Control de acceso a mtodos y variables

3S2

Mtodos y variables estticos

388

Clases, mtodos y variables final

390

Variables
Mtodos
Clases
.

391
391
392

Clases y mtodos abstractos


Paquetes

381

39.

Uso de los paquetes

Nombres completos de paquetes y clases

3o

El comando import

-"-1

Conflicios.de nombres

396

Una nota acerca de classpath y dnde se ubican las clases

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

7
397
398
398
398

Control de acceso a los paquetes y las clases

Interfaces

40

El problema de la herencia sencilla

Interfaces y clases

Implementacin y uso de las interfaces


l.-nplemeniacin de mltiples interfaces

401

4^2
44C-

Otros usos de las interfaces


Coi io crear y extender las interfaces

44
405

nterfaces nuevas

Mtodos dentro de las interfaces

406

Un ejemplo: enumeracin de listas vinculadas

408

Tomo extender interfaces

A'

Clases internas

409
41 I

R sumen
Pr:guntas y respuestas

DlA 16 CSCUNSTANCIAS EXCEPCIONALES: MANEJO DE ERRORES Y LA SEGURIDAD

4P

413

Excepciones, la forma vieja y confusa

414

I as excepciones de Java

4!5

Manejo de excepciones

Verificacin de la consistencia de las excepciones


Proteccin de cdigo y captura de excepciones
La clusula f inally

417

v 418
41S

XIII I

Cmo declarar mtodos que podran lanzar excepciones

422

La clusula throws

423,

Qu excepciones debera lanzar?

423

Cmo pasar las excepciones

424

throws y herencia

425

Cmo crear y lanzar sus propias excepciones

426

Cmo lanzar excepciones

426

Creacin de sus propias excepciones

427

Combine throws, try, y throw

427

Cundo usar excepciones y cundo no

428

Cundo usar excepciones

428

Cundo no usar excepciones

429

Mal estilo al usar las excepciones

429

Cmo usar firmas digitales para identificar los applets

430

Ejemplo de una firma digital

431

Firmas especficas para navegador

433'

Polticas de seguridad

'.

434

Resumen

435

Preguntas y respuestas

435

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

437

Introduccin a los flujos

438
438
439

Cmo utilizar un flujo


Cmo filtrar un flujo

Flujos de bytes
Flujos de archivo

440
440

Filtrado de un flujo

444
445

Filtros de bytes

Flujos de caracteres
Cmo leer archivos de lexto
Cmo escribir archivos de texto
Archivos y filtros para los nombres de archivo

Resumen
Preguntas y respuestas
DIa 18 Comunicacin a travs de Internet
Conectividad en Java
Apertura de conexiones con Web
Apertura de un flujo a travs de la red

Sockets

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

467

468
469
470

V
xv I

Contenido

Aprendiendo Java 2 en 21 Dias

Implementacin del cliente Trivia


Trivia en accin

Resumen
Presuntas y respuestas

Cuadros de dilogo estndar

.479

Un ejemplo: la aplicacin Inf o

Resumen

Preguntas y respuestas

;""
485

DIa 19 JavaBeans y otras caractersticas avanzadas

DlA 21 Manejo de eventos de usuario con Swing

s
532

El evento principal
Escuchadores de eventos

JavaBeans
El objetivo de JavaBeans

4g8

Cmo se relacionan JavaBeans y Java

Cmo establecer los componentes

Mtodos manejadores de eventos

534

Trabajo con mtodos

La API de JavaBeans
Trucos con applets

.491

El mtodo showStatusO

.491

Informacin de! applet

.491

Creacin de vnculos dentro de los applets


Comunicacin entre applets

. 496

Cortar, copiar y pegar

.. 497

Creacin de objetos transfcribles

.. 49S

El portapapdes

.. 502

Invocacin a Mtodos Remotos

.. 503

La arquitectura de la RM1

.. 504

Creacin de aplicaciones RMI

.. 505

Conectividad para bases de datos de Java

... 506

Resumen

... 507

Preguntas y respuestas

509

DIa 20 Diseo de una interfaz de usuario con Swing

...510

Los beneficios de Swing

... 511

Estructura de una aplicacin

Cmo agregar componentes a un marco de Swing


A trabajar con Swing

Etiquetas

,'

...512
...514

5|6

^16

Un ejemplo: la aplicacin SwinoColorTest

- - " ^

"

Eventos de ratn
Eventos de movimiento del ratn
Eventos de ventana

Un ejemplo: la aplicacin SwingColorTest

Resumen

,..

Mtodos abreviados

^2
^

553

Apndices

Apndice A Resumen del lenguaje Java


Palabras reservadas

556
^^

Comentarios

,,,
556
^-

Literales
Declaracin de variables

55g

0bJel0S

"'.560

Arreglos

560

Ciclos y condicionales

Definiciones de clases

Importacin

5J]

544

...

M8
^

5"+4

Preguntas y respuestas

Definiciones de mtodos y constructores

Cmo establecer la apariencia

Eventos de tecla

^7

Las nuevas caractersticas de Swing

Descripciones y nombres de los componentes

.. 541

Eventos de elemento

Operadores

reas de texto

Barras de desplazamiento

Eventos de enfoque

515

Campos de texto

Listas de seleccin

Eventos de ajuste

Asignacin de variables

5I

Casillas de verificacin y botones de opcin

Eventos de accin

5]j

Botones

Informacin sobre herramientas

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

Otros ttulo a considerar

565

565
56fi

n sino de Su,, Mierosysicms

. 5<>6

Acerca de los autores

. 5oK

do sei

. 568

Otros sitios Web sobre Java

U pgina de libros de Java

JavaWorld

libros sera mucho

Preguntas mas frecuentes en J..va

Grupos de noticias de Java

Oportunidades de empleo

. 570

S5

s d.vcrt.do. En sus

The Off

. 571
573
573
S7S

575
576
5S0

5 SO

583

c0" ilIDK

5X3
5S5
586

5X7
5SX

589

NDICE

nttp://v/ww.Prefect.com/]ava2i.

Prentice-Hall Hispanoamericana

Dedicatoria

El personal de Prentice-Hall Hispanoamericana, S.A. est comprometido en presentarle lo

A Eric. por todas las razones comunes (soporte moral, preguntas estpidas, apoyo en los

mejor en material de consulla sobre computacin. Cada libro de Prentice-Hall

momentos difciles, lomar grandes cantidades de caf). U.

Hispanoamericana es el resultado de meses de trabajo de nuestro personal, que investiga y

refina la informacin que se ofrece.

A Rita Cracker (de cario "Nana ") y Mary Cadenhead (de cario "Abuela " o "Mimi").

Cualquiera debera tener a su alrededor abuelas Um amantes, amadoras y divertidas como estos dos (ounq.u

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

ellas no me dieron el pony que yo realmente, pero realmenu: quera cuando ,,, cuco anos). - hoy. .

Hispanoamericana lo invita a dar su opinin. Por favor hganos saber si disfruta este libro, si
tiene alguna dificultad con la informacin y los ejemplos que se presentan, o si tiene alguna
sugerencia para la prxima edicin.

Reconocimientos

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


De Laura Lemay:

software o el hardware.

Al equipo de Java de Sun, por todo su intenso trabajo en Java, el lenguaje, y sobre el nave

Si usted tiene alguna pregunta o comentario acerca de cualquier libro de Prentice-Hall

gador, en particular a Jim Graham. quien me ense Java y Hoav;, en un curso in.cns.vo en

Hispanoamericana, existen muchas formas de entrar en contacto con nosotros.

mayo de 1995 y sembr la idea de esie libro.

Responderemos a todos los lectores que podamos. Su nombre, direccin y nmero telefnico

A lodos quienes compraron mis libros anteriores y les gustaron: compren lambin ste.

jams formarn parle de ninguna lista de correos ni sern usados para otro fin, ms que el de

ayudarnos a seguirle llevando los mejores libros posibles. Puede escribirnos a la siguiente
direccin:

De Rogis Cadenhecd:

Prentice-Hall Hispanoamericana, S.A.

Soy una de esas personas que planea su discurso de recepcin del Osear con anterioridad

aunque yo nunca .ral aj en ningn proyecto que pudiera liderar para ganar un prcm.o de a
academia. Si este libo fuera elegible para un Osear, mi discurso podra empezar por ayudar a

Attn: Editorial Divisin Computacin

Calle Cuatro No. 25, 2" Piso,

los compaeros de Semillan, quienes han contribuido en gran manera a la calidad de este

libro incluyendo a J> ark Teber, Seo.. Meyers. Tonya Maddox. Eric WoK. y Deborah Fnsbv.
A continuacin, quis era agradecer a mi ex agente Brian Gil y mi agente actual Dav.d

Co!. Fracc. Alce Blanco

la audiencia de este ibro. Despus del beso, lanzara los nombres de conocidos personales y
parientes a quienes , ebo favores o dinero. Wade DuChene, Jonha.an Bourne. Mark Wmner.
Phil Weins.oek. Ene Manuel, Chad Cadenhead, Kelly Cadenhead, Mama. Papa. Cl.ni Moowe.
Mane Moewe. Induurial Light and Magic, James Camarn, la Academia. M.ke Rhyner, la
Liga an.i-d.famacicn de B'nai Bri.h, Andrew Borokove, Greg WilHams. Walker Com.sano de
Texas el sistema d simal Dewey, y la estacin de radio KTCK de Dallas -Fort Wortl,

C.P. 53370

Naucalpan de Jurez, Edo. de Mxico.

Rogerverg y le plan aria un beso a mi esposa Mary y a mi hijo Max, quien debena estar entre

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

Finalmente, me gu ..aria terminar con una splica a toda la gente para que viva en armon.a y
paz, y por la aboli< ion inmediata del bateador designado.

Introduccin
Hace tres aos, mencionar la palabra "java" traa a la mente una de dos cosas: Una isla de

Indonesia o una taza de caf caliente. Hoy, quienquiera que haya tenido contacto con una

pgina Web, alguna revista de computacin, o una seccin de negocios de algn diario, tiene
otro concepto de Java: el lenguaje de programacin introducido por Sun Microsystems.

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

&

crmenes y polticos corruptos que han recibido menos atencin que Java. El lenguaje ha lle

gado a ser parte del desarrollo de software, como el lquido del mismo nombre.

Por una pane Java mantiene despiertos a los programadores hasta tarde, mientras al mismo

tiempo otro tipo de Java permite a los programadores dormir mejor despus de una jornada de
desarrollo de programas.

El lenguaje de programacin Java alcanz un lugar importante a fines de 1995 cuando

Netscape firm un contrato para integrarlo en el navegador Navigator. Hoy hay vanas

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

efectos especiales. De acuerdo con la mquina de bsqueda Alta Vista, ms de un milln de


pginas en Web incluyen applets de Java.

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

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


de programas Java.

Aqu es donde queremos presentar el libro Aprendiendo Java 2 en 21 das editado por

Prentice Hall. Usted ser guiado por todos los aspectos del desarrollo de programas Java

mediante la versin ms actual del lenguaje y las mejores tcnicas disponibles.

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.

Introduccin

Aprendiendo Java 2 en 21 Das

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.

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

El da 12 cubre cmo hacer que una interfaz de usuario luzca bien mediante los adminis

del desarrollo de applets y aplicaciones Java.

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:

El da 13 contina la cobertura del AWT con clases de manejo de eventos, los cuales

. 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

capacitan a un programa para responder a los clics del ratn y otras interacciones del
usuario.

cacin Java.

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

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

tanas de aparicin, rnens, y aplicaciones independientes.

tiempo en que son aplicables a Java.

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

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

programacin visual al AWT:

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

ciones.

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

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

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

dos del ncleo del lenguaje por s mismo.

los y copiarlos. Tambin tendr un primer contacto con las bibliotecas de clases Java.

El da 16 cubre las excepciones, errores, avisos, y oirs condiciones anormales, genera

. En el da 5, aprender ms de Java a travs de los arreglos, instrucciones condicionales

das tamo por el sistema como por sus programas; tambin aprender acerca de la

y ciclos

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

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

nican con Internet, incluyendo la programacin con sockets y el manejo de los URL.

Web).

Lo i|m ustcil aprendi durante el da (i. lo construir durante o I da 7. Usted aprender


ms acerca de cmo crear y usar mtodos, incluyendo sobreseer y sobrecargar mtodos
y crea;

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)

constructores.

y otros temas.

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

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

como la anii.iacin y manejo de imgenes:

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

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.

un ai piel. Tambin aprender cmo crear pginas HTML que contienen applels Java.

. 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

Acerca de este libro

. En (I da 10, usted crea programas multimedia que usan imgenes, sonido y secuencias
de r limacin. Usted tambin tiene su primera experiencia con los subprocesos. Una

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

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

Ion .a de hacer que sus programas manejen varias tareas al mismo tiempo.

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

Introduccin

Quin debera leer este libro


Este libro ensea el lenguaje Java a tres grupos:

Prograinadores novatos.

Convenciones
Una Nota presenta piezas interesantes de informacin, algunas veces tcni

Nota

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.

Us,ed aprende a desarrollar applets; tambin conocer los programas Java mteractivos que se

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

Tip

LuJcumo parle de un;, pgina Web y aplicaconcs. programas que corren en cualquu,
, ra parte. Cuando uslcd termine "Ap^ulicndo Java 2 en 21 das' sera capa, de salvar

. 1, uier aspecto de. lenguaje y se en,rf lo suficientemente bien con Java para prolund,
en sus propios proyectos a.nh.-riosos de programacin, dentro o Im-r:. de Woh.

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
osConceptos d.. este libro estn ilustrados con programas funcionales, usteU podra .r,hiUa, ,

semanera - ira 's de, tema, sin importar su nivel de experiencia. Si enuende que son vanables ciclos y fi nciones, se beneficiar plenamente de es.e libro. El upo de persona que

Trmino Nuevo

quema leer cst, libro le incluye si cualesquiera de los siguicn.es aspectos son ceos:

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

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

.Precaucin

Escriba
Entrada

ayuda a evitar un desastre.

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


nuevo en itlicas.

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.

. 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

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.

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.

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

El lexlo que usted escribe tambin aparecer en negritas.

Esta fuente simula la forma en que el lexlo aparece en su pantalla. Los marcadores de posi
cin para las variables y expresiones aparecen en irJicas monoespaciadas.

Al final de cada captulo se presentan preguntas comunes acerca del lema objeto del da. con
respuestas de los autores.

Semana 1
Los inicios de la
programacin en
Java
1

Introduccin a Java

Un vistazo a la programacin
orientada a objetos

Los ABCs de Java

Lecciones de objetos

Listas, lgica y ciclos

Creacin de clases

Uso de mtodos para realizar

r :;^.r,

i ysyTt:f JS

tareas

#
S
r .'-.t-;.};i-Sj.^
iSt

Semana 1
:#

Da

m
&

Introduccin a Java
El resultado representa el producto final de casi 15 aos de intentos por con

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

para si' mismo entre grficos, texto, auclio y seales de "I3N CONSTRUCCIN" por
todos lados. La gente vena desde muchos kilmetros a la redonda (la mayora

mediante enlaces de Internet, pero hubo quien vino en persona a Silicon Valley)
para darle una ojeada a este lenguaje.

&s

11

Introduccin a Java

Da 1

Las metas de hoy son razonablemente modestas. Aprender sobre los temas siguientes:

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

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


computacin sin modificaciones!"

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

. .'Java nace que los autores de .ibros de compuncin lleguen ser ce,ebr,c,des ap.auelidas imcrnacionalinentc!"

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

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

Lo que se necesita para empezar a escribir programas Java, el software, las tcnicas y
algo de terminologa bsica.
Cmo crear su primer programa de Java.

',

De, mismo modo, .a leyenda se iden.T.c rpidamente por s misma con .as hazaas enemalogr;fic;is tic Clint:

Qu es Java

"Desayuna balas!"

Basndose en la enorme cantidad de publicaciones que Java ha recibido durante los ltimos aos

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

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

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

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

de Java con Cl ni Eastwood: Java es fenomenal.

rap y puedo c inturrear 75 frases por minuto .

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.

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.

13

Introduccin a Java

Los usuarios de Web con un navegador sin soporte de Java podran ver texto, un grfico o
nada (dependiendo de si el diseador de la pgina ofrece una alternativa al applct de Java).

Figura 1.1

Conforme avance en este libro aprender ms acerca de cmo trabajan applets, navegadores y

Un appla de Java

Web entre s.

corriendo en Netscape

Nuviii"""'

Aunque los upplcls son probablemente el uso ms popular ile Jiivii, son solo un moilo ilc usar

el lenguaje. Como Visual C++, Visual Basic y Delphi, Java es un lenguaje robusto para desa
rrollar una amplia gama de programas, soporlar inierfaces grficas de usuario, conectividad de
redes, conectividad de bases dedulos y ola funcionalidad sofisticada. Para diferenciarlos de los

upplcls, a los programas escritos en Java <|iie no se ejecutan dentro tic un navegador Web se
les llama aplicaciones.

La biografa no autorizada
El lenguaje Java fue desarrollado en Sun Microsystems en 1991 como parte del proyecto

Green, un grupo de investigacin con la misin de desarrollar software para e! control de dis
positivos electrnicos dirigidos al consumidor final. Los investigadores esperaban desarrollar
un lenguaje de programacin que pudiera ser ejecutado en aparatos inteligentes del I muro

(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

,er cjecu-

&

Stroustrup. Sin embargo, James Gosling, miembro del proyecto Green, al no quedar satisfe

lenguaje para mejorar la manipulacin del Star7. Al lenguaje se le denomin Oak, en honor al
rbol que Gosling poda ver por la ventana de su oficina.

Nota

Sun descubri ms tarde que el nombre Oak ya se haba usado, pero nunca

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:

Nota

final de Java 2. el cual permite que los


ina virtual del ambiente de

de

usa

-in funciona

C++, el popular lenguaje de programacin orientado a objetos desarrollado por Bjarne


cho con el desempeo de C++ en la propuesta, se encerr en su oficina y escribi un nuevo

ck en cmo ca decw!'"!*

Fresalvaje

Laventanaindiscreta

Agujeronegro

Lavaventanas

#
#

V
Introduccin a Java

Da 1

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

Java 1.1.7sta es una versin de 1998 con.mejoras a la interfaz del usuario, manejo

Eshoradccomer

de eventos y mayor consistencia en el lenguaje.',

Guardaespaldas

Java 2La nueva versin, liberada primero bajo el nombre Java 1.2 para pruebas beta

Solovino

pblicas en diciembre de 1997.

En diciembre de 1998, Sun Microsystems liber finalmente la plataforma

Mota

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

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

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

manera intercambiable.

. Java es pcquclio -Los programas son ms rpidos de descaer desde una pg.na.
. Java es seguro -Evi.a que los hackers escriban programa que -sen cW en los
navegadores de los usuarios.

. Java es portable -Pente ser ejecutado en Wtndows, Macintosh y otras plata.ormas


sin modificacin alguna.

Adems Java podra ser usado como un lenguaje de programaron de propsuo gene.! para
liar programas que se puedan ejecutar en distintas pla.a.ormas.

Para demostrar e, potenca, de Java y saWar su proyecto ele *,ijac, de ser arc^o.e

S3S

Los nmeros de versin del lenguaje Java corresponden al software primario de desanollo de
Sun: el JDK (Kit de Desarrollo de Java). Comnmente denominado como el JDK. actual
mente est disponible en las versiones 1.0.2, I.) .7 y 1.2.

El JDK siempre ha estado disponible sin costo en http: / / j ava. sun. com, y su disponibi

lidad es uno de los tactores detrs del rpido crecimiento del lenguaje. Es la primera herra
mienta de desarrollo que sopona nuevas versiones de Java cuando han sido liberadas,
frecuentemente seis meses o ms antes que oros programas de desarrollo de Java.

Adems del JDK, hay ms de una docena de herramientas comerciales de desanollo de Java
disponibles para programadores de Java, entre las que se incluyen las siguientes:
Visual Caf de Symantec
JBuilder de Borland

mente llamado WebRunner, pero lo rebautizaron como HolJau!.

SuperCede

JFaciory de Rogue Wave


Natural Intelligence Roaster

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

^^

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

Sun ha liberado tres versiones principales del lenguaje Java:

Precaucin

Los programas en este libro fueron probados con el JDK 1.2 Beta 3, la versin
ms anual del kit al momento de la impresin de este libro. Si utiliza algo dife
rente al JDK,

grt;e antes que soporte plenamente la versin 2 de Java.

17

Introduccin a Java
Da 1

116

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

basado en Iniel, el programa resultante se ejecutar en otras computadoras basadas en Intel pero
no funcionara en todas las Macintosh, Commodore VlC-20s, u otras mquinas. Si desea usar el

,, *

mismo programa en otra plataforma, debe transferir el cdigo fueijte a la nueva plataforma y
recompilarlo para producir un cdigo de mquina especfico para ese sistema. En muchos casos
se requerirn cambios al cdigo fuente antes de ser recompilailos exitosamente en el nuevo

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

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

^^

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

. Swing _Nuevas caractersticas paralar unamtc:-*


l

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

Archivo binario
(Penlium)

Programas compilados
en forma tradicional.

Compilador (Penlium;

Archivo binario

Compilador (Powor PC)

Archivo binario

^ ^

de una merta de un programa a otra.

(SPARC)

Compilador (SPARC)

tres sem-inas.

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

,r qu est usted aqu?


., -

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

?^ >

-t- nnr mi la sent

ejecutado en cualquier plataforma y sistema operativo que tenga una mquina virtual.

naui-

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.

s.

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

ler.gu.ye

gy

. ,a nviyOra de oros leneajcs.

o c

.^ ^^ sop

.^

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

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

Introduccin a Java

Da 1

Precaucin
que

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

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

Java le conseguir algunas citas similares.)

*-

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:

Trmino Nuevo

http://java.sun.com/products

Por otra parte las aplicaciones de Java slo se pueden ejecutar en un sistema donde se haya

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

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

,ll:iql,ina, ennu.se muestra la figura 1.3.

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

Figura 1.3

su cdigo fuente y el cdigo de mquina compilado.

Pniftrtimux tic J" '" <'"


pUiHiJunmis nuil, pies.

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 /

/inlrprele de Java

(Penlium)

(Indepencienle

Cdigo de Java

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

19

Introduccin a Java

Da 1

21

Java est orientado a objetos


de oportuni

dades durante los prximos seis das.

Prentice Hall publica otra linea de tutorales dirigidos directamente a los

Nota

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

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

tSgje&

Mfflft.

m
m

Adntrese en la programacin en Java

programas orientados a objetos.

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

- -

laOOPdcC+r,'

conceptos de ...ros lenguajes orientados a objetos.

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


-Un vistazo ; la programacin orientada a objetos .

java es sencillo de aprender

'

en Java: una aplicacin.

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

1 #

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.

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

sopme plenamente Java 2 y. por ahora, la nica opcin es el JDK. sta es siempre la

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

C" >

primera herramienta que soporta una nueva versin de Java.

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

semana di i libro.

GetFunky

Este comando le indica al programa java (el intrprete de cdigo de bytes) que ejecute un

archivo de cdigo de byles llamado GetFunky. ciass. (Como podr ver ms tarde hoy, lodos
los programas de Java compilados tienen la extensin de archivo .class.)

program

y son an ms

L ,, stracion de ,a
rpidan':me.

iles de coneg

s podr.n e.ra.,

Los usuarios de Windows 95 deben usar el comando MS-DOS (Inicio I Programas I MSDOS) de la barra de tareas, para abrir una ventana donde se puedan escribir los comandos.

Esto representa un gran abismo en la mayora de las herramientas de programacin, las cuales
utilizan merfaces grficas de usuario, depuradores, editores de programacin y otras muchas
linduras. La gente que se siente cmoda con los sistemas operativos como MS-DOS y DOS
se sentir en casa con el JDK.

puede ; accr.

%rx

V
23

Introduccin a Java
Da 1

La pgina actual, que lista todas las versiones del JDK para distintas plataformas, tiene la
direccin siguiente:

http://java.sun.com:80/egi-bin/java-ports.cgi
JDK 1.2.

Asegrese de haber recibido completo el archivo luego de haberlo descargado. Las instruc
ciones de instalacin de Sun en Web listan el tamao de la versin vigente del JDK para la

Instalacin del JDK

Uversin 1.2 de. JDK (Kit de Desarrollo de Java) est disponible actualmente para las s-

Pura verificar el tamao en Windows 95 o Windows NT, vaya al directorio que contiene el

guientes plataformas:

archivo de instalacin del JDK y haga clic en el archivo con el botn derecho del rutn. Surge

. Windows 95

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

. Windows 98

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

. Windows NT

instalacin en Windows 95 y Windows NT

. SohrisSPARC

Antes de instalar el JDK en su sistema, asegrese que no haya otras herramientas de desarro

Sol iris x86

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

plataforma que uslcd usa.

ava.sun.com

U seccic n Produc & APls del s.tio Web, ofrece hipexvincu.es a versiones d.suiuas de,
v otros p educios de Sun.

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.

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

vigente :s la siguiente pgina Web:

JDK instalado en su sistema.

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

Figura 1.4

/:/ Assteme de confi


guracin del JDK.

Trecawin

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

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


fionGS de T3li3S QUG SQlcQoIi

iii

r,13ndo a

119 ptcters. Usted oeucria

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


Si us; otra plataforma, como la Apple

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


http

/yjava.sun.com

ti

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

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

Introduccin a Java

Da 1

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

Tip

: usted pudiera tener con el JDK

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

que est

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

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

% chmod a+x

jdk12-solaris2-sparc.bin

Para instalar el JDK despus de hacer el cambio con chmod, use una ventana de sesin del
intrprete de comandos para escribir el comando . / seguido del nombre de archivo del

El asistente instalar tres componentes del JDK:

paquete. El siguiente es un ejemplo:

./jdk12

-solaris2-sparc.bin

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.

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

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

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

^^

^.^

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


JDK.

Los usuarios de Windows pueden verificar su instalacin del JDK al usar el comando de MS-

DOS en la mayora de los sistemas. Esto hace aparecer una ventana en la cual usted puede
escribir comandos en MS-DOS, el sistema operativo que precedi a Windows 3.1.

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

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

precaucin

archivo Z1P, no debe descomprimirlo. El JDK puede leer

puede usar para escribir comandos que ejecuta el sistema operativo.

en su

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

Tip

el JDK sin aprender antes un poco de MS-DOS. Este libro ofrece algunos tips
para facilitarle todo el aprendizaje de MS-DOS humanamente posible.

formato de archivo en este directono.

Escriba lo siguiente en un indicador de comandos para verificar que su sistema pueda encon
trar la versin correcta del JDK en l:

.. sismas SPARC que ejecuten Solaris 2.4 o supenor


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

java

-versin

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

subdirectorio llamado )

previamente un s

existentes en su sistema.

"1.2"

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

cuente a la reparacin de una falla de programacin del JDK, con un nmero como 1.2.1,
debera ser reportado por el comando j ava versin. Si ve el nmero equivocado de

251

27

Introduccin a Java

Da 1
126

El JDK no incluye un editor de lexto, pero la mayora de herramientas de Java vienen con su

su sistema no puede encon-

file

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

propio editor para crear archivos de cdigo fuente.

Com|;,

Si utiliza Windows 95 o Windows NT, un editor de texto como el Bloc de notas podra

aadirle una extensin .txt de ms al nombre de archivo de cualquiera de los archivos fuente
de Juvii que usted guarde (lo cuul provoca que un nomine como GetFunky. juva Iciniiiie cu

GetFunky. java. txt). El compilador de Java manejar nicamente archivos fuente con la
extensin de archivo . j ava. Para evitar este problema, ponga entre comillas el nombre de
archivo cuando guarde el archivo fuente. La figura 1.5 muestra esta tcnica para guardar
cl archivo fuente Craps. java desde cl Bloc de notas de Windows.

pLcg

celebridad' por un

miembro del publico,

cu.u
Figura 1.5

~3

Cuuixtudo de un
archivo fuente.

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.

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

Tip

nentemente los archivos de Java con el editor de texto que va a usar. Esto le
permitir abrir un archivo fuente para su edicin al hacer doble clic en el
archivo en una carpeta de Windows. Para aprender a hacerlo, vea el
apndice D, "Uso de un editor de texto con el JDK".

Escriba el programa

la se nana 2, -

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

a-ea aplicaciones senc.las de

S : "S^

Crnacin del archivo fuente

O, o con la mayor, de los "^


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

eo ,oce como texto ASC. o texto

)o ^
^

^^

;ip,.cml:, micnlriis
K)

clcmc||Lil

Si su editor pide un nombre de archivo antes di empezar a escribir cualquier cosa, use

HelloDan.java.

, df S/'Cmo poner programas mcnuo, e, AWT,

es de usuano

Listado 1.1. El cdigo fuente de la aplicacin


1:

2:

is fuenie de Java s
lauier editor de icxio o

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

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

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.

,s usuarios de Windows 95 pueden escribir progra- .

":

5:

HelloDan

publie static void main (String[] arguments)

3:-

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


HvWrite, as como Microsoft Word.s, tiene el

class

HeiloDan.

System.out.println("Whafs the frequeney,

'

Kenneth?");

Introduccin a Java

cd es abreviatura de "cambiar directorio", los trminos carpeta y directorio son sinnimos.

5Ss

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

http://www.prefect.com/java21

Al terminar de escribir el programa, guarde e, archivo en alguna pane en su disco Curo con e.
nombre HelloDan. java.

Nota

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

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

=SS=S

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

jMSDUSPimw

Compilacin de pro

gramas Java en una

ventana de MS-DOS.

in y ejecucin del programa en Windows

tici-osoft (FO Windows 91


(C)Copyright Microsoft
;: \VINDO''E>cd

Corp

19S1-3996.

\J21uork

::\J21.rk>dir
Voluiac

ir,

Volui.ie

StL'ial

di i ve

Oiroctory of

has

Nutnbr.

nc

]s

label
DS4T.-2F2F

C:\021ucirl:

bo:6n o un comando de men comextual.

01-24-96

IELLC'D-1 JAV

picdan ser ejecutados por la mquina virtual de Java.

'

file(s)

dic(s)

14

';

2:39s

C;l-24-'5a

2:33a

..

01-24-5J

2:2a Heliot-ih

14 3

byt.es

42 , 96,704

bytes

fr-i-e

::\J21uork>javac HelloDan

'1

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

Introduccin a Java

Da 1

130

directorio que contiene Hellodan. java. Este archivo .class es el cdigo de bytes de Java
que puede ser ejecutado por la' mquina virtual. Si obtiene algn error, regrese.al arch.vo
fuente original y asegrese de haberlo escrito correctamente, como aparece en<el listado 1.1.

Compilacin y ejecucin del programa en Solaris

Una vez que tenga un archivo .class, lo puede ejecutar mediante el intrprete de cdigo de
by.es La versin del intrprete del JDK se llama java, y tambin es ejecutado desde la Imea

directorio que contiene el archivo fuente de Java Hellodan. java. Si usa el directorio J21work

de comandos de MS-DOS bajo Windows. Ejecute HelloOan cambindose a la carpeta que


contiene HelloDan.class y escriba lo siguiente:
java

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

fuente de Java en un sistema Solaris. Desde una lnea de comandos UNIX, use cd para ir al
recomendado para los usuarios de Windows, ste sera el comando que debera usar:
cd -/J21work

Una vez en el directorio correcto, utilice as el comando javac con el nombre de archivo:

HelloDan

Javac HelloDan.java

Si su programa fue escrito y compilado correctamente, deber ver la frase What' s the f re
queney, Kenneth? desplegada en la pantalla de su ventana de MS-DOS.

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

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

Una vez que tenga un archivo .class, lo puede ejecutar con el intrprete de cdigo de bytes.
La versin del intrprete de Java JDK se llama java y tambin se ejecuta a partir de la lnea
de comandos. Ejecute HelloDan cambindose al directorio que contenga HelloDan. class y
escriba lo siguiente:
java

HelloDan

La figura 1.7 muestra la salida apropiada de la aplicacin HelloDan junio con los comandos

Si su programa est correctamente escrito y compilado, deber ver la frase What' s trie

de MS-DOS que se utilizaron para llegar a ese punto.

frequeney,

Kenneth? desplegada en la pantalla.

Figura 1.7
Ejecucin Je aplica
ciones Javo en unu

Nota

ventana de \1S-DOS.

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:

:^-lj-5)

IJumUl

1-

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

Resumen

01-M-S

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


?a H-lloDii.cl =:

2 fiii-is)
2 dir(s)
;lik:

ihai.' tho fr-quney,


::\J21wofle>

''-- "y-""

39,419,OJ

by<

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


de Java".

Esto no es del todo falso, despus de todo. Usted no slo cre una aplicacin funcional de
Kenr.eth?

Java, sino que tambin hizo un viaje de un da a travs de la historia, fuerza, debilidades y
futuro del lenguaje.

31

Semana 1
en pginas Web.

m
m

Los appiets son programas de Java que se ejecutan en Web, y las aleaciones son todo aque,
software que pueda ser escrito con Java.

Maana usted ser capaz de escribir "Progra

m
m

a Objetos

Da

Preguntas y respuestas
p Cul es la relacin entre JavaScript y Java?
R Tici en iguales las primeras cuatro letras.

Un vistazo a la
programacin orientada

SS

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

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

R i1 e> resto de este Hbro

.<* cua.es

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

h n y applets de Java:

m
m
o

A la mayora de la gente que la prueba por primera vez no le gusta, y podra cues

Algn tiempo despus, sin embargo, se cultiva un gusto por la cerveza en quienes
continan bebindola.

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

La programacin orientada a objetos (tambin llamada OOP) se parece mucho a la

para que me hicieras beber esto?"

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

a objetos
tionar la salud mental de quienes cantan sus alabanzas. "Qu te hice... diran

debera revisar aqu.

&

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.

Un vistazo a la programacin orientada a objetos

Da 2

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

ques LEGO o ensamblar una PC. Mediante la OOP, todo su programa est formado por obje

prini. ru aplicacin de Java.

tos diferentes llamados objetos.

iense en trminos de pbjetos

Piense

Trmino Nuevo

ii

,l

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

representa un grupo asociado de caractersticas y est diseado para realizar

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

'
,. uchas otras piezas -

,,

c.,slillos, an

, FGO se puede hace todo upo de cosas, c.st.1

( on los bloques Ltuu ;>c i

nar objetos es slo un aspecto general de dicha programacin. Tambin incluye conceptos y

caractersticas que hacen que la creacin y el uso de objetos sea ms sencilla y flexible. La
um> maginar.

^. cualqUier cosa que

clase es la ms importante de estas caractersticas.

Trmino Nuevo

Una clase es una plantilla que se utiliza para crear mltiples objetos con carac
tersticas similares.

Las clases engloban todas las caractersticas de un conjunto particular de objetos. Cuando
escribe un programa en un lenguaje orientado a objetos, usted no define objetos individuales,
sino que define clases de objetos.

ndes HKlependiciues. usted cuenta ton "^ "puede

usar este' sistema mayor pan resolver

351

Un vistazo a la programacin orientada a objetos

Da 2

CoromandButton no tiene que reescribir el cdigo para cada botn de comando que desee usar

en sus programas. Adems, puede usar de nuevo la clase CommandButton para crear diferen
tes tipos de botones conforme los vaya necesitando, tanto en este programa como en otros.

rboles en general:
. Tienen hojas y races
.

Figura 2.1

Crecen

La clase Tree y varios

. Producen clorofila

objetos Tree.

cn ,,

. Bajo o alto
. Tupido o ralo
.

>e da frutos o no
i

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


El tamao 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

. Si se debieran ignorar por completo los clics del non

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

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

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

llevar a cabo lo que su programa requiere.

371

Un vistazo a la programacin orientada a objetos

Da 2

Por fortuna no tiene que empezar de cero. Cada versin de. .enguaje Java incluye un grupo

c2Tq imp.emen.an la mayora de la funcionalidad bsica que neces.tara. A estas agrupaciones se les denomina bibliotecas.'
Una biblioteca de clases es un grupo de clases diseadas pan, su use, con .rus
Trmino Nuevo

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

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

berwock (enojado o calmado), estado de salud (vivo o muerto), o tendencias polticas


(socialista, independiente, o mam futbolista).

En una clase los atributos estn definidos por variables. Usted puede considerarlos anlogos
para las variables globales para cada objeto de esa clase. Cada objelo puede tener valores
distintos para sus variables y a stas se les denomina variables de instancia.

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

Trmino Nuevo

Java.

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

La biblioteca estndar de Java maneja numerosas tareas co.no funciones mticas, .anejo
dt textos grficos, somdo, interaccin del usuario y conectividad de redes. En muchos casos.

y cada instancia almacena su propio valor para ese atribulo. A las variables de instancia

consistira en crear una Case sencilla que se use para crear objetos a pan,r de ,as clases tan-

Cada atributo de clase tiene una variable correspondiente sencilla; al cambiar el valor de la

as

Cecas de clases de Java sern suficientes para sus necesidades. En tal caso su tarea

dar de Java y manejar su interaccin.

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

Para

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.

Fn -enera! c ada clase que usted escriba en Java est compuesta de dos componentes: a.nbu;Zmpo. en, En es.a seccin aprender cmo se aplica cada componente a una Cas,

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

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


poema Jabh wacky de Lewis Carroll).

Atribuios
ios de una clase de objetos

u o, son las cosas individuales


que
idiidl
que diferencian
diferencian una
un clase de objetos de otros y de.er-

^:t^arienca, estado y otras cualidades de esa Case. Piense cmo se podna crear ,a
Los

tambin se les denomina variables de objeto.

variable puede cambiar ese atributo en un objeto. En el programa que crear hoy un poco
ms adelante, la instruccin siguiente se emplea para indicar que un objeto Jabberwock
representado por j ya no est hambriento:
].hungry

= false;

Las variables de instancia pueden lomar un valor cuando se crea un objeto y permanece
constante a travs de la vida del objeto, o bien pueden tomar valores diferentes mientras el
objeto se usa en un programa en ejecucin.

Atributo; y comportamiento
-

Los atributos de una clase de objetos tambin pueden incluir informacin acerca del estado

de un objeto. Por ejemplo, usted podra tener las caractersticas de la disposicin de un jab

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

. Ap -'lito satisfecho,

hambriento

Para describir toda una clase de objelos se usa otro tipo de atribulo en vez de objetos espec
ficos desde la clase. A estas se les denomina variables de clase.

Trmino Nuevo

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

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.

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:

391

Un vistazo a la programacin orientada a objetos

Din 2

41 I

Creacin de una clase


.

Se enoja

Se calma

Ahora que ya conoce la terminologa bsica de la programacin orientada a objetos, las cosas
i

. Se come a un campesino
.

Se salta la cena

Se recupera

podran ser ms claras con un ejemplo ms concreto. Crear un ejemplo de trabajo de la clase
Jabberwock, para que pueda ver cmo se definen variables de instancia y mtodos en una

clase. Asimismo, podr crear un applet Java que cree un objeto nuevo mediante la clase

Jabberwock, modificar sus variables de instancia y tomar accin a partir de sus valores.

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

La sintaxis real del ejemplo no se detalla aqu. sela como una introduccin

Nata

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
crear un archivo fuente de Java. En vez de introducir un programa completo, escribir algunas

. Para informar un cambio a otro objeto

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


.

para pedir a otro objeto que haga algo

instrucciones mientras aprende a usarlo. Tiene una oportunidad de revisar doblemente su ira-,
bajo al final, para asegurarse que est correcto.

o
m

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


class

Jabberwock

}
por pillaba:

Usted ha creado una clase. Por el momento no es gran cosa, pero las dos lneas son un ejem

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

plo de una clase Java en su expresin ms simple.

antojo de chocolate haba, en la espada vorpal!

Para o,ue Jabberwock sea ms sofisticada, hay que crear tres variables de instancia para esta

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

clase. Justo debajo de la lnea class Jabberwock {, inserte las tres lneas siguientes:

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

String

color;

String sex;

m
Q
m

boolean hungry;

Estas lneas crean tres variables de instancia. Dos de ellas, color y sex, pueden contener

con,o pl. para lo ,

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.

s:

void feedJabberwock()

6:

if

7:

(hungry == true)

8:

Systera.out.printlnCYum

9:

hungry =

18:

a peasant!");

else
System.out.println("No,

11:

--

false;

thanks

--

already ate.");,

12:

13:

//y an hay ms

14:

ntodos. Hay

15:}

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

Tip

y oir para revisar sus atributos).

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

incluyen para beneficio de los programadores, para que la lgica del progra

P;ll, empezar, agregue las siguientes lneas debajo de las tres variab.es de instan,, en su

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

definicin de clase:

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

void feedJabberwock(

if

Puede elegir el estilo de sangra que prefiera.

hungry = false;

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


}

//

an

Antes de que compile esta ciase, necesita agregar un mtodo ms. El mtodo

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

hay mas

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


guiente:
void

Tif

showAttributes()

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


if

(hungry ==

" + color +

"

jabberwock.");

true)

System.out.println("The

jabberwock is hungry.");

else

System.out.println("The

jf (hungry

==

true .Si
.
true
lo*

: --:::

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

jabberwock is full.");

El mtodo showAttributes() despliega dos lneas en pantalla: el sexo y color del objeto
Jabberwock y si est hambriento o no. A travs de su editor de texto, guarde en disco el

archivo fuente asegurndose que se llame Jabberwock. j ava, para que el nombre de archivo
corresponda al nombre de clase.

En este momento, usted tiene una clase Jabberwock con variables de instancia y mtodos de
instancia que se pueden usar para desplegar y modificar estas variables.
1:

class Jabberwock {

2:

String color;

3:

String

4:

boolean

sex;

hungry;

Use uno de los procedimientos siguientes para compilar el programa, dependiendo del sis
tema que est usando.

43 I

Un vistazo a la programacin orientada a objetos

451

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

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

Agregue un mtodo main () a la clase Jabberwock para que pueda ser ejecutada direc

indicador de
MI

javac Jabberwock.java

tamente.

; ,

Para esle ejercicio se har lo ltimo. Cargue Jabberwock. java a su edilor de texto e inserte
una lnea en blanco directamente debajo de la ltima lnea del programa. (Lnea 21 del
listado 2.2.)

iavac Jabberwock.java

En esta lnea, inserte lo siguiente:

public static void main (String arguments[]) {

tiene errores de escritura.

Jabberwock j
j.color =

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

j.sex =
j.hungry

= new Jabberwock();

"orange";

"male";
-

true;

1: class Jabberwock {

System.out.println("Calling showAttributes

2:

String color;

j.showAttributes();

3:

String

System.out.println("

sex;

boolean

4:

5:

j.feedJabberwock();

System.out.println("

8:

j.showAttributes();

hungry = false;

9:

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

thanks - already ate.");

10:

");

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

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

7:

-");

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

hungry;

void ieedJabberwock()

6:

...");

...");

j.feedJabberwock();

11:

12:
13:
14:

15:

sex

color

cacin. Resguarde y compile el archivo.

jabberwock.");
iabberwock i.

16:
17:

1Se

18:
19:

Systen,

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

28:

21:

Con el mtodo main<) en su lugar, ahora se puede usar la clase Jabberwock como una apli
El listado 2.3 muestra el archivo de cdigo fuente Jabberwock .java final, en caso de que
haya tenido problemas al compilarlos.

Si tiene problemas con cualquier programa en este libro, puede obtener una

Tip

copia del archivo fuente y otros archivos asociados en el sitio Web oficial de
este libro en http://www.prefect.coro/java21.

Listado 2.3. La versin final de jabberwock . java.

inicrprcic de h va. obtiene el error siguiente:


In

class

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

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


rpnie no sabe qu hacer con el

1:

class

Jabberwock {

2:

String

color;

3:

String

sex;

4:

boolean hungry;

m
Q

Un vistazo a la programacin orientada a objetos

Da 2

47 j

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


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

travs del intrprete, como sigue:

5:

void feedJabberwocM) {

6:

if (hungry == true)

7:

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

8:
9:
10:

11:

java Jabberwock

),

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

hungry = false;

Calling showAttributes ...


This is a male orange jabberwock.-

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

The jabberwock is hungry.

12:
13:
14:

15:

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

color

Feeding the jabberwock


- a peasantl

Yum

jabberwock.");

Calling showAttributes ...


This is a male orange jabberwock.

h. iabberwock is hungry.",;

16:

17:

18:
19:

^" system.out.printlnC'The

The

J.bberwcck is full.);

22:
23:
24:

25:
26:
27:
28:

29:
3C:

31:
32:
33:
34:

35:
36:
37:

jabberwock is full.

Feeding the jabberwock

28:

21:

No,

public static void main (String arguments[]) {


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

...

already ate.

.'

Lnea 22 Se declara el mtodo main (). La primera lnea del mtodo main () siem

j.sex = "raale";

pre se parece a sta, y usted aprender acerca de cada elemento posteriormente durante

yS..7out.pri"t(

esta semana.

j.showAttributes();

");

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


j

Con el listado 2.3 como gua, lo que sigue toma lugar en el mtodo main ().

"orange";

Svstem.out.printlnf'

thanks

),

feedJabberwock();

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

aprendi, usted de hecho no opera directamente en las clases en sus programas Java.

K;::::":;Sun!"c;i;;showAttributes.

En vez de ello, crea objetos de aquellas clases y llama a mtodos para esos objetos para

j.showAttributes();

operar en ellos.

Svstem.out,println("

)>

lystel.out.printlnC'Feeding tbe jabberwock .


j.feedJabberwock();

38:
39:

La apHcacn Jabberwock se puede ejecutar con uno de los siguien.es procedimientos espec,
fieos de plataforma:

Lneas 24-26 Las variables de instancia color, sex y hungry son asignadas para el
objeto Jabberwock creado en la lnea dos. El color es orange, el sexo es male y la
variable hungry toma el valor booleano true. Esto indica que el objeto Jabberwock
est hambriento.

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

travs del intrprete, como sigue:


java Jabberwock

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

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

de la

t)

ciacin del objeto Jabberwock


showAttrlhl,tosO ,r.. despicar los v:,
, fllcll -,, _ Se Un.ua ,.cv,,...cn.c 1 .uLkW, showA
^.^ ^ ^^

nUevameme en un intento de al-

.-.;

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

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

Clase A

clases.

La clase A es la superclase de B
La clase B es la subclase de A
La clase B es la sjperclase
de C, D y E

Las clases C, D y E
son subclases de B

Clase B \

bien las necesitan.

Herencia

ia en la programacin orientada a

Clase D

En la pane superior de la jerarqua de clases de Java est laclase Object (todas las clases
heredan de esta superclase nica). Object es la clase ms general de la jerarqua y define el
comportamiento y atributos heredados por todas las clases de la biblioteca de clases de Java.
Conforme desciende la jerarqua, las clases se construyen para un propsito especifico. Una

diferencian de la clase existente.

estricta, las que uno mismo

Con la herencia, todas las clases

rre v aquellas que provienen d<

'

Aunac,ase que hereda de otra Case sel


leona
la herencia se le llama superclase.
porciona

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.

Un vistazo a la programacin orientada a objetos

Da 2

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

51

Los dragones y los jabberwocks tienen caractersticas similares (son monstruos grandes y se
comen a los campesinos). Ambos tienen garras afiladas, dentadura poderosa y personalidad
tipo A. El primer impulso podra ser abrir el archivo fuente Jabberwock. j ava y copiar la
mayor parte de l en el nuevo archivo fuente llamado Dragn, java.

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


damente queden sordos por l.)

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, :...",,...
',;

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

nbmos de las saciases de Co-ndButton. Todo lo que debe hacer es def.mr Ips aspec-

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

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

TRMINO NUEVQ

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

tamiento y atributos entre ella y la superclasc.

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.

Creacin de una jerarqua de clases

Si -sf aculo un uran conjunto de Cases, tendr sentido que stas hereden de la j^rqma

ty 2 men una jerarqua por s mismas. Organizar las Cases de esta manera

;;^;n^;r un tiempo Considerable de p.aneaein. pero las ventajas son ,as s,gluen,es:

en una jerarqua ms general de clases. Esto podra desembocar en mucho ms trabajo para

las clases Dragn y Jabberwock, pero qu pasa si tambin quiere aadir Medusa, Yeti,
Sasquatch, Grue y DustBunny?l colocar el comportamiento comn en una o ms clases
reutilizables se reduce en gran medida el total de trabajo.

Para disear una jerarqua de clases que pudiera servir para este propsito, empiece por el
principio con la clase Object, la cima de las clases Java. La clase ms general, a la cual
deben pertenecer un jabberwock y un dragn, se podra llamar Monster. Un monstruo, ge
neralmente, podra ser definido como una criatura feroz de algn tipo, que aterroriza a la
gente y reduce el patrimonio. En la clase.Monster se puede definir nicamente el compor
tamiento que califique el ser feroz, terrible y malo para el entorno.

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

voladores podra incluir bajar en picada sobre la presa, lomar campesinos y cargarlos hacia el
cielo, soltarlos de grandes alturas y cosas similares. Los monstruos que caminan podran tener
un comportamiento distinto y ser ms susceptibles al ataque de arqueros. La figura 2.3 le
muestra lo que ha hecho.

Figura 2.3
La jerarqua bsica
Monster.

. L a funcionalidad que es comn a mltiples clases se puede colocar en superclases, lo

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

. Los cabios a la superclase se reflejan automticamente en todas sus subclases, las

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

I'

Un vistazo a la programacin orientada a objetos


Da 2

531

I 52

La herencia en accin
En Java la herencia funciona de manera mucho ms simple que con las herencias en el mundo
real. En el mundo Java no se requieren albaceas, jueces, o cortes de algn tipo.

Cuando se crea un objeto nuevo, Java registra cada variable definida para el objeto y cada

variable definida para cada superclase del objeto. De este modo, todo lo que contienen las
clases se combina para formar una estructura descriptiva del objelo en uso, y cada objeto
Figura

aporta la informacin apropiada para su situacin.

2.4

FlyingMonster

Los mtodos trabajan de manera parecida: los objetos nuevos tienen acceso a todos los nom
bres de los mlodos.de su clase y superclase. Esto se determina de manera dinmica cuando

ti

se usa un mtodo en un programa en ejecucin. Si se hace un llamado a un mtodo en un

objeto en particular, el intrprete de Java primero revisar la clase del objeto para este mto

FourLegged

do. Si no lo encuentra, el intrprete de Jav;i lo busca en la superclase ilc esa clase, y as suce

FlyingMonster

sivamente, hasta encontrar la definicin del mtodo. Esio se ilustra en la figura 2.5.

(3
Figura 2.5

Mammal

Repule

Ubicacin de los

Amphibian

inciiiJo\ dentro de una

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

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

Nota

diatamente debajo de
de las clases a organizar.

i*

1^'^hc^o a cada subclase.

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

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,

cree un mtodo con ti mismo nombre, tipo de valor de retomo y argumentos como el mtodo
en la superclase. A este proceso se le denomina xobreposicin (figura 2.6).

Da 2

Un vistazo a la programacin orientada a objetos

551

Las interfaces son un tema que se entiende mejor despus de tener alguna experiencia de

Figura 2.6

programacin orientada a objetos y Java. Las explorar ampliamente durante el da 15,

Sobrepostcin de

El mtodo es sobrepuesto

mtodos.

por esla definicin

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

Paquetes
Definicin inicia!

En Java los paquetes son una forma de agrupar clases e interfaces asociadas. Habilitan los

bel mtodo

., grupos de clases para estar disponibles slo si son necesarios y eliminan los conflictos
potenciules entre los nombres de clases en grupos diferentes de clases.

Por ahora, slo necesita conocer esto:

El mensaje se enva al objelc


y es pasado por la jerarqua

jis bibliotecas de clases en Java estn contenidas en un mi/ucie llanuiilo java. Las

hacia arriba hasta que se

encuentre una definicin que

clases en el paquete java estn garantizadas para estar en cualquier mplcmeniacin

le corresponda

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

ciones especficas.

Herencia sencilla y mltiple

En forma predeterminada, sus clases de Java slo tienen acceso a las clases en

Fu J-tva a la forma de herencia se le denomina herencia semilla debido a que cada clase Java
slo puede lencr una superase (aunque cualquier suprelas* dada pueda tener mltiples suh-

j ava. lang (caractersticas bsicas del lenguaje). Para usar clases de cualquier otro

paquete, tiene que referirse a ellas explcitamente por nombre de paquete o importar
las a su archivo fuenic.

clases).

En otros lenguajes de programacin orientada a objetos como C++, las clases pueden tener
ms de una "upcrclase y heiedar variables y mtodos de forma combinada de todas aquellas
supcrclases A esta forma se le denomina herencia mltiple, y proporciona la estructura para

que se pued tn crear clases que conformen casi cualquier componamiemo imaginable. Mn
embargo, cemplica significativamente las definiciones de clase y el cdigo necesario para

producirlas. Java hace ,ue la herencia sea menos complicada al habilitar nicamente la herencia sencilla.

Para referirse a una clase dentro de un paquete, se deben listar lodos los paquetes
que la clase contiene seguidos del nombre de clase, con cada elemento separado por
puntosf.). Por ejemplo, supongamos la clase Color. Est contenida en el paquete awt,

el cual est a su vez en el paquete java. Para referirse a la clase Color en sus progra
mas se puede usar la notacin java.awt.Color.

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.

implemcnu,, sea ms acl de comprender y disear. Sin embaivo. lamb.en podna ser resme-

cuando se crean los applets. Crear applets es diferente a crear aplicaciones. Los applets java

1 , herencir. sencilla h.- ce que la relacn entre clases y la funcionalidad que estas clases

Cuando empieza a programar en Java, el uso ms comn de la generacin de subclases es

,iv, (sobre i.do cuand , se cuenta con comprtamelos smil-tes que necesitan ser duplica
dos :i lo lar; o de br;./. s Jislimos de l:i jerarqua de clases) O> l:is i.iu-i laces. J.v:i resuelve

portamiento. Debido a estas reglas especiales para los applets, crear un applet sencillo es

el problenu del eomp namiento compartido.

ms complicado que crear una aplicacin sencilla.

Trmino Nuevo

se ejecutan como parte de una pgina Web, y por tanto tienen reglas especiales para su com

Jna interf, z es un conjunto de mtodos que indican que una clase tiene un com

Todos los applets son subclases de la clase Applet (la cual es parte del paquete j ava. applet).

jonamieni i particular adems del que hereda de sus superclases.

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.

ii

571

Un vistazo a la programacin orientada a objetos

Da 2

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
sis y este nuevo objeto se asigna a f.

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

Al crear una variable de instancia para contener este objeto Font, lo pone disponible para

public class Palindrome extends java.applet.Applet

todos los mtodos en su clase. El siguiente paso en el proyecto Palindrome es crear un mto

// y an hay ms

do que lo use.

Cuando escribe applets, hay varios mtodos definidos en la superclase Applet que usted

comnmente sobrepone a su applet. stos incluyen mtodos para configurar el applet antes de
que se ejecute, para iniciar el applet, para responder a la entrada del ratn, y para que libere

applet.Applet.

recursos cuando el applet termine su ejecucin.

Uno de estos mtodos es paint (), el cual maneja cualquier cosa que debiera ocurrir cuando
el upplet se despliegue en una pagina Web. El mtodo paint () que heredn de Palindrome no

hace nada (es un mtodo vaco). Al sobreponer paint (), usted indica que debera ser dibuja

definir la relacin entre las dos clases.

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
mtodo pblico, o el programa Java no se compilar exitosamente.

embalo, todos los appleis deben ser public.

,,ho .*; no asreg

El mtodo paint () toma un argumento sencillo: una instancia de la clase Graphics llamada
j, ,*

screen. La clase Graphics proporciona el comportamiento para transformar las fuentes 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.

declaracin:

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


Esta instruccin cumple dos cosas:

Ya ha hecho tres cosas dentro de su mtodo paint ():

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

Un vistazo a la programacin orientada a objetos

Da 2

591

He aqu cmo luce el applcl despus de todo:


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

publie class Palindrome; extends java.applet.Applet {


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

publie void paint(Graphics screen)


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

todas las clases en el paquete java.awt:

import

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

5,

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

36);

java.awt.*;

,
Ahora, con las clases apropiadas importadas en su programa. Palindrome. java debera

40);

compilarse sin problemas a un archivo de dase. El listado 2.4 muestra la versin final para

En este pumo debi haber notado que algo faltaba en el ejemplo. Si guard una copia e nicn-

una revisin doble.

l compilarlo, podra haber visto una serie de errores como el siguicnle:


Palindrone.java:2: Class Font not found in type declaration.

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

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

paquete (java, applet. Applet). En el resto del programa, se refiri a otras clases s.n usar

1:

import java.awt.Graphics;

2:

import Java.awt.Font;

3:

import java.awt.Color;

4:

5:
6:

publie class Palindrome extends


Font f =

java.applet.Applet

new Font("TimesRoman",

Font.BOLD,

36);

7:

sus nombres de paquete.

8:

Hay dos formas de resolver este problema:

. Referirse a todas las clases exlernas por su nombre de paquete compleio, como
java.awt.Graphics,

Listado 2.4. La versin final de palindrome. java.

java.awt.Font, y java.awt.Color.

. Usar una instruccin import al principio de! programa para que estn disponibles uno

publie

9:

void paint(Graphics

screen)

screen.setFont(f);

10:

sereen.setColor(Color.red);

11:

screen.drawString("Go hang a

salami,

I'm

lasagna

hog.",

5,

40);

12:
13:

o ms paquetes y clases en el programa.

Cul elija es, en su mayor parte, un asunto de preferencia personal: pero si se refiere a una

Guarde este archivo con el nombre Palindrome. java. Puesto que este archivo fuente con

de texto.

clase pblica para que se compile exitosamente. El uso de maysculas y minsculas aqu tam

clase en otro paquete muchas veces, tal vez prefiera usar import para dism.nu.r la canndad
En este ejemplo se usar lo ltimo.

Para importar estas clases, aada los tres enunciados siguientes antes de la induccin
Palindrome:

tiene una clase pblica, Palindrome, el nombre de archivo debe corresponder al nombre de la
bin es importante, por lo que las letras deben ser idnticas.

Este archivo fuente puede ser compilado de la misma manera que las aplicaciones Java que

usted ha creado hasta aqu. Sin embargo, para poder ejecutarlo, debe crear una pgina Web

publie

class

import

java.awt.Graphics;

import

java.awt.Font;

Muchos programas de desarrollo de pginas Web, como Home Page de Claris y Dreamweaver

iniport

java.awt.Color;

de Macromedia, permiten colocar un applet Java dentro de una pgina Web.

para colocarlo.

Si no tiene una de estas herramientas, puede crear una pgina Web sencilla mediante las ca
ractersticas asociadas Java del lenguaje descriptivo de pginas HTML.

Un vistazo a la programacin orientada a objetos

50

61

ff

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

salan n, I 'ni

1 as a na ho.

Cl

Acplet euiuo

de HTML. pero aqu hay dos

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

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.

.I

I
II
Q

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.

631

Un vistazo a la programacin orientada a objetos


Da 2

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

Para resum.r el materia, de hoy, aqu le presentamos un g.osario de los trminos que se

ciones?

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

cubrieron:
eron:

ciones miembro). Otros lenguajes orientados a objetos las diferencian de las funciones

de.ntro y fuera del cuerpo de una clase u objeto, ya que en esos lenguajes el uso de !
trminos separados es importante para entender cmo opera cada funcin. Puesto que

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

de otras clases.

Ohieto instancia de una clase. Objetos mltiples que son instancias de la misma clase

2 acl^o a los mismos mtodos, pero frecuentemente tienen valores d.stintos para sus
variables de instancia.

Es lo mismo que un objeto. Cada objeto es una instancia de alguna clase.

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

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.

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

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

el objeto. Por ejemplo, para crear una nueva instancia de una clase, necesita un mto
do que est definido y disponible para la Case por s misma. De olra manera, usleil

corre entre el dilema del huevo y la gallina (no puede crear un objeto beb sin la exis
tencia del objeto mam, que tiene un mtodo de creacin de bebs; y ningn objeto
mam puede existir sin haber tenido antes un beb).

m
m

Semana 1

m
m
m

m
&

DA

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

Los ABCs de Java

Da 3

j.Las instrucciones en Java estn agrupadas mediante una llave que abre ({) y la que cierra()).
Al grupo de instrucciones organizadas entre estos caracteres se le denomina bloque o bloque
de instrucciones. Aprender ms acerca de ellos durante el da 5, "Listas, lgica y ciclos".

Puesto aue Java es similar a C y C++. gran parte del material en este da les

pa exiliar a los programados que estn versados en esos lenguas

Nota

de una sola letra. Cuando sea necesario, las notas tcn,cas como esta

describirn las diferencias especficas entre Java y otros lenguajes.

Variables y tipos de datos


En la aplicacin Jabberwock que cre el da 2, "Un vistazo a la programacin orientada a

iva^

objetos", us las variables para dar seguimiento a la informacin.

y expresiones

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

Trmino Nuevo

instrucciones.

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

grama, de aqu el nombre.

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


TRMINO
_ tlUEVQ

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

Para poder crear una variable, debe darle un nombre e identificar qu lipo de informacin alma

que hace que algo ocurra.

cenar. Tambin le puede dar un valor inicial a una variable al mismo tiempo que la crea.

, as insnuccones representan una necon sencilla que se ,oma en un programa Java Todo lo

En Java hay tres tipos de variables: variables de instancia, variables de clase y variables

siguiente son instrucciones sencillas de Java:

locales.

int ag' = 30;

Las variables de instancia, como lo aprendi ayer, se usan para definir los atributos de un
objeto.

import java.awt.dnd;

Systemout.printim-VouTenotthebossof mel");

, Las variables de clase definen los atributos de toda una clase de objetos, y aplican a todas sus
instancias.

player score = 41367;

AlgUna instrucciones producen un va.or, como cuando suma dos nmeros dentro de un pro
grama. \ es.:.s instrucciones se les llama expresiones.

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

=:
- Alinas expresiones producen un valor de retomo numrico, como en el ejem-

B po de sumar dos nmeros juntos. Otros producen un valor boolcano (true o

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

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

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

o .ncluso pueden producr un objeto de Java. Hablaremos de ellos ms ade.amc.

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

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


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

Creacin de variables
Antes de que pueda usar una variable en un programa de Java, usted debe crear la variable
declarando su nombre y tipo de informacin que almacenar. Se enlista primero el tipo de

67

691

Los ABCs de Java

Como indica la ltima instruccin, usted puede asignar valores a variables mltiples del
mismo tipo mediante comas para separarlas.

A las variables locales se les debe dar valores antes de ser usadas en un programa, o el pro

variable:

grama no se compilar con xito. Por esta razn es una buena prctica darle valores iniciales

int highScore;

String

a todas las variables locales.

username;

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

boolean gameOver;

del tipo de informacin que contienen:

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(

),

o un signo de pesos($). No pueden empezar con un nmero! Despus del primer carcter, los
nombres de variable pueden incluir cualquier combinacin de letras o nmeros.

un prcrama.

Li] static void axn (StrinQ argumentsU ) <


jnt total;

tring reportTitie,

\oolean active;

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

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

Str.ng street, city. state;

variable rosa no es igual a Rosa ni tampoco a ROSA.

val! rLas siguientes instrucciones ere

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

ini zipcode = 90210;


St.ing ame - "Brandon";

b0..lean cneatedOnKelly -= fue;


in: age = 28,

cacin de las palabras, se aplica la siguiente gua estndar:


La primera letra del nombre de variable es minscula

Cada palabra despus del nombre de la variable empieza con mayscula


Todas las dems letras son minsculas

71

Los ABCs to J.i

Da 3

Las siguientes declaraciones de variable observan esta regla de nomendatura:

demasiado grande o demasiado pequeo para su tipo de variable designado, por lo que usted
debera ser precavido al designar el tipo.

Button loadFile;

Trmino Nuevo

int areaCode;

Otro tipo de nmero que puede ser almacenado es un nmero de punto flotante,
el cual tiene el tipo float o double. Los nmero.1! e punto flotante representan

nmeros con una parte decimal. El tipo float debera ser suficiente para la mayora de los

boolean piayerSetNewHighScore;

usos, puesto que puede manejar cualquier nmero de 1.4E-45 a 3.4E+38. Si no es as, se
puede osar el tipo double para nmeros ms precisos en el rango de 4.9E-324 a 1. 7E+308.

Tdos de variable

Adems de un nombre, una dejacin de vanab.e debe incluir el tipo de informacon que se

El tipo char se usa para caracteres individuales como letras, nmeros, puntuacin y otros

van almacena, El upo puede ser de cua.quiem de los s,gu,e,,es:

smbolos.

El ltimo de los ocho tipos de datos bsicos es boolean. Como sabe, en Java los valores

. Uno de los tipos de datos bsicos

booleanos pueden contener true o f alse.

. El nombre de una clase o interfaz

Todos estos tipos le variables estn listados en minsculas, y usted debe usarlos igual en Io
programas. Hay clases con el mismo nombre de algunos de estos tipos de dalos pero diferente

Un arreglo

inicial, por ejemplo, Boolean y Char. stas tienen diferente funcionalidad en un programa
lipos de variables.

Java, por lo que usted no las puede usar cu forirui intercambiable. Maana ver cmo se usan

Tdos de datos

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

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.

"Walsh";

hair;

Jabberwock

firstMonster;

Cuando una variable tiene una clase como su tipo, la variable se refiere a un objeto de esa
clase o-a una de sus subclases.

Tabla 3.1. Tipos de entero.

Tamao

Color

lastName

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

ser interpretado como un documento oficial del modo en que trabajan la clase y sus mtodos

Nota

pblicos.

pueden usar esa clase como su tipo.

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.

Trmino Nuevo

lario.s.

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:

sin ejecutable de un archivo fuente de Java.

Hay tres diferentes tipos de comntanos que se pueden usar en ,a programacin de Java y los
puede usar a su eniera discrecin.

Int

year =

1998

La literal es 1998 porque representa directamente el valor entero 1998. Nmeros, caracteres y
cadenas, todos ellos son ejemplos de literales.

Aunque el uso y significado de las literales pareyea muy sencillo. Java liene algunos tipos
especiales de literales que representan diferentes lipos de caracteres, nmeros, cadenas y va

como en la siguiente instruccin:

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

lores booleanos.

Literales numricas

En este ejemplo todo e, texto desde hasta e, fina! de ,a Knea es un comen.ano y e, comp,-

Java tiene varias literales enteras. El nmero 4, por ejemplo, es una literal eniera de tipo de

ador e Java no lo tomar en cuenta.

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

Da 3

I 74

Los ABCs de Java

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

Si ha usado otros lenguajes como C, esperara que un valor de 1 fuera equivalente a true y

0 a false. ste no es el caso de Java (debe usai\ los valores true o f alse para representar

como en -45.

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


boolean toThineOwnSelf = true;

Los sistemas de numeracin octal y hexadecimal son convenientes para muchos

Nota

Observe que la literal true no est entre comillas. Si as fuera, el compilador Java podra

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

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

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

Literales de caracteres

Hexadecimal es un sistema de numeracin base16, y puede representar 16

nmeros como un dgito sencillo. Las letras A a F representan los ltimos seis

Lasjiterales de caracteres se expresan mediante un carcter sencillo entre comillas sencillas,

dgitos, por lo que los primeros 16 nmeros son 6, 1,2, 3, 4, 5, 6, 7, 8, 9, A, B,

como 'a",'#' y "31. Usted debiera estar familiarizado con el conjunto de caracteres ASCII,

C, D, E. F. .

'

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.

Si necesita un entero literal con numeracin ocial, anteponga un 0 al nmero. Por ejemplo, el
nmero octal podra ser la literal 0777. Los hexadecimales enteros se usan como liieralc-s al
anteponer 8x al nmero, como en 8x12 o OxFF.

el cual incluye 128 caracteres entre letras, numerales, puntuacin y otros caracteres tiles en
computacin. Java sopona miles de caracteres adicionales a travs del estndar Unicode de 16

bits.

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

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

Significado

Todas las literales de puni notante se consideran del tipo de variable double en ve/ de
f loat. Para especificar una literal de f loat. agregue la letra RF o fia la literal, como en

\n

Lnea nueva

\t

Tabulador

el ejemplo siguiente:

\b

Retroceso

float

piValue = 3.1415927F;

Utilice expolenles en las literales de punto dolante al usar la letra e o E, seguida del expo

\r

Retomo de carro

\f

Salto de hoja

nente, el cual puede ser un nmero negativo. Las instrucciones siguientes usan notacin expo

\\

Diagonal invertida

nencial:

\'

Comilla sencilla

double

double

12e22;

19E-95;

Literales booleanas
Los valores booleanos true y f alse tambin son literales. stos son los dos nicos valares

que puede u.-ar cuando se asigna un valor a una variable de tipo boolean o cuando, de algn
modo, se requiere un booleano dentro de una instruccin.

\-

Comillas dobles

\d

Octal

\xd

Hexadecimal

\ud

Carcter Unicode

75 |

77

Los ABCs de Java

Da 3

76

Aunque las literales de cadena se usan en forma parecida a otras literales en un programa, son
manejadas en forma diferente tras bambalinas.

Al usar una literal de cadena, Java almacena este valor como un objeto String. Usted no
tiene que crear un objeto nuevo explcitamente, como lo tendra que hacer al operar con otros
objetos, de modo que son tan fciles de operar como los tipos de datos bsicos. En este
aspecto las cadenas son poco comunes; ninguno de los tipos bsicos son almacenados como
objeto cuando se usan. Hoy y maana aprender ms acerca de cadenas y la clase String.

Literales de cadena

dc caraclei,s. En Java

Expresiones y operadores
Una expresin es una instruccin que produce un valor. Algunas dc las expresiones mas

bay n,l0dos

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


int

= 3;

int y = 4;

cor

int

'

y;

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

inacciones !

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

"Precaucin

A la mayora de los
Unicode al

,.0.2 slo soportaba el

Hay cinco operadores que se utilizan para ejecutar la aritmtica bsica en Java. stos se
muestran en la tabla 3.3

debe soportarlo para

pueda ser re

el despliegue de cualquier

el sitio Web del consorcio

Suma

Resta

Multiplicacin

'

Divisin

14

Mdulo

20

til
. Da 3

Los ABCs de Java

Cada operador usa dos operandos, uno a cada lado del operador. El operador resla tambin se

puede usar para negar un operador sencillo (lo que equivale a multiplicar el operando por -1).

79 i

25:
26:

Al usar la divisin tenga presente el tipo de nmeros con que se maneja la operacin. Si
almacena una operacin de divisin en un entero, el resultado ser truncado a un nmero

entero, ya que el tipo de datos int no puede manejar nmeros de punto flotante. Como un
ejemplo, la expresin 31

Si ejecuta esta aplicacin Java, produce la siguiente salida:


You start with 6 pet amoebas.

9 produce un resultado de 3 si se almacena como un entero.

Two get married and their spouses move in

You now have 8

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

Mitosis occurs, doubling the number of amoebas

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

You hw have 16

Observe que la mayora de \z operaciones que involucran enteros producen un int sin

You now have 12

There's a fight. 4 amoebas move out.

importar el tipo origina! de los operandos. Si est trabajando con oros nmeros, como

Paramecia attack! You lose one-third of the colony

nmeros de punto flotante o enteros long, debera asegurarse que los operandos tengan el

You end up with 8 pet amoebas.

Daily upkeep cost per amoeba: $0.12

mismo tipo con el que usted quiere lerminar.

Total daily cost: $0.96

El listado 3.1 es un ejemplo ce aritmtica sencilla en Java.

En esta sencilla aplicacin Java, las tres variables estn creadas con valores iniciales en las

lineas 3-5: el entero x. el en,ero corto y, y el nmero de pumo flotan,,- a. Como el upo prede
terminado para los nmeros de punto flotante es double, se antepone una f a la literal .12

Listado 3.1. El archivo fuente amoebamath . java .


1:
2:

putlic static void main (String arguments[]) {


x

6;

4:

short

5:

float a =

3:

6:
7:
8:

para indicar que es del tipo float.

class oebaMath {
int

El resto del programa usa operadores aritmticos para dar seguimiento a la poblacin de una
colonia de amibas. (Ninguna amiba resuli daada durante la preparacin de este da.)

4:

.I2f;

System.out.println("You start with "

+ x +

"

pet amoebas.");

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


in.');

9:

10:
11 :
12:

"

+ x);

System.out.println("\tMitosis occurs,

doubling the number of

14:

15:

16:

x! =

2;

System.out.println("You now nave "

+ x);

System.out.println("\tThere's a fight.

" + y + " amoebas move

out.");

17:
18:
19:
20:

21:

22:
23:
24:

y;

Systen. out. println ("UParamecia attack!


the

colony.');

x =

(x

3);

Ms sobre asignacin
La asignacin de un vaJor a una variable es una expresin, debido a que produce un valor.
Por esta caracterstica, usted puede encadenar las instrucciones de asignacin unidas de la

siguiente manera:

System.out.println("You now have " + x);

puede usar el operador + para combinar estos elementos en una cadena sencilla.

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

amoebas.");
13:

de salida estndar, la cual suele ser la pantalla.

System.out. println() toma un argumento sencillo dentro de sus parntesis: una cadena
Para poder presentar ms de una variable o literal como el argumento para println (), usted

2;

System.out.println("You now nave

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

You lose one-third of

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

7;

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

lid

Los ABCs de'ava

Da 3

81

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


can inmediatamente despus de, o inmediatamente antes de, un nombre de variable, como en

de ejemplo:

el siguiente cdigo de ejemplo: ;

int x = 5;
x = x + 2;
- v - x + 2 lo primero que
En la expresin x - x + .
l

ocurre es

que

alcula x + 2 . El resultado de

se ca

este clculo. 7. se asigna entonces a x.

uv comn en progra-

int

x++;

= 7;

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

equivalentes a:

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

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

despus de un nombre.

3.4. OPERADORES DEASIGNAGN.

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.

cada lado de su in

on

eme$_ por ejemp,0 si

int

x,

42;

y,

x++;

++x;

z;

stas arrojan valores muy distintos por la diferencia entre el prefijo y el posfijo. Al utilizar
operadores de posfijo como en y = x ++, y recibe el valor de x antes tic ser incrementado por
1. Cuando se usan operadores de prefijo como en z = ++x, x se incrementa por 1 antes de

que el valor se asigne a 2. El resultado final de este ejemplo es que y es igual a 42, 2 igual a
44 y x igual a 44.

mismo valor:

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

x = x / y + 5;

con comentarios que describen cada paso:


int x, y,
x = 42;
y _ x++.

2 = ++x;

mcrerfento y decremento^^awectk

h^^_

2;
_

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

// incrementada y entonces x se ha incrementado a 43


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

Da 3

Precaucin

Los ABCs de Java

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

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

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.

83

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

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

lgico.

Para'las combinaciones AND se usan los operadores lgicos & o &.&. Cuando dos expresiones
booleanas son enlazadas por los operadores & o &&, la expresin combinada devuelve el valor

true slo si las dos expresiones booleanas son ciertas.

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.

Esta expresin combina dos expresiones de comparacin: age < 21 y girlf riendAge > 78.

Si ambas expresiones son verdaderas, el valor true est asignado a la variable unusual. En

Estos operadores se usan en expresiones que devuelven valores booleanos true o f alse.

cualquier otra circunstancia, el valor f alse se asigna a unusual.

dependiendo de ;i la comparacin que se hace es verdadera o falsa. La tabla 3.5 muestra a los

La diferencia entre & y && radica en cunlo Irabajo realiza Jasa en la expresin combinada. Si

operadores de ce mparacin.

se usa &, las expresiones en cada lado de & son evaluadas indistintamente. Si se usa && y el

lado izquierdo de && es f alse, la expresin en el lado derecho de la && nunca se evala.
Tabla 3.5. Operadofes de comparacin.
Operador

Significado

Ejemplo

Igual

==

No igual

1=

Menor que

<

Mayor que

>

Menor que o igual a

<= 3

Mayor que o igual a

>=

Otro ejemplo inspirado en Harold Maude:

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

El ejemplo siguiente muestra un operador de comparacin en uso:


boolean

Para las combinaciones OR se usan los operadores o Estas expresiones combinadas


devuelven un valor true si cualquiera de las expresiones booleanas son verdaderas.

hip;.

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

a la variable unusual. nicamente si ambas de estas expresiones son f alse el valor false se
asignar a unusual.

Observe el uso de en vez de . Por este uso, si grimThoughts > 10 es true, se asigna el
La combinacin XOR tiene un operador lgico, \ Esto provoca un resultado true slo si las

hip

dos expresiones booleanas que combina tienen valores opuestos. Si ambas son true o ambas

age

< 25;

La expresin ; ye

<

25 produce un restituido ya se;i truc ti falsc, ilcpeiiilicnilo del valor tle-1

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.

valor de true a unusual y la segunda expresin nunca se evala.

int age = 3::;


=

' /!

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

La combinacin NOT usa el operador lgico I seguido de una expresin sencilla. Invierte
el valor de una expresin booleana de la misma manera en que un smbolo menos inviene el
signo positivo o negativo en un nmero.

85 1

Los ABCs de Java

Dia 3

llcvlH:,w

,.o, ,-u,

< Suelve

a.o,

Operador

Notas

new

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

(tipo)expresin

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


acerca de ambos temas.)
Multiplicacin, divisin, mdulo.

especialmente en el da 5.

Suma, resta.

Precedencia de operadore

<

>

eniza el valorado la expresin.

Desplazamiento de bits a la izquierda y derecha.

csublccK;1

<=

Pruebas de comparacin por relacin.

>=

Igualdad.

!=

AND

&

XOR

OR

n .enera,, e. orden de. primero a, himo es el siguiente:


". ()pcr.c.K-s de incremento y decrcmento

&&

AND lgico.

OR lgico/

? .

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

= +* .= = /= %= -=

Asignaciones varias.

4=

Ms asignaciones.

= = = >>>=

__

. Opci iciones aritmticas

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

. Coir puniciones

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

Ope, aciones lgicas

Para cambiar el orden en que se evalan las expresiones coloque parntesis alrededor ilc las

^ones de asignacin

,cuU en ,a c,P-n

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

?&^

expresiones que se deber evaluar primero. Anide un conjunto de parntesis dentro de otros

para asegurarse que las expresiones se evalen en el orden deseado (la expresin de parntesis
ms interna se evala primero).
La siguiente expresin produce un valor 5:

Xso.r.s primeros en ser evaluados.

y =

(6 + 4)

El resultado es el valor 5, porque 6 + 4 se calcula antes del resultado, 10, que es dividido
Notas

entre 2.

"Mediante
Mediante los
los parmesi
pa. :..--

" <;

vnrhh|e, dentro de objetos y

sirve para ner acceso a mtodos >var^


/

, .vmindrn maana), ios u

clases (se expon"""'

arreglos, i

+*

- instanceo-f

Este operador dev

una instancia de \
expone maana).

^.^ cn |os
,,,.,]

'osieiioniienie en la seni.iiui. i

basndose en si el objeto e

Los parntesis tambin pueden ser tiles para nwjorar la lectura de una expresin. Si la prece
dencia de una expresin no es inmediatamente clara para usted, aada parntesis para impo
ner la precedencia deseada, de modo que la instruccin sea ms sencilla de entender.

H!

I!

Los ABCs do Java

Da 3

Resumen

Aritmtica de cadenas

Concatenar significa enlazar dos cosas. Por convencin se ha elegido este verbo
Trmino Nuevo

Quien abre una a una las matruskas queda algo decepcionado al llegar a la mueca ms

Como se estableci previamente hoy. el operador tiene una doble vida fuera del mundo de
las matemticas. Puede ser usado para concatenar dos o ms cadenas.

871

tas rusos para crear muecas an ms pequeas, hasta que alguien alcance el lmite subatmi
co y se declare el ganador.

Usted ha alcanzado la mueca anidada ms pequea de Java, lo cual no debera ser una

mar, unir, cornbinar, enlazar y conjuntar).

desilusin. El uso de instrucciones y expresiones lo habilita para comenzar a construir mto

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

dos efectivos, lo cual hace posible objetos y clases efectivos.

String firsName = "Raymond";


>.
System.out.printlnf'Everybody loves + firstName),

Hoy aprendi a crear variables y asignarles valores; usar literales para representar valores

Estas dos lneas hacen que se despliegue el texto siguiente:

dades al tiempo que desarrolle objetos para programas Java.

numricos, caracteres y cadenas y trabajar con operadores. Maana podr usar estas habili

Everybody loves Raymond

Para resumir el materia! de hoy, la tabla 3.7 lista los operadores que usted ha aprendido.

El operador combina cadenas, otros objetos y variables para formar una cadena sencilla^ En

Imagnese que es una mueca matruska y revselos cuidadosamente.

firstName.

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

Tabla 3.7. Resumen de operadores.

Operador

puede manejar cu quier tipo de variable y valor de objeto como si Iueran una den* S>
cualquier pane de una operacin de concatenacin es una String o una hteral String. todos

Significado
Suma
Resta

los elementos de I i operacin sern tratados como si fueran cadenas:

Multiplicacin

System.out.prirtln(4 + score and " + 7 years ago.");

Divisin

Mdulo

Esto produce el te: to de salida 4 score and 7 years ago., como si las literales enteras 4

Menor que

y 7 lucran cadena:.

Hay tambin un o ,erador cono = para aadir algo al final de la caoena. Por ejemplo, la

>

Mayor que

<=

Menor que o igual a

==

Igual

expresin siguieni::
myNarae +=

"

pequea en el grupo. Idealmente, los avances en microingenierfa deberan habilitar a los artis;

para describir el acto de combinar dos cadenas (destacndose sobre pegar, engo

el ejemplo precdeme, la Hiera) Everybody loves se concatena al valor del objeto Stnng

Mayor que o igual a

Jr ";

Esta expresin es equivalente a la siguiente:

i =

Diferente

myName = myNar; +

&&

ANO lgico

" Jr.";

En este ejemplo >. t cambia el valor de nyName (que podra ser algo parecido a Ef rgm
Zimbalist)alaudirJr. al final (Efrem Zimbalist Jr.).

li

i
&
i

!:

OR lgico
NOT lgico
ANO

OR

fll

Semana 1

Tabla 3.7. continuacin

XOR

Asignacin
Incremento
Decrcmento

Suma y asignacin
Hi-si y asignacin

Multiplicacin y asignacin

Da

Divisin y asignacin
Mdulo y asignacin

Lecciones de objetos
Hace dos das, la programacin orientada a objetos se comparaba con la cerveza, ya

que sta tiene un sabor que se aprecia con el tiempo que podra provocar desorien

ejemplo * .to

c,o ,.,

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.

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

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

po enea de progn ^^

^^

-^

compor.

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

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

crad()res conos SOI, uno de los

Creacin de objetos (tambin llamados insiancius).

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


s,

^.K-do evitarlo

e)

Revisin de la ejecucin y modificacin de variables de clase y de instancia

1M- u>

en esos objetos.

c. si. ptop.a

Llamadas a los mtodos de un objeto.


;

Conversin de objetos y otros tipos de datos de una clase a otra.

Lecciones de objetos

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

para generar los nmeros aleatorios en un programa. Estos objetos son llamados generadores

nuevo de cualquier clase dada.

de nmeros aleatorios, y su rango es de un valor decimal de 0.0 a 1.0. Los nmeros aleato

,. Recuerda las cadenas de ayer? Aprendi que mediante una literal de cadena (una serie de
caracteres entre comillas dobles) crea una nueva instancia de la clase String con el valo.

'

91

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

rios son tiles en juegos y otros programas en los cuales s necesita un elemento de impre- dictibilidad.

<

de esa cadena.

En realidad el objeto Random no genera nmeros de manera aleatoria. En vez de ello, loma un

En este caso la clase String no es comn. Aunque es una clase, hay una forma sencilla de

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

crear instancias de esa clase mediante una literal. Las otras clases no uenen ese atajo;

para crear instancias de esas clases usted nene que hacer.o de manera explica med.an.e el
operador new.

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

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

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

rentes.

, os tambin? Realmente, no lo hacen. Los tipos de datos primitivos para


nmeros y caracteres crean nmeros y caracteres, pero por ef.cenca en

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

Listado 4.1. El texto completo de handomnumbers.java.


1:

import

java.til.Random;

2:

3:

class RandomKunbers

4:
5:

Uso de m.'W

Para crear un o jeto nuevo, utilice el operador new con el nombre de la clase de la :ual desea

crear una instai cia, seguido de parntesis:

String team!-ame = new StringO;


Random rand nfo = new RandomO;
jabberwock
= new JabberwocM );

Los parmesi son importantes: no hay que retirarlos. Los parntesis pueden estar vacos en

publie static

6:

Randon

void main(String

r1,

argumens[])

valu

r2;

7:
8:

r1

9:

System.out.println(Randoro

new

Random();
1:

"

r1.nextOouble());

valu 2:

"

r2.nextDouble());

10:

11:

r2 =

12:

System.out.println("Randoi

new Random(8675389);

13:
14:

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

objeto. Los templos siguientes muestran objetos que estn s.endo creados con ar .amentos.
GregorianCalendar date = new Gre0orianCalendar(64, 6, 6, 7, 30);
Point pt :

new Point(0,0);

I a cantidad v tipo de argumentos que puede usar dentro de los parn.esis con nev estn
d finidos p. 'r la clase en s misma mediante un mtodo especial llamado connruc o, (Ho>

p Ir , s acerca de los constructores.) Si trata de crear una nueva insumo. una Case

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


Random valu

1:

Random valu 2:

0.312596.1341023068
0.754788115099576

En este ejemplo se han creado dos objetos Random distintos usando argumentos distintos para
la clase listada despus de new. La primera instancia (lnea 8) usa new RandomO sin argumen

tos, la cual crea un objeto Random alimentado con una semilla de la hora en curso. Su valor

Lecciones de objetos

'

Observacin acerca de la administracin

de memoria

Si est familiarizado con otros lenguajes de programacin orientada a objetos, quiz se pre
gunte si el operador new tiene un opuesto que destruya un objeto cuando ya no lo necesite.

.-o.no la semilla.

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

usa una .itera, como la segunda sem,-

1V. La segunda l

S3j

#
m

Por esta razn, no tiene que desalojar la memoria utilizada por un objelo cuando haya termi
nado de usarlo, pues para enlonces ste ya no tiene referencias activas de s (no ser asignado

a ninguna variable que usted siga usando, o almacenado en ningn arreglo). Java lienc un
recolector de basura que busca objetos sin usar y recuerda a la memoria qu objetos estn en
uso; por lo que no hay que liberar la memoria en forma explcita, slo asegrese de no con
tener ya un objelo que desee descartar.

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.

u hace new

v] ,nslal)C, ric ia das

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

Cu

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

,a cia

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

..,, ,... ,, obic

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

,ener un numero

Enire las mlpl


definicin de
mlp
Enin

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

specificar argumentos dife, u

.Jes en la lisia de argnmenK s, y se "a--a


Us mltiples definiciones de constructor o U q

^^

cs(os

Cmo obtener valores


nombre de variable de clase o de instancia tiene dos partes: el objeto a la izquierda del puni
y la variable a la derecha.

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:

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

myCustomer.orderTotal;

Esta forma de accesar variables es una expresin (esto es, devuelve un valor), y ambos lados
del punto lambin son expresiones. Esto significa que usted puede anidar el acceso a varia

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


a clase.

Para obtener el valor de una variable de instancia, usied usa la notacin de pumo. Con ella, un

Lecciones de objetos

D(a4

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

951

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


Starting location:

de esta forma:

'

X equals 4 '

myCustome.orderTotal.layaway;

Y equals

Las expresiones de punto se evalan de izquierda a derecha, as que inicie con l variable

13

Moving to

orderTotal de myCustomer, la cual apunta a otro objeto con la variable layaway.


Terminar con el valor de la variable layaway.
J

(7,

6)

Ending location:
X equals 7

Y equals 6

Modificacin de valores

Asignar un valor a esa variable es igualmente sencillo; slo hay que agregar un operador de
asignacin a la derecha de la expresin:
myCustomer.crderTotal.layaway = true;

mo las lneas 17 y 18 despliegan nuevamente los valores ile x y y para mosir.iiciiio han

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

2:

3:
4:
5:
6:
7:

8:
9:

10:
11 :
12:
13:
14:

15:
16:
17:
18:

import

cambiado.

Variables de clase
Las variables de clase, como ya Jo aprendi, son variables que estn definidas y almacenadas
en la clase por s mismas. Sus valores aplican a la clase y a todas sus instancias.

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


1:

(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

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

nadas con los 'alores x y

En este ejemplo, primero crea una instancia de Point donde x es igual a 4 y y es igual a 13

Con las variables de instancia, cada nueva instancia de la clase obtiene una nueva copia de las
variables de instancia que define la clase. Entonces cada instancia cambia los valores de estas
instancias sin afectar a las dems. Con las variables de clase slo hay una copia de esa varia

java.awt.Point;

ble. Al modificar el valor de esa variable lo modifica para todas las instancias de esa clase.

class fetPoints {

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

Usted define las variables de clase al incluir la palabra clave static antes de la variable
misma. Por ejemplo, tome la siguiente definicin parcial de clase:
class FamilyMember {
static String smame =
String ame;

"Igwebuike";

int age;

S.stem.out.println("\nMoving to (7, 6)");


1 ication.x =

Cada instancia de la clase FamilyMember tiene sus propios valores para ame y age, pero la

7;

1 ication.y = 6;

variable de clase smame slo tiene un valor para lodos los miembros de la familia:

S/steo.out.println("\nEnding location:-);

"Igwebuike". Cambie el valor de smame y todas las instancias de FamilyMember sern

ystem.out.printlnCX-equals

afectadas.

"

+ location.x;

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

19:
20:

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.

Lecciones de objetos

Da 4

97 1

96
System.out es una variable de clase que contiene una instancia de la clase PrintStream.

Este objeto PrintStream representa la salida estndar del sistema, la cual j>uele ser la pan
talla, mas puede ser redirigida hacia un monitor o a un archivo en disco. Los objetos

PrintStream tienen un mtodo println () que enva una cadena al flujo de salida.

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

2:
3:

publie

static

String

A:

void main(String

str

"In

my

next

arguments[J)

life,

will believe

in

reincarnation";

Llamadas a mtodos

5:

System. out. println ("Trie

6:

System.out.println("Length
+

7:

Llamar a un mtodo en un objeto es igu

a est a la izquierda del punto, y

9:

12:

System.out.println("The

index

15:

mtodo no tenga argumentos:

str);
"

position 7:

of

to 31:

the character x:

"substring

index of the beginning of

\"will\":

"

"

"
the

str.indexOf("will"));

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

16:
17:

"

str.indexOf('x'));

Systeui. out. println ("The

14:

R.,,Ea , ,

substring frora 24
31));

13:

"

string:

character at

str.substring(24,

11:

is:
this

str.charAt(7));

Systen.out.println("The

10:

of

str.lengthO);

System. out. println ("Trie

8:

string

str.tol)pperCase());

18:

19:

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

definido en myCistomer:

elAllOrdersO .talkToManager() ;

dar de su sistema

Trie string is:

In my next life,

Length of this

string:

The

character

The

substring from 24

The index

at

I will believe in reincarnation

48

position

to

7:

31:

of the character x:

believe
8

The index of the beginning of the substring "will": 19


The string in upper case: IN MY NEXT LIFE, I WILL BELIEVE IN

objeto myCustcner:

REINCARNATION

e se est rjoculando Java.

cll que

-"---"-

En la lnea 4 usted crea una nueva instancia de String al utilizar una literal de cadena. (Este
modo es ms sencillo que usar new e introducir los caracteres en forma individual.) El residuo
del programa, simplemente, llama a mtodos de cadena diferentes para hacer operaciones
diferentes en esa cadena:

m
m
*

Lecciones de objetos

Da 4

,98

La notacin de punto se usa para llamar a un mtodo de clase. Como con las variables de
clase, usted puede usar una instancia de la clase, o la clase en s misma, a la izquierda del
punto. Sin embargo, por las mismas razones mencionadas en las variables de clase, mediante
el nombre de la clase hace que su cdigo sea ms sencillo de leer. Las dos ultimas lneas en

. La lnea 5 imprime el valor de la cadena que usted cre en la lnea 4 In my next


life

I will believe in reincarnaton".

. La linca 7 llama al mtodo length() sobre el nuevo objeto String. La cadena tiene 48
caracteres.

este ejemplo producen el mismo resultado: la cadena 5:

.. La linca 9 llama al mtodo charAt (), el cual devuelve el carcter en la posicin dada

String s,

de la cadena. Observe que las posiciones de la cadena empiezan en la posicin 0 i.n

S2

Trmino Nuevo

rara un String.

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


objeto.

En realidad no est usando objetos cuando asigna un objeto a una variable o pasa un objeto
a un mtodo como un argumento. Tampoco est usando copias de los objetos. En vez de ello,

. La lnea 15 muestra un uso distinto del mtodo indexOf (), el cual toma un argumento
de cadena y devuelve el ndice del principio de esa cadena.

est usando referencias a dichos objetos.

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

Para ilustrar mejor la diferencia, el listado 4.4 muestra cmo funcionan las referencias.

mayscul is.

Listado 4.4. El texto computo de refebencestest. java.

Los mtodos de clase


1:

^;

2:
3:

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

mente a ella P< r ejemplo, la clase String contiene un mtodo de dase llamado valueOf<>
e puede ton, r uno o muchos tipos distintos de argumentos (enteros, boolcanos ros

4:

os, etctera). E once, el mtodo valueOf,) devuelve una instancia nueva de St 9 co .emendo e, val., de cadena de, argumento. Este mtodo no opera d,
- -tan

definitiva, una .peracin del estilo String, y ..ene sentido definirlo en la clase Strxng.

Los mtodos d: clase pueden ser tiles para colocar juntos mtodos en un solo '^

Case,. Por eje nplo. la Case Math. defmida en el paquete i . lang, contiene un con unto

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

Math pero at, , puede usar sus mtodos con argumentos numricos o booleanos. Po ejemplo.

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

Usicd no nec sita crear una nueva instancia de Math; sta puede ser llamada en .ualqu.er
lugar que se icccsiic. como en el siguiente ejemplo:

S.VBluopf(5);

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

. ,,, .i,,-:, .." H;inu, alm.odo indexOf (). que devuelve I P--, do la primer., instan
cia del carcter dado (aqu, x ). Las literales de carcter estn rodeadas por com.ll,
scncllas; si en la lnea 13 la x estuviera entre las comillas dobles, la lucra, se cons,c-

ca ex.stente de Strin., pero a. obtener una cadena de otro objeto o upo ^ '

Referencias a objetos

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

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

"

s2 = String.valueOf(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.,

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

s2;

s = "tem"; "

ve/ do 1, por I que el carcier en la posicin 7 es e.

99 i

5:

import java.awt.Polnt;
class ReferencesTest {

publie static void main (String arguments[]) {


Point pti,

pt2;

6:

pt1

= new Point(1O0,

7:

Pt2

10e);

pt1;

8:
9:

10:
11:
12:
13:

pti.x

200;

pti.y = 200;

System .out.println( "Pointi:

"

System .out.printlnf "Point2:

+ pt1 .x +

",

"

"

+ pt1

-,

"

+ Pt2

pt2 .x

y);
y);

14:

A continuacin se muestra la salida del programa:


Pointi:

200,

200

Point2:

200,

200

int maximu .Price = Math.max(firstPrice, secondPrice) ;

! I

>

Lecciones de objetos

Cuando enve argumentos pura mtodos o use variables en expresiones, debe usar variables de

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


. 1 inca 5

Se crean dos variables Point.

. Lnea 6

Se asigna un nuevo objeto Point a pt1.

. Linca 7

El valor de pt1 se asigna a pt2.

101

los tipos apropiados. Si un mtodo requiere un int, el compilador Java responde con un error
si intenta enviar al mtodo un valor f loat. Del mismo modo, si asigna una variable con el
valor de otra, stas deben ser del mismo tipo.

Hay un rea donde el compilador de Java es decididamente diferente: las

Nota

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,

"

(gpa+1.5));

usted lo necesita. Podra ser la clase incorrecta, o el tipo de datos incorrectos, como un float
pti,

Referan as ti objetos.

my GPA is a

Algunas veces tendr un valor en su programa de Java que no es del tipo correcto para lo que

usar cualquier v

Figura 4.1

dad,

pt2-

cuando usted necesita un int.

Objeto Point
x:200

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

y: 200

Trmino Nuevo

Conversin por cast es el proceso de producir un valor nuevo con un tipo dil'erente al de su fuente. El significado es semejante a la actuacin, donde el per

sonaje de un programa de televisin puede ser representado por olro actor, si el primero

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.

Conversiones por cast entre tipos primitivos, tales como int a float o float a

ola

double.

Conversiones por Cast desde una instancia de una clase a una instancia de otra clase.

Conversin por cast y conversin normal


i
de objetos y tipos

MM^

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

Algo que

nianej

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


primitivos de esos objetos.

Al hablar de conversiones por cast, podra ser ms sencillo pensar en trminos de fuentes y
dcsiinos. La fuente es la variable a ser representada en otro tipo. El deslino es el resultado.

103 I

Lecciones de objetos

conversin por cast de tipos primitivos

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


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

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

Conversin por cast de objetos

Las instancias de clases tambin pueden ser convertidas por cast a instancias de otra clase,
con una restriccin: las clases fuente y destino deben estar asociadas por herencia. Una clase
debe ser una subclase de la otra.

As como se puede convertir un valor primitivo a un tipo ms largo, algunos objetos podran
no necesitar ser convertidos por cast en forma explcita. Sobre iodo, como todas las subclases;
contienen la misma informacin que sus superclases, usted puede usar una instancia de una

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.

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

adoptado por Java como parte de su soporte de caracteres.

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.

subclase dondequiera que se espere una superclase.

emp = veep; // no se necesita conversin por cast hacia arriba


veep = (VicePresident)emp; // requiere conversin por cast explcita

Lecciones de objetos

1051

Da 4
104
String pennsylvania = "65000";
int penn. = Integer.parselnt(pennsylvania);

La documentacin de la API de Java incluye detalles en estas clases. Puede encontrar estas
pginas HTML en la seccin Documentaon del sitio Web de Sun Microsystcms:
http://java.sun.com

screen2D:

Nota

Hay tipos especiales de clases para boolean, Byte, Character, Double, Float,
Integer, Long, Short y Void.

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

^ Observe que ,os non.

Como una alternativa, e, paquete


primitivos:
c chlos primiti

r F13L
F1 ,?

tienen nomnrcs Lon


/v ,os tiposs primevos
prim

Se clases t,enen una te T^^'^daL y' sus voznes de Case. v un prominascula. Java .rata en forma 1,^ - |o
^a no se contra e.tos,,-,

P ^ ^^ sc ^a ,, ol,,,

^^ ^ ^ ^

Comparacin de objetos
Ayer aprendi acerca de operadores para comparar valores: igual, distinto, menor que.

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.

La excepcin a esta regla son los operadores de igualdad: == (igual), y 1= (distinto). Cuando
se usan con objetos, estos operadores no hacen lo que usted de primera impresin podra
esperar. En vez de determinar si un objeto tiene el mismo valor que el oiro, determina si los
objetos son el mismo objeto.

Para poder comparar las instancias de una clase y tener resultados relevantes, debe mplementar mtodos especiales en su clase y llamar a esos mtodos.

mteger dataCount = new inte9er

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

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

Un buen ejemplo de esto es la clase String. lis posible tener dos objetos diferentes que con

tengan los mismos valores. Sin embargo, aun cuando hubiera utilizado el operador == para

compararlos, estos objetos deberan ser considerados diferentes. Pese a que sus contenidos

int

newcount

., ,r,lluccil-,n comn Mue

nt.w
usted necesita en p V

Sxring

,0 pucdc
pu
rcsuUacjo ,0
obtener ,
rcsuUacjo

corresponden, no son el mismo objeto.

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

SfrADO 4.5. EL manCO WLETO DE EOUAISTEST. JAVA

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

1:

2:

String str1, str2;


...
str1 = "Free the bound periodicais. ,

3:
4:

6:

* M11;

ten out.println("String1:

7:

Systen,.out.println("String2:

8:

"

(stri == str2));

System.out.println("Same object.

9:
16:
12:

13:
14:

System.out.println(-String1:

Svstetn.out.println("String2:

System.out.printlnC'Sarae object.

15:

Systei.out.println(-Sa.e valu?

16:

Quiere encontrar la clase de un objeto? He aqu cmo hacerlo para un objeto asignado a la
String ame = obj.getClass().getName();

str2

==

.equals(str2));

Para qu se hace esto? El mtodo getClass() est definido en la clase Object, y por lano
disponible para todos los objetos. El resultado de ese mtodo es un objeto Class (donde
Class es por s misma una clase), el cual tiene un mtodo llamado getName (). getName ()

17:
18:

Determinacin de la clase de un objeto


variable obj.

str2 = new String(stM);

11:

Por qu no puede usar slo otra literal cuando cambia str2, en vez deusar
new? En Java las literales de cadena estn optimizadas. Si crea una cadena
mediante una literal y luego utiliza otra literal con los mismos caracteres.
Java sabe lo suficiente para devolverle el primer objeto String. Ambas
cadenas son los mismos objetos. Tiene que salirse de su camino para crear
dos objetos separados.

str2 = stri;

5:

Nota

devuelve una cadena representando cl nombre de la clase.

Otra prueba que podra ser til es cl operador instanceof. ste tiene dos opeiandos: un
objeto a la izquierda y un nombre de clase a la derecha. La expresin devuelve true o false

La salida de! programa es como skue:

si el objeto es una nsiancia de la clase nombrada o cualquiera de las subclases de la clase:

Sfing: Free the bc_nd periodicals.


St-xng2: Free the bc.nd periodica.s.

"swordfish" instanceof String // true


10);
pt instanceof String // false
Point pt = new Point(iB,

Sane object? true

Sfingi: Free the bc^nd penodicals.

St-ing2: Free the bc.nd penodicsis.

Tambin se puede usar este operador instanceof para interfaces; si un objeto es una instan

Sw object? false
Se me

cia de una clase que implemento una inierfaz, cl operador instanceof con ese nombre de
inierfaz a la derecha devuelve true.

valu? true

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

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

;,, usar el ,,,,,.

'cl .^ objclD en memo-

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

Una de las mejoras hechas al lenguaje Java despus de Java 1.0.2 fue la introduccin de la
reflexin, a la cual tambin se le denomina niivspeccin. Bajo cualquier nombre, la reflexin

habilita a una clase de Java, como la de un programa que usted escriba, para aprender
detalles sobre cualquier otra clase.

ha). Prol arlos con el mtodo epuals() en la nnej iu

A travs de la reflexin, un programa Java puede cargar una clase tic la cual no sabe nada, y

true; i iiien los mismos valore!.

encontrar las variables de la clase, mtodos y constructores, y trabajar con ellos.

107 1

1091

Lecciones de objetos
Da 4

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

2: iaport java.til.Random;

El nombr del mtodo

3:

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

4:

<

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

La aplicacin SeeMethods pudo haber sido hecha con cualquier clase de objetos. Cambie la

Rando* rd = new RandoM);

6:

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

lnea 6 de SeeMethods. j ava para crear un objeto diferente y dar un vistazo a sus interiores.

7:
8:

(int i - .

i-MBthod-

" + methods i])>

Systsm.ot.pnntln( Method.

9:
16:

Le reflexin es muy usada por herramientas como navegadores de clases y depuradores, como

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

11:

12:
13:

acerca de lo que puede hacer (y entonces solicitar que haga algo), es til cuando se cons

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

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

Method

Array

m USTAD^T.USAUBADEJ^APU^^
lili M

Maneja mtodos de clase y de instancia

Constructor

da de la ; plicacin

n:M.t',od:pMicfin.ln.tive1.v..lanfl.C1.ss

Maneja arreglos

Modif ier

Dccodifica informacin acerca de cl;ises, variables, mtodos (que se

describen en el da 15, "Funciones de las clases: paquetes, interfaces y otras caracters


ticas").

Adems, habr una gran cantidad de mtodos disponibles en una clase de objetos llamada

JI-SS; SS2

Class que ayuda a unir varias clases que tienen que ver con reflexin.

i =5? ^

La reflexin es una caracterstica avanzada que usted podra no estar listo para usar en sus

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


otros, de la programacin ms sofisticada de Java.

java.^ng.InterruptedException

java.utii.Random.setSeed(long)

0: Method: public synchronized voxd J

1V Method: public void 3ava.util_

Maneja los mtodos especiales para crear nuevas instancias de clases

extBytes(byte[l)

nextint()

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

Resumen
Ahora que ya ha bebido profundamente de la implementacin de la programacin orientada
a objetos en Java, est en una mejor posicin para decidir cuan til puede serle en su propia
programacin.

Dia4

110

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

Semana 1

est tan profundamente inmersa en Java.

Y si es de los que ven "el vaso medio lleno", vale la pena que use la programacin orientada a

objetos por los beneficios que ofrece: disponibilidad mejorada, rcu.ili.acio,, y man.ennn.cnU,

una clase.

Finalmente, le dio un primer vistazo a la flexin, una manera de hacer que una clase revele

detalles acerca ele s misma.

A este punto va tiene las habilidades para manejar las tareas :ns simples en el lenguaje Java.

Tio * falta son arrelos, condiciona.es y ciclos (los cuales se vean maana), y cmo
definir y usar clases (en. el Ja 6, "Creacin de clases ).

Preguntas y respuestas

P .stoy confundido acerca de las diferencias entre los objetos y los tipos de datos
primitivos, como int y boolean.

R los tipos dedeos primitivos en el lenguaje (byte. short, int, long, float, dou

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 >

^ o entro y fuera <ie los mtodos. Sin embargo ,a mayora de las operacones que
funcionan exclusivamente en objetos no uncionarfn en tipos de d;,,os Pr,m,t,vos.
Los objetos son instancias de Cases y como tales suelen ser tipos de datos ms comple
jos que los nmeros simples y caracteres, que suelen contener nmeros y caraetces

Da

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.

como instancia o variables de clase.

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

tro, de modo que pueda pasar a travs de ella?

madas arreglos.

P -No hay apuntadores en Java? Si usted no tiene apuntadores, cmo puedo suponer que har .,*, como listas vincu.adas, donde .enga un apuntador de un nodo a
K No es del todo ceno decir que a fin de cuentas Java no posee apuntadores, slo que no

Le apuntadores explcitos. Las referencas a objeto, son. efectivamente, apuntadores.


Pr I aloo con uno lia vino,.*.. us,ed creara una Case Ha-uada Nod.. la cua

L fiable de instancia tambin de, tipo Node. Para vincular cure s, los objetos
odo -ene un objeto nodo a la vanab.e de instancia de. objeto inmechatamente antes ck
cTenVlfsu. Pues/o que las referencias a. objeto son apuntadores, las hstas v.nculadas
configuradas de eMa manera se componan como usted esperara que lo h.c.eran.

Incluso aprender a organizar grupos de la misma clase o lipo de dalos en listas lla
Lo primero por hacer en la lista de'hoy son arreglos.

Listas, lgica y ciclos

1131

Da 5

String[]

difficultwords;
i

Point[]
int[)

hits;

guesses;

Usted ver los dos estilos utilizados en los programas, y como no hay un consenso sobre qu

Java. En al^

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

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

-"=::-~h'11'~11"~'"

objelo y asignarlo a esa variable. He aqu las formas de dar este paso:

Utilice el operador new.

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:

pu

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

String[]

^ CO111O enteros.

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

Esta instruccin crea un nuevo arreglo de cadenas con 10 posiciones que pueden contener

objetos de tipo String. Cuando crea un arreglo de objetos con new, debe indicar cuntas
posiciones contendr el arreglo. Rn realidad estas instrucciones no colocan objetos en
las posiciones; eso lo debe hacer usted posteriormente.

Los arreglos de objetos pueden contener tanto tipos primitivos (como enteros o booleanos),

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

como objetos:

, Cree un nuevo arrodo de objeto y aagneU,


?.

Amiacene

inform

playerNames = new String[10J;

int[)

acin en ese arregR

temps = new int[99);

Cuando usted crea un arreglo de objeto mediante new, todas sus posiciones se nicialuan ,

Declaracin de variables de

automticamente (0 para arreglos numricos, f alse para booleanos, ' \0' para arreglos de
lo habr4

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

Para arencarlas de las de^ ^

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

con comas:

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

StringU

chiles =

"habanero",
strinp

im

de

"thai"

"jalapeno",

"anaheiin",

"serrano"

};

!:-^

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.

m
m

Lstar., lgica y ciclos

Da 5

Insistimos: La longitud del arreglo es 10, pero su subndice slo puede llegar hasta 9 Los

arreglos uncan su numeracin en 0. Siempre que trabaje con arreglos, tenga esto en mume y

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

Modificacin de los elementos de un arreglo


Como vio en los ejemplos anteriores, puede asignar un valor a una posicio,, especfica de

un arreglo al colocar una instruccin de asignacin despus del nombre del arreglo y el

subndice, como en el ejemplo siguiente:


myGrades(4]

=85;

sentence[0]

"The";

sentence[i0] = sentence[0];

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

--

^ ^.^ inician

Algo importante a tener en cuenta es que en Java un arreglo de objetos es un arreglo de refe

rencias a dichos objetos. Cuando asigna un valor a una posicin en ese tipo de arreglo est
creando una referencia a ese objeto. Cuando mueve valores entre arreglos, como en"el ltimo

de los ejemplos anteriores, est reasignando la referencia cn vez de copiar un valor de una
posicin a otra. Los arreglos de un tipo de dalos primitivo como int o f loat copian los va
lores de una posicin a otra.

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

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

confome avance en el uso del lenguaje.


siguientes:

Para finalizar la discusin acerca de los arreglos, el listado 5.1 presenta un programa sencillo

Strlnol] M.tX.!.p.rt-"-rlnoIiBl;

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

Listado 5.1. El texto completo de arraytestjava.

l s dos l
1:

class ArrayTest

2:
3:
4:
5:

6:

Stringf) firstNames = { -Defins", "Grace", "Bjarne", "James" };


Stringf] lastNames = new Strin0[firstNames.length];
void printNames()

'

int i = C;

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

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

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

^ s^ pros

System.out.println(firstNames[i]
"

int len = bea leSpeak.length;

+ lastNames[i]);

System.out.println(firstNames[i]
+ "

importar el tipo:

"

" + lastNamesfi]);

11!

Listas, lgica y ciclos

117]

Da 5

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.
La lnea 23 llama a printNamesO para mostrar a qu se parece el objeto nicialmcnie.

15:
16:

.printl(

El resultado son las primeras cuatro lneas de la salida; observe que se inicializ el

17:

arreglo f irstNames, pero los vaiores en lastNames son nuil. Si un arreglo no est

lastNames

18:

inicializado cuando se declara, los valores de las posiciones iniciales estarn vacas:

19:

nuil para los arreglos de objetos, 0 para nmeros y f alse para los booleanos.

void main (String arguaentsl))

2e:

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

21:
22:

a.printNanesO;

23:

Svsteit.out.printlnt

ix.stHa.es 10] - 'Ri

21:
25:

' 27:

Las lneas 25-28 establecen los valores de cada una de las posiciones en el arreglo
lastnames a las cadenas reales.

La lnea 29 llama a printNames() una vez ms para mostrar que ahora el arreglo
lastNames est lleno de valores, y cada nombre y apellido se imprime como usied

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

a.lastNamesl3] - 'Gosling ,

28:

a printNamesO;

25:

3f: '
3V.

Nota

Si usted no reconoce los nombres de este ejemplo, podra pensar que los
autores estn manejando referencias de sus amigos en este libro. Todos ellos
son importantes desabolladores de lenguajes de programacin de computa

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

Grsce Hopper

travs de los elementos de un arreglo, en lugar de trabajar con ellos individualmente. Esto

-arn Stroustrup

hace mucho ms pequeo al cdigo, y en muchos casos ms sencillo de leer. Cuando apren

j'snes GoslinQ

da acerca de ciclos hoy mismo ms adelante, ver este ejemplo reescrito con diferente estiio.

Arreglos multidimensionales
Si ya ha usado arreglos en otros lenguajes, podra suponer que Java puede manejar arreglos

lor inicia! en la, pospones.

f irstNames, dcoWo a que

c, mismo nmero de P

inici,. Cuando ,: usa en un

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


de una dimensin.

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

Listas, lgica y ciclos

Da 5

1191

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

intUIl coords = newint[i2]H2);

coordsiaiiei = 1".

coordsi0lli] = 2;

dentro del cual est, y slo puede ser usada dentro de este bloque! Se podra dar un error si
tratara de usarla en otra pane del mtodo testBlockf). La variable x fue creada dentro del
mtodo pero fuera del bloque interior, por lo que puede usarla en cualquier parte del mtodo.
Usted puede modificar el valor de x en cualquier parte dentro del mtodo y se retendr este

valor.

. ;

De suyo las declaraciones de bloque no se usan solas en una definicin de mtodo, como

.I

Instrucciones de bloque

*,

os cinco das, entre oirs

cosas, p;ira las dos siguientes:

estn en el ejemplo anterior. Usted las usa a travs de las definiciones de clase y mlodo,
igual que en la lgica y estructuras de ciclos que aprender a continuacin.

Condicionales if
Uno de los aspectos clave de la programacin es la capacidad de un programa para decidir
qu har. Esto est manejado a travs de un tipo especial de enunciado llamado condicional.
Trmino Nuevo

. P-in definir las instrucciones que ,

t tiui uLMiii

i > st' pucvlo visar hhio

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


cumple una condicin especfica.

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

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

dentro de una definicin de clase.

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

booleana sencilla.

int x = 10;
{

//

inicio de bloque

int y = 40;

//

x;

-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

de I. prueba. (En e, ejemplo anterior est asignada la variable restauran.) ^ en, argo en

jav. puede aparecer un bloque dondequiera que lo haga una ms.rucon sola. S, deso haca
,|,o ms que una solu cosa ceno resultado de un enunciado if. pon*, esas ,nsm,cc,oncs

dentro de un bloque. Observe que el siguiente segmento de cdigo, es una ex.cns.on del objc,o Jabberwock que usted cre el da 2."Un vistazo a la programacin oricniada a objetos :
if (attitude == "angry" )

18:

La salida del programa es como sigue:


' Valu is i.

...

Valu is 2.
Stevenl

Valu is 54.

} VyVtea.out.println ("The jabberwock is in a good rnood.');

Stevenl
Valu is

f ^"T/stem.out.printlnCIt still is hungry, though.");

decir if (hungry == true). Para las pruebas booleanas de este upo. dejar luera 1, ult.nu

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.

ESCWBA
1:
2:
3:

Listado 5.2. El texto computo de evensteven.java.

void evenCheck(int val)

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

7:

9:
10:

11:
12:
13:
14:

15:

is

+ val +"");

6:

8:

System.out.printlnCValue

5:

pubLic static void main (String arguments[]) {


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

El corazn de la clase EvenSteven es el mtodo evenCheck () (lneas 3-8), donde se verifienn los valores y se imprime un mensaje propnelo. A diferencia de los ...iodo, que usicil ha
defin.do en los ejemplos anteriores, observe que la definicin incluye un argumento sencillo

entero (vea la lnea 3). El mtodo evenCheck () inicia en cuanto imprime el valor que le fue

pasado. Entonces se prueba ese argumento, mediante una condicional if, para ver si se trata

de un nmero par.

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

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

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

mtodos con argumentos.)

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

mente los valores que son pares obtienen un mensaje Steven!

class EvenSteven {

4:

77.

Valu is 1346.
Steven!

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

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<

e.evenCheck(1346);

19: }'

System.out.printlnCThe jabberwock is angry ),


_
Systemiout.println ("Have you made out a will? )l;

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

e.evenCheck(77),

17:

El operador condicional
Una alternativa a las palabras clave if y else en una instruccin condicional es usar el ope
rador condicional, tambin conocido como operador ternario, llamado as porque tiene tres

trminos.

El operador condicional es una expresin, lo que significa que devuelve un valor, a diferencia

del if ms general, que slo puede dar por resultado una instruccin o un bloque para ser eje

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


la siguiente lnea:

test ? trueresult : falseresult;

m
#

t
#

Listas, lgica y ciclos

1231

Da 5

switch

(grade)

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

case

'B':

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


break;,

cas

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

'

break;

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


int

ourBestScore;

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

if (myScore > yourScore)

valor de la variable grade. Dicha variable, que puede ser de cualquiera de los tipos primitivos

ourBestScore - yScore,

byte, char, short o int se compara con cada uno de los valores case. Si despus de la

p i e g

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.

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

prob"por *""*'
ir (oper ==
+ )

addargs(arg1,

instruccin switch.

arg2),
arg2);

(oper)

case

'+':
addargs(arg1,

arg2);

'

break;
case

else if (oper == '")


multargs(arp,

Lo siguiente es una revisin de if anidada mostrada previamente. Ha sido reescrito como una
switch

else if (oper == '')


subargs(argi,

para cualquier clase de prueba en cualquier tipo.

'*':

subargs(arg1,

aro2),

arg2);

break;

else if (oper == '/')

case

' -':

multargs(argi,

arg2);

break;

case

Un mtodo abreviad - para las instn.cc.oncs

lenguajes de prograi lacin es agrupar proel

jav-, puede hacer lo antenor mediante la in:

El Gueme es un cumplo del uso de switch

Centre s en una sola instruccin. En

'/':
divargs(arg1,

arg2);

break;

switch, la cual se compona como en C.

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.

Listas, lgica y ciclos

Da 5

124

is:

default:

16:

funcione. La segunda son .as ,=


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

cncuen.

^^

ase^ una

.^.^ ^ ^ hasla

nc , >

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

return "

17:

se

^ , ,0

18:

19:
28:

debcr incluir break para asegu-

21:

publie static void aain (String arguMentsJ) {


NunberReader n = new NunberReaderO;
String nuo = n.convertNu(4) + n.convertNu(1) +

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

n.convertNum(3);

22:

23:
24:

}.

la Sjouienie llave que cierra ()).

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

He aqu la salida del programa:

misn1as instrucciones. Para cumphr con

cncucnl,,.

nillgun resuhado; switch ejeeman, las


la

ch.

guem

valores de 2,
an

odd

switch

i >

(x)
2:

case

4:

is

413 converts to four one three

El corazn de este ejempio es, por supuesto, la instruccin principal switch a la mitad del
mtodo en las lneas 4-16. switch toma el argumento entero que fue pasado a convertNun.()

y, cuando encuentra una coincidencia, devuelve el valor apropiado de la cadena. (Observe que
este mtodo est definido para devolver una cadena, a! contrario de otros mtodos que ha
definido hasta este punto, los cuales no devuelven nada. Maana aprender ms acerca de

r.umber.

case

Pr ejemplo, en

esto.)

case 6:

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


d.f.ult:

);

#
#

t
i
m

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

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

de esto maana, cuando vea cmo definir mtodos.

Hasta aqu, probablemente ha visto suficientes mtodos main () para saber qu est pasando,
pero veamos este miodo rpidamente.

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

conver-tlt().

La lnea 21 define una cadena llamada num que ser la concatenacin de los valores de
cadena de los tres nmeros. Cada nmero se conviene mediante una llamada al mtodo
1:

2:

3:
4:

5:
6:

7:
8:

9:

16:

11:
12:

13:
14:

convertNum().

class N .mberReader {
String convertNum(int val)

switch (val)

case

0:

return

case

1:

return

case

2:

return

case

3:

return

case

4:

return

case

5:

return

case

6:

return

case

7:

return

case

8:

return

case 9:

return

La lnea 22 despliega el resultado.

"zero

"

"one

";

"two

";

Ciclos for
El ciclo for repite una instruccin por un nmero especificado de veces hasta que una condi-

"toree

"four

"

"five
"six

"
";

"seven

"eight

"nine

"

, cin se cumple. Aunque los ciclos for frecuentemente son usados para la iteracin simple en
la cual se repite una instruccin por un nmero preciso de veces, se pueden usar para casi
cualquier tipo de ciclo.

Listas, lgica y cicios

Da 5

'est0es' USIed Pde*>*>*


Observe que s, usa una instruccin vaca en su ciclo for, tendra que inicializar o incrementar
a sin n.nguna expresin o instruccin y esa parte del ciclo f or ser ignorada

mer vanable de celo o ndices de ciclo por usted mismo en otras panes del programa.

instruccin;

inicio del ciclo f or tiene tres partes:

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

(ndice de,

f or si todo lo

encuc7
qU7a el-aCer
CSt numero
h Priprimo mayor
l Ca ^a CSe
CC'-(Llama
Pr ejemP)0'
el S8uienle
encuentra
primer
4,e00.
a un mtodo
llamadoc

El inicio

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


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

Un error comn en los ciclos for es colocar accidentalmente un punto y coma al final de la

leales al ciclo.

dcl. Li! prueba debe ser una

linea que incluye la instruccin for;


for

(i = 0;

i < 10;

x = x * i; //

i++).

Esta lnea no es parte del ciclo!

En este ejemplo, el primer punto y coma finaliza el ciclo sin ejecutar x = x i como parte

del ciclo. La lnea x = x i se ejecutar slo una vez, debido a que est por completo

luera del celo for. Tenga cuidado de no cometer este error en sus programas de javu.

Para terminar con los ciclos for, reescriba ese ejemplo con los nombres de la seccin de
arreglos. El ejemplo original es largo y repetitivo y nicamente funciona con arrelos de Iongitud de cuatro elementos. Esta versin, mostrada en el listado 5.4, es ms corta y flexible

(pero devuelve la misma salida).

Escriba
1:

Listado 5.4. El texto completo de namesloop . java.

class NaoesLoop {

2:

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

3:

j,

4:

5:

: ndice se compara con saluta

ion. Cuando el ndice es .gual o

6:
7:
8:

9:

String[] lastNames = new StringrfirstNames.length];


void printNames()

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

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

10:

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

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


NanesLoop a = new NamesLoop();

a.printNames();

System.out.printlnC

");

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

Listas, lgica y ciclos

se Z I
n de
d contiene nicamente una instruccin:
cln
de bloo
bloque, 7,
sto no se requ.eren ya^que"""
el ciclo

Listado 5.4. continuacin


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

17:

18:

19:

das'si m Ih"

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

dds m ms tarde agrega otra instruccin dentro del ciclo.

a.printNames();

20:

21:

m nto es , eT 77 t ""'"

Dennis nuil
Grace nuil
Bjarne nuil
James nuil
Dennis
Gracs

Bjarne

mentos es 1, el ciclo finalizar inmediatamente

La salida del programa es:

cada
en ese punto.

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


1:

2:
3:

Ritchie

4:

Hopper

Stroustrup

james Gosling

5:

6:

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


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

Systero.out.print("arrayi: [ ");
for (int i = 0; i < arrayl.length; i++) {
Systero.out.print(array1[i] + " ");

7:
8:

9:
10:

System.out.println("J");

11:
12:

System.out.print("array2: [ ")

13:

int count =0;

14:

array2[count] = (float) arraylfcount);

16:

System.out.print(array2|count++] + " );

17:
18:

System.out.println(" J");

19:
20:

'

while ( count < arrayl.length &t arrayl[count] != 1) {

15:

Ciclos while y do

class CopyArrayWhile {

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

9
#

#
#

Listas, lgica y ciclos

El cuerpo del ciclo se ejecuta una vez antes que se evale la condicin de prueba, i < 16;
entonces, si la prueba la evala como true, el ciclo se repite una vez ms. Si es f alse, el

.,

1 ciclo termina1. Tenga en mente que en los ciclos do el cuerpo del ciclo se ejecuta al menos una
vez.

El listado 5.6 muestra un ejemplo sencillo de un ciclo do que imprime un mensaje cada vez
que el ciclo itera (10 veces, para este ejemplo):

Escriba
1:

array (Recuerde que esa

Listado 5.6. El texto completo de dotest.java.

class DoTest {

2:

public static void main (String arguraents[]) {

3:

int x

4:

do
6:

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

7:

x++;

8:

} while

9:

10:

1;

(x <= 16);

.-,}

La salida del programa es como sigue:

Salida

Looping,

round

Looping,

round 2

Looping,

round 3

Looping,

round 4

Looping,

round 5

Looping,

round 6

Looping,

round

Looping,

round

Looping,

round 9

Looping,

round

10

Interrupcin de los ciclos


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

cin.povloqicsistaes

menos una ve ..

de su trmino. Para eso puede usar las palabras clave break y continu.

^5

i;in>poco lc ^' N

Usted ya conoce a break como parte de la instruccin switch; break detiene la ejecucin
de una instruccin switch, y ei programa contina. La palabra clave break, cuando se usa

con un ciclo, hace lo mismo: detiene inmediatamente la ejecucin del ciclo actual. Si ha

una vez.
Los celos de se parecen a esto:

do {

_ ^

i++ //

} while (i < 10>;

cuerpo del ciclo

anidado ciclos dentro de ciclos, la ejecucin contina con el siguiente ciclo exterior. De otra
manera, el programa contina con slo ejecutar la instruccin siguiente despus del ciclo.

131

if

(i X++ > 400)


break out;

//.aqu va el ciclo interno


// aqu va el ciclo externo

ciclo:

int count = e

while (count < userDatai.length) {


if (userDatai[count] == 1)

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

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

l T e

f or anida-

cuatro, ambos ciclos finalizan al mismo tiempo.

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

count2 =

public static void main (String argumentsf]) {

4:

thisLoop:

for (int i = 1; i <= 5; 1++)

6:

int count = 8
int

25:

J;

for (int j

7:

while (counf* <= userDatai .length) {

9:
11:

:[count2++] - (float)userDatai[count];

Ciclos pt;quetados

ciclo fuera d I ciclo actual.

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

Ut 'for

( nt i = 0; i <1

w ile (x < 50) {

i ls

' 3

j);

La salida del programa es:

Salida

,. .> ,<. de un

. c<k . dio o la 8"'

System.out.prlntln("en(J of loops");

12:
13:

J++)

break thisLoop;

contii ue;
userData

} <= 3;

if (( i J) > 4)

8:

if (userCatai[count) =- 1)

= 1;

System.out.println("i is " + i +

con

i is 1, i is 1
i is 1, j is 2

i is 1, j is 3
i is 2, j is 1
i is 2, j is 2
i is 2,

t
#
#

1: class LabelTest {

que llevar registr . de dos contadores de arreglo d.lcrenies:

is 3

end of loops

Como puede ver, el cic.o iter hasta que


la sumaa de
q
de ii y
y jj 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

Da 5

Semana 1

cic,Os y lgica, puede hacer que la computadora

Ahora que ya ha sido introduc, o a a


decida cundo desp.egar repetiente

usted aprendi como deCarar una

cambiar elemenios del arreglo. Con las ,n

ueco

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

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

Vale ,a pena repet. Usted usar


jaa. Us

*
#

en*

Pregunta;; y respuestas

nesI)araunlf.Cu-..

Da

"

lf ,cnn ,6,1.

,vo ,, * W.v.V...

Creacin de clases

S; :

"os ""U1'jC! de p"


n, n^ciud: por.

c ,,,, , I.,,

cuIT 1

laS daSeS de Ia biblio[e ^ Java

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

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

ciases e identificar lo siguiente:

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

El uso de argumentos pasados a una aplicacin Java

m
m

M
HUS

Creacin de clases

4:

npfinicin de clases

137

String sex;.

5:

boolean hungry;

6:

int age;

7:

Esta definicin de clase contiene cuatro variables. stas son variables de instancia porque no

class Ticker {
//

estn definidas dentro de un mtodo. Las variables son las siguientes:

cuerpo de la clase

color

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.

sex

Si su clase es una subclase, la palabra clave extends se usa paro indicar la superch.se de la

Una cadena que indica el gnero del jabbciwiKk

hungry

nueva clase. Observe a la siguiente subclase de Ticker.

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

en caso contrario

age

class SportsTic<er extends Ticker {


//

El color del jabberwock (por ejemplo; naranja, limn, amarillo limn, u ocre-

quemado)

cuerpo Je la clase

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.

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.

Definicin de variables de instancia


e! da 3,
Ene!
da 3,

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

c,,o

Las constantes son tiles para definir valores compartidos para lodos los mtodos de un obje
to; en otras palabras, para dar nombres significativos a valores que no cambian en todo el
calizar las v .nables locales

t^

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

de instancia se

Nota

;.,,,, v

Las variables locales constantes no eran posibles en Java 1.0.2, pero se agre
garon al lenguaje desde Java 1.1. Esto es importante si usted quiere crear un

applet que sea totalmente compatible con Java 1.0.2. Aprender ms acerca
de esto durante la semsna 2, "Temas avanzados de Java".

cual hereda de su : uperclase, ReptUe.

1: class Jabtxrwock extends Reptile {


2:

3:

l'iirn dcclnrur umi consumi, uso ln paliihrn clnve final miles de la lUx-liinicin de variulili- e
incluya un valor inicial para esa variable, como en la siguime:
final float pi = 3.141592;
final boolean debug = false;

final int numberOfJenny = 8675309;


String color;

#
#

t
m

Creacin de mtodos
desempear durare su existencia).

V 'aS dlVerSaS IarCaS ^C sle

final int LEFT = B;

final int RIGHT = 1;

Definicin de mtodos

alignment se declara como un int:

- -

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

thxs.alignn-ent = CENTER;

El cuerpo de un mtodo

Tambin puede verificar una alineactn dada:

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

switch (this.alignment) {

se denominay/w del

^fLargarse
de .lin..cion
L
break;

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


break;

Encargarse Oe .Iinci6n central

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

breaK;

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

Variables de clase
Como aprendi en las lecciones an^enojc

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

us vanab.es de clase son bue;as pan^^


0 para llevar un registro de informan relat.a

dc dMe aplican B una clase como un


^ ,a dase

^ un COI1Junto de ob.e.os.

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

como en lo siguiente:

^^t maXObjects - 1.;

r.,UrTyp, , 1po primiljVo C,,M M ^

Da 6

140

Oh

,e si este mtodo devuelve un arreglo de objeto, los corchetes del arreglo pueden ir

Observe que s, e te me

21:

^ ^ ^ ^ ^^ Puesl0 que la forrna

22:

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

23:

intl] makeRange(int lower, int upper) {


// cuerpo de este mtodo

Lasalida 'del programa es la siguiente:

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

cc^ emre parntesis. Estos parmetros se convierten en variab.es locales en el cue^o del

Salida

The array: [ 1 2 3 4 5 6 7 8 9 10 ]

mtodo, recibiendo sus valores cuando se llama al mtodo. ;

Usual puede tener instrucciones, expresiones. Humadas de mtodos a otros objetos cond,
dnales, ciclos, etctera, en el interior del cuerpo del mtodo; todo lo que usted ha apruul.do
en las lecciones anteriores.

A menos m,c un mtodo haya sido declarado con void co.no su tipo de retorno, el mtodo

#
a un

for para nnpnmtr los valores del nuevo arreglo.

La palabra clave this

Luclve algn tipo de valor al finaliza, Este valor debe ser devuelto exphcuamcnte en algn

objeto o pasar el objeto

punto dentro del mtodo, mediante la palabra clave return.

comoHin argumento

El lisruio 6 2 muestra un ejemplo de una clase que def.nc un mtodo makeRanget). Este

Le los (un lmite inLior y un Hm.te supenor) y crea un arreglo que connene todos

,os enteros entre esos dos lmites. Los lmites se incluyen en el arreg.o de enteros.

1 :

class

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

3:
4:

arr[i]

6:

return

8:

lower++;

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


// esta clase y pasndolo
// al objeto actual

return this;

18:

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

puMic static void main(String arguments[]) {

11 :

int theArray[];

12:
13:

'14:
15:
16:
17:

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

como sigue:

theArray = theRange ^nakeRange(1, 18);


System.out.print("The array: [ ")!
for (int i = 8; i < theArray.length; i+*)

t = X>'

);

J"iomatica. For ejemplo, puede referirse a ambas variables de


uenniajs en la clase actual simplemente por nombre, porque

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

RangeClass theRange = new RangeC^ass(),

System.out.print(theArray[i]

18:

,, devuelve el objeT) actual

En muchos casos podra no necesitar hacer uso explcitamente de la palabra clave this, ya ""

arr;

9:

19:

7:

26:

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

5:

gUmem a UIVm1Od- COm Val0r ^vuelto para el mtodo

//la variable de instancia x para este objeto

langeClass {

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

2:

"

ctua 2 P

actual, etctera. Los sigujemes son ejemplos del uso de this:

Listado 6.2. El tfxto completo de rangeclass . java.

'

i*

"k-

""' 'f 0S Prlmeros dos

/; la friable de instancia x para este objeto

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


// en esta clase

Systera.out.println(*]");

Mota

La omisin de la palabra clave this para variables de instancia, dependera


de la ex,stenc,a de variables del mismo nombre declaradas en el alcance

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

Da 6

sta es la salida:
test =20

"mbre >- definici" La primera, una

oca?con' el7m.smo nombre, pero> con ^^


d Valr local
10 L test dentro
local
el valor 20. C"
La variable

u na

1n'

o2 Z

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

variable deja Ce existir cando la pane

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

0Cl1 ) riW

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

aislar este prob.ema mediante

S1 USar test Para referi- a la varia-

^ ^ ^

^^ ^ (lo sl| clslsl.

mtodo cu: ^

Teau^ .

c t un oh

ble de insume.. o de clase en, .

"

this
ble: loca

encontrarla.

Wi'ble

na subclase

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

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

b r3a que Sese3 tra:


SU Varabledesde
dC nSta"Ca
Pd- encambiar
, d
deb.do
valor dse ""
estaba^obteniendo
la supenrla.se
vez desu

.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

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

Paso de argumentos a mtodos


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

cuerpo del mtodo son pasados por referencia. Cualquier cosa que usted le haga a los objetos

dentro del mtodo, afecta a los objetos originales. Tenga presente que entre tales objetos se
mcluyen los arreglos y todos los objetos que es.n contenidos en arreglos. Cuando pasa un
arreglo a un mtodo y modifica sus contenidos, el arreglo original es afectado. Los tipos

primitivos, por otro lado, son pasados por valor.

El listado 6.4 demuestra cmo funciona esto:


Listado 6.4. U clase passbvbeference.
1: class PassByReference {

2:

3:

. int onetoZero(int arg[])


int count = 6;

Creacin de clases
Da 6

1451

144

'Las lneas 14-16 establecen los valores iniciales para este ejemplo. El primero es un arreglo
de enteros; el segundo es una instancia de la clase PassByReference, la cual es almacenada
en la variable test. El tercero es un entero simple para contener la cantidad de unos en el

L.STADO 6.4. CONTINUADOR

arreglo.

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

4:

5:

if (arg[i] == D i

6:
7:

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

lneas en la primera lnea de salida.

arg[i]

8:

La lnea 24 es donde las cosas suceden realmente; sta es donde usted llama al mtodo
definido onetoZero() en el objeto test y lo pasa al arreglo almacenado en arr. Esie mto
do devuelve la cantidad de 1 s en el arreglo, que usted entonces asigna a la variable numOnes.

9:
10:
11:

return count;

12:

Lo ha podido seguir hasta ahora? La lnea 25 imprime la cantidad de unos (el valor que
usted obtuvo de vuelta del mlodo onetoZero()). Devuelve 3, como usied esperara.

13:
14:
15:

16:

int

nuroOnes;

La ltima seccin de ineas imprime los valores del arreglo. Puesto que una referencia al
objeto del arreglo se pasa al mlodo, modificar el arreglo dentro de ese mlodo modifica la
copia original del arreglo. La impresin de Jos valores en las lneas 27-30 lo prueba (la ltima
lnea pie la salida muestra que todos los unos en el arreglo han sido cambiados a ceros).

17:
18:

19:

System.out

26:
21:
22:
23:
24:

System.out. println("]");

Mtodos de clase

numOnes = test

Ones

numOnes);

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

funcionan los mlodos de clase y de instancia.

25:

26:

Los mtodos de clase estn disponibles para cualquier instancia de la clase misma y pueden '
estar disponibles para otras clases. Adems, a diferencia de un mtodo de instancia, una clase

27:
28:

29:
36:

System.out.println("]");

no requiere una instancia de la clase pura que se pueda llamar a sus mlodos.

31:

Por ejemplo, las bibliotecas de clases de Java incluyen una clase llamada Math. La clase Math
define un.conjunto1 desperaciones matemticas que puede usar en cualquier programa en

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

sta es la sal da del programa

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

Val jes of the ar-ay: [1


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

345087
0 34

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

Creacin de clases

Da 6

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

cade,-

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

el t'empo m SOrpre"derle; ha eStad Creando "P^aciones Java con mtodos nain() todo

como . in.

La firma para el mtodo main () siempre luce as:


int count -

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

En ,a instruccin anterior, el valo

con un lor de 42, y ste es almacenado

publie static void main(String argumentsm /


//

cuerpo del mtodo

'I

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

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

-t

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

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

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

publie y prvate.

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.
Cuando Java ejecuta el mtodo n.ain(), tenga presente que main() es un mtodo de clase
Una mstancta de clase que contenga main() no se crea automticamente cuando su programa

Creacijid^cwo^^^^

esta en ejecucin. Si desea tralar esta clase como un objeto, tiene que crear una instancia de

ella en el mtodo main ().

Clases auxiliares
Su aplicacin Java puede tener slo una clase o, en el caso de programas ms grandes, podra

estar compuesta de muchas clases, donde se crean y usan diferentes instancias de cada clase

appleu requic :n un poco n* *


naveBador. as como para d>bujar y

m.entras la apl.cacin se est ejecutando. Usted puede crear tantas clases como desee para su

e, $islema grffico

programa.

pequeas

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

est listado en su variable de ambiente CLASSPATH.

En tanto Java encuentra la clase, sta ser utilizada por su programa mientras corre. Observe,

cla qm

sirve pomo pumo de

sin embargo, que nicamente la clase de punto de inicio necesita un mtodo main(). Despus

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

Escriba
1

class EchoArgs {

2
3

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

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

la depuracin de entrada o indicar un nombre de anduvo para ser cargado.

m
+

arguroentsfi]);

6:

7: }

Paso de argumentos a las aplicaciones Java

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


java EchoArgs Wilhelm Niekro Hough 49

lnea de comandos.

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,

Para agrupar argumentos quc ,ncWyen ^^

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

Argument
Argument
Argument
Argument

0: Wilhelm
1: Niekro
2: Hough
3:

49

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

Argument 8: Hoyt Wilhelm


Argument 1: Charlie

Argument 2: Hough

Manejo de argumentos en su aplicacin Java

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

a^e > H

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

ta: I"!"* entre

arreglo de argumentos.

una unidad

main():

public static void main(String argumentsl)) {


// cuerpo del mtodo

Nota

T0 d,enar9Ument0S en Java no es a^logo a argv en C y UNIX. En parr. arg[OJ o arguments[0J, el primer elemento en el arreglo de argu-

Creacin de clases

Da 6

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:


Sum is: 6

|, Average is: 2

Resumen

Zcl * y - de averigua, qu hace.


A SUMAVERAGE.JAVA.

2:

int

3:

sum

i - ! i < .r,nt..l.nBth; !) t

4:

fcr (int i

5:

sura += arguments[i),

Variables de clase y de instancia, las cuales contienen los atributos de una clase v obje-

6:

cabiae r rr de en:Aprendi cmo deciar

7:

vanables locales y como declarar constantes.

8:
9:

le una Case.
"110"1'" ^'^ defi"e
' lndUyend laS PaneS d "^ fia de ^'to. cmo
s? laa"palabra
3 ""iclave"this
mlOd0'
Cm " alPaSa"
'0Sanual
ar8U"lenIOS a ' -'odos y cmo
usar
para referirse
objeto

16:

11:

12:
13:

el

"'^ ;l ' '

usted sola usar con

1:

devolve ,

}
}

c:

SumAverage.java:6: Incompatible type

+=. can't convert

java.lang.String to

sum += arguments[il;

_ Aun cuando usictl

Hasta maana, la leccin ha terminado.

Da 6

Preguntas y respuestas

J V

Semana 1

P usted mencion que las variables locales constantes no pueden ser creadas en

l|M,U.|s que son compatibles con .lava 1.0.2. Por qu deseara yo crear programas

,|ue no usen las caractersticas del lenguaje en Java 27

R La razn ms probable es que usted est tratando de crear un applc. que funcione en la
mayora ci los navegadores. El soporte completo para las versiones posteriores a 1.0.esi retrasado en navegadores como Netscape Navigator e Internet Lxplo.er de

Microsoft, aunoue JavaSofl est trabajando para corregir esto. La situacin se expone
ampliamente durante el da 8, -Cmo poner programas interactivos en Web .

P Ei. mi clase, tengo una variable de instancia llamada origin. Tambin tengo en
un mtodo una variable ocal llamada origin, la cual a causa del alcance de una

variable, queda oculta por la variable local. Hay alguna forma de aislar el valor

de la variable de instancia?

R l a manera ms sencilla es procurar no darle a sus variables locales los mismos non,-

bres que los'que tienen sus variables de instancia. Si siente que debe hacerlo, utilice
this.origin para referirse a la variable de instancia y origin para refer. a la va-

Da

riablc local.

|. Fscrih.... programa que loma cuatro argumentos, pero si le doy menos argumen-

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

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


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

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.

Las clases y objelos proporcionan un marco de trabajo. Las variables de clase a' de

instancia brindan una forma de describir qu son bs clases y los objetos, nica-''

mente los mtodos pueden definir el comportamiento del objeto (qu es capa/ de

hacer y cmo inleracia con otras clases y objetos);

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

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

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

der acerca de las siguientes caractersticas:

,.

,. Sobrecarga de mtodos. Cmo crear mtodos con mltiples firmas y defini-

: ,

dones,, pero con el mismo nombre.

Creacin de mtodos constructores. Los mtodos que le permiten inicializar


objetos para establecer su estado inicial cuando se crean.

Uso de mtodos para realizar tareas

J .-I

Da 7

El prximo proyecto es crear un mtodo sobrecargado. El listado 7.1 muestra una definicin

de clase simple para una clase llamada MyRect, la cual define una figura rectangular con cua
tro vanables de instancia para establecer las esquinas superior izquierda e inferior derecha del

rectngulo: x1,

Escriba

sistema.

yi,

X2 y y2.

Listado 7.1. Los inicios de myrect . java.

class MyRect {
int x1 = 0;
int y1

= 0;

int x2 = 0;

int y2 = 0;

io.cca de clases de Ja
dosvalueOf O tremes.

de, lro por dos cosas:

Mota

dad de aromemos cpie toman.

' LaUin'1'

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

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


J

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

d co I

clase.

Cuando se crea una nueva instancia de la clase MyRect, todas sus variables de instancia se ni-

aal.zan en 0. Usted puede aadir un mtodo de instancia buildRect () p;ira asignar las va

nables a sus valores correctos como las dos esquinas de un rectngulo. Este mtodo toma cuatro
argumentos enteros y devuelve el objeto rectngulo resultante. Debido a que los argumentos

tienen Jos mismos nombres que las variables de instancia, la palabra clave this se usa dentro del
mtodo cuando se refiere a las variables de instancia. El siguiente cdigo es para buildRect () :
MyRect buildRect (int x1, int yi, int x2, int y2) {
this.xi

= x1;

this.yi

= yi;

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
tos Point en vez de coordenadas individuales. Para mplementar esta alternativa, puede

sobrecargar buildRect () para que su lista de argumentos tome dos objetos Point. Observe

Jo siguiente:

MyRect buildRect(Point topLeft, Point bottomRight) i


x1

= topLeft.x;

y1

= topLeft.y;

x2 = bottomRight.x;

155
L55J

Da 7

156

157 |

t 25:
y2 =

-.-.-

bottomRight.y;

26:

return "this;

>

iara cue -l^cione el mtodo anterior, se debe importar la clase Point al inicio del archivo

27:

f i

2e:

32:.
33:

i siguiente es una definicin para un mtodo sobrecargado:


xi.:= topLeft. x;

37:
38:

y2 =

40:

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


(yi

return

St

35:

x2

36:

-vi-'- topLeft.y;

void printRect(){

34:

MyRect twildRect(Point topLeft, int w, int h) {


""'

39:

h);

this;

rect = new MyRect();

41:

}'"

Syste;out.prlntlnrcalling

42:

rect.printRect();

44:

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

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

43:

un mtodo main().

return this;

31:

U. lr,na:i.osib,e de dcmir el ,ee,ngulo es usar ul,a quina, supe, u,r. un aUo y un ancho.

;;

(xi + w);

,,y2 = (yi + h);

38:

YueiXu'para. que Java pueda encontrarla.

yi = topLeft.y;

X2 =

29:

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

45:
46:

points
47:
48:

Listado 7.2. El texto completo de myrect .java,

49:
1:

2:
3:

import

class MyRect
int x1

= 6;

5:

int y1

= 0;

6:

mt

x2

8;

7:

int

y2

a;

10:

11 :
12:
13:
14:

53:
54:

rect.buildRect(new Point(ie,i0)

55:

56:

57:

MyRect uildUectlint S1, int y1,

9:

51:
52:

4:

8:

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

50:

java.awt.Point;

.'. '

this.xi = x1;.

this.yi = yi;
this.x2

this.y2

= y2;

x2,

int y2)

x2;

return this;

58:

rect.printRect();

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

Lo siguiente es la salida:

Salida

15:
16:
17:

18:
19:
28:

21:
22:
23:
24:

MyRect buildRect(P0int topLeft, Point bottornRight)


x1

topLeft.x;

yi

topLeft.y;

x2

bottomRight.x;

y2

bottomRight.y;

return

this;

Calling buildRect with points (10,10)


MyRect: <10,

10, 20, 20>

point

50

5e).

)j

Uso de mtodos para realizar tareas

Mtodos constructores bsicos


L- Mtodos consecres !ucen mucho como mtodos regula.es. con dos diferencias bsicas:

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

Siempre tienen el mismo nombre que la clase.


No tienen un tipo de retorno.

en las lneas 17-23

bottOmRight)

*-

: topLeft.y,

MyRect

Escriba
1:
2:

os cn.cros. Con

3:

o argi.mcn.o

4:

Listado 7.3. La clase person.

class Person {
String ame;

'

int age;

5:

Person(String n, int a) {

6:

ame

7:

age

8:

n;

= a;

9:

10:

void printPerson() {

11:
12:

13:

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

14:
15:
16:

17:

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

18:
19:
20:
21:

22:

23:,
24:

System.out.prlntln("

");

System.out.println("

);

P = new Person("Laura", 35)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.

ilamado PrlntP..on() pan, que


e.Xo
s pueda
o eda presentar"
" ' a"s mismo, y un mtodomtOd
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,

Escriba

arg2, arg3);

1:

2:
3:
4:

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

import java.awt.Point;
class Myfiect2 {
int xi = o;
= e;

5:

int y1

6:

int x2 = 0;
int y2 = 0;

7:

8:
9:

int

x,

y,

11:

radius;

this.yi

12:

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


this.x =

> lnt x2-iBt

10:

class MyCircle {

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

13:
14:

xPoint;

= yi;

15:

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

16:

1 point

17:

18:

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


tnis(xPoint, yPoint,

y1 = topLeft.y;

19:

1);

x2 = bottomRight.x;

20:

21:,,
22:

>

23:

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

24:

x1 = topLeft.x;

25:

y1 = topLeft.y;

26:

X2 =

27:

28: '!.. }'

Sobrecama de mtodos constructores

29:,

3e:

31:

.,'

32:

diferentes tipos de entrada.


* hoy temprano haran

35:'
36:

'

(xi

+ w);

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

: .

void printRect() {,

33:
34:

y2 = bottomRight.y;

System.out.printCMyRect: <- + x1

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

y2

Uso de mtodos para realizar tareas

Da 7
162

Creacin de mtodos que sobrepongan a mtodos

existentes

, Para .sobreponer un mtodo, ,odo lo que tiene que hacer crear un mtodo en su subclase que

tenga la misma firma (nombre, tipo de retorno y lista de argumentos) que un mftodo dormido
por la supcrelase de su clase. Como Java ejecuta la primera definicin del mtodo que encuentre

que coincida con la firma, la nueva firma oculta la definicin original del m.odo.

Aqu tiene un ejemplo sencillo; el jslado 7.5 muestra una clase simple con un mtodo llamado

printMe(). el cua] imprime el nombre de la clase y los valores de sus variables de instancia.
44:

rect.printRect();

45:

System.out.println*

Escriba

).

46:

1:

47:
48:
49:

Listado 7.5. El texto completo de printclass.

class PrintClass {

2:

int x = e;

3:

int y =

1;

4:

50:

rect.printRect();

51:

System.out.prmtln(

5:

void printMe()

6:

52:

7:

53:

8:

54:

9:

55:

System.out.println("x is " + x + ", y is + y)


System.out.println("I am an instance of the class
this.getClass().getName());

10:

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

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

: <25, 25, 68.

tiene una variable de instancia z.

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


1: class PrintSubClass extends PrintClass f

2:

int z = 3;

3:

Sobreposicin de mtodos
Cuando usted Ua.na a un mtodo de -*^

.ri(ikMniic
^ mlodo nacia arriba en I. jerarq-a

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


llc clases has.a que la localice. La heren u
petidan^e en ibcU-e, n tener ,uc

Sin embargo, podra haber ocasiones en que u

^ ^.^
^ ^ ^^ a fc

a es miodo para sobreponer

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


0. defina un mtodo en una subclase

vez

^ ^ subdase y se ejccula

4:
5:

6:
7-

8:

publie static void main(String arguments[]) {


PrintSubClass obj = new PrintSubClass():
}

obj.printMe):

He aqu la salida del programa:


x

is 0,

y is

I am an instance of the class PrintSubClass

Usd de mtodos para realizar tareas

165 I

Da 7

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.

Para agregar comportamiento adicional al mtodo original.

ver en la salida anterior.

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

aplicacin y por tanto, .eeun

ejecutando con el interprete o,

en el que lo sobrepone. A! llamar al mtodo original en el cuerpo del mtodo que se sobre
pone, usted puede agregar lo que necesita.

Use la palabra clave super para llamar al mtodo original desde una definicin del mtodo.
La palabra clave pasa la llamada hacia arriba en la jerarqua, como se muestra a continuacin:

ti clase. printSubClissZ es i

ilt|o 7 7 uuieslra esta

void myMethod (String a, String b)


//
hacer cosas aqui
super.myMethod(a,

//
; PRINTSUBCLASS2.

b);

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:

System.out.printlnCx is

4:

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

5:

"

+ x +

",

y is

" + y) ;

this.getClass().getName());

6:

7:

v se ll.ma al mciCHloprintMeO.s

8:
9:
16:

11:

-*

//desde PrintSubClass2
void printMe()

Systen.out.println("x

yis

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


this.getClass().getName());

z is

Da 7

tamicnto adicional sin problemas:

::sSobeP:;s;:prinicra msiniccin-usicd n

// desde PrintClass

ro.rintlnCl
}
thxs.getClassO.getNameO)

if (condition == true))
s(i2

System.out.printlnCX is " * .
System.out.printlnCY is
+ y),

ongina>

//

aadir

solamente

la

sUper(i,2,;

//

llamar

un

constructor

namar a

un

constructor

pore.

desde PrintSubClass

void printMeO {

super.prmtMeO;

Systera.out.printlnCZ

is

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

aistintas de cualquiera de los constructores de la superclase.


X is 0
Y iS 1
Z

is

un, V

da adicional/

Sobreposicin de constructores
Tcnicamente, los mtodos constructores

nomb e

J nucws sll ccaos en vez

el mismo nombre que la clase actua . los

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


Sl, dase, se manda Humar al constructor
a W

ve, nunda

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

ar

class NamedPoint extends Point {


String ame;

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

Si,, emha,,o. a!

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

uli,cc super.noneretfeJ mtodo (argumentos).

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:

super(argi, arg2, );

illicializar x

import java.awt.Point;

succsivamcnu-. Por lo tanto, la

in,a;,,,Mc,n ocurre en .odas panes du

"CCCS'C-

Listado 7.9. La clase nameopoint.

dc su superclasc. y ese constructor

Uamar-n cndor

-"

cual extiende la clase Point de,

super(x,y);

this.name = name;

'

publie static void main (StringJ] arguments) {

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

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


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

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

Da 7

168

Uso de mtodos para realizar tareas

La salida del programa es como sigue:


x

is

is

ame

usar finalize()

is SmallPoint

El mtodo constructor definido aqu para NamedPoint llama al mlodo constructor de Point

para inicializar las variables de instancia de Point (x y y). Aunque usted mismo puede ,n.-

Resumen

cializar estas variables fcilmente, tal vez no podra saber qu ms est hacend Point para

inicializarse h s mismo. Por lo tanto, siempre es una buena idea pasar mtodos constructores
hacia arriba en la jerarqua para asegurarse que todo se configure correctamente.

Mtodos finalizadores

diferente,

condiciones

-os mtodos que eiminan

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

finido que no hace nada. Para crear un mtodo finalizador para sus propias clases, nene que
sobreponer el mtodo f inalize {) usando esta firma:
protected void finalize() throws Throwable <
super.finalize();

Preguntas y respuestas

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

los errores se les llama excepciones: aprender ms acerca de estas en el

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

ahora, todo lo que usted necesita es incluir estas palabras cave en la


definicin del mtodo.

Incluya cualquier actividad de limpieza que desee hacer para este objeto dentro del cuerpo de

ese mtodo f inalize (). Tambin puede llamar a super.f inalize () para que las superclascs de su clase puedan finalizar el objeto, si lucra necesario.

Puede llamar usted mismo a) mtodo f inalize() en cualquier mntenlo (es un mtodo

,.., oros). Sin embargo, llamar a f inalize) no activa un objeto para que sea env.ado ;.
la basura. Slo cuando se eliminan todas las referencias de un objeto, ste se marca como
Cliniinable.

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

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

td l

purmetrl

Semana 2
Temas avanzados

de Java

8 Cmo poner programas


interactivos en Web

9 Cmo mejorar la apariencia de


sus programas con grficos,

fuentes y color

10 Adicin de imgenes, animacin

Silt

y sonido

11 Construccin de interfaces de
usuario sencillas para applets

12

Organizacin de los
componentes en una nterfaz
de usuario

13

Respuesta a la entrada del

usuario en un applet

14 Desarrollo de interfaces de

usuario avanzadas con el AWT

H</*

SlSi

Semana 2

i1ii
I

Da

3m
>".'

Cmo poner programas


interactivos en Web

s aden's ^ Web una eran

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

Li

i*
MI

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

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

Cmo poner programas interactivos en Web

Da 8
174

Restricciones de seguridad de applets

Hoy usted inicia con lo bsico:

Debido a que los applets de Java se ejecutan en el sistema del usuario, hay algunas resine-'"

.Las diferencias enueapplets y aplicaciones.

c.ones senas en cuanto a lo que un applet es capaz de hacer. Si no hubiera estas restricciones

Cmo crear un applet sencillo.

un programador de Java podra escribir fcilmente un applet que borre archivos de usuario

.Cmo colocar un apple. en una pgina Web.

recolecte informacin privada del sistema y cometa otras infracciones de seguridad.

Como una regla general, los applets de Java se ejecutan bajo un modelo de seguridad "mejor

seguro que lamentarlo". Un appie! no puede hacer nada de lo siguiente:

Leer o escribir archivos en el sistema de archivos del usuario.

Diferencias entre los applets

Comunicarse con un sitio de Internet distinto al que sirvi la psina Web que incluy el
applet.

y aplicaciones

a licactol,esI*a

"

Ejecutar ningn programa en el sistema del usuario. "

Cargar programas almacenados en el sistema del usuario, como programas ejecutables

e, archiv0 <

y bibliotecas de rutinas compartidas.

Todas estas reglas son ciertas para los applels que se ejecutan bajo Netscape Navigator o
Mtcrosoft Internet Explorer, los navegadores ms favorecidos actualmente por los usuarios
Otros navegadores con capacidades Java y herramiemns de desarrollo Java podran habilitarle

para configurar el nivel de seguridad que desee, permitiendo algn nivel de acceso a archivos
o directorios especficos para conexiones de red a sitios selectos de interne!.

A guisa de ejemplo, la herramienta appletviewer permite configurar una lista de control de

acceso, para las carpetas que un applet pueda leer o escribir archivos en ellas. Sin embargo

un desabollador de applets puede asumir que la mayora de la audiencia estar usando un '

navegador que implememe las ms estrictas medidas de seguridad.

Las aplicaciones de Java no tienen ninguna de estas restricciones de los applets. Pueden

aprovechar por completo las capacidades de Java.

: crear

ion v la n<crfaz del naveSador'

cin y

Tir^cio funcione tanto como un applet

Es posible que un programa de ava nc

procedimientos para crear

SL aleacin. Aunque ^ ^ X entre s. Las caracterstica


r^^

ser gradas a, correr elpro.ar.a

Precaucin

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

como ActiveX, pero todos los usuarios de navegadores deberan familiari


zarse por si mismos completamente con este tema.

Cmo poner programas interactivos en Web

Dia8

177 i

176

La programacin de aplicaciones usar las caractersticas ms recientes y mejores de Java 2.


Una vez que los navegadores encuentren una forma de alcanzar a los desarrolladores del
lenguaje, usted podr utilizar las bibliotecas de clase de Java 2 en sus applets.
A travs de este libro se harn notar las diferencias de versin. Ocasionalmente el compilador
Java mencionar estas diferencias cuando utilice una caracterstica de Java 1.0.2 que lia sido
remplazada con una mejor solucin como en Java 2, y tambin se le har una advertencia
al respecto.

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:

removidos de los applets y aplicaciones. Esto se loca durante el da 16, "Circunstancias

http://java.sun.com/products

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.

Los applets no tienen un mtodo main() que automticamente se llama para iniciar el procra-

sisiema con un intrprete de Java 2.

ma. En su lugar, hay varios mtodos que son llamados en punios distintos en la ejecucin de
un applet. Hoy aprender acerca de estos mtodos.
':

Todos los applets son subclases de la clase Applet en el paquete java.applet. La cl.'ise
Applet proporciona dos clases de comportamiento que lodos los applets deben tener:

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

omportarse en forma diferente.

Paro

,as pecffic al

necesita ser desplegada o redesplegada.

public void stop() {


// aqu va el cdigo

Destruccin
fieos y otras cosas.

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-

c cIL?^
IL?^
;.'

Inicializacin .;

PUede US:"
US:"" CKle mld |Wii fioil'uilaf
ej
fioil'uilaf cu"ufr subproceso en eje-

eenoo !qeT,enga recursos


"'" CU"qUer
ll bJCI C" CJR'u<:idn- C" ^"^' X^n troy a
especeos que necesiten ser liberados, como los subprocesos

I pple haya creado. Para proporcionar e, componam.cn.o de limpie., para su apple,. sobre-

ponga el mtodo destroy () como sigue:


public void destroyf)

// aqu va el cdigo

sobreponer cl mciodo init () como sigue


public void init() {

// aqu va el cdigo

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

destroy() se aplica slo a los appiets en tamo que f inalizef) es de

proposito general para un objeto sencillo de todo tipo de limpieza posterior

en si mismo.

k
i

Da 8

180

Web

Java tiene un colector de basura automtico que administra la memoria por usted. El recolector
. reda memoria de los recursos despus de que el programa ha termmado de usarlos, por .o
que usted norinahmcntc no tiene que usar mtodos como destroyf).
Pintado

iraport Java.awt.Graphics-

<t

[ DE PALIMDRQME . JAVA.

iiport java.awt.Font-

import java.awt.Color;

El pintudo es U forma en que un applet despliega algo en pantalla, sea texto, una lnea, un .
, do coloreado o una imagen. El pintado puede ocurrir muchos cientos de veces duran
delo de vida e un applet: una vez que el app.e. ha sido iniciando, de nuevo s, la ven ana
del navegador esitrada desde el segundo plano de otra ventana en pantalla de nuevo s, la

Publie class Pallndrome ex

vL,.n Sel navegador se mueve , tremes posiciones en la panu.lla. y as, por el csi.lo

Ustld debe sobreponer el mtodo paint () de su subclase Applet para desplegar cualquier

screen.

cosa. El mtodo paint () luce as:


publie void paint(Graphics g) {
// aqu va el cdigo

Este app|et sobrepone el mtodo paint O

Observe que aquerencia de otros mtodos descritos en esta seccin, paint <, toma aju-

men,o: una instancia de la Case Gr.phio. El objeto se crea y es pasado a p.int () peel

avegador por lo que usted no tiene que preocuparse por ello. S.n embargo, siempre d be .

"X '-lase oUi (Pa- de. paquete java.awt) dentro de, cod.go^de su app e ,
comnmente a travs de una instruccin i.port en la parte superior de su archivo fuente
Java, como en el siguiente ejemplo:
import

Tip

181

java.awt.Graphics;

Si usted importa muchas clases desde el mismo paquete, como las clases del

AV^T puede usar el carcter comodn para cargarlas todas a! rn.smo t.empo.

,a el

o ejemplo, la instruccin i.port J,va. awt.-; carga todas las Cases publ,

n.j,,

ca Zpaquete java.awt. Sin embargo, la instruccin i.port no meluye las


subclases del paquete, por tanto la Instruccin xmport j ava . awt. ; no
incluye las cla-.es del paquete j ava. awt. image.

b.0.

4,

Un applet sencillo
,,, el .la " ''Un vistan a la programacin orientad, ;, objeos". usted ere un :Wlci sck.IIo
Ese .pplet serevisa aqu por una razn diferente: para tomarlo como un ejemplo de progra
macin de applets. El listado 8.1 muestra el cdigo de dicho applet.

,,,ls,n<MndoM

0,0

I,.,,:!! Palin.r-o.e que dJp.iega e, texto -Go h.nD a ..l..i. I a l..aBna ho0.
y utiliz el applei como ejemplo de la creacin de una subclase.

" I-

Figura 8.1
!

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

V:

siop() paTnt (), y as sucesivamente), su app.e. funcionar sin problemas y n neces.dad

de un punto de salida explcita.

does not support Java!

18: <Mpplet>
11: </B0Dy>
12: </HTML>

Inclusin de un applet en una pgina Web

Despus de que haya creado la Case o clases que componen su applc. y las haya condado
en archivos de clases, debe crear una pgina Web para colocar el applet.

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

El archivo de clase

El propsito de <APPLET> es colocar un applet en una pgina Web y controlar c.nn luce con

--. web que :

relacin a otras partes de la pgina.

n-r un direcIorio

Los navegadores cort capacidades Java usan la informacin contenida en la etiqueta y ejecu

tan los archivos de clase combados en e, app.et. En esta seccon pender a el - appleLs
de Java en una pgina Web y a servir los archivos de Java ejecutables en \Uh en .oda

*' ^PP-C en un programa, L

u^de^ '

suficientemente grande.

dimensin.

"'Ur SgUro dc Proporcionar una ventana lo

La seccin siguiente asume que usted tiene suficientes conocimientos para

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

d-endo de
de ver
ver un
un aPP,eI
aPP,eI de
de Java
Java

siguiente: Aprendiendo s puoHcar en Wet con HTML de Laura Lema,

s que no pueden manej.r

porque su 1Z1^J.T
" Cnil! 4UC * ^ 'd
l sopona. Si usted no especifica
navL^dor
no lo

l
algo
entre <APPLET> y <MPPJT> .

en el lugar del apple,.

' " naVe-;id"re^ fue no .soportan Java no despliegan nada

La etiqueta <APPLET>

L, enqueta <APPLET> es una extensin especial a HTML para incluir apple.s de Java en pag,-

:M istado

queu, es soportada por todos los navegadores que mj


manejan pg
programa de Java.
ill dde una pgina
gina Web
8 2 muestra un ejemplo sencillo
Web con
con un
un apple,
apple, mc.u.do.
mc.u.do.

Listado 8.2. El texto completo de palindromepase.html


1:

<HTML>

2:

<HEAD>

4:

</HEAD>

5:

<BODY>

alterno con.que se ,eS h


does

Cmo probar el resultado

11

3: <TITLE>The Palindrome Page</TITLE>

yd

not

support

Cmo poner programas interactivos en Web

Da8

~~~~~~~

tos app'eli

-*-"pSE

-~"~-

____

Ms acerca de la etiqueta <APPLET>

En su forma ms simple, la etiqueta <APPLET> utiliza los atributos CODE, WIDTH y HEIGHT

TaSTnT;hlTtV:m^.aprOp^ ye~ <"* y ** => ^PP'et en ese aspa-

f ,<APPLET> inclu>* * iribuu.s que le pueden ayudar a integrar mejor un

dentro del diseo lotal de una pgina Web.

Figura 8.2

\ota

- Ui i>a'n(i Web
PalindromePage.html

V: en Navigator.

<APPLET> son casi idnticos a los de la

Mfammcfl>

Go hang a salami, I'm a lasagna h)g.


ALIGN

El atributo ALIGN define cmo ser alineado el ;,pple, en una pgina Web en relacin a otra.s

panes de la pagina, liste atributo puede tener uno ele nueve valores:

ALIGN=LEFT alinea el applet a la izquierda del texto que sigue al applet en la pgina.
ALIGN=RIGHT alinea el apple. a la derecha del texto que sigue al applet en la pgina.

ALIGN=TEXTTOP alinea la parte superior del applcl con la parle superior del texto ms
alto en la lnea.

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

valor es lo mismo que ALIGN-BOTTOM, pero ALIG^BASELINE es un nombre ms

soporta el lenguaje.
.. *iv<

descriptivo.

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-

dei

pgina Web que contiene el appJ

la pgina

orio que I, pgi,,, Web:

^ mismo

es u
un
es

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

sitio Web aherno, para cargar I

do BiX.class de

HSPACE y VSPACE

Mediante los atributos HSPACE y VSPACE se configura la cantidad de espacio en pixeles entre

un applc. y st, texto que lo rodea. HSPACE controla el espacio horizontal a la .z.qu.cda y

HEIQHT-4. WIDTH-4M>

erecL. del app.et, v VSPACE comro.a el espacio vertical sobre y bajo el applet. Por ejemplo,

aqu est ese fragmento muestra de HTML con espacio vertical de 50 y espac.o hor.zontal
de 10:

<APPLET CODE=-ShOWSmiley.class- WIDTH=45 HEIGHT=42


ALIGN=LEFT VSPACE=50 HSPACE=10>
Requires

Java

</APPLET>

1 a fi.u.r.. 8.4 muestra cmo se desplegara este applet. el cual despliega una cama sonriente

en un fondo blanco, con otros elementos de una pagina Web. El fondo de la pag.na es una

rejilla, y cada rejilla tiene un tamao de !0xl0 pixeles. Usted puede usar la rej.lla para med.r
la cantidad de espacio entre el applet y el texto en la pgina.

CODE y CODEBASE
Los atributos CODE y CODEBASE a diferencia de otras partes de la etiqueta <APPLET>, se usan

nara indicar dot.de se pueden encontrar el archivo de la clase principal del applet y otros

archivos los cuales sern utilizados por un navegador con capacidades Java cuando trate de
ejecutar un applet despus de obtenerlo de un servidor Web.

j!

i
</APPLET>

La etiqueta <object>

Cmo poner programas interactivos en Web

Da 8

188

i' archivo de texl cualc!uier <** sa).

cuso*

a <OBJECT> .orna la forma siguiente:

hf1gHT-40

?,

W " servidorquecontengael archivo.

" CneXn ^ S "^ ^*

e toma obtene, un applei y todo lo que necesita pai ejeem-us

te de <APPLET> a <OBJECT> requiere los cambios siguientes:

- ->rMw jar ^ ^

archivo JAR. el

cantidad de arch

"" archivo *

;: fadrTncqueblenerddscrvidonusleJpualc**y*"-

...r*.*.-.*
que el tamao

el lado del na.e.

Tior

7
escomprimir y ejecutar los archivos)

jlg

ores ravisaiore imemet Exptrer >


T ""^
demr
"" "^ MR"
Li
ianic
el lonnaio
Zip C
o empacados
sin compresin

Cn!ar CS0S lTchtw< ' J^K incluye una hc,T,,n,cnu,


describen posteriormente.

jar cf Anate, iar -.class vgi

listado 8.2

1:

<HTML>

2:

:mLE>The PaHndrone Page</TITLE>

3:
4:

</HEAD>

5:

:;>!Tf.vorit. ,eat-related palindro.e 1.:

6:

que el nombre
nombdJ
del

'

que

""''

vo del archivero seguir como uno de los argumentos siguiemes.


i

Tambin puede aadir i--h:- i- .

ieme.

-r

rwi.s ^puo/lcos a un archivero Java con un comando como el sigu-

jar cf Smiley.jar ShowSniley.class ShowSmaley.html spinhead.gif

7:

Tiiiey . jar que contiene tres archivos: ShowSmiley.class,

8:
9:
10:

</OBJECT>

11:

</BODY>

12:

</HTML>

Archiveros
ch.veros JAVA
jmvm
La manera estndar de colocar un applei de J-

^ es mediame <APPLET> u
^ ^ obcne y ejccuU,

<0BJECT> para .ndicar el archivo de ^ ~ ^^ archvos requeridos por e,


un navegador con soporte para Java. Cualesquier

aPple. se obtienen desde el servidor Web.

pZ n ,

i' ^ " " Ca

appiti con etK|iieias como la-, .siguientes:

- archive-smiley.jar- width=45 heiBht=42>

La etiqueta especifica ,,uc :la-,livo JAR |hml;ldo Smiley. j

jar

por el applei. TO navegadores v hi.o-,,.,; ., .

H.nIrn . , .

..

.."

comcnc

|<m

^^

> "tminiiLMUs de navegacionque soportan archivos JAK buscar,,

aentro del archivo indimH.- u ^^

'

t -

o inalado los dems archivos que se necesitan conforme se ejecuta el applet.

Cmo poner programas interactivos en Web

Dia 8

i
Precaucin

Aunque un archivero Java puede contener archivos de clase, el atributo

ARCHIVE no elimina la necesidad del atributo CODE. Un navegador requiere

t:rf''lc lm *

conocer el nombre del archivo de la clase principal del applet para cargarlo.

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.

L-.s versiones actuales de los navegadores Web de Netscape soportan el uso de archiveros Zip

Paso de parmetros a los applets

coi, el atributo ARCHIVE, pero slo se pueden utilizar para los archivos de clase, no para ,ma-

"!!e ' u otros unos ele archivos que un applc. pudiera necesitar. Con Netscape, usted puede
usar el atribulo ARCHIVE para indicar el n.mib.v cid a.duvcro. um.o i-Me.

<APPLET copE=-MyAPlet.class- ARCHIVE--appletstuff.zip" WIDTH-1B8


HEIGHT=100>
</APPLET>

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

/A

e l,s de Java: el archivo CAB. ste es una abreviatura de la palabra cabinc, (gaveta , u .,
Lid" grunar archivos entre s y comprimir. para una entrega ms rpida a travs de *cb.
Los archivos CAB se crean con una herramienta de Microsoft llamada CABarc. Actualmente

dtmro dc

est disponible sin cosi en la direccin siguiente:


http://www.microsoft.com/workshop/prog/cab/

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

un ejemplo:

<APPLET CODE=-DanceFever.class WIDTH=200 HEIGHT=450>


<PARAM NAME="cabbase' VALUE="DanceFever.cab >
</APPLET>

<PARAM NAME=size VALUE="24">


A Java applet appears here
</APPLET>

valor de

dos pariinelros del applei

, y uno nombrado size con un valor 24.

El uso de la e.ique.a <PARAM> es e| mismo para los app.ets

vez de la etiqueta <APPLET>.

que usan la etiqueta <0BJECT> en

Cmo poner programas interactivos en Web


Da 8

Listado 8.4.

Los parmctrU son pasados a, carg^

recuperarlos parmetros con e mto

S^4

El texto- inicial para newpalindhome . java.

1:

import

2:

import java.awt.Font;

3:

iraport

4:
5:

java.awt.Graphics;
java.awt.Color;

"

'

-:

publie class NewPalindrome extends. java.applet.Applet {

6:

Font

f = new Font("TiraesRonian",

Font.BOLD,

36);

7:

initffcomola siguiente

publie void paint(Graphics screen)

8:

tneFontName * getParameter( -fonf );

screen.setFontff);

9:

screen.setColor(Color.red);

18:

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

11:

40);

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-

Nota

12:
13:

Lo primero que necesila para aadir a esta clase es un lugar para que el parniciro palindrome

sea almacenado. Como usted necesilar esle nombre a iravs del applct, agregue una variable
de instancia para el nombre exactamente despus de la variable para la luentc:

h-i sido especificado en el archivo 1ITM1Observe i|uc si un parmetro que usted espera ^"^ ^ ^c% prucbc con uri parmetro

if (theFontName == nuil)

String

palindrome;

Para configurar un valor para el nombre, liene que obtener el parmetro. El mejor lugar para

manejar ios parmetros de un applet es denno del mtodo init (). Esle mtodo se del me del
mismo modo que paint () (publie, sin argumentos, y un tipo de retorno void). Al probar un.
parmetro asegrese de probarlo para un valor de nuil. Si no se indica un palndromo, lo pre
determinado, en este caso, es desplegar Oennis and Edna sinned, como lo ilustra lo

siguiente:
publie void init() {
palindrome = getParameter("palindrome");

if (palindrome == nuil)
palindrome = "Dennis and Edna sinned";

StringY = etParameter('size-);
if

Una vez agregado este mtodo, todo lo que queda es modificar el mtodo paint (). El mto

(s == nuil)

do original drawString() se pareca a esto:


cd

C,

e,

applci

U '"" ",,,.|0 !. .na Er,.

p,_unar0.,

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,

,icie c<ipiando la clase Palindrome original, c


decase, como muestra el lisiado 8.4.

5,

50);

El listado 8.5 muestra el resultado final de la clase MoreHelloApplet. Compile la clase para
que tenga listo un archivo de clase.

1931

Da 8

|194

Cmo poner programas interactivos en Web

Cargar este archivo HTML en Netscape Navigator produce el resultado que se muestra en la

Listado 8.5. El texto completo de newpalindrome.java.

figura 8.5.

1:

import

java.awt.Graphics;

2:

import

java.awt.Font;

Figura 8.5

3:

import

Java.awt.Color;

La lanilla

4:
5:

publie class NewPalindrome extends

java.applet.Applet

6:

Font f = new Font("TimesRoman",

7:

String

palindrome;

publie

void

Font.BOLD,

36);

apBBMp

-:*" 0

NewPalindrome.html

carnada con Netscape


Navigator.

9:

paint(Graphics

screen)

screen.setFont(f);

11:

screen.setCoJor(Color.red);

12:

screen.drawString(palindrome,

".. -J..

*il U W -

No, sir, prefer prison

8:
10:

1951

5,

50);

13:
14:

publie void init()

15:

irfi.-j-,. .-

palindrome = getPararaeter("palindrome");

16:
17:

if

18:

palindrome =

(palindrome ==

Al
-

.*

Si no se especifica un palndromo en el cdigo para NewPalindrome. el valor predeterminado

nuil)

"Dennis and Edna

es Dennis and Edna sinned . El lisuuJo 8.7 croa un archivo HTML sin im:i etiqueta de

sinned";

19:

pramenos para AME.

20:

Listado 8.7. El texto completo de newpalindrome2 . htul.

Ahora cree usted el archivo HTML que contiene este applet. El listado S.6 muestra una nueva
1:

pgina Web para el applet NewPalindrome.

Escriba

Listado 8.6. El texto completo de newpalindrome . html.

<HTML>

2:

<HEAD>

3:

<TITLE>The New Palindrome Page</TITLE>

4:

</HEAD>

5:

<BODY>

1:

<HTML>

6:

<P>

2:

<HEAD>

3:

<TITLE>The New Palindrome Page</TITLE>

7:
8:

Your

4:

</HEAO>

5:

<BODY>

6:

<P>

9:
10:

7:

<APPLET CODE="NewPalindrorae.class"

8:

<PARAM NAME=palindrome VALUE="No,

9:

Your

10:

browser does not

support

prefer prison">

Java!

</BODY>

12:

</HTML>

</APPLET>
</BODY>

Como aqu no se proporcion ningn nombre, el applet usa el predeterminado, y el resultado

:1

es lo que usted esperaba. Dle un vistazo a la figura 8.6.

</APPLET>

11:

<APPLET CODE="NewPalindrome.class" WIDTH=600 HEIGHT=100>


browser does not support Java!

WIDTH=600 HEIGHT=100>

sir,

, ir

Resumen

Observe la etiqueta <APPLET>, la cual designa el archivo de clase para el applet y la altura y
ancho apropiado (600 y 108, respectivamente). Exactamente debajo de ella (lnea 8) esi la

Es discutible la razn por la que los applets siguen siendo el centro de atencin del desarrollo

de Java, ms de dos aos despus de que el lenguaje fuera liberado por primera vez al pblico.

etiqueta <PARAM> que se usa para pasar el palndromo al applet. En este ejemplo, el

Sin embargo, los applets permanecen como el uso pblico ms grande de Java, porque son

parmetro AME es palindrome, y VALU es la cadena No,

elaborados y colocados en miles de sitios de World Wide Web. De acuerdo con la mquina de

sir,

prefer prison.

bsqueda AltaVista en http://www.altavista.digital.com, hay ms de 1.200,000 pgi


nas Web que contienen applets.

Cmo poner programas interactivos en Web

Da 8

196

Preguntas y respuestas

Figura 8.6.

>P_.Teiigo un applet que toma parmetros y un archivo HTML que le pasa esos

La pgina

NewPa Iii<frome2. html

-r.-jwremetros, pero cuando mi applct se ejecuta, todo lo que obtengo son valores

iirgoilti ton NiScu*e.

Dcnnis and Edna siiined

nuil. Qu estii pasando kju?

R Los nombres de sus parmetros (en el atribulo AME) corresponden aclmeme con

los nombres que usted est probando en getParameter () ? Deben ser exactos,
incluyendo maysculas y minsculas, para que se pueda realizar la correspondencia
Asegrese tambin que sus etiquetas <PARAM> estn dentro de las etiquetas <APPLET>
de apertura y cierre y que no ha cometido ningn error de escritura.

P Hay alguna configuracin especial requerida para que mis programas de sen*
\

Debido a que se ejecutan y son desplegados dentro de pginas Web, los upplets pueden usar

los "i-lkos inicruz de usuario y estructura de eventos proporcionados por el navegador Web.
EsJcapacidad proporciona al programador de applets mucha funcionalidad que le ahorra irabajo duro adicional.

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

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>

. Para acelcaf e! tiempo que .orna cargar un applct desde un servidor Web. usted puede

usar los archivos de archivero de Java, el atributo ARCHIVE de Netscape, y el parmetro


cabbase de Microsoft.

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

dor Web puedan presentar applets de Java en pginas Web?

R Se requiere muy poco por parte del servidor para ofrecer applets de Java junto con

documentos HTML, archivos de imgenes y olro.s archivl)S. Mudl()s c |os puqucltfS dc

servidor comercialmeme disponibles ofrecen sopone adicional para Java Si no lo

hacen, configurar el servidor para presentar applels dc Java requiere que se asocie la

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

MIME.

P Los applets no tienen una lnea de comandos o un (lujo dc salida estndar,


como puedo hacer una salida de depuracin sencilla en un applet como

System.out.printlnO?

R Dependiendo de su navegador u otro ambiente habilitado para Java, usted podra tener
una ventana de consola donde aparezca la salida de depuracin (el resultado de

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

Advanced.)

Puede continuar imprimiendo mensajes mediante System.out.printlnO en sus


applets (no olvide quitarlos cuando haya terminado, para que no confundan a sus usua

rios reales).

Semana 2

Da

Cmo mejorar la apariencia

de sus programas con


grficos, fuentes y color

Una de las mejores formas de impresionar a un conocido que no sea programador

es con un programa que despliegue grneos. Tal vez el to Pedro no aprecie los

detalles de los ciclos bien construidos o una jerarqua de clases ele"ante pero si le

muestra la secuencia animada de un pequeo bailando -La galliniia". quedar

asombrado de su pericia como programador.

Hoy empezar a aprender a ganar amigos e influenciar a la cerne al escribir progra

mas que usan grficos, fuentes y colores.

Para usar las caractersticas en sus programas, usied ,,,11,,;, d.iSCS dcl p.1()l)e|L,
java.awt, el cual proporcin;, la mayora de las moneras visuales do J;,v Con'
estas clases dibujar textos y figuras, como crculos y polgonos, en un apple.
Aprender a usar fuentes y colores distintos para las figuras que trace

Da .9

200

Cmo mejorar la apariencia de sus programas con grficos, fuentes v color

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

Listado 9.2. El texto completo de

'- Ob|Clos desasociados.

Patrones de relleno degradados,

Dibujo de lneas-de anchos diferentes.

map . html.

1: <body bgcolor="#C4c4c4">

2: <dlv align="center">

widtn=35e>

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

del texto y el color fueron elegidos antes de dibujar los caracteres, del mismo modo que un
artista elegira un color y una brocha antes de pintar.

El tcx.o no e's lo nico que puede dibujar dentro de la ventana del applet. Usted puede dibujar

5:

</dlv>

6:

</body>

La figura 9.1 muestra la pgina y el app|cl cargados en Nc.scape Navigator.


Figura 9.1

Dibujo de un texto en
una ventana del

applel.

lneas, valos, crculos, arcos, rectngulos y otros polgonos.

1 ;, mayora de las operaciones bsicas son mtodos debidos en la el.se Graphics. l-n ....

applet usted no tiene que crear un objeto Graphics para poder dibujar algo (como recordara,
uno d los parmetros de! mtodo paint() es un objeto Graphics). Este objeto reprsenla la
ventana del applet y sus mtodos se utilizan para dibujar dentro del applet.

La clase Graphics es parte del paquete java.awt, por lo que iodos los applcts que dibujen algo
deben usar la instruccin import para que todos los programas puedan utilizar Graphics.

El listado 9.1 es un applet sencillo que usa el mtodo drawString(> para desplegar texto,
como lo ha hecho previamente con el applet Palindrome.

Listado 9.1. El texto inicial de map . java.

1:

iniport |ava.awt.Graphics;

2'

3: publie class Map extends java.applet.Applet {


A:

5:

e!

publie void paint(Graphics screen) {

' }

screen.drawString("Florida",

185, 75);

Todos los comandos bsicos de dibujo que conocer hoy sern mtodos Graphics que son
amados dentro de. mtodo paint (, del apple,. ste es un lugar ideal para tocias las opera-

cones de d.bujo porque paint () es llamado automticamente siempre que la ventana del
applet necesite ser desplegada. Si otra ventana de algn programa cubre al applet y ste

requ.ere ser dibujado, colocar todas las operaciones de dibujo en paint () asegura que

ninguna parte del dibujo quede fuera.

Este applet utiliza el mtodo drawString () del objeto screen para dibujar la cadena
Florida- en las coordenadas 185, 75. El lis.ado 9.2 muestra el cdigo HTML que despl.ega
este applel luego de ser compilado en un archivo de clase.

Continuaremos agregando al apple. Map cada m.odo de dibujo que se abarque en esta

seccin.

'

Da 9

Cmo mejorar la apariencia de sus programas con grficos

El sistema de coordenadas para grficos


Como draString(), todos los mtodos de dibujo tienen argumentos que indican las coorde

Lneas

nadas x y Algunos toman ms de un conjunto de coordenadas, como una lnea, que tiene una

y M p"ni *

coordenada x, y pra identificar su pumo de inicio y .ira coordenada x, y para su pimo Imal.

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

* >

drawLine(x1, yi, X2, y2);

las coordenadas x se incrementa a la derecha de 0,0, y las coordenadas y, lo hacen en

sentido inferior. Esto difiere de otros sistemas de dibujo en el cual el origen 0. est en h
esquina inferior izquierda y los valores de y se incrementan en semido superior.

Todos los valores de pixeles son enteros (usicd no puede usar nmeros decimales para desple
gar algo entre valores enteros).

La figura 9.2 representa el sistema de coordenadas para grficos de Java con el origen en 0,0.
Dos de los puntos de un rectngulo estn en 20,20 y 60,60.

Agregue la siguiente instruccin al mtodo paint() del apple, Map.


screen.drawLine(185,80,222,80);

Esta instruccin dibuja una lnea de 185,80 a 222,80; una Knea que subrava

como se puede ver en ,a figura 9.3, una porcin de la ventana del apple,.

c\ texio Florida,

9.3

Figura 9.2

+X

0.0

El sistema de
coordenadas para

Axregado de una Unen


al apitlel.

?r ?o

grficos de Java.

Mota
6C 60

Para preven,, las molestias producidas de voltear repetidamente entre este

texto y su edrtor de cdigo fuente de Java, la versin final de Map. Java se

lista completa al final de esta seccin. Hasta entonces, usted puede conti

nuar con el texto y escribir todo el cdigo Java una sola vez

Rectngulos
+Y

Dibujo y relleno

H-,y disponibles dos clases de mtodos de dibujo para muchas de las figuras que usted puede
dibujar en un applet: mtodos de dibujo, con los que se delinea el obje.o. y mtodos de
relleno, con los cuales se rellena el objeto con el color actual. En cada tipo de-mtodo tam
bin se desplegar el contorno con el color actual.

Nota

Tambin puede dibujar archivos de mapas de bits, como los archivos GIF y
JPG, mediante la clase Image. Maana aprender sobre esto.

redoderd?:
** "^
ieCUta8ul0:
reclnul ml v con esquinas
redondeadas (como en la mayora
de los*teclados
de computadora).
Usted puede dibujar ambos tipos de rectngulos en una forma delineada o rellena con el color
Para dibujar un rectngulo normal, use e. mtodo drawRect (, para los contornos y e, mtodo

fillRect () para las formas rellenas.

Ambos mtodos toman cuatro argumentos:

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,

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.

rcdondea^ & 10 pixeles de

ancho y 8 de aho El

345);

del aPL.;
Figura 9.5

e" I:l fieura 95- " acercamiento de una porcin

Agregado de un

rectngulo redondeado

al applet.

"

Los Pohgonos se pueden dibujar con ,os mtodos drawPolygon

lilo limos argumentos definen el ancho y el alto del rea en que se redondean las

^ n E re mis grande sea el rea, ms redondas sern las esquinas. Incluso puede hacer

() y nilPoIygon,,

qS cinguto se vea como un crculo o ., ovalo, haciendo esu, argumcn.os ,o su,,,cnteniente grandes.

,, f,..un 9 4 muestra vanos ejemplos de rectngulos con qsquinas redondeadas. Un rec.ngu-

"o tS,e n anl de 30 y una altura de ,0 para cada esquina redondeada. Otro nene un ancho

Puede especificar eslas coordenadas de dos

de 20 y una altura de 2()!y luce mucho ms como un crculo que como un rectangu.o.

maneras

Figura 9.4
10

dondeadus.

Polygon poly = new Polygon();

e!ZE
P
d6Sde ""Poly0on(nt/;
C^ de P"iattl
-diante
enteros. Esto requ.ere una llamada
al constructor

, e, cual especifica e, aneg.o de pumos x. e. arreglo de pun.I y "c., ,'id- c

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

int x[]

= {

ia,

20,

30|

48|

50 }.

int y[] = { 15, 25, 35, 45, 55 };'

mt points = x.length;

Polygon poly = neW Polygon(x, y, points);

p'un.os

Cmo mejorar la apariencia de sus programas con grficos, fuentes y color

Da 9
I 206

Figura 9.6
Agregado de un pol
gono al applel.
ejemplo:
,

65);

cde dibujarlo con los

Cuando tenga ,

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,

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

a la izquierda y arriba del mismo valo real .

Regresemos al applet Map y agregue las instrucciones siguientes:


screen.fillOval(235,140,15,15);

screen.fillOval(225,130,i5,i5);

screen.fillOval(245,130,15,15);

stos son mtodos f ill (rellenar) en vez de mtodos draw (trazar), por eso crean tres crcu

los negros conectados entre s en un puni al ceniro de Florida, como se ve en la lgura 9.7

Da 9

208

Cmo

Figura 9.7

Figura 9.8

Agregado de un tro de

crculos el arpie!.

I22!2l!ifParencade:

l^gjggffg*^

Medidas de un aito.

270

Esta

Arcos
De todas las operaciones de dibujo, los arcos son los ms complejos de construir. Un arco es
pane de un valo y se implemento en Java como un valo dibujado parcialmente.
Los arcos se dibujan con los mtodos drawArc () y f illArc (), los cuales toman se.s argumemos:

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.

-190) .

instruccin dibuja el ve
veo

lcs y un alio c]0

Figura 9.9
Un arco.

fuentes y color

Da 9

211

>210

tro areumentos que no cambian

""' " ***

.0 Pele>,

9:

screen.drawRoundRect(182,61,43,24,10l8);
int X[] =,{ 10, 234, 253, 261, 344, 336, 295, 259, 205, 211,

10:

11:

195,

12:

13:

, ,,. *

15:

19:

AlV,da .as instrucciones

21:

screen.drawArcfax, ay,

23:

denadas x, y creadas por el ciclo:

12 };

#&:!.
mmm.

for (int ay = 120; ay < 320 ; ay += 10)

22:

00,0 - **, . < * P-*

37,

screen.fill0val(245,130,15,15);
for (int ax = 50; ax < 150; ax += 10)

20:

24:

10 };

screen.fillDval(235,140,15,15);
screen.fillOval(225,130,15,15);

18:

s.guientes a. mtodo p.int () del apple. Map:

12,

screen.drawPolygon(poly);

17:

valores x y y

94, 81,

Polygon poly = new Polygon(x, y, pts);

16:

,a. ,. , *

120,

118, 56, 68, 49,


int pts = x.length;

14:

medios crculos.

191,

int y[] = { 12,-15, 25, 71, 209, 278, 310, 274, 18B, 171, 174,

10,

10,

0,

-180);

La figura 9.10 muestra el applet Map que ha sido pintado con los mtodos do dibujo bsic

de Java:

50.120
Figura 9.10

50.130

El applel Map.

50,140

s1*

b*

50,150

50,160
50,170

ciclo ay se ejecuta nuevamente.

incluyendo todas las instrucciones de d.bujo que se v.eron durante c.

import java.awt.Graphics;

2:

import

Aunque ningn cartgrafo temera perder su trabajo ante este despliegue de la hechura de un
mapa, el applet combina una muestra de la mayora de las caractersticas de dibujo de que

34: public cas, Map extends i^

goza la clase Graphics. Un applet como ste podra ser expandido mediante los objetos Font

l\

y Color, y se podran reorganizar las operaciones de dibujo para mejorar el producto final.

s". P
\-

I'

8:

java.awt.Polygon;

public void paint(Graphics s r en

screen.drawStringCFlonda", 185, 75),


screen.drawLine(185,88,222,80);

Screen.drawRect(2, 2, 345, 345);

Cmo mejorar la apariencia de sus programas con grficos, fuentes y color

Da 9

La clase Graphic, tambin incluye alguna funcionalidad de corte y pegado que .ncluve la
ventana del Applet:

. Hl mtodo copyArea( 5, copia una regin rectangular de la ventana del apple, en otra
regin de la ventana.

. E. mtodo clearRect;), limpia una regin rectangular de la ventana del applet.

>

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

El mtodo copyArea () toma seis argumentos:

. Los coordenadas x, y de la regin rectangular a copiar.

Un objeto Font se crea al enviar tres argumentos i su constructor:


El nombre de la fuente.

. F! ancho y alio de esa regin.

.. La rancia horizomal y vertical, en pixeles, para reurarse de .a reg.n antes de desple-

El estilo de la fuenlc.

El tamao del punto de la fuente.

jrar una copia de ellu.

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

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:

screen.clearRect(e; 0, size() .width,

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.

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

nombre es parte del esfuerzo de JavaSoft para tener nombres de ,


consistentes a travs de la biblioteca de clases.

Font.BOLD +

Font.ITALIC,

24);

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

Texto y fuentes

Copiado y limpieza

screen.copyArea(8,0,100,188,50,25);

2131

f-i-'.'-i'

Cmo mejorar la apariencia de

sus programas con grficos, fuentes y color

4:

J| Pblic class SoLong extends iava.applet.Applet {


:
lual a dicho obje-

dianie setFont ().

PU51^n^old_Paint(G'-aphics screen) {

9:

rics fm =

18:

g,

setFont(f);

11:
12:

,o y dibuja la cadena

13:

14:

16:

screen.dra*StrinB(S) ,, y);

tanas de distinto tamao.


Figura 9.11

Dos copias del applei

viccnlc, como el ancho y al.o de escures

dicha cadena.

Dado un carcc, devuelve el ancho de ese c:,,a.c,

charWidth(char)

getHeightl)

V
,

import java.awt.Font;
imoort java.awt.Graphics;

I i/port ]ava.at.FontMetrics;

^"J^^^^r'-v -- '-

wses Font y FontMetrics. El applci SoLong

215

217

Color

y ColorSpace del paquete j ava. awt para que sus aPPlel!| >'

usar las

--coior Para crear un color:


s

"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

SJndo scB. En este sistema un color se describe por la cantidad que contiene d. ojo

X -I tde alH tienen la R.G. y B de Red. Orcen y Blue, Cada uno de ,. ^


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

^ .^

;es emeros que represemen ^ ^

numeros de pumo floiame que

Usted puede especificar el valor sRCB del


Las .nstrucciones siguienles ,nuestran

sea

) float.

= newColor(0.807FjlF0F).

Color c2 = newcolor(255,204)102).

le s tres U ,ed tambin puede representar valores sRGB mediante los nume.o, de pa.to

Jal que van de 0 a ^ .0. Java puede representar millones de colores entre los dos
extremos mediante sRGB.

Un sistema de desenpcin de colores se llama un e^uo de

^^?

de tales espacios. Otro lo es CMYK. un s.stema usado por ,m.sore


sean la cantidad que contienen de cyan, magenta, amarillo > nefcro.

e^
-

punto flotante como

'ores se suelen Z5 ,"


pgina Web medi

el da 3, "Los ABCs de Java". Los cocomo si configurar un fondo para

Cases y mtodos ./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.

; ^^

males, por ,nto. cuando vea una , ^

con nmeros de punto tate

HTML. Ninguna de las

ar9umentos hexadeci-

"^ '^^ eS
eS quo
quo esI
esI tr^

color
ol
a sKGB. y
y

I , representacn mema de colores de Java medame sRGB es slo un espacio de co

actuales

;;c se est usando en un programa. Un dispositivo de salida. mon,,o, o ,

' el miodo setColor() de la clase

tiene su propio espacio Je color.

CU-.VO v.s,ed desnlieo aprime ulso de un co.or designado, el disposi.Ko de salida podr:,

=SEHSS==

o ms colores que se aproximan al color no existente.

U realidad practica de la admin^ion de


^
sRGB no est disponible en todos los dispositivos de s

>les mo

s co,o,,s usan las s,guienlCs variable., Color (con valores sRGB ind.cados en(re pa.nteblack

(0,0,0)

'aso de ese color, puede usar las clases ColorSpace y otras clases en el paquete

blue (0,0,255)

java awt. color primado en Java 2.

cyan

En ,a mayora de los programas, bastar e, uso integrado de sRGB para definir -os .o,o,w

darkGray (64,64,64)

Uso de objetos Color

P,r, conjurar el color del dibujo actual, ya sea con un objeto Color que debe ser creacto pan.
fresen.;,- el co.or o que usted deba usar alguno de los colores estndar dispenses ,a
clase Color.

(0,255,255)

ray (128,128,128)
green

(0,255,0)

lightGray (192,192,192)

magenta
orange

(255,0,255)
(255,200,0)

Pink (255,175,175)
red

(255,0,0)

wnite (255,255,255)
yellow (255,255,0)

Da 9

Lu i,nca siE-ic,c e--h.cc e, * vgfin,c de, .*Jc.o screen a u^s Uc u. - ,,,s

Cmo mejorar la apariencia de

Eptre Jas caractersticas de Java2D se incluyen las siguientes:

' Plantillas de llenado especiales, como degradados y lexlUras

variables de clase estndar.


screen.setColor(Color.pink);

Si usted na creado un objeto Color, lo puede estab.ecer de una .aera utan


Color brush=newcolor(255,204,102);
screen.setColor(brush);

s de estab,ecer e, coior actual, todas ,as operaciones de d,buJ0 ocurrirn en ese co!or.

Trazos que definen el ancho y estilo de un trazo de dibujo

Procesos de suavizado para redondear los bordes de los objetos dibujados.

Espacios de coordenadas de usuario y de dispositivo I


Trmino Nuevo

stablecer el color de fondo de la ventana de, applc Este

El m,odo setBackground<) es

toma un argumento sencillo, un objeto Color.


setBackground(Color.white);

> las coordenadas que se usaron para dibujar lneas, textos y otros elementos

;is ;'cerca los

color como el fondo del applet:


screen.setColor(getBackgroundO);

Operaciones grficas avanzadas mediante

Conversin por cast de un objeto Graphics2D

es cb t0r

do paint ()

lk,,s * ;D o .*. mi. "^" ;.;n.n,-. o.,,;...,.,....>


ha aprndalo hy

do las otras clases y programas que las implementan.

dbUJ " ^ SOn

"

desde un objeto

Pa'a

public void paint(Graphics screen) {

GraRhics2D screen2D = (Graphics2D)screen;

El objeto screen2D en este ejemplo fue producido a travs de una conversin por cas,. Es d

objeto screen conven.do desde la clase Graphics a la clase GraPhics2D.

Todas las operaciones grficas de Java2D deben ser llamadas en un objeto Graphics2D. ste

es parte del paquete java.awt.

Cmo mejorar la apariencia de

Da 9

sus programas con grficos, fuentes y color

220

Addico

Especificacin de los

Cclico

Figura 9.12

Desplazamientos de
degradados aa'clicos y

cclicos.
y muchas otras caractersticas.

d "*

funciona de la misma mane-

2D

* -

screen2D.setColcr(Color.black)

sea con el mismo p

Figura 9.13
litis rectngulas con
el mismo

GradientPaint.

Patrones de relleno
LS patrn, s de relleno

puede usar m color sol.do. relleno

patrn c: Ueno ^

Ss22
2

uar con ,n color s.ido como p.tr6n

- ^ -d, lo que es un **

fera ,12 muestra los ejemplos de

ad0 Con JaVa2D **

paint se implementa por cualquier


entPaint.TexturePaint, y Color,
con setPaintO

,mslnil1or GradlentPaint

GradientPaint(x1Iyi>Colonlx2ly2,color2,;

setPaint()deGraPhics2Dconun

es io mismo que

de

"Z^::Tzrel co]or

Si usu* desea usar un desp.azamicn.0 Jc ggradienle

ccl,C0.

GradientPaintfx!,yi,colon,X2,y2,colora,true,-

.sacclicos y cclicos emre blanco y u

es insertados.
untos en

refieren
eren direcumentc a pu
. de coordenadas en

a JlamIa a, ,n

o un P- * su P^

el objeto

i de
d usuano y
Heren a, espacio

screen2D.setPamt(pat) ;

Todas las operaciones subsecuentes de dibujo pan, el

relleno hasta que se elija ouo.

' \

usaran e.sie palron de

Cmo mejorar .a aparlendade


I 222

Creacin de objetos para dibujar

del d.a de hoy, .

BasicS

Td

lneas, rectngulos, elipses, arcos y polgonos

uan, an^nu-s:s: ,a,as

daSseguido de las coordenadas x, y de Ja o.ra. Aqu est un


, y de un punto '"fina,

os de unln se apUcan a Unes que

Line2D.Float ln = new Line2D.Float(60F.5F,13F.28F);


gumentos. pues de otra manera e, compilador Java asum.r. que son entero,

Rectngulos

Los rectngulos se crean mediante las clases Rectan9le2D. Float o fiectan9le2D Double

L^ferenca entre ,OS dos es que uno loma argumentos fioat y eJ olro lc)n):Lgumentas
ente es un ejemplo:

RectanSle2D.Float re = new Rectangle2D.Float(10F,13F,40F>20F);

Esto crea un rectngulo en 10.13 que es de 40 pixeles de ancho y 20 de alto. '


Figura 9.15

faliltn de unin Je
minto fui"1-

Elipses

E" J;iva2D los bje.os ovales se llaman elipses, y pueden ser creados con la

Tl pse2D'Float Toma cualro ar8umemos: ia coordenada x-ia

U instruccin siguiente crea una elipse en .13,25 con un ancho de 22 pixeles y un alto de
Ellipse2D.Float ee = new Ellipse2D.Float(ii3,25,22,40)

redonclcadas.

programas con grficos, fuentes y color

Un objeto GeneralPat, puede ser creado si,, nillj.,m :1I,lmlcnl0, ^ sc ,_, ^


GeneralPath polly = new GeneralPath();

'

El mtodo moveTof) de

usted qu.s.era
quisiera lnic,ar
iniciar polly
nonI en ?las coordenadas
"" ParU
' Prmer pUn' e" el Plfeono- Si
5,0 "^
t
tendra que usar la instruccin siguiente:

polly.moveTo(5f, 0f);

^rtoE

> se usa ei

nuevo punto. Es

toma dos argumentos: las coordenadas x yy yy de.


de. nue
nuevo

Las instrucciones siguientes aaden tres lneas al objeto polly:


polly.HneTo(205f, 0f);

POlly.lineTc(205f, 90f);

polly.lineTo(5,

Csira cluia uno do estos eslilos

90f);

y moveTo
St quiere cerrar un polgono, utilice el mtodo closePath( )s in

argumentos como se muestra

polly.closePath();

ado por el

m
odo lmeTo()
,
,rque conecta al punto
Pe
Ce'Ta
mtodo
original.
uraT[!
?
uraTrend[l'!" P'?On0

ad' "Sled ' ^ede dib^r con,o cualquier


otra
,

uia Mguiendo
Mguiendo los
los mtodos
mtodos raw() y fin O I-'I ohi.-K, Mn
guia
'
V
enn 5,0,
5,0, 2050
205,0, 20590
205,90, y
y 590
5.90.

" "" lvcli"lllll> CW l'lllllos

Dibujo de objetos

ccrr:.r:i como una rebanada de pastel

Todos los objetos dibujados usan los mismos mtodos de la clase GrapfUcs2D:

los fiemos y f xll,, para los objetos rellenos. s,oS toman un objeto como argumento

para

obetoSt
J
awStr-9< ) ^ U,n,a tres n-umemos:
objeto St rano para d.bujar y sus coordenadas x. y. Como todas las coordenadas"

U',cn es pane d,l paquete iava.awt.geoa

Java2D, se deben especificar los nmeros de punto flotante en vez de ser enteros

225

Da 9

Un ejemplo
de dibujo
2D
'

i-I
r
i nrimcns actividades de hoy usted cre un mapa de Ronda siguiendo los meiodos

? n
"c^n disponibles a uuvds de la clase Graphics. lil ,m',x,,,o applc, 4uc va ,
elr ls ulversin modificada de ese mapa, el cual utiliza tcnicas de dibujo 2D.
Pu -sto que todas las clases Java2D son nuevas eon la versin 2 de Java, este applet slo

^Tv con un navegador Web que soporte Java 2. A. momen.o de escnb.r es.a obra
,a herramienta appletviewer incluida con el JDK 1.2 es la nica manera de verlo.

F.I listado 9 5 contiene el applet MaP2D. Es un programa ms largo que muchos en este libro
debido a que 2D requiere muchas instrucciones para completar una operacin de d.bujo.
Listado 9.5. El texto completo de map2d . java.
1:

2:

3:
4:
5:

6:
7:

8:
9:
10:
11:
12:

13:
14:

15:
16:
17:
18:

19:
20:

21:
22:
23:
24:

25:
26:
27:
28:

29:
30:

31:
32:

33:
34:

fl.lineTo(i9iF,neF)
fl.lineTo(12OF,56F);
fl.lineTo(94F,68F)'

fl.lineTo(81F,49F);
n.lineTo(12F,37F);

fl-closePath();

screen2D.fiii(fl);

// Dibujar valos

screen2D.setColor(C

S:-;;i;:?;

Float(245)130) 15,15) ;

screen2D.fill(e1).

screen2D.fiii(e2),'

screen2D.fill(e3);

importe java.awt.*;
importe java.awt.geom.*;

publie class Map2D extends java.applet.Applet {


publie void paint(Graphics screen) {
Graphics2D screen2D =

(Graphics2D)screen;

setBackground(Color.blue);

// Dibujar olas
screen2D.setColor(Color.white);

BasicStroke pen = new BasicStroke(2F,


BasicStroke.CAP.BUTT, BasicStroke.JOIN_R0UND),
screen2D.setStroke(pen);

for (int ax = 10; ax < 348; ax += 10)

navegador que soporte esta versin delln

raren, appletviewer lncl "

appletviewer maneja las et.quetas


Por lo que no hay motivo para crear

breve que io

^
PUCde SCr V!iIU
-nbir es,e libro, a

5"la CmplCada para al8 ^ 1 slo podr

for (int ay = 30; ay < 340 ; ay += 10) <

Arc2D.Float wave = new Arc2D.Float(ax, ay,


16, 16, 6, 180, Arc2D.0PEN);
screen2D.draw(wave);

bpaini^ new GradientPaint<eF,OF,Color.green,


50F,50F,Color.orange.true);
screen2D.setPaint(gp);

GeneralPath fl = new GeneralPath();

Algunas observaciones acerca del aPplet Map2D-

fl.moveTo(10F,12F);
fl.lineTo(234F,15F);
fl.lineTo(253F,25F);
fl.lineTo(261F,71F);

fl.lineTo(344F,209F);
fl.lineTo(336F,278F);
fl.lineTo(295F,310F);

fl.lineTo(259F,274F);

nibles bajo Java.awt

Pnes de dibuJ

Cl bjCI0 Graphics ^ represe.ua la ven.ana del

fl.lineTo(205F,188F);
fl.lineTo(211F,171F);
fl.lineTo(195F,174F);

lnea

mrodo setStroke,, de

Cmo mejorar la apariencia de :

Da 9

ventana del applci en Map2D.

co,or verde en 0 0 al
para l0

y el objeto gp recin creado.

relleno actual.

=-

se al estado de Florida y

d
Preguntas y respuestas
en negrtlS a la n.i.ad.

l no-, y o.ro para

la

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

Adicin de i

Da 10

y sonido

234

aliciar el progr.ima

:; l*.

public void start() {


if (runner == nuil) {
;runner = new Thread(this)
runner.start();

Para ejecutar un subproceso, se llama a su mtodo startn

ejemplo previo:

"'cioao start (), como en esta instruccin del

runner.start();

.mo extends como implements.


public void run() {

implements Runnable *

vi . 1

, que * o.ro n,odo o

p;ir:, iniciar mi suhproceso.

// lo que hace realmente el applet

appl:con subprotess-Sc '" pan, los d.b.jos y cambiar

"gUrando10 C '(>d<)'"

cosas emre

^
npommtao.

detener e, subproeTo '

U^"^amiento que el subproceso

SUbprCeS0S - '^'^ op() pnra

1"'

haber sid

Ul ..ase Tnrea. es pane de,

ia instrucci11 sigllieme;
Tnread runner;

Sor nuil has.aquee.obje sea creado rearme.

v-iriable runner tendr el

Precaucin

Hay un mtodo stop() que podra ser llamado en objetos Thread para

S psr::r?Tha desaprobado de ia ^^." ss^

eTecucin
1, ''
PrCeS '^^dades en el ambiente de
ejecucin del programa y puede introducir errores en su operacin que son

235|

Da 10
1236

runner.start();

d. .OTO P.<> *"

public void stop()

if (runner 1= nuil)
cesos mltiples.

runner = nuil-

I asociado con el applei. y usar los


: en un programa con >ubpro,vsos.

Cmo poner todo junto

vc

public void run()

2sr,2S?
repaintf);

cn

try

Thread.sleep(ieee);

> catch (InterruptedException e) { }


li/.ncioncs a

Public void Paint(GraPhics screen) /


theDate = new Date();

Figura 10.1

/ ///</e/ Dln<

screen.setFont(theFot);

screen.drawstring(" + theDate.toString(), i6, 50);

en Netscape
Navigator.

Sun Mar 08 11:09:10 EST 1998

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

public void start() {

13:
14:

if (runner == nuil) {

runner = ne Thread(ttus);

Da 10

V sonido

accin incluso dibujar. En realidad nunca vera nada en pantalla porque

ciclo whae(,,an,es de hacercua,qUier oleosa.

En esta secc,6n se ve este app.et desde la perspectiva de las panes rea.es de animac.n y mas
tarde manejar las partes que administran los subprocesos.

| destruir nbpm^'^^^

"o hacen.otra cosa que crear y

a que todo io que hacen es cOnfigu

Parama.

Jos subprocesos utilizados por el

rn.as 8 9 definen dos variables de instancia bsicas: theFont y theDate, las cuales con-

len o^eos Representan la fuente actual y , fecha actual, respectivamente. Despus


aprender ms acerca de esto.

A,u,os mtodos start,) y .top() inician y detienen un subproceso:,a mayor pane de.

.S^

trabajo del applet est en el mtodo run () (lneas 25-33).

Dentro de run () es donde realmente ocurre la animacin. Observe el ciclo w.ile,) dentro

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

de la

I":, ocurre en e mtodo stop< > de. app.et). Dentro de ese ciclo whil. se construye un
cuadro sencillo de animacin.

, pausa por

.000

crear animaciones.

mi.isegundos (1 segundo) antes de que se rep.ta el c.Jo.

S:S=H

'

'Os lm'hlc M |uc cl.be dcso.nban^rsc

El parpadeo y cmo evitarlo


mtodo paint().

repaint(). ste llama el

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

Runnable.

L, 1(nea .0 defme una tercera variable de instancia para esta clase llamada runner de. tipo
Thread, la cual contendr el objeto subproceso para este applel.

Pp>dc,,,.

l d,b.jo y la ,mpra; ,

Ha, do, ,,,,,e prtn

- *-

239 i

Da 10

Adicin de imgenes, animacin y sonido

240

public void start() {


if (runner == nuil) {

runner = new Thread(this)

runner.startf);

0.sot

public void stop() {

paint(g);

runner = nuil;

o.

public vold run()

de updateO par:, reducir el parpadeo.

Color.getHSBColorfe, (float)1.0,(float),.0).

Una solucin: no limpiar la pantalla

La primera solucin para reducir el ^^^Z^^!7^'


solucin funciona slo para algunos app e s P
despliega una cadena sencilla (Look to t

^^^

^ ^^ ^ presenta en colores

^^

// itera entre los colores

int i = 0;

parpadea terriblemente

Thread thisThread = Thread.currentThreadf);

wnile (runner == thisThread) {


setForeground(colorsi) )
repaint();

10.2 muestra el resultado.

Figura 10.2

try

} caten (InterruptedException e) i

CnlorSwirl nmliaiw

Netscape NnviS"1'"'-

Thread.sleep(200);

if (i == colors.length ) i = 0;

Look to the Cookie! 3

public void paint(Graphics screen) {


screen.setFont(f);

import

screen.drawStPinoCLook to the Cookie.., 15, 50);

java.awt.;

i public class Cdorswirl extends Java.appXet.*ppl.t


6.

implements Runnable {

F0nt f - new Font("TinlesRoman", Font.BOLD, 48);

9.

color colorst] = new Color[58];

,1(J':

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

21.30, e, llenarloeo.

color

Al crear de antemano lodoi loi objelos, usieil


,c1 precatalat ..o,

Aprender ms tarde otro mtodo para reducir el parpadeo; una tcnica ^ ^ ^

Re^^'f" y Uso de imgenes


APPlet y Graphics para

las Cses

Cmo obtener imgenes

*-

-chivos de clases de JMa, por


^ ""*"
^'^
d ls
por Z
lo que Us,cd
u.Mcd henc c,uc mdicarle
a Java dnde
encobrarlos

pida y fcil de crear el arreglo de colores.

^y:
el proceso se repiie hasta el infinito.

*
, He

. y
es sencilla: sobreponer upcJatel) y quitar la part = donde s _l. P
'
no se necesha limpiar porpue no esta c:o
- P^

com/]ava21/images/booK

lcx(o
update (,

presen, .,

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

ara cainhiar |;l apariencia de lo q,,e se des,,|i,v , .... -

"s.ed dibuja lo que de.eu ver despicado, llan^ ZZ'^T """ ^ !" ^ "

nuevoarepainto.yassucesivameme.

r
1

Java.

""'"'uon. el cu.-uln, m;ls ,cim,l. |;| iriibiijo real .erre en o.ra

pane ele! app|c,.

lF o JP1G, cmo obtenerlas del

' usarlas en la 'os a

PreCaUCin

Aunque pu

m'd P-i"tO. drt^. hacer todas as

solicitudes para dibujar e


El mtodo repaint () es

esto, cuando llame a repaint


Oo-r-r "" ^ d"Plie9Ue' MaS tarde ver
paint (> Pr cre^r una secuencia animada.
~

co,!f,0lecoiuaia
y Par
de 'a ejecucin de ^ applet
del da K, "Cnio poner programas intei etiv
w

start() y stop() son llamados cuando un applei nica y termina su ejecucin

an rpido como puc

stoP(, :t.^;: '!"L::;::i


^^-v ai ^ ^ - ^~ > ^
los .,p,,|u.s ,lo necesitaron usar paint () una ve/.

Pintado y repintado

Con la animacin y oros annle* de i-k-i .-

" dt
olio programa.

^pucesoUd, a, sistema de manejo de ven.anas d. Ja. quc

|;l vclllana con el

requieren start n t /

'

''

,-

"" P'CeN0 >' c'"e M ^cuum l P"-""- *

Control de la animacin mediante subprocesos

mciodo repaintO.

' prorama

Ai

War en sus

^ de-una .rea

solicitudes a repaint,) se
)a, acunas podran ser
llamada

repaint O

c ' ". ventana es insignificante.

.iempo de proce-

' 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


'U, = getImage(getDocumentBase() , "book.gif );

imaaeU,

getimage(ge

tDocumentBase(), "i.ages/book.g.r

public void paint(Graphics screen) {


screen.drawlmage(img,

10, 10, this);

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.

Los argumentos ancho y alto describen el ancho y alto, en pixeles. que la miasen debera de

ocupar al desplegarse. Si no son del tamao real, la imagen ser escalada parque quepa en

el ancho y aho modificados. Es.o no ahera la imagen, por lo que us.ed puede usar varias lla
madas a drawlmage() para desplegar un objeto im3ge en varios .amaos clileremes.
Hay dos mtodos de la clase Inrnge que son tiles cuando se despliega una imagen en 01ro

tamao d.stimo al real. El mtodo OetHeiOht() devuelve la altura de la imagen como un

archivos de clase en el archivo JAR

V..

entero, y el mtodo getWidthf) que devuelve la altura.

Da 10

|248

Cmo crear animacin mediante imgenes

Crear animacin con imgenes es lo mismo que con fuentes, colores y otros objetos amma-

1 U^

'os mismo! mtodos y .os mismos procedimientos para dibujo. reP,n,a o y

"" aiTeS' de obJelos

y usar otro ^

Succin de los poblanas de parpadeo. La nica diferencia es que usted uene una p,la de
imgenes para hojear entre s, en vez de un conjunto de dibujos.

L-, mejor fon,,:, de mostrar rimo animar imgenes es trabajar a travs de un ejemplo, lil
S> proyecto es el ms grande que usted haya emprendido y est amphamen.e de, Hado.
El a^e, Nek es una buena demostracin de la programacin de subprocesos en applets,
manejo de imgenes y animacin.

El ejemplo Neko

1 as imgenes con que usted trabaja en el apple. Neko les parecern familiares a muchos

usuarios^ sistemas Macntosh, as como a otros usuarios de algunas otras P ^J;

Neko que proviene de la palabra japonesa que significa gato, es un programa de Mcuosh ,

esho or Kenji Gotoh que desarrolla un gato pequeo animado. Neko juega con el punten,

siguientes declaran esIOS objetos:

""agen actual- LaS "nicciones

Image nekoPics[] = new imaQe[9]. ,


Image currentlmg;
y l J"

imgenes tiene nueve posiciones (0 a 8)>

Neko se mover
pre el mismo valor- 50 Las

que

inj

VariabIe emcra V lendrf siem"

' '""mecones s.guientes crean es.as variables:

int x.

int y = 50;

del ratn, duerme y se compona en forma parecida al juguete Tamagotch..

""7

Para este ejemplo, crear animacin basada en los grficos originales de Neka ste es. basa
Java se ejecutar desde el lado izquierdo de la ventana del applet, se deiend a a

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

Figura 10.4
i'S <lcl
ijtph'l Neko.

,,,, estar HsH, ,an, es,e proyecto, copie , o. dison


^
creado previa,,, me, los siguientes nueve archivos de imagen del s...

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

La idea bsica".-n el app.e, NeKo es tomar la serie de imgenes y desplegarlas de una en una
para crear la i\\ ariencia de movimiento.

para tener un seguimiento de la imagen actual

a desplegar.

public void init() {


String nekoSref]
stop.oif,

. sera ch'f 9

(int i=0; i < nekoPics.length; i


nekop.csfi] = getlrcagegetCo^
images/" + nekoSrcfi]);

:;:z: *

Paso 3: anime las imgenes

r ri
'^

Neko tiene el siguiente comportamiento en el

C" SUbProcesos. P este propsito se usar 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;

// intercambiar imgenes
if (currentlmg = = nekoPics[0])

. So rasca cuatro veces

currentlmg

". se leTama y corre

hacia fuera por la derecha de la panta.la

orden de los pasos como se desee.

nekoPics[i j ;

repaint();

pause(150);

2r:

else currentimg = nekoPicsf0];

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

if (currentlmg = nuil)
screen.drawlmage(currentlmg, x, y, this);

ld.s e los etemenios y I del


jra d cicl0 , , valort, ,r,

'd obieT^

9('' C'

S, no o hiciera

asi, el objeto tendra un valor nuil.

ZllZ ""I

'-" conl-

) co

travs del L-icl)-

//corre de un lado de la pantalla hacxa el centro

nekoRun(0, size().width / 2);

imecnes sea, retiradas y aparezca una nueva.

pause () al af plet que se pu

como se iiHies ra aqu:

void pause( .nt time) {

Precaucin

<-t*"no

El mtodo size( j de la clase Applet ha sido desaprobado despus de Java

UU por lo que si usted est escribiendo este applet para permanecer con

Jf'M() aT
rempla2ar con 9etSi"< ) q^ modifica la llamada a
lo siguiente:

nekoRun(0, getSize().width / 2);

try {

Thr .ad.sleep(tirae)i

} caten (InterruptedException e) { )

La segunda actividad que Neko emprende es detenerse y bostezar. Esta accin es un cuadro
uk I o Ce la ;,m,,1;lcl()ll (]lie sc ,c|,jk. po,. , i|hc ^

mente en vez de ser implemenlado con sus j)ropios miodos.

^ ^ ^

Da 10

i 252

J^^ejmgenes. animacin y sonido

Todo ,o que tiene que suceder para desp.egar cada una de estas imgenes es .o guien*:

repaint();
Pause(250);

. Cambiar el valor de crrente al objeto Image que debiera desplegar.

;
1

currentlmg = nekoPicsm

'epaintO;

. Llamara repaint().

pause(250);

. Hacer una pausa por determinado lapso de tiempo.


He aqu el cdigo:

// detenerse y hacer una pausa

currentlmg = nekoPics[2);

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

repaint();

6
//

currentlmg = nekoPics[3);

en ~

epaintO;

'- brecha. He qu ,as ?nilnicci

mclod

(, p;,, ^ c aIIalIj,a por

repaint();

eces se ha de desplegar cuando Neko se rasca la oreja.


vece

pause(500)

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

Para que cada cuadro se mez -| > |

pause('i5S);

"icio del mtodo run().

repaint();

setBackgrourid(Color.vvhite);

currentlmg = nekoPics[5'j;
pause(150);

de 4:
rascarse

cuatro

' " *"" " VlenIuna dc/

En ese
appiei hay mucho cdigo
go que miz.
i
:

Den.ro de. mtodo run, de, applet, se llama a, mtodo r.ekoScratch,, con argumento
//

0Cada
rrin
fondo
~una*cuja
Cuadro
"e labianc-si
animacin .endrj

blanca alrededor.

1''. "ggue la insinjccin sigui


guicnle al

v ,'

r una
anisenci,,:.:. Observ
a ani
Obs f . n T^ diftremes
Parpadco en este applei, ya que el tamao d
'""
""''^ ^ redwir la ranIidad de
problema se minimiza Por lo cl
""T" * "' ^ ^ dbujo son Ian W"^"* W

veces

nekoScratch(4);

void nekoSleep(int numTimes)

"l*lo I el jpplei Neto.

for (int i = numTimes; i > 0; i--J) \


currentlmg = nekoPics[6];

m
m

bostezar

lllilllilcilH, ,K,r ... Mc ukK

253

nekoSleep(5);
3:

repaint();

public class Neko extends java.applet.Applet

4:

6:
7:

8:
9:
10:
11:
12:

implements Runnable {

Image

currentlmg;

Thread
int

runner;

x;

int y = 58;

go^t! = ( Ti.Kti...

14:
15:

// intercambiar imgenes
" (currentlmg == nekoPicsfei)

currentlmg = nekoPicsri

pt0r
CrrtI

stop.gif", "yawn.gif", -scratch1.gi


scratch2.gif.-sleep1.gif", "sleepS

16:
17:

awake.gif"

18:
19:

nekoRUn(x, size(,.width

Iroage nekoPics[] = new Image[9];

13:

20:

pause(580);

for (int i=e; i < nekoPics.legth; i) {


nekoPics[i] = getlmagefgetCodeBaseW,
"images/" + nekoSrc[i]);

21:
22:

nekoscratch(int numTimes) {

r (int i = numTimes; i I . ..
currentlmg = nekoPics[4]'
repaintf);
' ''

23:
24:

25:
26:
27:

28:

Pause(i58);

};

pause(150);

public void start() {


if (runner == nuil) {
runner = new Thread(this);

currentlmg = nekoPicsfsi-

repaint();

pause(150);

runner.start ()

29:
38:

31:
32:

33:
34:

public void stop()

nekosie.p(int numTimes) /

fr (i"t i = numTimes; i > 0; ..,

runner = nuil;

currentlmg = nekopicsrei-

repaint();

35:
36:
37:
38:
39:
40:

41:
42:
43:
44:

45:
46:
47:

48:
49:
58:

51:

Pause(258);

public void run() {

currentlmg = nekoPicsm-

^r^oSrdl; pantalla nacia el centro

repaintf);

l ''

pause(258);

nekoRun(8, size().width / 2);

//
detenerse y hacer una pausa
currentlmg = nekoPics[2);

void pause(int time) {

repaint();

try {

pause(ieee);
//

bostezar

currentlmg = nekoPics[3];
repaint();

pause(1808);
//
rascarse cuatro veces
nekoScratch(4);

//

dormir por cinco

"turnos

Thread.sleep(time);

J caten (InterruptedException e)

public void paint(GraPhics screen) {

Adicin de imgenes, animacin y sonido

Dia 10
256

L.STADO 10I4^0NTINUAON_
77 (currentlng
!= nuil)
(crre
101:

lT

rfrawimaoelcurrentlnig,

screen.drawImage(c

12
t, 1" SiemPrC S 'a mejr SOlUC"- S SU aPPli:t sufre de Panadeo, tmte de sobreponer
update() y d.bujar pnmero slo porciones de la pantalla; eso podra resolver su problema. El

x,

y,

doble bufer es menos eficiente que el uso normal de espacio, y tambin toma ms memoria y

this);

e paco, por lo que en algunos casos no podra ser la solucin ptima. Sin embargo, para eliminar
cas, por completo el parpadeo de la animacin, el doble bfer funciona excepcionalmeme bien.

riel JDK I 2, los mensajes de precau-

' 1
Un,aPKPleI qUC UtICe e' dble bfCr' USled necesila dos c- gn fuera de
pan alia para dibujar en ella y un contexto grfico para dicha imagen. Juntas simulan el efecto

de I..superficie de d.bujo del applet: el contexto grfico (una instancia de Graphics) para

#
m

W-onar los .ne.odos de dibujo, como drawl.age (, v drawString ( . y el objeu,

Image para contener los puntos a ser dibujados.

Hay Cua,ro pasos princpales para aadjr e dobe b .^ a ^

de pantalla y el contexto grfico necesitan ser almacenados en variables de instancia para que

del applet NeKo tenga un ancho

usted las pueda pasar al mtodo paint (). Declare las siguientes variables de instancia en su

definicin de clase:

Image offscreenlmage;

resultado.

Graphics offsereen;

Segundo, durante la inicializacin del applet, usted crear un objeto Image y otro Graphics
y los as.gnar a estas variables. (Usted tiene que esperar hasta la iniciacin para saber

Figura 10.5
/ ap>lei

que tan grandes sern.) El m,odo createlmage(, le d:. una instancia de I.age, eon la que

puede entonces enviar el mtodo getGraphics () para obtener un nuevo contexto Grapracs

para esa imagen:

&

offscreenlmage = createlmage(si2e().width
size().height);

offsereen = offscreenlmage.getGraphicsf);

Ahora, siempre que tenga que dibujar la pantalla (regularmente con el mtodo paint ()). en
vez de d.bujar los grficos de paint, hay que dibujar los grficos fuera de pantalla. Por ejem

Doble bfer

**

plo, para dibujar una imagen llamada bug en la posicin 10,10, use esta lnea:
offscreen.drawlmagefbug, ib, ib, this);

Al final de su mtodo paint, despus que se ha terminado todo el dibujado de la imagen

Ul CP!U1Ia"a'agrCUe 'a 'nCa

U^ ui rea no visible an

irea ..era !e pantalla es .o ,ue se Han.

m c, lklWc

Por supuesto, las ms de las veces deber sobreponer el mtodo update() para que no se

public void update(Graphics g) {


paint(g);

del nuivinic uo.

la P:'M"

screen.drawlmagefoffscreenlmage, 0, 0, this);
, a uperncie c

limpie la pantalla entre cuadros:

lili

Da 10

259 i

Ahora revise estos cuatro pasos:

AgrcgUe vanables de instancia para

dirrme"'

contener la imagen y el contexto grfico para e.

Agg

bfer"fuera de pantalla.

contexto grfico
cuando se iniciahee su applet.
g

en y
Cree una imagen
y un
un c

3. Rea.ice todo el dibujo de su applet en el bfer fuera de pantal.a, no en e, rea de d.bujo

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

manejar espacia de bfer fuera de pantalla.

Es.e mtodo se llama sin argumentos, como se muestra en este

*
offscreenlmg;

Graphics offsereen;

::;;rr

WWic ot paint(Grapl.ics scre.n, ,


// dibujar fondo

offsereen.setColor(Color.black)

publie void destroyO {

offsereen.filiHectfO, 0, ,m \'m).
offsereen. setColor(Color.*vhite)

El applet Checkers

offsereen.setColor(Color.red)-

offscreen.dxsposeO ;

! SCeenfUReCt(100 0 1" '

// dibujar ficha

offsereen.fillOval(xPos, 5, 90

g0)

SCreen-drawIma9e(offscreenlms'0 ;

(0,0). Debido a que

del applet.

tinuamente en el mtodo run().

Pantana, ,,ena ^

^finalizar, se elimina ei 0,et0 of f screen


publie void destroy() {

offsereen.dispose();

tnis).

csn

**

Da 10

Adicin de imgenes, animacin y sonido

E, ,istado 10.5 muestra el c6digo fuen.e completo para e. aPP.et ChecKers.

47:
48:

49:

java.awi.

pubUc cu.. Oneces extends ^va.applet.Applet i^ple.ents Runnable (

2:
3:

Thread

A:

5:r
6:
7:

8:

runner;

51:

Graphics

offscreen.fili0val(p

53:

54:

this);

55:

public void destroy() {

57:

offscreen.dispose(i;

58:
59:

offscreen;

// dibujar ficha

offscreen.setColor(Color.red)

56:

int xPos = 5;
int xMove =4;
Image offscreenlmg;

?r?rTfiUfiect(1B0

50:
52:

iraport

1:

offscreen.fiiiRect(0)0,ie0)1e0)
offscreen.setColorfColor.white

9:

10:
11:

^:eS;i;reateImage(

12:

offscreen

;th,

siZe(>

offscreenlmg.ge

13:

Figura 10.6

14:

15:
16:
17:
18:

public void start() {


if (runner == nuil) {
runner = new Thread(this);

El applei Checkera.

runner.start();

19:
20:
21:
22:

23:

public void stopO {


runner = nuil;

24:

25:

26:

Sr;Vhi.r.d - Thread.currentThre.dO;

27:

28:

Recuperacin y uso de sonidos

while (runner == thisThread) {

29:

xPos

30:

+=

xMove;

if ((xPos > 105) ! (xpos < 5>>

31:

xMove *= -1;

32:

repaint();

33:

try

34:

Thread.sleep(100);

} caten (InterruptedException e) { }

35:

36:

37:
38:

39:
40:

public void updatefGraphics screen) {


paint(screen);

41:

42:

43:

public void paint(Graphics screen) {

44:
45:
,

46:

//

dibujar fondo

offscreen.setolor(Color.black);

s IaSas ^ ^s.'eo pueden i de

Da 10

Si ios mtodos

pXay (,con un argumento

,.,...,. ,, espacio de audio alma, un objeto URL, carga y rep.oducc


,-,

debe venficar esta condicin antes de usa


usar

objeto Audiociip.

un

ciado, durante su

cambia a o^r

do. Si un usuano de
mismo lugar que el applct:
play(getCodeBase(),

"zap.au');

Escriba
us;lo

o, un programa d.beri r

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

f s^proceso del apple. que es. comen-

Adicin de imgenes, animacin y sonido

Da 10
I 264

Una tcnica de animacin que usted ahora puede usar es el doble tfer, el cual virtualmcme
elimina el parpadeo en su animacin, a riesgo de perder eficiencia en la animacin y veloci

Listado

dad. Mediante imgenes y contextos de grficos, usted puede crear un bfer fuera de pantalla

27:

cuyo resultado se despliega en la pantalla en el ltimo momento posible.

28:

29:

30:

31:
32:
33:
34:

35:

Usted aprendi a usar sonidos, que se pueden incluir en sus applels en cualquier momento
que lo necesite, en momentos especficos, o como son.dos de fondo que se puedan repetir al

public void run() {


if (bgSound 1= nuil)

ejecutarse el applet. Tambin aprendi a localizar, cargar y reproducir sonidos a travs de los

mtodos play () y getAudioClip ().

hile (runner == thisThread) {


trv {
Thread.sleepSaee);

36:
37:

> catch (interruptedException e) { }

38:

if (beep != n"11)

39:
40:

41:

Preguntas y respuestas
P En el programa Neko, usted pone el proceso de car-a de la maKen denlro del

beep. playO!

mtodo nit(). Me parece que podra tomarle i Java mucho tiempo cargar todas

esas imgenes, y puesto que init() no es subproceso principal del applel, ah

liabra una diferencia de pausas, l'or qu no en ese caso poner la .rjii'i de im-

42:
43:

44:

Kones al principio del mtodo run()?

10);

R Cosas extraas suceden detrs de la escena. ll mtodo getlinageO realmente no

45

carga la imagen; de hecho, devuelve un objeto Image casi instantneamente, por lo

46
47

cree una p>ina Web con una ventana de applel

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

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.

CSIC ,n,odo no * hace n.ngun -


,lienlc. ,o cua, daa por -Hado a

"

bgsound y DeeP. Esto sera

^ ^ ^ ^ as ,neas 32 y

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 ^

^.^^

m,;ir y usar sllbp,o-

r.p.int(,. runo y upd.t.(). y <*" ^^ s appleut (loca.,zarU, cargarlas y aria*


ccm. Tambin aprendi cmo usar ^^j ^marlM).
a ,,-avcs del mtodo drawimage() para dcspleg

no es muy buena, es lomarse una siesla antes de iniciar la animacin, para suspender
mientras las imgenes se cardan. La tercera, la mejor solucin, es usar observadores

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.

Semana 2

Da

11

Construccin de

interfaces de usuario

sencillas para applets


Con la popularidad de los sistemas operativos Macimosh y Windows, la mayora de
los actuales usuarios de computadora espera que sus programas desarrollen una

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

de la v,da. la hbenad y el objetivo de lograr un buen plan de retiro.

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

una o ms tareas que representen un reto para un desarrollador novato.

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-

laces grficas de usuario.

Hoy usted tendr que usar el conjunto de herramientas para crear una interfaz de

usuano para un applet. Utilizar las tcnicas de Java 1.0.2, debido a que permanece

como la versin estndar del lenguaje emre la audiencia de usuarios de applets.

Da 10 '

Para preparar la prueba del applet Fillmore, haga |o Slguienle:

ta acerca de los observadores de imgenes

!l^ >odo dra() es ,a pa.abra Cave thi.. Corno recordara por,.


"

t:

Cree un subdirectorio nuevo en el directorio \j2iwork llamado images

s se puede utilizar dentro de un objeto para rcfer-rse a s,

'

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

Cmo poner a trabajar las imgenes


carga de una imagen desde un URL > de piedle
d

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

" I"''l'^ '"ttu

Figura 10.3
f/

Fillmore.

^ ^^ UmJos ^

import java.awt.Graphics;

1:

2:
3:
4:

5:
6:
7:

8:

import

java.awt.lmage;

public class Filiar, extends java.applet.Applet {


Image whig;

public void init() {


P
Whig = getin.age(getCodeBase()I
images/fillmoreopg );

9:

11:

public void paint(Graphics screenj {

12:
13:
14:

15:
16:
17:

18:
19:
20:

21:
22:

La lnea 5 del applet asocia la variable *hig con la clase I.age. No ,iene que usar la ins.ruc-

con new para crear un objeto aqu, ya que recibe un ohje.o Image desde el mtodo

10:

23

rara un ejemplo ilc

""" * SUS P'PS archivos

y width para hacer espac

int
int iWidth
iHeight = = *hi9"9etWdthl!,his)whig.getHe^ght(this),
int xPos = 10;

Icreen.drawlmagetwhig, xPos, 16,

getlmagef) en las lneas 8-9.

nan susTl'^4 "^ 96tWdth( J y 9etHei9ht' > d< '<>dos de |a clase Inage y a.muc,-

escaLde

Cm T**" "^ ^ *

escala de la imagen en las lneas 17-18.

iWidth / 4, iHeight / 4, thit),

l pdeme R.lmo. En la lnea 20. es.a variable se incremen.a pan, que |0 feo

ms grande aparezca 10 pixeles a la derecha de la versin ms pequea

Construccin de interfaces de usuario sencillas para applets

Da 11

CmpOnemeS' cn'enedoreS y administradores de diseo que usted


responsable del control del usuano.

^^

Cuando haya aprendido a crear programas m

Swngl,

de Java 2 para crear aplicaciones en el da U, u

El AWT

algo

v-nfinas mejor c onocido como AWT. es un

y re

o desde e, r,,6n ye, tedado.

s acerca de Smo usar otras clases que heredan de |a ,nis,na splase.

Componentes de una interfaz de

usuano

. de. usuano

a genera, y funcionad en todos ,os s,stemas en que se ejecute.

al crear applets de Java con el AWT es que algunas

Adicin de componentes a un contenedor

Un componente se agrega a un contenedor a travs de los pasos siguientes:


Crear el componente.
funcionar una interta

ma5

navegadores como sea pos.ble.

appiets con ventanas en ianio>

Llamar al mtodo add () del contenedor con el componente.

TL

S aPP'elS S" C0mened0reS' USIcd I** -r e, mtodo add,, dentro de

e, para agregar un componente en forma directa a la ventana del apple.

Mediante elAWT.unainterfa.de usuano consta de tres cosas:

zio dd awt - -

neda ser colocada en una inierlaz de usuar>o,

. Componen*. Cualquier cosa que p

^^^ dcsplazahlcSi mens o

habilitados para hatur ci

.- -,,.
Un ob c

CI1 U1, contenedor. Usted no vera el adm.msu.

.-o cM mu ,malu/i pcro jcll.

i i .nueie 1 ava . awt. Para hacer que lodas las clases

Todas las clases de. AWT son parte del P*luc


estn dispoiubles en un programa, se puec
ror de un archivo de cdigo fuente:

import

i!

java.awt.-;

la etiqueia dei boi


Button panic = new Button("Panicl");

sta crea un objeto Button que se etiqueta con el texto "Panic! .


T

nitv;imcn,c ver los resultados de su trabajo.

b ^^^ siguicnlc cn la parlc supe-

>ed puede

un conten
contenedor
!la de Wrio aa un

del contenedor con el componente como su nico argumento

t' se podra usar ia instmccin s

41

ai

II
"8
3

O
u

Je
o

sZ

'r.

"3

ir 5
o
r:

^z

u
o
cu

S-

5o <->

i;

<2

c =

o. .h=

cj

81

"i:

"

VI

3"

?
.^

(O

O *^

'-*

3 "O

."

'C

'1

rtj

c .9

ai

Ql

QJ

"

QJ

Vi

j K

_j

x.

QJ

JO

3
Ol

CT "

!_

gj

,/>

~O

10
H

"" X)
" fl)

E 8 =

S "> 2
o "o

.2 O O -S

' c ^

*"

"O

.c

^i

a 3

ai

ni

c X)

i-

S o "2 o.

C "O

S c -o

2
Q.

r3

-^

X
_

O "2

T3
c3

S5

'2

s. e

."2

a)

2" *-J

2, c
x)

la
y. UJ

"u JZ p-

?3

O"
u

&>-

c '2

ui
n

'i 111
a -g s S
C o " ^
g -2. a r

J,
O

i-s S"

ra

rj

"l

12

o 1

aj

5J

r*

"o.
a. al
lil
3

,N
.^

<u

.5

-*

cj"

T3

b
o
>c
aj

'-

o I

r-

-^

o
V)

4
6

+^

Q.
at)

t-

^O

<

Q.

Ul

g.

o-

<J

-^

"O

"3
M

.2 "2 2-

^2

i.

T3

XJ

sa

i "8

S "

T3

3 a.

- >flj
"S CJS -a
"o

o.
o.

10

'-I "

XI

s If I

8 -F

" o
c C
2
c

..

i"

3
,2

! 5 ;
? s :e

-rl

rt

"O

>

V
L.

^ I-I 3

II

T3

0
<t)

L.
H

-H

a.
ro

Q.

Cl
^

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.

;ear
T yOlT^
'Uttn'
USIddelPUdC
S -"-'
").
tr.ng)
obtener
la e.ique.a
,ex,oCOnfiuw
con el mtodo
getLabeK

public void init() {

n".

setFo();
setFont(lf);

setLayout(layout);

12:

El lisiado 11.3 contiene el

add(lefty);

13:

add(center);

14:

add(righty);

15:

Escriba Listado 11.3. El texto coMHFTn D vcr.java.

16:

17:

apple, VCR, elciual despliega vanos comandos ftft.ni.iaa. en

Pn.ebe el funciona-niemo

de este applet con ,a siguiente iqueu,


ique

1:

<APPLET>:

import java.awt.1

2:
3:

SB widtn=i75>

4:

<.ppl.t

public cl... VCR extends java.applet.Applet


Button rewind = new Buttonf Rewind");

5:

Button play = new Button (Play)

6:

Button ff = new Button("Fast Forward")-

7:

.Hardllnerr se coloca en el

rramicnia a usarse para

Button stop = new Button("Stop")

8:

Button eat = new Button(Eat Tap");

9:

10:
11:

public void init()

12:

Figura 11.2
El applet Labels.

SE3E

1.3:

321

14:
15:

BUcdlnfl hcartl

16:

add(rewind);
add(play);
add(ff);

add(stop);
add(eat);

17:

Pruebe el funcionamiento del applet VCR con el sigguiente cdigo

HTML:

width=300>

1J ., a

"
olones.

^ do

l,"

ewer. Observe q,,. ,1 bo.n .,

,7lnea debid u que ll h"Ma -ficien ** -1"'-

3PP ' dC 50 PXd" dC "nch0 C" V" dc 30. " neo botones estarn

275|

Escriba
Figura 11.3

1:

El tip/ilei VCR.

2:

publie class

4:

Checkbox

5:

Checkbox

6:

Checkbox

7:

Las casillas de

8:

donadas" o vacas. Por lo

9:

aU. So- P

Checkbox
Checkbox

10:

12:

c2.setState(true);

add(c3);

15:

add(c4);

16:

add(c5);

17:

18:

C4 = new Checkbox("Toro Stoppard")-

c5 = new Checkbox("Ivana Trump");'

add(c2);

14:

ro) ca.fi//<M

c2 = new Checkbox("Paulina Porizkova")

c3 = new Checkbox("Ivan Reitman")-

add(d);

13:

</ /iV

CheckACzech extends java.applet.Applet f

c1 = new Checkbox("Milos Forman");

publie void init()

11:

Figura 11.4

HTML,

import java.awt.*;

3:

Casillas de verificacin

Listado 11.4. El texto completo de checkaczech

La figura 11.5 muestra la salida de e.s.e nppiet, cuyo funcionamiento puede ser verificado con la

siguiente etiqueta <APPLET>:

dcseleccionadas al mismo tiempo.

Figura 11.5

sanaba cualquier oto de los .mes que e

El npplcl

-lalx
HtM

j P P~W.. P.u o..


r i.. ii..o

r im>5im d
r i> i,^

cada como una etiqueta

Para organizar varias casillas de verificacin den.ro de un grupo, de modo que s,0 una pucda

r seleccionada a la vez. se crea un objc.o CheckboxGroup empleando una insiniccion como


la i|iie sigue:

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.

Construccin de nterfaces de

Da 11

276

12:

add(pi);

13:

con ,a cadena dada que penen^ n *

^.^ c QIra ,mncru cs t8l...

icrccr argumento es igual a true si w >-

add(P2);

14:

add(P3);
add(p4);

16:

add(P5);

17:

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

Figura 11.6

CneckboxGroup betterDarrin = new Checkt,oxGroup(> . ^

Elapplet PickAPole.

^.

H, obje,o beerD ,rin se usa .^^ITP^-^-"'

ciona el objeo ri. :! ccual uene la et>que,a 0^


^ ^
^'tru. sin ulifincam^ como el .crnl,e,nh,-o de, grupc a la ve., por llo que ees ,m^.
,m^. -

nineuna casilla selt :xonada.

raySor Kieslow .ki. c! di-cor de /,/. Bhwro v /f^.

^^ ^ ^ ^ una casllhl dc

^ verificacin Se,ec^dl

" ""

Listas de seleccin

Checkt*

sus:
http://www.mcp.com/personal/

illllili

^ "Cu- O. e. cual devuelve la

Construccin de interfaces de

12-

* many lm.s P' * do you access y

kte?

Figura 11.7

usuario sencillas para applets

sPan.addltem("Julio Iglesias');

add(span);

''

14.' }

Ejemplo de unti lisi"


de .seleccin.

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

o^Las instructores siguientes agregan dos elementos a la lisi:. do sesin *xo.


gender.addltem("i.'.ale");

=200 width=i50>

Figura 11.8

twuiiii'i'j IB

El applet

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

;-r

El mtodo 9etselectedltem(, dcv.oK, eI Iexl0 del elemcmo ^


E mtodo ,.lect( Jnt, seleccjona e| ^

E, meiodo ulntl8tring) seltcciomt |


1:

import

java.awt.*;

3! publie class SelectASpaniard extends java.applet.Applet {


4:
5:

6:
7:
8:
9:

10:

Campos de texto

Choice span = new ChoiceO;


publie void init() {
.
...
span.addItem("Pedro Almodovar ),
span.addltemC'Antonio Banderas
span.addItem("Charo");

span.addltemCXavier Cugaf');

),

dase TextField

el texto que no

U" CmponenIe

Puede crear un campo de texto medame a.guno de ,

. a panir de la

construc.ores ,guiemcs:

TextField,) crea un campo de ,cx.o vaco sin un ancho especuleado. '

Da 11

Escriba

Tcon T.xtFi.ld(S^n9. int, para applets -superiores a la

para app,ets

' Et TEXT0 COMPLETO DE OUTOFSITE

1:

2:

. TextField(Strin9) crea un campo de .cx.o Heno con el ,cx,o espechcado y s,n

3:
4:

ningn ancho especificado.

ancho de un campo de texto nicamente tiene relevancia bajo un administrado,-

La ins,rucc,n gueme crea un campo de ,cxto vaco con un espacio sulle,en,e para 30 carac-

6:

7:
8:
9:

IB:

11:

Se hubiera po lido miliar \, insirucein gueme si usted hubiera proporcionado el texto ini

17:

cial "Puddin N.

18':

Tae" en el campo de icxu ame:

Te.tField n3n,e = new T8xtField(-Puddin N. Tae", 30);

add(address);

add(passwordLabel);

password.setEchoCharacter( )

add(password);

19:
20:

add(addressLabel);

15:
16:

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

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
cualquier liicr: \ que aparezca entre
H, ejemplo s,g nente crea un

ll
dbl
com.llas
dobles.

campo de texto .establece un signo (*> como e, carcter que se

omparable a la fisura 11 9 Fn I, - 'J"M'"

comp;

iseo para prevenir este probieJa ,

diseo

"lU"> dC ':' Vt""l:l":1 Pilr" )o.lucr una *:ilid

^ SeCC'dn ^"^ " USar 'S ad'^^ore.s de

mostrar en ci amo el texto se escriba en el campo:


TextField p;sskey = new TextField(i6);
passkey.setE:hoCharacter('#') ;

add(site);

14:

TextField nume = new TextField(3B);

");

publie void init() {


add(siteLabel);

12:
13:

teres:

5:

. TcxtFloid(Strinto, i> crea ,.., campo do ,cx. con ,. ,, y :K-h especilos.

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

usuario sencillas para applets

determina si el campo puede o no ser editado. Un


e, campo sea editado y true ,o permite (que es ,o prede-

-Editas () devuelve un va.or boo.eano ind.cando s, e, campo puede ser

ediiable (t.rue) o no (false).

! *

eJ funcionanliemo de) apple(

lrBi

reas de texto

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
(prinicr averno) y c. ancho de caracas (sequo argu.ncuo).

. Terrea (Strina) eren un rea de texto que connene la cadena ,nd,cad, de ancho y
alto no especificados.

i,

de texto cuando se inicia la ejecucin del programa.

1:

2:
3:
4:

import

java.awt.

publie class Virginia extends java.applet.Appiet {


String letter = "Dear Editor:\n

5:

6:
7:
8:
9:
16:
11:

12:
13:
14:
15:

16:
17:

18:

me the truth,\n"

"is there a Santa Claus?\n\n


"Virginia 0'Hanlon\n"

"115 West 95th Street\n" +


"New York";

TextArea lt;

publie void init()

lt = new TextArea(letter, 16, 50),


add(lt);

Listas desplazables

283 i

Construccin de interfaces de usuario sencillas para applets

Da 11
I 284

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.

remezo
para loH,
" 8el'"(i#It)
tnMJiin ^().C-temS() ,amb,n tiene e, m,s
remplazo para
los piogramas
Java 2: getltemCount

add(String).)

m,smo

Ele,emplo silente crea una Ustay.ea.de dos elementos:

'fplaable se pucdc cicgir ms

.addl-..<euild.nst.rn ,-,

^
zable con siete . lementos.

^ 9]etSieleCteInes<) "vuelve un arreglo de enteros que contiene ,a

sicin del mdicc para cada elemento seleccionado.

El mtodo getselectedltems () devuelve un arreglo de cadenas de caracteres que


cont.enen el texto de cada elemento seleccionado.

Barras de desplazamiento y deslizadores

Listad. >J_2JL

H"e Perneen a un valor ser se.ecconado a,

1: import jsva.awt.*;
2:

aza

3:
4:

5:
6:
7:

8:

9:

ISIM dP'-bles. La cl.se

^ b- * despla.n.ento puede

c void init() {

im.addItem("Hamlef);
m.addItem("Claudius

);

,m.addItem("Gertrude"

,m.addItem("Polonius");

10:

,m.addItem("Horatio-);

11:

,m.addItem("Laertes");

12

im.addItem("Ophelia");

13

P** funcionalidad de barras de,

dd(hm);

K*Jo comn las harn.s de despla.a.nic,,,,, w m,m pccinculo los vata, mnunos y

mximos que se pueden establecer mediante el componente.

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.

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

constructor con cinco argumentos enteros: Scrollbar, int.

Tibien Puede usar -

^ ^ eslc m,lodo Can en orden ,.:

El appleiSlider.

Lienzos
" USan Planamente como un espacio en una interfaz
. E1 v:1lor mnimo de la barra de despcenlo.

f2:

de diseo.

" " ""

ventana

1: import java.awt.';

'

'nVCr in"">iMH ..., si se vn.-csion:, h,

Listado n.n. El texto completo de crosshair.


1: import java.awt.*:

2:

3: public ca., Crosshair extends java.applet.Applet {

6:
7:

8:
9:

10:

4-

public void init() {


add(bar);

MyCanvas can = new MyCanvas();

7:

public void init() {

8:

11:

GridLayout gl = new GridLayout(1,1)

5:

setLayout(gl);

9:

setLayout(gl);

add(can);

11:
12:
13:
14:

15:
16:
17:
18:

19:

barras de dcsplazam.enlo:

.F=lm,odofl.tV.lu.(, devuelve e. va.or

ac.ua. . U baua d,

. E, mtodo setvalue(inr) asignad vaior actual.

desplaZamien,o

20:
21:
22:

23:
24:

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

g.drawLine(x+10,y,x+2,y);
g.drawLine(x,y-10,x,y-2);
g.drawLine(x,y+i0jX!y+2);

para app,ets

width=10C>

<3pplet code-crosshair.class"

Resumen

</applet>

los componentes del AWT.

El AWT
Figura 11.13

unpos 4ue us.ed

El applet Crosshair.

i'"a ^ applct. cen el niclodo add() del

contenedor.

m
m

hacer til |a inlerfa2 grn

ns acerca de lo que se necesi,. para

un,

Canvas.

Lo simiente est sucediendo en la clase Crosshair:

- -* de estos

.Y, Hnea 4 crea un objeto Gri-L.yout que ser, crecido co.no c. adulador de
nara la clase en la lnea 8

Preguntas y respuestas

p^

sido extremadamente lentos p ,

.0.2,

es lo que sucede en la clase:

' . Us Hnea, ,6 y .7 determinan e, punto en e,


o un applet de Java , .0.2

S12e ()

im >d'

es.ndar cuando se escriben 1DDH V

Hace Crnicamente cada vez que


y

r
evUar .os avisos de desaprobacin cuando comp.lc

desaguadores de ^1^^
el cual hara poib.e ^^

te navegadores han

'"" Vereiones dd

libro-Microso/i

' Java '-0'2 St'Ue Sendo el

habilhadc* para J;lv, pucda corL o, ^


rlos CII

Mvmrox

y p;ira dibnar cuatro laic

r:lt*l ,,,,

=,

para desarrollar una interfaz

Sin embargo, usar el AWT

de Java.

beneficios en otras reas

Semana 2

Da

12

Organizacin de los
componentes en una

interfaz de usuario
Rara poder dar algn tipo de forma a una merfaz dlscld

ld

las diversas pla

CQn

s que soportan el lenguaje

El punto de inicio est en los administradores de diseo bsico.

Da 12

292

_22f2fffldelos.componentes en

Diseo bsico de interfaces

void lnit()
setLayout(lm);

Como aprendi ayer, una interfaz grfica de usuario diseada con el ANVT es algo muy flu-

#
una interfaz de usuario

do Redfmensionar una ventana puede causar estragos en su interfaz, a, moverse los componenies a posiciones que no tena consideradas.

Esi-. fluidez es por necesidad. Java se implcmenta en muchas plataformas distintas y hay
.Ufemias sutiles en la manen, en que cada piaufonna despea botones. ,,:,m,s ,1, dosp.:.,a-

los

iniiMili' y similares.

Con lenguajes de programacin como Visual Basic de Microsoft, una posicin de! compo-

El administrador FiowLay out

Z"Je"una ventana esta definida precisamente por sus coordenadas x, y. Alguna, herra-

n.icn.as de desarrollo de Java penniten un control similar sohre un;, inicrla* a ,,-s de sus
propias clases de manejo de ventanas.

::

Mediante el AWT. un programador ohtiene ms control sobre la apariencia de una in.crfaz


mediante los administradores de diseo.

f
-pierdo o derecho d^
owLayout. RIGHT debena ser e, J

Diseo de una interfaz

Un administrador de diseo determina cmo se habrn de organizar los co.nponen.es al ser

d7
del7constructor, como en lay instruccin

slSu

agregados a un contenedor.

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.

La variable de ciase FlowLavout

clTdcl hay ms'espacio, empieza ^mediatamente un nuevo rengln de componentes

Tfmtpd

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

pan!oledor, se L una instancia de, contenedor mediante una instruccon co.no la


siguiente:

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.

L,s inscciones sieuien.es representan el punto de inicio para un applct que crea un admin rador de diseo y usa setLayout (), por lo que controla la d.spos.c.on de todos los com
ponentes que se agregarn a la ventana del applet:
public class Starter extends java.applet.Applet {
FiowLayout ln = new FiowLayout();.

3:
4:
5:

6:
7:
8:

9:

10:
11:
12:
13:
14:

15:

Butto

n cb =. new
ntw Butto
Butt0

-S

(>c-9la:

Button d - new Button("Deadbea ');

= MW Butt0"("Evidence-
f = new ButtonCFBiti

yout lm

public void init() {


setLayout(lm)

add(a);

add(b);

'

2#

Da 12

i-

Listado 12.1. continuacin


add(c);

16:

"

add(d);

17:

add(e);

18:

add(f);

19:

do ;,,

28:
21:

ut(10,3);

se utiliz la

Piira producir la salida mostrada en la figura ,2.1 con e, appletv.ewer s

componed,
componed, coT^^ofadS^;,"1' eSPaC ^'^^ ** horijMn
horijMntal

de cuadrcula con ]0 renglones 3 colum, 1

siguiente diquela <APPLET>:

vertical de 8 pixeles:

<applet cod.-Alph.b.t.cl.

''

</applet>

Figura 12.1

Seis bolones organizalos cu mi diseo ile


flujo.

dis*

En :w,tl MP,t. el

aicionales al consiructor FXowLayout ().


cl ,
,, -nt inti loma los iresargumemossiguiemes.cn orden:
El constructor FlowLayout(nf,

^nL,

i^,

. La alineaoi, que debe ser FlowLayout .CENTER, FlowLayout .LEFT o


FlowLayout.RIGHT.

. El espacio horizontal entre componentes, en pixeles.


. 1-1 espacio vertical, en pixeles.

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

BUttcncaroI=newButto

Utton

newBuno

er);

Bul]""^"""onCMik.-?;
Button bobby = new Button(Bobby-,;
publie void init() {
setUyout(family};
add(marcia);
add(carol);
add(greg);

add(jan);

add(alice);
add(peter);

add(cindy);

a la derecha. Cuando todas las celdas del re

(Maro

Button 9reg = new ButtonC'Greg-,;


Btton jan = new Button("Jan", :
Button alice = new Button(-Ali.-|.
BUttoncindy

T"" S'8UCn": cre:1 un disc

"*' "" CSpltao hor>^ de 5 pixeles


y uun
pixeles y

espacio

Organizacin de los componentes


296

Listado

en una interfaz de usuario

12.2. continuacin

los
La figura 12 2 muestra este applet en una pgina con

la siguiente etiqueta <APPLET>:

ppl.t cod.-Bunch.cl." height=i68 width=i60>

component)

</applet>

ws^CEE

Figura 12.2
Nuc\ e bolones ornan i-

-.ados e un diseo de

udreiilii de .5 x J.

diama .

que U!ltd ,, h. vim

u.

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

3:

la ventana del applet.

4:

El administrador BorderLayout

5:

crd.PL.yout. dividen un conncdor

6:

Button east = new Button( "East")

8:

Button west * new Button("West" '


Button center = new Button("Centn");

9:

trari con o se organizan estas secciones.

10:

11:

Figura 12.3

'-.i'i.S-'Xi:^''-*!'-'/''[: -';':':

Oii<iiii:.iekin i e los
componentes 1. ::j<> el
diseo de bon es.

'*

publie void init() {


setLayout(b);
add("North", north)add("South"
south);
add("East", east);
add("Wesf", west);

12:
13:
14:

,^t

15:

16:
17:

'X~ia?W i^vt* i'-'?'.

*'i

18:

19:

north = new Button("North");'

Button south = new Button( "South"

7:-

add("Center

center);

una nterfaz de usuario


u ,:rB !wemt ,8rega
h.iht-12. width-18.>

<aPPlet

pane.add(dialogue);

</applet>

Cmo mezclar administradores de diseo

e|

Diseo de interfaces avanzadas


ZX t

, en- el

El administrador CardLay out


:

"- " ^ ,1:1 n,..,,,!,, C.

dos cosas que tener en mente cuando se trabaja con paneles:

,.

' . E1 pane, se Lena con componentes antes de ser coloco en un con.cncdor mas grande
. El panel tiene su propio administrador de diseo.

Los pane,S se can con una simple amada al constructor a h Case Pane, como Se musira en el ejemplo siguiente:

Panel p; ne = new Panel O;

heredan . 1 co

:ls inwr lcc,Ones luientes crean un

administrador de diseo y lo aplican a un objeto Panel

llamado >ane:

setLayout(cc)

Borden ayout bo = new BorderLayout();


.setLayout(bo);

add Strinn

^u
dor o componente que es el mitv'' ntain&r)- bl ^undo
argumento especilcy el c-omone-

"" """'"^ 'd0S 'S ""Pes * deben aga-

#
interte Ce sunrio
13:

runner = new Thread(this)

14;

runner.start();

15i
16:

17:

naipe el nombre de "Options Card":

18:

puons

publie void stop() {

19:

runner

20:

21:
22:

addCOptions Card", options);

publie void init() {

23:

24:

25:

gM u.. naipe. III m.odo show() toma dos urgumenUis:

26:
27:

28:

31:
32:

"

-auei[

Divorce.")-

setLayout(card);

30:

El nombre que le ha dado al naipe.

lab[5] = new Label(Burma Shav.,-

29:
.

= nuil;

''

for (int i = 0; i < 6. i++)

.'

add<"Card - + 1/iabfi]);

33:

34:

do ce:

35:

cc.shcwtthis, "Fact Card");

36:
37:

card.show(this, "Card

38:

current++;

39:

i-urrentj,
current)-

current

= 0;

repaint();

42:

try

43:

iri por

if (current > 5)

40:

41:

,-,

publie void run() {

Thread.sleep(5000);

44:

} catch (InterruptedException e) {

45:
46:
47:

Para p^ucir Ja saIida que s


1:

2:

. 3:
4:

5:

6:
7:
8:
9:

10:
12:

i iport

java.awt.*;

p.blic class BurmaShave extends java.applet.Applet


implements Runnable {

CardLayout card = new CardLayout();


Label[] lab = new Label[6);
int

current = 0;

Thread

runner;

publie void start() {


if (runner == nuil) {

Algunas observaciones acerca del applet:

Une, 7 -Se crea el arrezo lab para que contenga las seis etique.as

L,nea 8 -Se eSIableCe )a vanare cu.rent. As se registra el naipe actual a desplegar.

Din 12

ios

L dd c,o *

"ne"

,.c Se coto.. I
p d .PPle, <** como c,r.

setLayoutfgridbag?;

Gri^agConstraints() ;

variable current.

. Lnea ^8 -El valor de current se incrementa en 1.


constraints.gridx =0constraints.gridy = a-

constraints.gridwidth'= t
constraints.gridheight = -

constraints.weightx = 30- '


constraints.weighty = 30'

Figura 12.4
Un naipe desplegado

en un diseo de mullnaipe.

"nejar ,po d ,in,,nS , J Jf

,.,

l ], cSmooren.e puede tomar ms de una celda en la cuadrcula,

, ,eTOr un ,,,

Paso uno: disee 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

En w rom- n,s .enera,, ,a creacin de una cuadrcula de bolsa .mpl.ca los ^ >

Crear un obJCto ori-.t^y

' como lo hara para cualquier administrador de diseo.

2. Crear una nueva instancia de GridBagConstraints.


3.

Establecer las restricciones para un componente.

"

entes:

ponen,e puede

^Xc^s I

rengfn final, que abarca d coLI

y los campos de tex.o enen


celdas.

PrPiaS CUadnCUlaS

c UMN

* V (como en el botn OK en el

' botn ocupa dos columnas de

Organizan de los compone en una interfaz de usuario

Da 12

Figura 12.5
Un diseo de
cuadrcula de bolsa.

gbc.gridx = gx;
gbc.gridy = gy;

9bcgridwidth = gw;
Qbc.gridheight = gh;
gbc.weightx = wx;

Figura 12.6
El diseo de cuadrcu

gbc. weighty = wy

la de bolsa de la figu
ra 12.5, con una
cuadrcula impuesta.

- ceidas con sus coordenadas , y ^^

lc ^dara pstenoste. *^> ^^ a la derecha de eU. es la ,.0.


celda. La celda supenor .zqrnenta es W L

L1 cclda a la derecha de sta es 0. P-ando

^ ^ ffl ,,

publie void init() {

succsiv;1111,,llc. Bisele sus ccM:,s o

.uicnla es ,l,la gu,c,Hc c o -, ' cuando desarrolle e. cd.go para este

constraints.fill = GriOBagConstraints.BOTH;

Figura 12.7
El diseo de cui drcu-

Iti de bolsa de l< figu


ra 12.5. con coi rile-

' * pci"i

nadas de celda.

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

^ ^^ cn la cuad,alla y

^ ^^ ^ marcadores
^ ^^ y definen dara.

// etiqueta de nombre

buildConstraintsfconstraints, 0, 0 i
Button labeli = new Buttoncla:

%ba9"nStrantSabl

i :-

ca. por ) que

100 1B(U.
100-100)-

,.

Da 12

307 i

Ahora auenda .os deulte Cules son los va.ores para .as resecciones que usted ha msertado en el mtodo buildConstraintsO?

mmmmm

^^Z^^

la ocupacin (0,2). Aqu, a diferencia de los com^Z e o


Gi

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.

Los dos ltimos argumenlos enteros son para weightx v weiflhty. que se mitan para

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

^^^?::::^:;: iodrsS iosreslriccio" ''e cada


* compo-

esquina superior izquierda.

Este botn esta en 1. esquina superior izquierda, por .o que su grid* y gridy dos primeros

que ocup. dos co.umnas en el

al administrador del diseo v lu.an

-estra , resu)lado en este ^TS^fnoT CmPneme a) ^ La - "

exactas aqu, o asegurar que todo es. alineado De , "" PreCUparSe de ias ^porciones

Ce que la caadrfeuta sea funciona,, que ,^ e, 1 ^ '" ^ "^""^ ^ a"U

no est pasando nada extrao


quecosas).

c ,d

COmaceldas
* rcnS'Olieii
ColuranM^
L ""correcto,
Sliei yy Co
encimadas,
3S ^ luJr
y ese tipo

Figura 12.8

Diseo de cuadrcula
de bolsa, primer paso.
ambos valores a 100. Los pesos se vern en el paso tres.

ame '!'
I ''!'.>'

Password'

V .-."

.'.

'.^'':'. ';'-' ' " -'M': v


J

OK

Paso tres: determine las proporciones

puede auregar el botn al pane).

spacio que , cuad o I e o L C"qllClilS.(nOmhrc >' ~-a) par:, que ocupen

-nos espacio que

ecen mediante las res^i^"^^ '"" ^ ^ * "" ^-

estab,ecen mediante las

ambos pesos (por ahora) son 106:

>
#

buildConstraints(constraints,

;:=::;;:

contrasea est en I,I (segunda columna, segundo rengln):


buildConstraintslconstraints, 1, 1, 1, 1

ce.da. Los valores de we m* weQ*" 1 "^ ' "'^ ^ Sd0 cslab'^ P"r o,i

sumar 100.

J W619hty ^ lodos su^ componemes, entonces, debern

Da 12

308

Ahora que los tonda, de todas las

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

los argumentos Weignty. A tiene^'" "e9ht* - ". usted se puede IllVcr

-ed dibujo, parece que el bo,onlnee

de entender, considere a los pesos como porcentajes y asegrese que sumen

reS' (4
(4 P

100 para que todo salga correctamente.

Qu celdas tienen valores y cules tienen 0? Las celdas que ocupan varios renglones u

HC aqU ias cinc nadas finales a buiidConstr

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.

mente cuestin de elegir la celda que tendr un valor, y entonces las otras celdas en ese
rengln o columna debern ser 8.

Mire las cinco-llamadas a buildConstraints() hechas en el paso anterior:

J""Constraints(const.-aints 1'

buildConstraintsiconstraints, 0,, 0, 1, 1, 10,

La figura

buildConstraintsico,

>): //nombre

buildCon;traints(constraints, i, 8,
8 1.,
1 1,
1 100,
100 1).!
1)! //* nombre
buildConstraintsfconstraints, 0,

1, 1, 1,

100- Hl

//contrasena

buildConstraxntslconstraints, 1, 1, 1, 1, 100, 100)1 /'texto contrasena


buildConstraints(constraints, 0, 2, 2, 1, 100, 100); //botn 0K

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

"J' ^e "bre cuadrcula

cada uno). Como conToS va,o ^ C * ** ""*** de '<

'
'

' ! V> //texto nombre


' 0' 40^ //contrasea

\' )' l> //texto contrasea '


' '' ' 20)-' //botn 0K

Proporciones correctas

Figura 12.9

Diseo de cuadrcula

de bolsa, segundo
paso.

to en la li.'ta anterior.

Si observa la figura 12.6 (la imagen del panel con la cuadrcula sobrepuesta), ver que la .segun
da columr 1 es mucho ms grande que la primera. Si fuera a elegir porcentajes tericos para esas

columnas, podra decir que la primera es 10 por ciento y la segunda es 90 por ciento. (Esto es
una esti.iv cin; y es todo lo que necesita hacer tambin.) Con estas dos supos.ciones, usted las
puede asi, .nar a las celdas. No necesita asignar algn valor a la celda con eP botn OK. porque

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,

0, 1,

1.

//nombre

10,

budCo,straintsiconstraints, 1, 0, 1, 1, 90.

; Qu pas 1 con los valores de las dos celdas restantes, la etiqueta de contrasea y el campo de
texto? Pu to que las proporciones de las columnas han sido previamente establecidas por la
enqueta 1 e nombre y de campo, usted no tiene que volver a establecerlas aqu. Dle tanto a
estas cel as, como a la primera del boln OK, los valores 8:

buildCoistraints<constrair.ts, 0, 1, 1, 1, 0, 100); //contrasea


biiildCMStraintslconstraints,

1,1,1,1,0-

ena funcionar a ,a

//texto nombre

100); //texto contrasena

buildCcistraints(constraints, 0, 2, 2, 1, 0, 100); //botn 0K

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

-'ed.obtiene si utili,, , m,smas


componentes reales.

Figura 12.10

Diseo de cuadrcula
d^ bolsa, casi lisia.

fiasswonii:,!

puede remplazar los botones marcadores


es- Puesto que ya ha configurado todo.

asi. La figura J2.10 muestra lo que

como antes y remplaza los botones con los

Organfcaclon de lo, componen... en una interfaz de usuario

Da 12'

Lo que se .* olvidando son .as restricciones que organi,an los componentes dentro de la .
celda Hay dos de ellas: f ill y anchor.

El valor predeterminado de anchor es GridBagConstraints

CENTEfi

r-

f5

ir

alores, definid como variables en la clase GridBagConstramts:

. GridBagConstraints.BOTH, extiende el componente para llenar la celda en ambas


direoiones.

. 6rid iagConstraints.NONE, hace que el componente se despliegue en su .amano mas

componn

=.

pequeo.

. GridBagConstraints.HORIZONTAL, hace que el componente se cxt.end;. en la d.rcc-

cin lorizontal.

S 00,,,.

. GridI1aoConstraints.VERTICAL. extiende el componente en la .Ihvcco v,n,d.


'.

c '""'''"' "Cados hori/iWitalinenlc (p;;i que inicien 1111:1 lnoi niili

se extiendan al ancho de la celda).

Nota

Tenga presente que este diseo es dinmico. Usted no va a establee

las

dLenones en pixeles reales para ningn componente; en vez de ello,


J

le indica a esos elementos en qu direcci6n pueden crecer ya que un

panel puede ser de cualquier tamao.

El boln no tendr f ill y estar alineado al centro,

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

IT

el'cdigo ,ar., este ejemplo, se agreg esta lnea al mtodo imt( ):


constraiits.fill = GridBagConstraints.BOTH;

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
d

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-

ces es,
i noJ tener un diseo
casi linnles,

pfife

perfecto cada vez.

e'rl

a tr de es e nH]S al SeZ la Pon hasta este punto, podra seHe til

co po e
co

po

S "ea Pr lnea' a*Purind0* c ent.ende las distintas partes que ,o

Listado 12.5. El

texto completo de amepass. java

"'. mo vocalmente dentro de la ce.da o alguno de los ocho valores de d.recoo,

1: import java.awt.*;

GridBa<Constraints.NORTH

GridBagConstraints.SOUTH

3: publie el... , ,n,M, ),,.,!.,.,,, {

Gr.dBaiconstraints.NORTHEAST

GridBagConstramts.SOUTHWEST

GridBa Constraints.EAST

GridBagConstraints.WEST

GridBaConstraints.SOUTHEAST

GridBagConstraints.NORTHWEST

"

Organizacin de los componentes en una interfaz de usuario

Da 12

'

312

8:
9:

gbc.gridx

gx;

gbc.gridy

ay;

gbc.gridWidth

10:

gbc.weightx

12:

14:

La sigui

La siguiente etiqueta <APPLET> sirvi para probar e, funcionamiento de este applef

wx;

XtCOd""

gbc.weighty = wy;

13:

gw;

gbc.gridheight = gh;

11:

Button okb = new Button("OK");

LISTADO 12.5. CONTINUADOR


7:

* width-24t>

Cuando compile eSte app,et, la llamada al mlodo setEchoCharacter(, en I, linca


linca 48

15:
16:

c^rrzrr'*dbi

17:

18:

setLayout(gridbag);

19:
20:

de nombre

21:
23:

25:

28:

29:

add(labeli);

ipadx agrega espacio a cualquier lado del componente, e ipady lo agreda arriba y abajo.

31:
32:
34:

35:
36:

,/ etiqueta de contrasea

, ,, e, )!

,lUUdConstraints(cons tr

41:

42:
43:
44:

47:
48:

49:

add(label2);

50:

51 :
52:

53:
54:

55:

TextField tfpass = new TextFieMU.

Para incluir un inset para su diseo, tiene que sobreponer el mtodo insetsO para Java
1.0.2, o el mtodo getlnsets (, para Java 2. Estos mtodos hacen la misma cosa
ints).

gridbag.setconstraints(tfpass,

Dentro de los mtodos get Insets(, o insets (,. cree un nuevo objeto Insets, donde el
ons rucor de h, clase Jnsets tome cuatro v:,,o,cs enteros que representan los n.r.cnc,
upeor. quinto, mfenor y derecho de. pane,. El mtodo insets () deber entonces

add(tfpass);

botn OK

T"lar Camdad d eSPaC' lrededr dl Panei m- L clase Insets

Los mrgenes determinan el espacio entre las orillas de un panel y sus componentes.

// campo de texto de contrasea

tfpass.etEchoCh.r.et.r{'>,

un nuevo administrador de

2T
;?e
e ipadyentre
en loscomponentes
dises de cuad*uia
bois^
* "'-"
p-
determ
nar ,a cantead
de espacio
en un panel.deLos
mrgenes,
sin emba,

pane, '^"P3ra

a^

45:
46:

S^;

Z Jo

38:
4B:

Mrgenes

Edd(tfname);

37:

39:

>

! cuai se apreaa com ms fa

// campo de texto de nombre

30:

33:

applcl p;l,, la

metian^^^
** un
mencin, V^TS
ipadx e ipady. T
Estas controlan elUad"CUla
rellena *
(el b1Sa'
espacioSadicional
-,|redlorde

24:

27:

1^

Relleno de celdas

22:

26:

<

2, 2, i, e. 2e>;

de
mpara'"T"
^ y^el inferior,
^ nfrmaci"
agriary dercho.
mrgenesL;,a unfigura
diseo
de cuadrT
adneula: 10
e, superior
y 30 para elP
izquierdo
12.11 muestra el resultado.

T3

vs

'-

o
C

S -).=

vi

ir

tj

>u

^J

-3

-^

x:

S| e

"=

5 -S ? ? =

i 5 t- 1
=

a | 5 -2 5
"a ,-: S S 3

C "3

r
**

8.

.a

-1

<v -a

-J-.

V-

^(

./:

r-

<r.

1>

cr

J <

.=

r3

a-

"2

-^

"S i 2

j=

'i x
:j

id

JD

'-

(y

3
CU

-j

?*-

">

o
-o

2
J=

S ,2 "

o
fc

;=

lili
s

t-

cu
D
a.

>.

e
O

<"

p.

S 1 -B

u
?3

tea

O
U

en

1 '

cu

3
C

3 'c

<-

te -S

0.

0 -

H 5" =: -o"

c " ~

S 3

So

a 1 g.

lis

11 1

i i i

" -i a

4j

>
fD
k-

D
en
cu

o.

>

>

Q.

Semana 2

Da

13

Respuesta a la entrada
del usuario en un applet
!-

reipj,u a

Hoy aprender, aplicando las tcnicas de Java I 0 > c,n h

maneje los eventos para que sus oraran,,

Sador Web que sopc^ L. D ra T

*C^

Sng, aprende. . manejar Jos ^

applcI

Da 13

1318

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

,. ,ouseUp()

Java llama automticamente a mtodos como paint (), init () y start () cada vez que los
necesita, sin que usted intervenga.

Al igual que en la programacin de applets, el manejo de los eventos involucra mtodos que
son llamados en forma automtica cada vez que el usuario realiza uno de esos eventos.

Tipos de eventos
Un evento se genera en respuesta a casi todo lo que un usuario puede hacer durante el ciclo
de vida de un programa de Java. Cada movimiento del ratn, clic o tecla, genera un evento.

En sus programas usted no tiene que tratar con todos los eventos que pudieran ocurrir. En vez

de eso, maneja aquellos eventos a los cuales desea que e! programa responda, ignorando los

Manejo de los clics del rat


ratn
az del programa.

en cualquier parle de |a

dems. Por ejiMiiplo. si el usuario hace clic cu cualquier lugar cu la ventana <U'I appU'l. o piv
si'na una (cela, usted espera que el programa acte en respuesta a ese evento.

tos son algunos de los eventos que se pueden manejar en sus propios programas:

Ches del raan. Ratn abajo (botn presionado), ratn arriba (botn suelto) y clic del
ratn (oprimir y soltar en el mismo sitio).

Movimientos del ratn. Entradas o salidas del puntero del ratn a un componente de la
interfaz, o arrastre del ratn (movimientos del puntero que ocurren con el boln pre
sionado).

botn y un evento ratn arriba .,


en diferentes etapas del clic.

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.

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.

". El siguiente un ejemplo de1 Z


c boxean mouseDown(Event

permile 1ue s"dan cosas dtferen-

ii; ust:d sobrepone ia *"

Da 13

320

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)

ejemplo: Spots

variiihles"scparadas para hacer mas fcil su manejo.

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

Figura 13.1

true;

su app.et, este mensaje aparece en el disposuivo de saHda es.ndar

f (tpplet Spots

Si incluve es.c m.odo en su

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

La clase Event no incluye la clusula implements Runnable en su defini


cin. Como podr ver ms adelante conforme vaya construyendo este

Nota

applet, tampoco tiene un mtodo run(). Por qu no? Porque en realidad

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

os puntos viejos adems de] ^


pu-uos vlejos se borrarn

i * actu
forma, cada vez que dibuje un pumo

Ahora, .sigamos con el mtodo paint()

PubHc void paint(Graphics o, /

fondo a blanco:
publie void init()

setBackground(Color.white);

Aqu usted establece el color de fondo en init (), en vez de en paint (), como lo haba

)os

hecho en ejemplos pasados, porque necesita establecer el color de fondo slo una vez. Puesto
que cada.vez que se aade un nuevo punto hay que llamar a paint (), establecer el fondo en
el mtodo paint () lo retrasara innecesariamente. Ponerlo en init () es una idea mucho
mejor.

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

elsf

s"dol3' nos"
Escriba
import java.awt.Graphics-

true;

*Port java.a^t.Color

System.out.println("Too many spots.");

port java.awt.Event;

return false;

Cuando c :urre un clic del ratn, el mtodo mouseDown() verifica si hay menos de 10 puntos.

Si es as, lama al mtodo addspot() (que pronto escribir) y devuelve un valor true (el
evento rain abajo fue interceptado y manejado). En caso contrario, slo imprime un mensaje
de error y devuelve un valor false. Qu hace addspot()? Agrega las coordenadas del

punto en bs arreglos de almacenaje, incrementa la variable currspots y llama a


repaint():

void adespot(int x,

int y)

xspets[currspots]

x;

yspitslcurrspots]

y;

cun spots++;

rep; int();

addspot(x,y);

return true;
else {

<

Da 13

325|

Listado

ic boolean iiouseDown(Event

System.out.println("Too many spots.");

21:

evt

f
#

22:
23:
24:

25:

void addspot(int x,int y)

26:
27:

28:

xspots[currspots]

x;

yspots[currspots]

y;

Click count: 1
Click count: 2
Click count: 3

currspots++;

29:

repaint();

30:

31:
32:

public void paint(Graphics g)

33:

g.setColor(Color.blue);

34:

for (int i = 0; i < currspots; i++) {

35:

g.fillOval(xspots[i]

36:

- 10, yspots[i]

10,

20,

20)5

37:

38:

39:

Manejo de los movimientos del


*

Usted pi ede cargar este applet en una pgina con el siguiente HTML:

doS ,po,

ratn

a, fc ,.

<applei code="Spots.class" height=250 width=250>


</appli t>

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

mport java.awt.Color-

import java.awt.Event'

import java.awt.Point;

Los eventos ratn entra y ratn sale

luientes ros muestran las firmas para nouseEnter,) y

PUb
anchor;

,,

ter"ini6n

currentpoint;

currline . ,; }

public void init() {

setBackground(Color.White);

public bcolean ,rouseEnter(Event evt, int x, int y) {


II...

public

bcolean m

ouseExxt(Event evt, int x, int y) {

2 , ^ " "" SOl


' """
^";";lrPlnM
a* clase Point
bJC'a" P'r:1

representa una coordenada *

esos puntos, usted debe

Un ejemplo: dibujo de lneas

^i: ;;: oava-awt-point)

,os puntos incalcs de 1;ls lneas

' El arreg.0 ends man.iene ,os punIOS finaies de ,ns mlsmas ]fneas

funcionan cnio.

Figura 13.2

*>

Dibujo de lneas.

mantiene e> punto actua, dc tenninacion de h ^ qug se ^ ^

1grmVf.Mi,.AJKmtlSS3
i

de lneas (para

m""ener

en el arreglo).

m?

de 1* '" -r la si
siguien.e

son

para

insumen iniciales y un mtodo init() senc.llo:

public boolean mou

if (currline < maxlines

para

evt

anchor = new Point(x,y);

int

Da 13

I 328

Respuesta a /a entran* ^ i

_[f_entrada_del usuario en un applet

return true;

elSeSystem.out.println("Too many lines.1

Dibujar el apple, significa dbu.

return false;

y ends. as con.o la linca ;lL,J CI1 ,,

( '""* VM* ""nada, en los arreglos starts

-" He *,, cl 111|O(|O.painto^T^ " "nim-c'ln *> 'a "'"- en proceso, dblcljl

currentpoint respectivamente,. P ra Zl^'T '""""* ^"^ ^ ' ""^ >'

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

'TiVV1

movimiento, haciendo que la lnea se "anime"). Tenga en cuenta que si excede el numero
mximo de lneas, ya no podr hacer este trabajo. Aqu presentamos el mtodo mouseDrag()
para lodos esos trabajos:

// dibuja la lnea actual


9-setColor(Color.blue)lf (c^rentpoint != nuil)
fl-arawunefanchor.x. anchor y
x, currentpoint .

publie boolean mouseDrag(Event evt, int x, int y) {


if

(currline < MAXLINES) {


currentpoint = new Point(x,y);
repaint();
return

l lneS-

true;

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

(y -Mecer e, valor a nuil, en e, ^

mo de lneas, antes de llamar al mtodo addline(), descrito a cont.nuac.on:

publie b-'Olean mouseUp(Event evt, int x, int y) {

"^sMa. Oso es 1()d,,; , s,o 6 line

una aplicacin bsica de dibujo en s

if (iurrline < MAXLINES) {


addl.ne(x,y);
retu n

else

Escriba

true;

return false;

1:

2:

En el meto lo addline() se actualizan los arreglos de los puntos de inicio y f.nal, y se dibuja
de nuevo e applet para que tome en cuenta a la lnea nueva:
void add.ine(int x,int y)
star- s[currline]

ends currline]

= new Point(x.y);

curr. ine++;

curn ntpoint = nuil;


anch ir = nuil;
repa.nt() ;

= anchorr

3:
4:

5:
6:
7:

8:
9:

10:

11:

iava.awt.Color:

port java.awt.Event-

import java.awt.Point;

^^

Z7 " '
1S l"'C 7 "^ Al <*' tpoint
r

""^ dlb"J;lr ^^^ lo <i

Da 13

Respuesta a la entrada del usuario en un applet


58:

59:

Listado 13.2

12:

13:

#
#

14:

setBackground(Color.white);

ends[i].y);

// dibuja la lnea actual


g.setColor(Color.blue)-

63:
64:

16:

17:

public boolean ouseDovm(Event evt, int x, int y) {


if (currline < MAXUNES), {

19:

anchor = new Point(x,y);

20:

if (currentpoint 1= nuil)

65:

g.drawLine(anchor.x,anchor.y
currentpoint.x,currentpoint.y,;

66:
67:
68:

return true;

21:

elSeSyte.out.println("Too many Unes.");

23:
24:

62:

public void init() {

15:

16:

:.

60:
61:

22:
_

// nmero de lineas

Pruebe esle applet con el siguiente HTML:

return false;

25:
26:

27:
28:
29:

public boolean mouseUp(Event evt, int x, int y) {


if (currline < MAXLINES)

30:

31:

return

32:
33:

35:

36:

public boolean mouseDrag(Event evt, int x, int y) {

37:

if (currline < MAXLINES) {


currentpoint = new Point(x,y);

38:

39:

^^

true;

repaintO;

40:

return

41:
42:

else

43:

true;

return false;

44:

45:
46:

ends[currline] = new Point(x,y);


currline++;

49:

currentpoint = nuil;
anchor = nuil;

51:

repaintO;

52:
54:

55:

56:
57:

para recibir entradas Ms adelarn^ Zc H

de enfoque. Es ms fci, eme'der f S


escribir en ese cL^o con" cTn
^
que recba e, enfoque. Tol ^ i"" 0"

.ex.0. E?cursor Pa;;;;, ca:e; 7:si picnsa


picns en un

/l8urar para que tengan,.

COn eVentos

C'
. Poden con-

starts[currline] = anchor;

48:

53:

^r ;:r:tz:t teela
teela sese genera
gene un eventde

void addline(int x.int y) {

47:

50:

Manejo de los eventos de teclado

else return false;

34:

addline(x,y);

public void paint(Graphics 9)

// dibuja las lneas existentes

for (int i = B; i < currline; i++) {

enfoque a un

quit.requestFocusf)

'"

Puede asignar el enfoque a una ventana de apple, lla.ando a, mtodo request.ocus () de,

331

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

Tecla AvPg (Page Down)


Plecha hacia arriba

caracteres, ilc este modo:


currentchar =

(char)key;

P'<x-hu liacia abajo


F'ccha a la 2tjUicrc|

cnid,, vo q votocs son producidos po. ]U carjclc

a la derecha
Tecla F]

.printlnCCharacter:

Tecla F2

+ (char)key)

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.

as, la ventana del arJet n


u requestFoc^(); de no'
teciado. Recuerde esta dife encTa "a21 i' '"^ ^ '3 6

usen eventos de teclado Para pedi ex .

este a

Pfband applets

tana de app.et. mejor use r^^"^ 6' enf^e " ven-

s menos complicado que los c,ue utiliz ames, ya que slo nene ,rcs

y los valores de ese carcter. sta es la definicin de la clase .mc.al:


import

java.awt.Graphics;

import

java.awt.Event;

import

java.awt.Font;

import

java.awt.Color;

case Event.DOWN:
curry

publie class Keys extends java.applet.Applet {

curry

char

currkey;

int

currx;

int

curry;

+=

5-

break;
case Event.UP:
.=

5;

break;
case Event.lEFT:
currx

-=

5;

break;

l). Aqu, init() es responsable de tres larcas:

o de letra del applet (en este caso. Helvtica negrita

de6 puntos) y es.ab.ecer I, posicin mica, de. carcter (e, centro de la pantalla, menos
algunos puntos para ajustado ligeramente hacia arriba y a la derecha).

case Event.filGHT:
currx

+=

5;

break;

default:

currkey = (char)key;
repaintf);
return true;

publie void init() {

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

.imiiiivininitn ictbc
i i'ih ni:i instruccin en el nieiotio nii \) "- " >-

la

entoque tic cniiuM .i i.i vtm.m.i uti

'-' ll11""11 """""-1-1


, C|.|ril|a t)ci teclado sea recibida p*i
ipplet lisia instruccin es necesaria paia asLfcui.n H"<-

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 )

para que la ventana del applet recibiera entrada desde el tee .do. pod

enfocar la ventana haciendo clic en ella. Esto funcona todav.a en las ult.mas

"do que us,cd dibuja,. e, :lpp)e, s6,o

publie void paintfGraphics g, {


if (currkey l= 0} {
9drasti

no tiene un carcter inicial y


0, de

Dh-13

336

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

2:

3:
4:

5:

6:

import

Java.awt.Graphi.es;

import

java.awt.Event;

import

java.awt.Font;

import

java.awt.Color;

48:

}'' "T ;:/.-1 .. ,..,.,,,,, :

public class Keys extends java.applet.Applet {

7:

8:

char currkey;

9:

int

currx;

10:

int

curry;

11:
12:

public void init()


curry =

14:
15:

requestFocusO;

18:

21:

public boolean keyDown(Event evt, int key) {

22:

switch

23:

case

(key)

break;

25:

case

Event.UP:

27:

curry

28:

break;

29:

case

eurrx

31:

break;
case

-= 5;

Event.RIGHT:

currx += 5;

33:

break;

34:
35:

-= 5;

Event.LEFT:

30:
32:

Event.DOWN:

curry += 5;

24:

26:

-16;

setFont(new Font("Helvtica",Font.B0LD,36));

17:

20:

(sizep .height / 2)

// predeterminado

setBackground(Color.white);

16:

19:

currx = (size().width / 2) -8;

13:

default:

currkey =

36:

(char)key;

37:

38:
39:

repaint();

48:

return

true;

41:
42:

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

E| tdo handleEvent(:) luce as':' > '

Pbijc-oolan handleEvent(Event evt, {

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


}

define odo.un.grUpo de co^t^^^ * "" frtUna' " ^ ^

cuerpo de handleEvent (,..Puesto que est^variab. . ,


* ""^ Cm''rObar e" el
tcin switch funciona bastan w^p',
' S" CnS'an'eS enleras' u"a

Observe que esta asignacin desde los botones del ratn a los modificadores del teclado se da
en forma automtica, no tiene que trabajar mucho para estar seguro de que sus apotos o aph-

cioncs funcionan en sistemas diferentes con d.stintos tipos de ratn. Como los ches ,^u,e,

oo derecho asignan los eventos a .as teclas modificadoras usted puede uuhzar as tecla

nidificado. reales, en sistemas con ratn de menos botones, para ^-ar exacta
e los
mismos resultados. As, por ejemplo en Windows, mantener pres.onada Mu* a Comrol
hacer clic con el ratn; o bien en el sistema Macintosh, mantener prestada la ted. Control
equivale a h; cer clic en el botn central de un ratn con tres botones; por su parte, s, en una

Mac mantien presionada la tecla Command (manzanita) y hace clic con el ratn. eS .gual a
hacer clic co > el botn derecho en un ratn de dos o tres botones.

Ten-a prese, te, adems, que usar ratones con botones diferentes o teclas modificadoras
podr no se, obvio de inmed.ato si su applet o aplicacin corren en un s.stema con

botones de le s que est acoslumbrado a usar. En este caso, piense en la convemencia de

reTngir su nterfaz a un solo botn de. ratn, o dar informacin o ayuda que exphque e, uso
de su progra na.

-"'-case-Eyent.MOUSE DOWN:

Los mtodo: predeterminados que ha aprendido hoy para el manejo de eventos bs.cos en los
applets. son llamados por un mtodo genrico manejador de eventos denominado

evt.x + ",- + evt.y);


return true;
'

case Event.MOUSE UP:

.,;
': .

System.out.pFintlnCMouseUp+ evt-x + "> + evt.y);

return true;

^case Event.MOUSE MOVE:


-

' Systen.out.printlnCMouseMoveevt.x + , + evt.y)return true;

case Event.MOUSE_DRAG-

' '

>'
: System.out.printlnCMouseDrao>.:;,-,,.; evt.x + -,- + evt
,.
return true;
default:
.
'

El manejador de eventos genrico

pntlnCMouse

,-.

return false;

.
. .,:

"
.

J
Puede probar los siguientes eventos de teclado-

handleEver t (,. Cuando usted usa este mtodo, el AWT trata genr.camente con os e*o>

que ocurren entre los componentes de la aplicacin y los eventos basados en la, entradas de.
usuario.

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
ve os par. las barras de desplazamiento u otros elementos de la imerfaz de usuano), cam

biar elcom amiento del manejo de un evento predeterminado, o crear y pasar sus prop.os

eventos. nc:csi:i modificar handleEvent () en los programas que usted luiga.

ratn:

(igua, que en e.

Da 13

340

Respuesta a la entrada

. Event .MOUSEJJP se genera al liberar el botn del ratn (igual que en el mtodo
mouseUpO).

. Even.M0USE_M0VE se genera al mover el raln (igual que en el mtodo


mouseMoveO).

* 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

dc VMc

ese applel). Tambin puede utilizar el mtodo mouseEnter().

. 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

Sea en
que mediante ]. tecIa Tab. ..Qb

Por
" Pane de un dp,aniic

que le interesa y, si se^nocs el even.o. llame a super. handleEvent () para que la supeclase que define handleEvent () pueda procesar cosas. He aqu un ejemplo:
publie boolean handleEvent(Event evt) {
if

(evt. id == Event.M0USE_D0WN)
// procesa el ratn abajo
return

true;

else

return super.handleEvent(evt);

Manejo de eventos de accin

^n evento de accin es el evento d

mtodo especial para manejarlo ex * """^ "^ U"JJZaao *

<=' ratn y ei teclado.

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,

devuc Ive true; si pasa el evento a una superclase, ese mtodo devolver true o f alse; usted
no tif ne que devolverlo personalmente.

Manejo de los eventos de componentes

n hace que pase un objeto extrl ln


CT 7"' ^ repreien- le "
(e" CMe Cd>- el parmetro arg) e, cua, puede ser de

mer tlpo de ciase.

Las tcnicas que ha aprendido hasta aqu para el manejo de eventos, se han enfocado en las

nl facciones del usuario (hacer clic con el ratn, oprimir teclas, etctera,. Tambin hay eventos
mr. manejar otros eventos especficos que tienen lugar en componentes como botones, arcas de

c'v o v otros elementos de la mterfaz. Por ejemplo, los botones usan eventos de acc.n que son

dis .'irados al presionarlos. Usted no tiene que preocuparse por el ratn abajo o el ratn arriba, o
del -mimar dnde tuvo lugar la interaccin del raln; el componente lo maneja todo.

IV

i
<0 I

ID

a> <a

g
o

u
a
w

o -H

JJ

O11

a>
o

(0

m
^~

o *H
10

0)
IA

t.

-O

3
cr r-H
o> III

9 ch ?5

O c .

ai

5
c

a.

S*5
H
-a

=
c

*c

M
?i

51 l

o '-o

=
"i
'3
3 2 5

o ^

####+# #####

.5

"o

c
3
U

>

>
-n
^

C
O

-7.

5.
r3

O
O

C
w

"c

+-

t_

-^ 'ro
a
i)

3
o

<u

c
OJ

V)

"d.

";

V5

1>

>

-o

-3

i: 2. o-

w
a

-y.

^
2

u go

ra

I-

O.

5
"

8 1 s

a)

-=

H-

vi

Ji

2a-

<u | -3

3
y

= 5

t
<

5 2 '=
4J

=
5

II I |J

13
c

o. "o
-o --

c
*-

3 2 ..
5

g 3 5 3

2
2 ?
o (

5 H

*-*

=>

v-

*j

c. 3

i II!

y;

3 u- 5 5

_Ju(nu-J

Da 13

Para los evemos seleccionar l.sta y dese.eccionar lista, no es fcil obtener^mtodos^ que se

puedan sobreponer para su uso. Para esos eventos tiene que uul.zar handleEvent(,, de la
siguiente forma:

public boolean handleEvent(Event evt) {


if

(evt.id == Event.LIST_SELECT)

ID de evento

SCROLL_ABS0LUTE

Lo que representa

SCROLL_LINE OOWN

handleSelect(Event);

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

r de

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

fondo

toVcle enfoque puede utilizar los mtodos gotFocus() y lostFocus():


public boolean gotFocus'Event evt, Object arg) {
}

public boolean lostFocus(Event evt, Object arg) {


//

Eventos de listas desplazables

Figura 13.4

El' upplet SetBack.


'..'.'.m-i^i ".'

Fstas l.stas generan res tipos diferentes de eventos: seleccionar o defeccionar un etanento

^vidual de una Hsta da como altado un evento de seleccon o cancc.ac.on d. hsta. >
doble clie en uno de los elementos da como resultado un evento de acc.on.

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

hay i|iic busca, y los movimientos que los activan.

'os componen,, y d disenfy aS ^

tos que harn .rabajar al app]et.

r p

-jor en es.a distr.bucin y requiere pl

VM ben' anles de conectar los e.,n-

rr/an ser ms senciiios- ei ^


"" dSe *

t
3)
-1
O.

a.
ca
m
>
CO

01

o
-

O
c

XJ

-i

01

3
O
>i
ra

_j

U.

r-i

01

ce

T3

c
o

L~

-l-

T3

^-

jO
ii

/-i

t_

+^

c
o

3
O
3

o
Oi

O)
l_

13

CO

co
o

ra

o
n

* **

01
3

r-t

;_

+*
+-*

c
o

ii

CO

a>
3

ca

II

01

c
+-<

o
CO

c
o

cu

0)
r\

H
c

CQ

II

01
c

+j

x:

CO

T>

*^

ti

+-

Resumen
1:

import

2:
3:
4:

java.awt.

* ador de Java. La habi,.

public class SetBack extends java.applet.Applet {


ButtonredButton.blueButton.greenButton.wniteButton.blackButton;

5:
6:
7:
8:

public void init() {


setBackground(Color.white);

reuTcB

!
in

9:

add(redButton);

12:

blueButton = new Button("Blue );

13:

add(blueButton);

14:

greenButton = new Button("Green );

15:

add(greenButton);

16:

whiteButton = new Button("White );

17:

add(whiteButton);

18:

blackButton = new Button("Black );

19:

add(blackButton);

20:

21:

public boolean action(Event evt

Object arg) {

if (evt.target instanceof Button) {

24:

changeColor((Button)evt.target);

25:

return

26:

true;

} else return false;

27:

30:

31:

void changeColor(Button b) {
d,.
if h redButton) setBackground(Color.reci),

32:

33:
34:

35:
36
37

-.i if (b -= blueButton) SetBackground(Colcr.blue);


,

b - areenButton) setBackground(Color.green);

fu: if !b == 52tt.n) setBackground(COlor.white);


else

setBackground(Color.black);

repaint();

38
39

Pruebe el applet con el siguiente HTML:


<applet code='SetBack.class- wid
</applet>

Preguntas y respuestas
P

madas para este botn (es'

Presiona e, botn), pero no

para

n7 lmpIemCntar "evoluciones de Ha-

arbitrario. En C++, slo

ejec"te un '"dtod>

-;
;

actiono, elcual de^ar comendo ent'"" dC

crear un componamiento di reme

dase de su botn. Este aspecto delT

funcin-En 's
"*

^^ e ! T" ^ *"

"' neCeS"a CTCar UIW subc' en la

o -de, de ,llaneJ0 e :p:;;^: :iuie;;:T(:vacrazones


por ias
'SUS propios """ponentes

es mucho ms fcil y eficienie cumHn '. -T

28:
29:

redButton = new Button("Red");

11:

23:

"*

ion-

setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)),

1C:

22:

redondear sus conocimientos

cutarf caractersticas como las ventanas

c6dgo de ,a interfa2yde u;uCUJnd0 " Cd'= del ,o no e.s. demaso ligado al

Semana 2

Da 14
Desarrollo de interfaces

de usuario avanzadas

con el AWT

* awt <ki *
apren-

Cn,o tacta ,os

aun. , , ,,
Mens.

Cmo crear aplicaciones AWT independlientes.

. tanfa M

Da 14

35,

Ventanas, marcos y <^dros de dij^ogo

^
Tn :"ewFrame<"My Cool Window)

dcn.cn * ,n,c,te de ^* ^ j ,,,,,, ,>M~,nc

r:::;:s;r:,- * - - -

- - -

in.setLayout(new BorderLayo

Corth, !!ne B?
in.atdCNorth-

n..ddccnt.r-,

r^pT

pendientes de Java.

g aJUSla eI lamao de !a ^ a 100 pixe-

les de ancho por 200 de al.o


win.resize(100, 200);

Puesto que distintos sistemas tieren diCerenie, l

soluciones para esos pIxe,es> es dific

B. U-- -

cada plataforma. Las ventana, qui

pequeas para otra.

"CXiJa" muy
n b>en con una, podran serlamail0
muy graildes
Ei

Aerando J^^S^^Z

administrador de diseo y de ,o, mir 1"

los agrega a la vemana , cS

mira contener esos bmoes

C h venlana' dd
S8Uenle crea

a al '-o m, pcqueo posible que per-

FlowLayout fio = new FlowLayout)

Button ok = new BuTton("OK")


Button cancel . new Buttonfe onuent al appleu

tarna.0, botones de

win.pack();

i
lenido de esa a dicacion.

P:ir;, ca.ar arco, utilice alguno de los constructores siguienu-s:

. new Frs ,., String) crea un marco Wsico con un mulo.


a que I- s marcos heredan de Wxndow

A\VT. Los mar. os son contenedores, al igual que

lcs, de modo que usted puede

a de nuevo puede utilizar hide();

win.showf);

. newFra,e() crea un marco bsico sin ttulo.

da c,e Compone -t. los >narcos se ^^^

win.add(ok);

win.add(cancel);

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:

else

24:

botones: uno para mostrarla ventana y el otro P^*

} else

29:

is window. Nos

return false;

30:
31:

y"

return true;

28:

^ J^ ^ Jc

window.hde();

26:
27:

una ventana. Tanto el app.et como la e- <*

Window-),

(window.isShowing/))

25:

errores y seguridad".

.isShow
window. showM;

Escriba
1:

FI6URA 14.1

2:

/:/ ni'i'lei >' l vaiumu

3:
4:

que produce.

5:

import java.awt.;

class BaseFramel extends Frane {


String^essage
-Th
is . window...

6:

7:
8:

setLayout(new BorderLayout())

10:

11:

12:
13:

Escriba
1:

2:
3:
4:

5:

BaseFramel(String title, {
super(title);

9:

Labei-

14:
15:

import java.awt.*;

public class PopUpWindow extends java.applet.Applet {

Insets getlnsets() {

return new lnsets(2e,0,25,(

18:

Fratne window;

Button open,

16:
17:

19:

cise;

6:
7:
8:

9:
11:

12:
13:
14:

add(open);

cise = new Buttonf"Cise

height=200 width=200>

add(close);

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

OlalogiFrnme, String

ho 1

el cual puede ser moda, ('trU)


(truej o'o^alse"
o no (false).^ * llI"1J" llvWhk' "* " If"""

modo ms convencional.

i venlana de) i

clase en ese constructor.

Cuadros de dilogo
Figura 14.2
cin cspccJica. etctera.

El cuadro Enier Texi.

cierren.)

ttulo botones de cierre.

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.

cionar

Da 14

1358

359 i
s:

TextDialog di;

6:

En el mtodo del constructor BaseFrame2 puede crear el cuadro de dilogo (una instancia
de la nueva clase TextDialog que crear en un momento ms), asignarlo a la vanable de
nsemcia di y rcdimcnsionarlo; el nuevo rcdimcnsionamicnio se muestra en las dos lincas

9:

10:

siguientes del cdigo. An no querr mostrarlo porque slo debe aparecer cuando haga che

12:

di = new TextDialog(this, "Enter Text", truej;

13:
14:

dl.resize(i5Q,i58);

15:

Cree ahora el botn Set Text, el cual tendr un funcionamiento semejante al de los otros
botones, y lo agregar al BorderLayout en la posicin "South" (que lo coloca directamente
debajo de la etiqueta).

21:

Insets insets() {

22:

Despus .le haber agregado el TextDialog y un bouSn Scc Tcxi i la clase BaseFrame2. nece
sitar agregar el siguiente mtodo manejador de eventos:
publie boolean action(Event evt, Object arg) {
(evt.target instanceof Button)

dl.show();
}

17:

16:
19:

b);

return

16:

20:

Button b = new Button("Set Text");

if

(BaseFra.,e2)p,renf

11:

en el boln Set Text.

add("South",

BaaeFrae2 theFrame;

i 7:
'8:

true;

else

return false;

23:
24:

25:
26:
27:

(label ==
hide();

28:
29:

"0K")

30:
31:

return true;

32:

} else

33:

Al hacer clic en cualquier botn del marco, este mtodo despliega el objeto di del

34:

TextDialog. En este ejemplo, hay un solo botn: Set Text.

35:

return false;
}

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:

Hay algunos puntos que debe

ias o.as dos vemanas en este 7L


O dilogo funciona como su propio

window = new BaseFrame2( "A Pop Up WindoW);

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:

iraport

java.awt.*;

2:

3: class TextDialog extends Dialog {


4:

TextField

tf;

ame2. Ob

cons^

-perdase, que es exactamen.e i

"nea 8 es la llamada para qUe el con

y ia lnea 10 estableced v'albie *

definida en Ja clase BaseFrame2

?me- *ms *

lba" al co'r de la
* 8 y 10 dci iisIado '4.3. La

^ COneCte > -^ con el marco,


esPecfica d ' clase Frame

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.

Objetos de dilogo de archivo

Tantas clases para un simple applet! Las diversas ventanas y las clases de eventos asociados

hacen complicado al applet. Aunque, en este punto, debe estar tranquilo de cmo cada parte

de un applet liene sus propios componentes y acciones, y por la forma en que se ajustan todas
sus parles.

'os applet, ,a mayora d.*^^^1"'"" * *****


h
excePdones de 9"'*i
aplicaciones independices
S fC" USar

Cmo adjuntar dilogos a ios applets

cuando trata de usar estas instancias F<

Los d>logos slo se pueden adjuntar a los marcos. Para crear un dilogo, .tiene que pasar una

instancia de la cas, Frame a uno de los mtodos constructores del dilogo. Esto implica que
no puede crear cuadios de dilogo que estn adjuntos a los applets. Como los applets no
enen marcos explcitos, usted no le puede dar un argumento de narco a la clase Dialog. S.n

embargo recurriendo a una trampa de cdigo puede acceder al objeto frame que cont.enc ese

applet (normalmente, el navegador o la ventana misma del visor del applets) y usarlo como V

el

marco para el dilogo.

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

Ma frma Crea m dilogo para cargar un archivo.

* U" d^ * archivo, pero se usa

nrchiro

guardarlo. (La nica diferen

<ie archivo no abre

ancestro (dentro de todas las aplicaciones del AWT) t.ene que ser un marco. Los applets se
comportan del mismo modo. Llamando repetidamente a getParent(). estar en posibilidad

de tener a.xeso a una instancia de Frame. ste es el cdigo que puede poner dentro del
applet:

Object anchorpoint = getParent()

while (!

(anchorpoint instanceof Frame))

anchorpoint = (

(Component) anchorpoint ).getParent ();

En la primera lnea de este cdigo, usted crea una variable local llamada anchorpoint para

que con., nga el futuro marco para este applel. El objeto asignado a anchorpoint puede ser
de much; s clases, por lo tanto declare su tipo como Obj ect.

Las dos Ineas siguientes del cdigo son un ciclo while que llama a getParent () en cada
objeio dit .-reme de la cadena hasta llegar a un objeto Frame. Observe aqu que, para que el

mtodo g -tParent) funcione, y ya que este mtodo est definido solamente en los objetos

f-

nmbe'd'el ^^ ^

QetFile(,. Ambos le desvuelven c dZ

-memo, podra abnr e, J

"

* <>* ' cienx- us^i puede (,b,enor el


S 9etDireory,, y

Eventos de ventanas

que lo he.cdan de Component, tiene que convertir por cas. el valor de anchorpomt a
Componer t cada vez.

Despus c , h salida del ciclo, el objeto contenido en I;, variable anchorpoint ser una insuman

de h di* Frame (o una de sus subclases). Entonces, podr crear un objeto Dialog adjunto a ese
marco ye ivertir anchorpoint una vez ms para est.tr seguro de que tiene un objeto Frame:
TextDia.og di = new TextDialog((Frame)anchorpoint,
En :er Texf,

true);

con la variable de instancia id

Da 14

1362

363 i
Tabla 14.1.

Eventos de ventanas.

Cundo se presenta

Nombre del evento

Se genera al destruir una ventana mediante el cuadro Closc, o el

WINDOWJJESTROY

elemento Cise en el men.

Se genera cuando la ventana estaba oculta por otra y es trada

WINDOW_EXPOSE

al frente.
WINDOW_ICONIFY

Se genera al minimizar la ventana.

WINDOW_DEIC0NIFY

Se genera al restaurar la ventana.

WINDOW_M0VED

Se genera al mover la ventana.

disable 0 ;

habilitarlo de nuevo):

Elementos de men

Mens
Slo nos queda hablar de un elemento de la interfaz de usuario en el AWT: los mens

Una barra de mens es una coleccin de mens. Un men, a su vez, contiene una coleccin de
elementos, los cuales pueden tener nombres y, algunas veces, mtodos abreviados de teclado
opcionales. El AWT proporciona clases para todos estos elementos de men, entre ellas
MenuBar, Men y Menultem.

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 =

La clase CheckboxMe

new Menu("File");

mbar.add(myMenu);

lar:

Da 14

1364

rrss

myMenu.add(coords);

llc pin agregar un separador al men (una lnea que se usa para separar grupos de

Rnalmen.c. P

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

Dentro de) mtodo main n

myMenu.add(msep);

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

Eventos
de menu
men
venio: uc
. hecho de seleccionar un elemento de men con el ratn, o con un mtodc, abrev,a o desde

I Sado. ucncra un evento de accin. Puede manejar ese evento a .raves de, mundo
action(). como lo ha estado haciendo durante los ltimos dos d,as.

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.

isma forma en las aplicaciones de Java y en los app.ets.

u.i,ar de la misma

Para controlar y maneiar I

Da 14

1366

public void windowClosing(WindowEvent e)

win.hideO;

win.destroyO;
System.exit(0);

1 diseo de/applet

U mejor forma de iniciar Ja

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

z^

applet.

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


orcontrols PPara controlar los

Da 14

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

con el AWT

369 I

Definicin de los subpaneles i

La ciase ColorControls tendr m

q^ rePreSenIan ,os valores RGB y ^^

-anejar los subpane.es

. -belase de Applet porque en reaL/d

heredarla de Panel;
1 Import java.awt.*; .,,-.'...

Pant;'- Defnala para

^ColorControls extendV Panel {

y dos subpaneles para los campos de texto.

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

swatch.setBackground(Color.black);

referenca a una instancia de ia

Tambin necesita crear aqu dos instancias de los paneles ColorControls inexis.cn.es hasta

ColorTest applet;

^ZZo. Pues* qul todava no ha creado ,. Case, usted no sabe cmo se .ra el eons-

<

U"

T.tFi.

RGBcontrols = new ColorControls(...);


HSBcontrols = new ColorControls(...);

El paso 3 es agregar los tres componentes ai panel del appleu en esta forma:

C'S' "^ "" '"l0<i concior. Dentro del

constructor har mucho de lo

^''"" ^ ^ *"*" **" "' m^1'

-ar , campos de texto y

add(swatch);

add(RGBcontrols);

add(HSBcontrols);

M.n.ras trabaja en el diseo, agregue ios mrgenes para el apple. 00 puntos a lo largo de
todos los bordes):

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
init () con dos constructores incompletos y un mtodo getlnsetsO en su clase

CoTo^est. Contine la creacn de. d,seo de. subpane, en .a Case ColorControls, para
que pueda llenar estos constructores y terminar el d.seno.

pueda utilizar en ios campos' RGB

^ ' baS'S'me t>cnrica como '':lra 1UC la


dfiere" dncamcnlc e" Un

pecto: las etique.as para e. ,exo-

UMed puede plr e< ^ X

necesita uno ms: ]a referencia del

constructor.

lrUctor de dicha clase. En ese caso, coloque algunos constructores vacos, desPu,> podra
llenar los detalles.

''

entos de)

ColorControls(ColorTest parent

'

co"s'rucl^ ' ColorTest. Tambin

'nChjldo' misma W ambin puede ob.ener de)

Stri"9 11, Stringl2;stringI3)

Da 14

1370

1 i
Inicie esle constructor estableciendo primero el valor de parent a la variable de instancia
applet:
applet

parent;

thisipara pasar l objeto CoIorT est

constructores:

a estos

A continuacin, cree el diseo de este panel. Tambin puede usar un diseo de cuadrcula

para estos subpaneles, como lo hizo para el panel del applet, pero esta vez la cuadrcula lendr tres filas (una para cada uno de los pares de campos de texto y etiquetas) y dos columnas
(una para las etiquetas y otra para los campos). Tambin debe definir un espacio de 10 puntos
entre los componentes de la cuadrcula:
setLayout(new GridLayout(3,2,10,10));

= new TextField("0");

^^^ontrois para

Manejo de eventos

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,

'"-alizar

"titear vafores ne.lador


forma para un
Zl

apropiadas:

tfieldi

' los va(or" <*

son o, por eso po

ppet en afgn otro ^

Ahora, ya puede crear y aadir los componentes al pane!. Primero debe crear los objetos
campo <lc lexlo (inicializados con la cadena "0") y asignarlos a las variables de inslaiuia

Label.RIGHT));

add(tfieldi);

add(new Label(12,

Label.RIGHT));

add(tfield2);

add(new Label(13,

opuesto para reflejar el

Label.RIGHT));

add(tfield3);

-*

Usted ha terminado el constructor de la clase ColorControls del subpanel. Ya termin el


diseo? Todava no. Tambin puede aadir mrgenes alrededor del subpanel, solameme en la
pane superior e inferior, para mejorar un poco el diseo. Agregue aqu los mrgenes, lal como
lo hizo en laclase ColorTest utilizando el mtodo getlnsets():
publie

Insets getlnsets()

return new Insets(10,

10,

0i 0);

j Ya casi termina! Ahora tiene colocado el 98 por ciento de la estructura bsica y est listo para
seguir, pero le falta un paso: regresar a ColorTest y arreglar los constructores vacos para el

.update(this)-

return true;

else return false;

Mibpanel. de modo que se igualen con los consmiciores para ColorControls.

En el mtodo action (i u

El constructor que acaba de crear para ColorControls tiene cuatro argumentos: el objeto

generada realmente por ,n

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

sa es la nica accin que va

as/fue, ,lame al mJ0 upd.t.^^^Tr

que refleje los nuevos valores. Debido a que e


la actualizacin, precisamen.e por eso ne eslta enT *"

al mtodo correcto en el momento prec so

disPonib)es

d
aPP'et'

de ,cxro.

"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

cualquier campo de texto que haya cambiado. Para este paso, necesita definir el mtodo
update () en la clase ColorTest. Este mtodo toma un solo argumento: la instancia

Colorcontrols que contiene el valor que cambi. (El armenio !o toma de los mtodos de
evento en el objeto Colorcontrols.)

y actualizar el lado HSB del nwi p" "'""" ^^^()'Necesila crear un nuevo objeto Color
puede crear un nuevo obipm mi/,~

No interferir este mtodo con el mtodo update() del sistema? No.

Mota

,
i

Con Jos tres vaJores RGB usted

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.

hara pruebas para as


de da,o, aunque este

se no es el caso y esto es slo un ejemplo.

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

Ahora; convierta los valores RGB

probando si el argumento que recibi del panel es el mismo de los subpaneles que guardo en
las variables de instancia RGBcontrols y HSBcontrols:
void update(Colorcontrols controlPanel)

if (controlPanel RGBcontrols) {
II..

else

// RGB ha cambiado, actualizar HSB

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

rt

..horrar* alan de" escritura de cdigos, puede crear algunas variables lcale, para contener

-- -

,|,uos valores bsicos. En particular, los valores de los campas de texto son cadenas cuyos
v Les puede obtener utilizando el mtodo getText () definido en los objetos TextField

del objeto Colorcontrols. Como la mayor parte del tiempo habr de considerar esos valores
ceno enteros en este mtodo, puede obtener los valores de estas cadenas, convenirlos a
enteros y fardarlos en las variables locales (valuel, value2, value3). He aqu el cdigo
que se i-.icar.j;ir de este trabajo (se ve ms complicado de lo que es):
int valuel = lnte0er.parseInt(controlPanel.tfieldi.getText());

n lilil = lnteger.parseInt(controlPanel.tfield2.getText<));

Tnl vales = neger.parselnt(controlPanel.tfield3.getText());

P.doS y re3!enJo | ,2 ,
HSB|e] = 368;
HSBJ1] '=108;
HSB[2) = 108;

los , .pro-

Da 14

Ahora ya tiene los nmeros que quiere. La ltima parte de la actuaban pone nuevamente
estos valores en los campos de texto. Desde luego, ?s.os valores son aun nmeros de punto

con el

El cdigo fuente completo

"otante de modo que tiene que convenirlos a ints antes de convertidos en cadenas y

d puede Segur Jas ihmL

HSBcontrols.tfieldi.setText(StrinQ.ValueOf((int)HSBW));

HSBcontrols.tfield2.setText<Strin0.value0f

int HSB 1

'a ciase del apple, ColorTest, y ej

= -aginarse ,o que esta pa

guardarlos:

HSBcontrols.tfield3.setText(String.value0f((int)HSB[2])),

Ya estamos a medio camino. La siguiente parte del apple, es la que actualiza los valores RGB
cuando cambia un campo de texto en el lado HSB. Esta parte es el else en el gran

if...else c,ue define este mtodo y determina qu es lo que se debe ae.ualuar. una ve

dado el cambio.

Es ms fcil generar va.ores RGB, tomndo.os de los valores HSB, que hacer todo proceso
a la inversa Un mtodo de la clase Color, getHSBColor(), creu un nuevo obje.o de Color a

partir de .res valores HSB. Una vez que obtiene un objeto Color, puede extraer laclmenle los

publlc void init() {

vires RGB III inconveniente, desde luego, es que aetHSBColor ,o,a .res armemos Je
punto Dotante y que los va.ores que usted nene son los va!ores enteros que pre.en.uuhzar A,
Samar a getHSBColor, tendr que convertir por cast los valores enteros de os campos de

setUyout<new GrldLayoutM

swatch = new CanvaS()-

' '

'

,ex.o a f loats v dividirlos entre el factor de conversin apropiado, bl resuliaJo de

geTnSBColor e's un objeto Color. De ah en ade.ante, simplemente puede asonar el objeto a


la variable local c de modo que la pueda usar de nuevo us .cclame,
c = color.getHSBColor((float)valuei

/ 360,

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

Public Insets getlnsets() 1

definidos en la clase Color, harn justamente eso:

retur" "*w Insets(10, 1e, 1e, ,.

RGBcontrols.tf ieldi .setText (String.valueOf (c.getRedO ));

BGBcontrols.tfield2.setText(String.valueOf c.oetGreen

),

RGBcontrols.tfield3.setText(String.valueOf(c.getBlue())),

Por ltimo, y

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

Ya est! Lo logr. Ahora, compile las clases ColorTest y ColorControls. cree un arehivo
HTML para cargar el applel ColorTest, y verifquelo.

void pd.t.(ColorControl, controlPanel)

c = new Color(valuei, value2, value3)-

floatrj
HSB = Colop.BGBtoHSBv.Sei ' '
vales, (new floatf31))-

HSB[0J .= 36e.
HSB[1]

.=

10e.

HSB[2]

= 180;

l >>>

Desarrollo de ir.terfaces de usuario avanzadas con el AWT


31:

32:

Listado 14.4. continuacin

}.'

33:
35:

return true;

ele return false;


}

Despus de compilar ambos archivos de clase, podr cargar el upplc


ipplei ColorTest en

41:

na, con el siguiente HTML:

42:
43:

una pgi-

= 100>

44:

45:

swatch.setBackground(c);

46:

swatch.repaint();

47:

Resumen

48
49:

1:

TlT

import java.awt.*;

2:
3:
4:

5:
6:

class ColorControls extends Panel {


ColorTest applet;

,,,.,.

TextField tfieldi, tfield2, tfield3,


ColorControls(ColorTest

7:

parent

String 11, String 12, String 13) {

8:

9:

y(llridL.yoot(1,,

10:
11 :

Afielen = new TextField(-B")

12:

14:

,dd(new Label(H, Label.RIGHT));

15:

add(tfieldi);

16:

OTrn-m

add(new Label(12, Label.RIGHT)),

17:

add(tfield2);

18:

add(new Label(13,

19:

Label.

21 :

public Insets getlnsets() {

return new Insets(10, 10, 8, 8),

24:

25:

26:

27

public bool.an actiOn(Event .vt

30

m.entos para construir los componentes, desplegarlos y manejar los eventos. Dejando

id Eran cantidad de similitudes enrre ln<: nnr,intr >, i^ ..-.-:.

23:

29

R Dentro del AWT, tanto los app.ets como las aplicaciones siguen los mismos proced-

lolo nTr
h
Cmre 'OS aPP'CtS y l3S aPlicacio". ^1 99
99 por
por ciento
ciento de
de
que ha aprend.do sobre los apple.s se puede utilizar con bs aplicaciones. De hecho,

22:

28

no hay n.nguna d.ferencia entre un apple. y una aplicacin. Cmo es eso'

ligeramente de lado las restricciones de seguridad, la nica diferencia est en que las
apl.cac.ones* iniciad desde nain,> y se despliegan en sus propias ventanas, y los
applets se .maal.zan y arrancan desde init () y start (,, respectivamente. Debido a '

add(tfield3);

20:

Preguntas y respuestas

P En su comentario sobre las aplicaciones independientes, tengo la impresin de que

tfield2 = new T.xtField


;
tfield3 = new TextField( 8 ),

13:

De cualquier manera se merece este reconocimiento: Felicidades por su buen trabajo! .

Obj.cit ,rB) {

if (evt.target instanceof TextField) {


applet.update(this);

. nr.

deb.de a que los applets ignoran el mtodo rcain (), si es que ste existe en una clase,
no hay razn por la que no pueda crear un programa sencillo que se ejccu.e ieualmeme

como un applet y como una aplicacin.

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

llame a destroy() para deshacerse de ella para siempre. Si el evento cerrar ventana da
como resultado la salida de todo el programa, llame tambin a System.exit().

Afine sus

conocimientos
de Java
15 Funciones de las clases: paquetes

nterfaces y otras carcter!


16 Circunstancias excepcionalesmanejo de errores y seguridad

17
18 Comunicacin a travs de
Internet

19
20 Diseo de una interfaz de
usuario con Swing

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.

Acceso predeterminado

protected,y prvate.

. El modificador static, para crear mtodos y variables de clase.

. 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

Da 15

i 384

caractersticas

Acceso privado

P,r, ocultar totalmente un mtodo o yariablc.y evitar que sea usado por otras clases, u.uVc e.
mod.ncador prvate. El nico lugar en que se podrn ver estos mtodos o vanables, se.a
dentro de su propia clase.

Por ejemplo una variable de instancia privada puede ser utilizada por los mtodos de

u , pufclase, pero no por los objetos de cualquier otra clase. Asimismo,. meto os pnvao oLen ser .amados por otros mtodos de su misma dase, pero no por lo. de otras. Esta

Astriccin tambin afecta a la herencia: ninguna variable o mtodo pnvado son heredados por

-chos ,ugare p:!Z

Ts" 7 ^ *" *" "^

clase tendr libertad para cambiar las

Las variables privadas son extremadamente tiles en dos circunstancias:


. Cuando las otras clases no tienen razn para utilizar esa variable.

. cando ,,ra clase pudiera causar estragos cambiando la variable en fon*. inaprop,:ul.

Acceso pblico

clase Color; Esta variable se

^^rrlic-n

cione, La variable TOUCHDOW!t ^ "'v ""m


sucestvameme. Estas variables neci11 s ' T
clases en instrucciones a.es conTo
"
'
if (position < 0) {

IZZL mbin cambiara de manera importante. Para protegerse de est


puede declarar la variable winHatio como una variable prvate.

escenano.

" COmroIa el a0teso' CU3^"

de Una clase >" )Iam^ * sus mtodos en la

forma que lo desee.

que blaCk no tendr J^

Tas subclases.

es fiante eI modincador

de clasc black de la

l) ' '" !mOli''aS pudieran

System.out.println("Touchdowni")-

SCOre = Score + Football.TOUCHDOWN;

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


//

: ;r**

wanuscript createManuscript<int nurcDays, long numPages) {

-todos los mtodos

son

Acceso protegido
y una variabie a ,

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;

385

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

3 ava awt. Panel pero en realidad est en su propio paquete, j ava. applet.

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.

P.sic nivel de control ele acceso es til cumulo |uiere lacilin.r cjuc mu subclase se .inplemcnie
a s misma. Su clase podra utilizar un mtodo o variable para ayudar a la clase a que haga su
trabajo Debido a que una subclase hereda mucho del mismo comportamiento y atribuios,

podra tener la misma tarca por hacer. El acceso protegido le da a la subclase una oportunidad

De la misma clase

De cualquier clase

. en el mismo paquete

De cualquier clase
fuera del paquete
De una subclase

en el mismo paquete

s
no

.De una subclase fuera ,


del mismo paquete

sr

si

de usar un mtodo o variable de ayuda evitando, al mismo tiempo, su utilizacin par una
clase no relacionada.

Considere el ejemplo de una clase AudioPlayer, la cual reproduce un archivo digital de audio.
AudioPlayer tiene un mtodo llamado openSpeaker(). un mtodo interno que intcraciu
con el hardware para preparar las bocinas para que reproduzcan el sonido. openSpeaker() no
es importante para los que estn fuera de la clase AudioPlayer, de modo que, a primera v.sia,

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

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

ic en las subclases;

de aceeso

ser publie), pero s quiere que la subclase tenga acceso a el.

r
de acceso

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

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

valores del 10000 al 99999 ero

postales.

r ""

9' Per tr0S emerOS fuera

CnC d8itos: son v)idos Ios

rango no pueden ser cdigos

Da 15

388

Para evitar que una clase extema establezca la variable zipCode en forma incorrecta, puede

declararla prvate con una instruccin como sta:

puede usar el nombre de un objeto d

prvate int zipCode;

, es lllejot. uliliar c| nJ^ h cIase- P-o en ei caso de las variables

Sin embargo, qu pasara si otras clases requirieran la posibilidad de establecer la variable


zipCode para la clase con el Tin de hacerla til? En esa circunstancia, le puede dar acceso a

otras clases a una variable privada, a travs de un mtodo de acceso dentro de la misma clase
que contiene a zipCode.

Los mtodos de acceso toman este nombre porque proporcionan el acceso a algo que, de otra
forma, estara lucra de los lmites. A travs de un mtodo para proporcionar el a.-ceso a una

variable privada, usted puede controlar cmo se utilizar esa variable. En el ejemplo del cdi
go postal, la clase podra evitar que alguien ms estableciera zipCode en un valor incorreclo.

Suele haber mtodos de acceso separados que pueden leer y escribir una variable. Los mto
dos que leen tienen un nombre que comienza con get, y los que escriben tienen un nombre
que comienza con set, como en setZipCode(in) y getZipCodefmtj.

Nota

Esta convencin se est haciendo cada vez ms estndar con cada versin de
Java Usted debe recordar cmo ha cambiado el mtodo size() de la clase
Dimensin a getSize() a partir de Java 2. Tal vez quiera utilizar la misma con
vencin de nombramiento para sus propios mtodos de acceso como un

1:

medio para que la clase sea ms inteligible.

2:
3:
4:

5:

Es una tcnica comn, en la programacin orientada a objetos, utilizar estos mtodos para
acecsar a variables de instancia. Esta tcnica hace que las clases sean ms reui:^:.b!cs
porque las protege contra un uso inapropido.

6:
7:
8:

9:

10:

Mtodos y variables estticos

Un modificador que ya ha utilizado en los programas es static. presentado-durante el da 6.

-Creacin de clases". El modificador static sirve para crear mtodos y variables de clase,
publie class Circle

11:
12:

18:

area(float r)
pi

r;

19:
;

21:,
22:
23:
24:

^""""^"s.addlnstanceo;

publie

.20:
return

14:
15:

17:

publie static float pi = 3.14159265F;


publie float

Countlnstances() {

13:

16:

como en el ejemplo siguiente:

ei
" Cl0r-&lack "rcle.pi

Da 15

La salida de este programa es la siguiente:

Salida

Started with 0 instances


Creates

10

Variables

instances

Este ejemplo tiene un cierto nmero de caractersticas, de nudo que tmese su tiempo para
leerlas lnea por lnea. En la lnea 2 usted declara una vanable de clase prvate para con-

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

se

""""*eambian SU Va'Or-

C0n ,as variables el

ia constante ^

^ .tic para convertir


. nu""- tiene muchas razones

para darle . cada objeto>

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

establecer en cualquier valor aleatorio. Por lo tanto, en vez de crear un mtodo de acceso, lo

^odtficador f mal en la declaracin de clase, como en el ejem-

.^.final void getMaxwellSmart() {

que crea es un mtodo privado especial llamado addlnstance) en las l.neas 8-I0 que mc.t-

:rrrmo fres para hacer

mema el valor de numlnstances en 1.

Las lneas P-14 crean el mtodo constructor para esta clase. Recuerde, los constructores

se llaman cada vez que se crea un nuevo objeto, lo cual hace que ste sea el lugar log.co para
llamar a addlnstance() e incrementar la vanable.

Por ltimo, el mtodo nmin() indica que lo puede ejecutar como una aplicacin de Java y
probar todos los dems mtodos. En el mtodo main(). usted crea 10 instancias de la clase
Countinstances. reportando el valor de la vanable de clase numlnstances al terminar M
cual, podemos predecir, ser 18).

Clases, mtodos y variables final

El modificador final se utiliza con las clases, mtodos y variables para indicar que no cam

biarn. Tiene un significado diferente para cada cosa que pueda finalizar, de acuerdo con lo
siguiente:

Una clase final no puede tener subclases.

. Un mtodo final no puede ser sobrepuesto por ninguna subclase.


Una variable final no puede cambiar su valor.

Po stguiente:

Java. ejecuta un mtodo.Trime^ ver Sea 1 T"


verifica a su superclase y poTZ"

7 ^ """ etUxmttar ei

encontrar e, mtOdo. ,a secute" SL00"011111^ ^ " * ^^ haSta

y facilidad de desarrollo.

*" "" PC de Velocidad " aras de la flexibilidad


cdigo de by,es

nunca va a carnbiar aunouel soLpZZ


mtodos a ml0d0s de tipo f inal
de que el mtodo sea sobrep

desmente este cambio J


La biblioteca

o,

muchas
pa

ms

e'imina la "Osibilidad

T UM SUbC'aSe' de -o que analice cuida-

Da 15

1392

^Pf^te^nterfaces y otras caractersticas

.Publie abstract:class BradwayBoogieWcogie {

Los mtodos prvate son finales aunque no se declaren asi porque no

Nota

pueden ser heredados por las subclases bajo ninguna circunstancia.

dos y variabies que son tiles par 2T.1 sT 7"es ia

s Cases mediante e. modificador final en la declaracin de ,a clase, como en el

componente genrico que se ueda agreg" iu> M 7

ejemplo siguiente:

un objeto Component en un programa

publie final class AnotherFineMess {

una clase

final no se pueden derivar subclases. Al igual que con los mtodo, finales, este

duce algunos
i introduce
algunos beneficie de velocidad en el lenguaje de Java, a expon** ^ la

flexibilidad.

Las c,ases abstraes tambin pueden conten Iodos TT^ * ^ "" "llOdS-

mtodos sin implementacin. Estos mtodcs se m 1

"' S ^ S" '"^ c

ta. Los mtodos abstrac.os se decLn on"l ^dT T'3" '" SUbdaSeS de la clase ^c

-todo abstracto en una clase no ablc e^\^^- No puede declarar un

abstractos, mejor toe una imer^^ ^^^

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.

Clases v mtodos abstractos

v>>*

ser

Lo, p,,ntle, , la

amp|aI

os comunes a todas las Cases. E. comportamiento y los a.nbutos


caern hacia algn punto en la parte baja de la jerarqua.

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:

P'' CS nunca lcndrf ^"e crear

"=

E
a.

1/1

a _

-O

J-s
o -.2

f a

o-

o>

fo'
flj

3 g.

OJ

SM-i
<U -o

1 2

o.fe

g?

cr

a.

so

5P '

p
-

i
p

.-
3

3 =

Ti

.c

IIII
._

>

.2

1/1

g
*

" 5

<
u

"

a.

SJ I

-o

a s

i | o .

i 11..

8. u

a "2

3-^2 8
"

-^

3. g s E." .

1 3 E - '

-c

2 "^

i iI

'.a. .2

^
5

= -o

1=1

S.

. = -.o

<3 o

11 i -s -i 2 3 3.|-3
.5 =-S

.2

"o ^ 3

o"

3 s s-

6.

'i "

1
cd

ia.a2 I
ti

^1

Z. * S
3

s
^

"H
^3

'>
c:
<u

en

J
C

=3
O

a.

a.

.E

o
c

por-

O
c

5
o

3:

S. t
.

2-

=
u

a.

s
Ti

O
a
f

If

-S

o.

cu

s ^

<u

T3

c
3

ai

i
0.

(O

'5.
0

5
c

o.

"S

-o

*~*

o-

**

.5

O-

ni

01

"a

OJ

8.1

Q.

(0

+-

re

0/

(0

3.'

I I.

ai

5.'

5 o
E-SI;

cu

o.

L.

~q

ra

o
a.
E

flj

0
c.

<u

zr

a.

"3

II
U

& 3

o
-

1 5

1 3-

+5 S

0)

/i

-y.

2
E.

O,

3
cr

..

a z

t.

-H

8.

I-5-

o-

-o

a-

3 " -S
cr

55

3 c S

.2, S. .s "

E "-.

11

CL. _O

II

" t

CL T3

l!

>

3 S

^S

Cu

CJ

5 'B .2

396

Da 15

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

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

jonathanclasses.*;

import

bourneclasses.*;

Dentro del paquete de Jonathan hay una clase llamada Def enestrate. Lamentablemente, dentro
del paquete de Bourne tambin encontrar una clase llamada Def enestrate, que tiene un
significado e implementacin totalmente distintos. Usted se preguntar qu versin de Def enes

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:

acerca de cussMTHydnde

Da 15

Funciones de las clases:


caractersticas

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.

Por convencin, los nombres de los paque.es tienden a comenzar con una letra minscula, para

dis.in-uirlos d los nombres de clase. As, por ejemplo, en el nombre completo de la clase
inteerada String. i ava. lang. String. es ms fcil, a simple vista, separar el nombre del paque

Para permitir que una clase se-i v

te del nombre de la clase, lisia convencin ayuda a reducir los amlicos con los nombres.

* -* - ,:;

Creacin de la estructura de una carpeta


El paso dos en la creacin de paquetes es crear una estructura de carpeta en el disco duro

que corresponda al nombre del paquete. Si su paquete liene un solo nombre (mypackafle). debe
crear una carpe.a para ese nombre. Si el nombre del paquete consta de vanas panes, debe crear

carpetas dentro de las carpetas. Por ejemplo, para el nombre de paquete co*. pref ect. canasta,
necesita crear una carpeta con, una carpeta pref ect dentro de com, y otra carpeta canasta

dentro de pref ect. Entonces, sus archivos de clases y de cdigo fuente podran ,r en el d.recto-

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

solo sirvan a su impieme

"^ ^efecto de los cambios maj

instruccin package se usa junto con el nombre del paquete, como aparece a commuac.on:
package com.prefect.canasta;

as y soJo pueden ser uliIJ2jl

paque(e.

rio pref ect.

Parama par que

nsiderar .odL

r que ciases desea decl

El listado 15.2 nos muestra dos Ca^

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.

Control de acceso a los paquetes y las clases

Us.ecl ha aprendido acerca de los modificadores para el conirol de utcso :. los mendos y
vrlables Tambin puede controlar el acceso a las clases, como ya habr notado cuando u..liz el modificador publie en algunas declaraciones de clase en proyectos amenores.

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

Escriba
collections;

3: publie el.,, LinkedList {

*;

9=

prvate Node

//

...

root;

"_^~

'

399 i

Dte 15

401, #
Listado 15.2. continuacin
10:

11 :,
12:

class

13:
14:

15:
16:
17:

"18:

Node {

prvate

//no pblico

Object

prvate Node

next;

Node(Object o,
contents
next

contents.;.

Node

o;

.=

n;

n)

19:
20:

21:

Nota

En cada archivo, usted puede incluir todas las definiciones de clase que

desee pero slo una podr ser declarada como poblic. y ese nombre de
archivo deber tener el mismp de una clase pblica. Cuando Java compile

el archivo, crear archivos separados . class para cada defn.e.on de clase

rrr- - -

immmm

dentro del archivo.

La clase pblica LinkedList proporciona un grupo de mtodos pblicos muy ui.lcs (eo.no

add ()) a cualquier otra clase que quisiera utilizarlos. Esas otras clases no ncce^an saber

sobe cualquier clase de apoyo que necesite LinkedList para hacer su trabajo. Nod.. que
una de esas clases de apoyo, est decan* sin un modificador publie >' no .pateen, como
pane de la imerfaz pblica del paquete collections.

El hecho de que Node no sea pblica, no significa que LinkedList no tenga accedo a ella

mucho

* comp,ic,ds coo ,a "


. , un, & las i

s que

JO. v. ..^[ioiK'.s Cuido |,,

lon > ' -inbi'ii'icdMi. Y


'i mu,:pe en l'avor (|c

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

*ces peonan mucha ms funcionalidad a Java y al diseo de clase, y objetos qu, u,


clases y mtodos abstractos simples.

Da 15,

Veamos un ejemplo sencillo, Ja creacin ,


buena implementacin de Ja clase Fruit v

Interfaces y clases
Lis chscs e mterfaces, a pesar de sus definiciones diferentes, tienen mucho en comn. Las

~ "' "Ue' iuponS.a flue ya tiene una

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

m re" como ,as Cases, estn declaradas en los archivos fuente, una interlaz por archwoA.

!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

ellas).

variable, como resultado de una conversin, etc.). tambin puede ,,.l.r una ,n.c.1i7..

* Pr

interface

Donde quiera que este libro tenga un nombre de clase en cualquiera de sus ejemplos o

void
void

^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

*fi'one. de esa, interfaces, hoy aprender ms sobre

Fruitlike {

decayf);
squish();

class Fruit impleroents Fruitlike i


Prvate Color myColor{

puede crear una instancia de una clase.

prvate int daysTilifiot;

Implementacin y uso de las interfaces

Hay dos cosas que puede hacer con las interfaces: usarlas en sus propias clases y dehmr sus

interface

propias
interfaces. Por ahora, comience con la primera.
prp

void
void

Pan, usar una imerfaz. debe aadir la palabra Cave i.ple.ents como parte de su
I se. Esto ,o hizo el da 10, "Ad.cin de imgenes, animacin y son.do cuando aprend.o
acerca de los subprocesos e incluy h, inierfaz unnable en su Jel.n.con del .W)ei.

Spherelike {

toss();
rotate();

public class Neko extends java.applet.Applet


implements Runnable {

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

class sphere implements Spherelike


prvate float radius;
llke

dos que hay en la in.erfaz. Observe que una vez incluida una m.erfaz t.cne que - u

abracas: las subclases de estas ltimas pueden elegir qu mt


ner e ignorar los otros.)

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

no Le que agregar !a pa.abra Cave i.ple.ents en su propia def.mcon de Cas.

// extiende Object

class Orange extends Sphere implercents Fruitlike /

- -os usuarios de Oranoe nunca necean{saber del cambi0

Implementacin de mltiples interfaces


clases, y su ciase lmp,enremarf e,

componamiemo conibi-

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.

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

usted no puede crear un m.odo que satisfaga a ambos (cuaje. *f*V*

y(): /; des^P0Sicin
..qul8h0. y aplastado de la fruta
aFruitlike.tossn //

.sph.r.iik..to,.(;;
anOrange.ciecay()

.anOrange.squisno';

// i

nara"l pueden hacer todo eso

'anOrange.toss();

anOrange.rotate(};

mtodo s acciona por las listas de parmetros, no por el upo devuelto). En te en,
ratar de compilar una clase que implcmente ambas mterfaces produce un erro de com-

p-Sl incurrir en este tipo de problema significa que sus interfaecs uenen algunas
fallas de diseo que debera examinar de nuevo.

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

Cuando una vanab.e es declarada como un tipo de interfaz, sign.fica simplemente que

Cmo crear y extender las interfaces


"

UpoRunnable. la suposicin es que usted puede llamar a

l punto imponante que debemos captar es que aunque se espera que aRunnableObj ect

Interfaces nuevas
Para crear una inIerfa2 nueva, dec]are ,o si

sigllienle.

publie interface Growable {


i.
3;
i :

Da 15

406

_[^[les de 'as clases:

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

se pueda usar un nombre de clase

par.
cearr parme.ras
genricos

mtodos y constantes. Las definiciones de mtodo dentro de la interfaz son mtodds publie

y abstract: usted puede declararlos como tal en forma explcita, o se convertirn en mto
dos publie y abstract si no incluye esos modificadores. Usted no puede declarar un mlodo
como prvate o protected en una interfaz. Por ejemplo, aqu tenemos una interfaz

y .,ui.(). Tamban

voi.d growItBigger();

>.

// explcitamente publico y abstracto

como

// implcitamente pblico y abstracto

Observe que, I igual que con los mlodos abstractos en las clases, los mtodos dentro de las
inicrfaces no tienen cuerpos. Recuerde, una interfaz es diseo puro; no involucra ninguna

9er"'i

" <-'- que f


n que sea u
.si.nplcmente:

declarado implcitamente como tal (growItBiggerQ):

publie abstract void growlt();

que s

t. De qu lipo w a

Growable con un mtodo declarado explcitamente publie y abstract (growItO) y uno


publie interface Growable {

I^^J^racesyotrasc^Kterstics

interface Fruitlike {

ic abstract germinate(F ruitlika

self)

implcmentacin.

Adems de los mtodos, las interfaces tambin pueden tener variables, pero dichas variables '
deben ser declaradas como publie, static y final facindolas consumles). Al igual que
con los mlodos, usted puede definir en forma explcita una variable para que sea publie.
static, y final, o sta ser definida implcitamente como tal si no utiliza esos modilieadores. Aqu tenemos la misma definicin Growable con dos nueuis variables:

;i) ubJeio aprojiia,

class Orange extends Fruit { '

9erminate(Fruitlike self) /
,, "9e the0^9e = (Orange,self;

publie interface Growable {

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

Cmo extender interfaces

Al 'gual que con Jas ciases ustrH

-erfaz hereda de olra inlerfaz, e^^^ '

de mtodo que defini su "superimerfa^7LL T"


-.nd.. ta, como ,o hara en una definici^e c,^ ^ "

en una .jerarqufa. Cuando una

defDCOn' >'

olas interfaces en el mismo paquete.

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.

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

de imerf"ces no

c. o

*n existir en

Tambin debemos notar que, a diferencia h . i

^ herencia mllpIe. ^ por ^7"" de ^-s, |a jeraiqua dc imt,f;lc,s

-merfaces necesite (separada ^ cornTs^

deber contener una

amos una definicin para una imejfa2 .

lote de otras interfaces:

^TjrC

SenClla M PUCde

' ""lrtdos ^ con.stan.es ances.rale,. Aqupresen-

deno.mnada Busylnterface que hereda de iodo un

i 408

Da 15

public interface Busylnterface extends Runnable,


Observable

Growable,

Fruitiike,

.
i

En las interfaces con herencia mkiple, las reglas para manejar los conflictos de nombre de

mtodo son las mismas que para las clases que utilizan mltiples interdices; los mtodos que
difieren solamente en el tipo devuelto, dan como resultado un error de compilacin.

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 :

Listado 15.3. Texto completo de lnkedlist. java.

package

es un u.so tpico del enumerador

collections.
_

collections;

2:
3:
4:

public

class

prvate

LinkedList
Node

root;

5:
6:
7:

public Enumeration enumrate))


return

8:

new LinkedListEnuraerator(root);

9:
0:

11 :
12:

class

Node

13:

private

Object

14:

prvate

Node

contents;

next;

15:
16:
17:
18:

public Object contents()


return

contents;

19:

deJ ob

20:

21:
22:

public Node next()


return

Oases internas

23:
24:
25:

26:
27:
28:
29:

30:

31:

derSa melfo puede apJcar en

rango de snuaciones.

next;

class LinkedListEnumerator implements Enumeration {


private

Node

currentNode;

LinkedListEnumerator(Node
currentNode

= root;

root)

. Las

superior-

penenee

un

de

S mife
como
chses 2

clases soportadas por el lenguaje.

Da 15

r
411

A'p-irtir de Java 1 1, usted poda definir una clase dentro de otra clase, como s. fuera un

mtodo o una variable. Estos tipos de clases se conocen como clases internas. El lisiado 15.4
contiene el npplcr Inner, el cual utiliza una clase interna llamada BlueButton |ra represen

P~|HSs..o limitado. Un el applc, !nnor dehiJo , '

tar botones selcccionables que tienen un fondo predeterminado de color azul.

El nombre de u

Listado 15.4. Texto completo de inner .java.

1:
2:
3:
4:

import

java.awt.Button;

import

java.awt.Color;

y componamjento complejo lo ms __," M'

'

'"" ^""^ Cxislc <W:' ""

tton "l> Cl""ic"c '"'"'* ^nl.u.

acjable es .mplemen.arla como clase interna.

^ol^^^Z,^^^0^:de la c)ase que ia comiene-

dase Blu.Button, e. nombre !Cu tT f T"' "" C' J


couiTon. cl

publie class Inner extends java.applet.Applet {


Button b1 = new Button("0ne");
BlueButton b2 = new BlueButton("Two");

5:
6:
7:

publie void init()

8:
9:

add(>1);

10:

add(b2);

11:

e deben incluir

el aPP,et

Inner. class e InnerS-

class BlueButton extends Button {

12:

BlueButton(String label)

13:

super(label);
this.setBackground(Color.blue);

14:

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.

. 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

ponen sus cdigos a dis-

Da 15

1412

Finalmente, aprendi a implementar interfaces y clases internas, dos estructuras de mucha


utilidad para disear una jerarqua de clases.

Semana 3

Preguntas y respuestas
P Utilizar mtodos de acceso en todas partes, no har ms lento mi cdigo de Java?
R No siempre. Conforme los compiladores de Java mejoren y puedanjerear ms opiiiniwiciones, estarn en posibilidad de hacer que los mtodos de acceso ^.-an automtica
mente rpidos, pero si est preocupado por la velocidad, siempre ejar en posibilidad
de declarar los mtodos de acceso como final y sern tan rpidos^como los accesos
directos a las variables de instancia.

P Se heredan los mtodos de clase (static) igual que los mtodos de instancia?
R No. -os mtodos estticos (de clase) ahora esln predetermmadosieomo final.
C.no, entonces, puede declarar un mtodo de clase no final? La respuesta es que no

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.

Circunstancias

excepcionales: manejo

de errores y la seguridad
g
Los
Los

Los prod
prognmudores de cualquier lcm-u-.i de errores, programas que nunca se de,"

cualquier situacin JeiegZ^


un esfuer20 J

esos programas no cxis.cn.

--iones

co

M anonrates

d 'aS b"enas inIC-

n yr

nan, d.spositivos de hardware que no

se imagine.

'" ?'' CSC""bi

^d ^^ ** ""*

/^

tiempo suficiente para


corruptos que no tienen ,a

^ "

tOne*lones dc red 4ue no fH1,c0.

solares, gremlins, lo que

l^\?\'

asad?

DUi 1G

14

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.


:

CUm Un e Status diferente a ,).

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

. 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

crear una estructura de instrucciones muy confusa, similar en funcionalidad a los blooues de
Java if . . . else y switch. para manejar los errores que se pudieran presentar.

Como un ejemplo, supona las instrucciones siguientes, que muestran la estructura de cmo
se podra cargar un archivo desde un disco. Cargar un archivo es algo que puede convenirse en
un problema debido a mltiples circunstancias: errores de disco, errores desarchivo no encon

trado, y otros similares. Si el programa necesita los datos de ese archivo para lunc.on.tr ade
cuadamente, dube tratar con cualquiera de esas circunstancias ames de continuar.
sla es la eslru:tura de una posible solucin:
int
if

status = loadTextfile();
(status

!= 1)

// na su;edido algo anormal, descrbalo

switch

(s

case
cas<
case

atus)

2:

// no se encontr el archivo
3:
// error de

disco

4:

II

archivo

corrupto

def;.ult:
//

otro

error

}
// arcr-ivo cargado,

contine con el programa

Las excepciones de Java


cometi un error en su cdigo

Da 16

I 416

Exception es

^Sc >'rde^
la ciase NuilPoi^erExcePtion

Otras excepdones ,aleS como Z0FJepl

cui-txceptionyMalformedURLEx

CeSn K explcita, por .os programas que escribe usted.


,:, u,-,ninn l!.n/.i.r".fs apropio, po..,.* >

;ir;i

c M, ,,,,,

-e decir "ha sucedido un error'

Precaucin

tratar con el--;-: -r^riemai incis


Figura 16.1

El ltimo grupo de excepciones es

'" que eSl SUcediel al

Ui jerarqua di' clusts

-ceden cuando us.ed leyeSndo

^ordrdas j

excepciones, y esa, exceones se


Paque,e java. io define una clase de

es extendida por otras clases en p^

(EOFException, FileNotFo
i

Tnrowab e ,icnc des subclases

imcrnos , d ambieme de la u,

mucho

plieda h,cer con ellos

de comunicaciones

dems pa.ue.es definen o.ras

de dases- Por Wlo. el

^Exceptxon, ,a cual no slo

de ^'la y salid.

Manejo de excepciones
que usan excepciones, el compilador

1418

Da 16

de Java obliga al manejo de esas excepciones; necesita manejar esas excepciones en su propio
cdigo, o simplemente no se va a compilar. En esta seccin aprender acerca de esa verifi
cacin de la consistencia y la forma de utilizar las plabras clave de lenguaje try, caten y
f inally, para manejar las excepciones que se puedan presentar.

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:

Exception

java.lang.InterruptedException

must be caught or it must be declared in the throws clause


of

this

metliod.

Qu quiere decir esto? En Java, un mtodo puede indicar los tipos de errores que podra lan
zar. Por ejemplo, los mtodos que leen desde archivos podran, potencialmente, lanzar errores

IOException, de manera que esos mtodos se declaran con un modificador especial que
indique errores potenciales. Cuando usted utiliza esos mtodos en sus propios programas de
Java, tiene que proteger su cdigo contra esas excepciones. La regla es impuesta por el mismo
compilador, de la misma forma en que el compilador hace verificaciones para estar seguro de
que usled est utilizando mtodos con el nmero correcto de argumentos y de que todos sus
tipos de variables concuerdan con lo que les est asignando.

Por qu tiene lugar esta verificacin? Hace que sus programas tengan menos probabilidades
de chocar con errores fatales porque usted sabe, de inmediato, el tipo de excepciones que

pueden ser lanzadas por los mtodos que utiliza un programa. Ya no tendr que leer cuida
dosamente la documentacin o el cdigo de un objeto que va a utilizar, para estar seguro de
que trat con todos los problemas potenciales. Java hace la verificacin por usled. Por otro
lado, si usted define sus mtodos de forma que indiquen las excepciones que pueden 'lanzar.
Java le puede decir a los usuarios de sus objetos que manejen esos errores.

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:

Proteger el cdigo que contiene el mtodo que podra lanzar una excepcin dentro de

try

} caThread-SIeePd000)

un bloque try.

Hacer una prueba y manejar una excepcin dentro de un bloque catch.

Influjos de W\ La

Da 16

1422

Listado 16.1. continuacin


13:

void readNumbers(int[]

14:

inticount = 6;

numArray)

int|lastNum = 8;

15:

try{

16:

while

17:

18:

'

19:

(count < numArray.length)

lastNum = numArray[count++];

{'

if (lastNum == -1)
return;

20:
21:

22:

finally

23:

{
System.out.println("Last

24:

25:

return;

number

read:

lastNum);

26:
27:

La salida de este programa es la siguiente:


First

array:

Last number read:


Second

Last

-1

'^

array:

number

read:

13

El bloque try. . . finally, en las lneas 16-24, hace que suceda algo anormal cuando se

llega a la instruccin return en la lnea 20. Cabra esperar que return hiciera que el mtodo
saliera inmediatamente.

Debido a que estn dentro de un bloque try. . .finally, las instrucciones dentro del bloque
finally se ejecutan sin que importe la forma de salida del bloque try. El texto "Last
number

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

idea bsica es que puede abrir una conexin con un archivo y usar el mtodo read () para

Dado que el alcance de las variables lcala

bloque extemo en e. que est e, Jo ue \t Z T?" "tCh *( ' ^-ce de,

obtener a.Os de l Esto puede causar vanas excepciones, como un error de d.sco, o un ,men-

to de er ms datos de los que contiene e. archivo. En cua.quiera de los dos casos, el mtodo
read()"-a una lOException la cual, si no .a captura, hara que c. programa devora su

""tas clusulas. En un bloque mltiple catch el l" hl "^ * "^ mUc las dls-

ejecutado. y el resto ser ignorado.

ejecucin o que se estrellara.

ntro de un bloque catch. Podra hacer la .impieza despus del erro, y vo.ver a algn esta
do de seguridad, arreglando .as cosas lo suficiente para que el programa pros.ga, o s, todo

que

P''

Wn recurso ex.erno que se haya adqu id

esto falla, guardar lo ms posible del estado actual del programa y sahr.

El siguiente ejemplo trata de leer de un archivo y atrapar los errores, en caso de que sucedan:

pnu ,xMr 1
de ese cod.go dentro de una panf opcio^i

S1* E

try. . .catch. . .finaliy:

u estruaurado un bloque

eso seria duplicar e, m.ismo cd.go en ^

ry while (numBytes <= mybuffer.length) {

'"lly. E) ejemplo ligu3Ille nos Les,

mylnputStream.reacl(myBuffer);

")_

try

10 Exception - only read + nu.By.es);

Tr3 I

closeTextfile();

Agrama uuHzando ,a .formacin parcia. que sac del arch.vo. o quiz desee dcsp.egar un

TJSL de ccpcioncs estn organizadas un una jerarqua y usted puede uuh.ar una su*

En realidad la instruccin finaliy es mil fucra ,. ,

para ejecutar un cdigo de limpieza d-spu de " eXCCpCI"CS; lumbi"

el ultimo caso, unlice una insLccin t"y ^

de la misma instruccin catch.

EOFException y FileNotFoundException. Atrapando lOException, tamben captura


instancias de cualquiera de las subclases lOException.

Qu pasa si usted quiere atrapar excepciones de ..pos muy diferentes que no es.n relaciona-

dos por herencia? Puede utilizar mltiples bloques catch para un solo try. as,:

Escriba
1:
2:
3:
4:

5:
6:

t rv i
II cdigo que puede generar excepciones

7:

\ catch (lOException e) {

8:

// maneja excepciones de entrada y salida

\ catch (ClassNotFoundException e2)

//maneja excepciones de clase no encontrada

v catch (interruptedException e3) {

// maneja excepciones de interrupcin

9:

10:
11:
12:

class Final {

intfj numi = { 12j 15j

intf]

10j 8j

_^ 7

= { 1. 5, 20, 8, 1, 13 );

an

P^ utilizar
co. Para

per sin la instruccin-catch

das. dondequiera que se espere unn suprelas, puede atrapar grupos de excepco.es dentro
Como un ejemplo, hay varios tipos diferentes de excepciones lOExc.ption tato como

-a cop,

} catch (lOException e) <

Aqu el "otro cdiao de limpieza" puede ser lo que usted quiera; puede seguiradelante con el

Los ejemplos que ha visto hasta aqu, atrapan un tipo especfico de excepcin Debido a que

esIra

ddc

readTextfilet);

// otro cdigo de limpieza

cuadro de dilogo que le permita al usuario seleccionar un archivo d.lcrcnic.

b'qUe CatCh cuc acuerde ser

La clusula finaliy

Al poner su mtodo read () dentro de un bloque try, podr manejar tranquilamente ese error

numBytes++;

in = new Finalf)-

System.out.println("First array ")

fin.readNumbersrin.numi)''
Systen,.oUt.println(SecOn<; array. ...
fln-'-eadNurabers(fin.num2);
''

Circur

[la -16

yer.length)

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 *

lratamicnto especia, porque pueden ocun r cn.cu.lqu,^

mylnputStream.read(myBuffer) '

numBytes;++

RuntimeException (o

"

...

'

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.

Nota

Desde luego que, si lo desea, tambin

NBta

ella. En

seccin aprender como lanzar excepciones.

esos errores y excepciones que se lanzan <

clusula throws, 9*'^"**^ excepciones que no sean de tiempo

throws y herencia

de ejecucin.

0
..

, -; ,,/.r r-nic'wi v son candidatos poten-

Todas las dems excepciones se aenomman ever/x ,^W< . .

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

Da 16

I 426

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

a su melod0,

'Coda excepcin licu dos lados: el que lanza la excepcin y el que la atrapa. Una excepcin
se puede lan/ar varias veces hacia varios mlodos mies de que la alrapen. pero a la larga ser
capturada y manejada.

Quin hace rcalmei|e el lanzamiento? De dnde vienen las excepciones? Muchas de las excep
ciones son lanzadas |kr la unidad de tiempo de ejecucin de Java o por mlodos dentro de las mis

mas clases. JJsied tafiibin puede lanzar cualquier excepcin estndar definida en la biblioteca de
clases de Java, o puede crear y lanzar sus propias excepciones. Esla seccin describe lodo eslo.

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

nis = new NotInServiceException();

s all de estas tres ].

Poner en sus

throw nis;

^^

class SunSpotException
Slo puede lanzar objetos que sean subclases de Throwable. Esto difiere de

Nula

las excepciones de C++, las cuales le permiten lanzar objetos de cualquier


tipo.

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

problema real con mayor detalle (lo cual puede ser muy til para propsitos de depuracin).
He aqu un ejemplo:
NotInServiceException()

nis

new

NotInServiceException("Exception:

throw nis;

Datbase

Not

in

Service"

Combine throws, try

y throw

~ las otras Cases. Las puede

Cm ' "an'a C" lras ^

Da 16

429

public void responsibUExceptionalMethodO throws iOException .{


MessageReader mr = new MessageReaderO;

try {
}

mr.loadHeader();

catch

(lOException e)

// coloque el cdigo que manejar


// la excepcin

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

Cundo no usar excepciones

como para no darle la oportunidad a un manejad*, que podra estar en el mtodo que IUu.
de manejada a su ve.,. De esta forma, las excepciones flotan todo el cam.no a lo argo

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

adobes se protegen'a s mismos de es.e desastre, atrapando .odas las excepciones cada

ve/, que ejecutan un applet, pero nunca se puede estar seguro. S, le es pos.blc amp.u una
excepcin y hacer algo inteligente con ella, hgalo.

Cundo usar excepciones y cundo no

Dado que lanzar, atrapar y declarar excepciones son concentos reh.c.onados y pueden llegar a
ser muy confusos, aqu damos un resumen rpido de cundo y que hacer.

Cundo usar excepciones


Si su mtodo llama a otro m-odo que contiene una clusula throws, usted puede hacer una
de tres cosas:

. 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


definicin de mtodo.

. Realizar los dos mtodos anteriores, atrapando la excepcin mediante catch y lanzn
dola de nuevo en forma explcita mediante throw.

En casos en los que un mtodo lanza ms de una excepcin, puede manejar cada una de ellas
!n Za disnma Por ejemplo, podra atrapar algunas de esas excepciones m.entras pernee
el paso de otras hacia la cadena que hace la llamada.

e su programa.Ls excep ,1- debe T

que estn fuero de su control.

e" CaS0S realmenle excepcionales.

- 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

aconsejable declarar un mtodo para que lncelo

lnVolut-r:'d;ls- No es

m. excepciones pueda ,anzar su m ,o o mTc "T' hmUChaS eXCCPCneS' >a ^

excepciones que tengan mZ^^d


T ^^ *"* U""2arla edare ^ '
Probab-I.dad de ocumr y qUe .engan sentido para el diseo

general de sus clases

Mal estilo al usar las excepciones


anad)r una clausu,a vaca catch o una instruccin tTows u D "'

apropiadas para hacer ambas cosas) deiar c-,er ,vn

^ *" '^

P P' me'd (y ^^ razoncs

Da 16

1430

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.

z.

Los errores delLmpilador referentes a las excepciones estn ah para recordarle que medite

sobre estos aspectos. Dse el tiempo suficiente para manejar las excepciones que pudieran
afectar su cdigo. Este cuidado extra le recompensar ampliamente cuando vuelva a utilizar
sus clases en proyectos futuros y en programas ms y ms grandes. Desde luego, la biblioteca

de clases de J-a se ha escrito con este grado de cuidado, y es una de las razones por las

#
*

cuales tiene lajfuerza suficiente para ser utilizada en la construccin de todos sus proyectos
en Java.

"nBS:""rt!-"P.. ~./cli,nt.t.1

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

otro de los navegado es qule da P' "^^^-a V en

cnico pero en la prctica significa lo siguiente: la seguridad de Java da por he.no que
alguien tratar de escribir applets maliciosos, de modo que se previene contra cualquier in.cn-

y Microsoft han presen Ido si

applet debe mp|ementar aa^^J mmento de escribir es,o. un

, ;,| respecto. En consecuencia, cualquier curaclcrsca del lenguaje que pudiera m usada

con abuso, ha sido bloqueada en los applets. Las caractersticas prohibidas son las siguientes

vaya a ejecuta, Por fortuna

omina uno de ,lte le ser

. Leer archivos del sistema en el que se esl ejecutando el applet.

"^ ^ * J*Va 2'

"ar en sus navegadores. "ej 1lsZ^" ^^ *' ^"^ *>*'*

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

. Conectarse a cualquier mquina distinta a la que entreg la pgina Web que contiene c;

ases llamadas permisos.

Lcr ndaa que pueda ser cai-

<* a no ser que la persOna que |os desam)JJe

applet.

. Desplegar una ventana que no incluya el aviso estndar "Ventana de un apple, de Java-

que el programador es confiable" "_ "' * * UUari PlSe a lravs de) Proc Para

java 2 permite que los applets realicen lodo lo que puede hacer cualquier aplicacin de Java, poro
slo si vienen de un proveedor de applets confiable y contienen la tirina digital para
verificar su autenticidad. Una firma digital es un archivo encriptado que acompaa a un pn -

grama, indicando exactamente de quin viene. El documento que representa esta firma d.g.i.'
gnatures

se llama certificado.

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

.R.

appiei s*utijj2

de Java

fishhead Software ofrece >

Imenie. esta capacidad no es

Da 16

1432

viable con un applet, ya que el acceso al disco es un no definitivo. Para que el juego se pueda
realizar, Fishhead debe firmar el applet digitalmente y permitir que el usuario lo establezca
ventaja de una firma djgital

como un programador confiable.


Este proceso consta de cinco pasos:

ase

1. Fishhead Software utiliza keytool, una herramienta que viene con el JDK, para crear
dos archivos encriptados denominados: clave pblica y clave privada. Juntas, estas
claves constituyen una,tarjeta de identificacin electrnica que identifica totalmente a la
compaa. Fishhead se asegura de que su clave privada est oculta a cualquier otra per
sona. Como una forma parcial de identificacin puede, y debe, poner su clave pblica a
disposicin de cualquiea.

2. Fishhead Software necesita alguien que pueda comprobar su identidad. Manda su clave
pblica y un archivo descriptivo acerca de Fishhead Software a un grupo independiente
en el que podran confiar los usuarios de Java, Sijnatures "R' Us.

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.

JJJ* estn clarante identificados. Hga

esta preguma, cumos esc

4. Fishhead crea un archivero de Java que contiene su applet de juego y todos los archivos
relacionados. Con una clave pblica, una clave privada y un certificado, Fishhead
Software ya puede utilizar la herramienta jar para firmar digitalmente el archivero.
5. Fishhead coloca cl archivero firmado en el sitio Web, jumo con las instrucciones para

:*^cuaiqui
p^^Zzl!;ZVe podra -quedar un poco """.
tennfcar* alguien. ,,cmo se puede u , T t ^^ MU en cnjumo para
un rasiro

F'shhead?

US'" ld 'w P"W'' sola, como idenhllcador de

^^^bTJ^ZI^IT^ZT-^ COrKSph^"le- Pino demifican

era, a,8uien ms podra pre,end r "lT*


- W su Cave privada. j
Cuando Signatures 'R'

^in Prmcipai es asegr;rq^:i

Dado que las cJaVes ppblicas se


se e
e pueden
pueden d
d

e' o We,
We, Como
Como par,e
par,e de
dee ssusu pp^
^

;sr

^"^ rea'menle a la

^^7
^^7 ^^
^^ ^
^ "
"< -

rarla conavca qu 1 , ' "' *?"* '"' ^ ^ eXa^M

esta Cav, pblica y compararla c


^su.u.o de clasificadores pa

- El cenmeado que se eLc


Lc est
est

'" --ave privad, dc Fis,lhcad.

^o '' t^t"*'
^puede
P"M^'>erau.sado^~,on
C'JVe Puhl<, el^
cual'" s|o

descargar su clave pblica.

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

pama independiente bien establecida.

^ *'

Ceni(1"c' vera de otra con,-

un navegador con soporte para Java 2.


Su proceso es ms fcil:

1. Gilbert se da cuenta de que no puede ejecutar el nuevo applet de juego de Fishhead. mu


antes establecer a la compaa como un programador confiable. Descarga la clave
pblica de Fishhead.

2. Despus de decidir que Fishhead es una organizacin confiable, Gilbert utiliza otra he
rramienta de seguridad del JDK, j arsigner, junto con la clave pblica de Fishhead.
para agregar a la compaa a su lista de programadores confiables.

Ahora, Gilbert puede jugar el applet de Fishhead con absoluta confianza. Dependiendo de

cmo estn establecidos los permisos dentro del applet, ste podra leer y escribir archivos >

abrir conexiones de red, as como otras cosas no muy seguras. Esto significa que el sistema

nttp://wvw.sun .com

Firmas especficas para navegador

Al momemo de cscrihir ,. . i-i

Par, ., prop,,,s . Si us^",^, *^""" * *O y l u

Da 16

134

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

a visin general de la

. Las siguiefiles herramienias del Microsoft Java Software Developiiicnt Kil:

w,,, , , ,

cabarc.efe, chktrust.exe, signcode.exe, y los archivos javasign.dll y


signer. di. Este kil est disponible descargndolo de Microsoft en:
http://vlw.microsoft.com/java/download.htiii.

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

Resumen
Hoy aprendi cmo Je avud

https://certs.netscape.com/client.html.

.' El software Netscape Signing Tool, el cual est disponible en la pgina Web

http://developer.netscape.com/software/signedobj/jarpack.html.Signr

Tool tiene una caracterstica para utilizar un certificado de prueba antes de darle la

si,, lJU, mi))l),.k. s, ^m.

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

Systems, ha recopilado un excelente recurso de firma para el cdigo Java


en la siguiente direccin Web:

e su

muxk> quc stc ^

Adems de la informaci

http://www.suitable.com/Doc_CodeSigning.shtn

J ambin aprendi Jas b

Polticas de seguridad

Antes de Java 2. haba la creencia implcita de que se deba confiar en todas las aplicacin^
y se les permita usar todas las caractersticas del lenguaje.

Para facilitar la creacin de aplicaciones ms limitadas, ahora las aplicaciones tienen que
pasar por el mismo escrutinio de seguridad de los applets.

norma,

na onm

appleI C0|)

Peguntas y respuestas

En la prctica general, esto no cambia la forma en que se escriben o ejecutan las aplica-

ciones- las que usted haya creado durante la lectura de este libro no deben encontrar mngun

error de secundad al ejecutarlas en su sistema. Esto ocurre porque el establecimiento de M

poltica dc"seguridad, durante la instalacin del JDK, es lo ms liberal posible permit.endok


todas las caractersticas disponibles a las aplicaciones.

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

ocuparan por e,,os. Las excepciones e ^7

norma, de, cdigo de Java, yPaunquc

^'

^ 7* * 'enera" 'X>' "' *iA

t ^^

Da 16

1436

cdigo cometida por el programador, y por lo tanto slo necesitan imprimir un error
para indicar esalequivocacin. Las excepciones que no son de liempo de ejecucin
(excepciones IOException, por ejemplo) son condiciones que, debido a su naturaleza,
deben ser manejadas explcitamente por cualquier cdigo robusto y bien desarrollado.

Semana 3

La biblioteca de clases de Java se ha escrito utilizando slo unas cuantas de stas, pero

son de extrema importancia para utilizar el sistema con seguridad y correccin. F.l com
pilador le ayuda a manejar estas excepciones apropiadamente, mediante la verificacin
y restricciones de throws.

>"

P Hay alguna forma de evitar las restricciones tan estrictas colocadas en los mto
dos por la clusula throws?

R S. Suponga que lo ha pensado durante mucho tiempo y ha decidido que necesita evitar
la restriccin. Casi nunca se presenta este caso porque la solucin correcta es regresar

y redisear sus mtodos para que muestren las excepciones que necesita lanzar. Sin
embargo, imagnese que por alguna razn una de las clases del sistema lo tiene amarrado
' con una "camisa de Cuera". Su primera solucin ser extender la clase RuntimeException

para hacer una nueva excepcin exenta. Ahora la puede lanzar porque la clusula

Da

throws que le estaba molestando no necesita incluir esta nueva excepcin. Si necesita
muchas excepciones de ese tipo, un enfoque elegante seria mezclar algunas nuevas interfaces de excepciones en sus nuevas clases Runtime. Usted est en libertad de escoger

cualquier subconjunto que quiera atrapar de estas nuevas interfaces (ninguna de las
excepciones normales de Runtime necesita ser atrapada), mientras que a cualquiera de
las excepciones sobrantes de Runtime se les permite ir a travs del. de otra forma
molesto, mtodo estndar en la biblioteca.

Mane; de datos a travs

ae /os flujos de Java

M;/';;^--

,,, ,,,. aum

Da 17

1438

439

Puede manejar todos los datos en la misma forma una vez que aprenda a trabajar con un flujo

de entrada, ya sea que venga de un disco, de Internet, o incluso de otro programa. Lo con

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

es I*

En Java,,lodos los datos se escriben y leen usando flujos. Los Mujas, ni igual que los cuerpos
de agua que eomp.inen el misino nombre, llevan algo de un lugar .1 olio.

Trmino Nuevo

'" ""'i-ieres individuales

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.

Como m

Hoy tratar con dos lipos diferentes de flujos: flujos de byles y flujos i\c caracteres. Los hylr\

un flujo

llevan culeros con valores que van desde 0 a 255. Hay una extensa variedad de datos que se

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

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

Sn fi""-

uso puede asociar un fh

elases java. io. sera til dar algunos pasos a travs del proceso de crear y utilizar flujos.

I'ara un flujo de entrada, el primer paso es crear un objeto que est asociado con la fuente- de
dalos. Por ejemplo, si la fuente es un archivo en su disco duro, se podra asociar un objeto
FilelnputStream con este archivo.

Ya que Icnga un objeto de flujo, podr leer informacin de ese flujo con alguno de los mto

dos del objeto. FilelnputStream incluye un mtodo read() que devuelve una lectura de
bytes desde el archivo.

dolasesto
suena confuso en lo h
siguien(es ^^

,0. ,e,u,: ,_

Da 17

1440

*
m

Flujos de bytes

Todos los flujos de bytes son una subclase de InputStream o OutputStream. Estas clases
son abstractas, de modo que no puede crcaMinJIujo creando objetos de estas clases directa
mente. En vez de eso, usted crea flujos a travs de una de sus subclases, como la siguiente:

FilelnputStream y FileOutputStream

int newByte = 0;

while (newByte !=' . u

Son flujos de bytcs guardados en archivos

de disco, CD-ROMs, o en otros dispositivos de almacenamiento.

DatalnputStreara y DataOutputStream Son flujos de bytcs en los que se pueden

newByte = df.readf)-

System-O"t.Print(newByte

);

Este ciclo lee todo el archivo referido por

leer datos como enteros y nmeros de punto flotante.

de un carcter de espacio. Tambin


vo. Usted se -'-

" '"

InputStream es la superclase de todos los flujos de entrada.

; ;

Flujos de archivo

entrada de archivo. El mtodo cise (, del ! T*

La aP''caci" ^Bytes del listado J7 , ....

de leer el ltimo by,e es.e arch.vo E

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

<ema, asociados con el archivo abierto

de almacenamiento a los que se pueda referir mediante una rula de carpeta y un nombre de

cada

>arecida pura lcer ""


^ Jbcrar '< ocursos del sis

archivo.

Usted puede enviar bytes a un flujo de salida de archivo y recibir bytes de un flujo de entrada

1:

2:

de archivo.

3:
4:

Flujos de entrada de archivo

5:

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

Despus de crear un flujo de entrada de archivo, podr leer byles desde el flujo llamando a su
mtodo read (). Este mtodo devuelve un entero que contiene el prximo byte (carcter) en

el flujo. Si el mtodo devuelve un -i, lo cual no es un valor de byte (carcter) posible, esio
significa que ya lleg al final de! flujo.

6:
7:

9:
10:
11:
12:
13:
14:

15:
16:
17:
16:
19:

int). Los argumentos de este mtodo son los siguientes:

20:

F.l elemento dentro del arreglo donde se debe guardar el primer byte de los datos.
.

publie class ReadBytes {

P->lJC.tl

FilelnputStream file =

8:

Para leer ms de un byte de dalos desde el flujo, llame a su mtodo rea(byte[), int,
Un arreglo de byles donde se guardarn los dalas.

import java.io.*;

int count = 0;

while (eofj

int input = fiie.read(,;

System.out.Print(input .

}f (input == -1)
else

eof = true;
count++;

file.closefj;

21:

22:
23:
24:

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

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

. Lneas 14 y 15 Mediante un ciclo, se circula a travs del arreglo data y se escribe

utStrea. que manejan ;, esplleos Je III-

tracin.

Filtros de bytes

cada elemento en el flujo del archivo.

. Linca 16 Se cierra el flujo de salida de archivo.

Despus de ejecutar este programa, puede desplegar el archivo pie. gif en cualquier nave

gador Wet o herramienta edT.ora de grficos. E, un archivo pequeo de imagen en formato


OH7, como el que se muestra en la figura 17.1.

Como un ejemP,o de ,o an.erior, imagine ,u) de ,s

lgU'en ie Presta un )bro y us,ed lo lee complco

Figura 17.1

El archivo pie. gif


(agranitado).

Flujos almacenados en bfer

Un flujo de emrada almacenado en bfer. Uena s,e con


jados, y cuando un programa necesita esos datos' busca
ongmal del flujo. Es.o es mucho ms efici

a recibir un libro pgina

qUe 1Od;iv:i " ha ^ nlancen Mfcr es il!linJ

Cn ei fl"J" va a rcm.S;,r los PSfuerZ,;

por milizario.

" -^i
Filtrado de un flujo

Flujos filtrados son los que modifican la informacin enviada a travs de un

nu/o ya existente. Se crean mediante las subclases FilterlnputStrea. o

FilterOutputStream.

que represema e Unlo y e 2\ nu f

disponible, devolver -i

'

Tambin puede utilizar el mtodo read(6yre/;

curad,, c cual carga los da,os de. nujo c un L

f'"al M u-> V h:'>

by.es ?

5.

Da 17

Un flujo de salida almacenado en bfer se crea con alguno de los dos constructores si-

10:

11:

guenles:

e,

12:

. BufferedOutputStreamf OutputStream) Crea un flujo de salida almacenado en

13:
14:

bfer para el objeto especfico OutputStream.

15:

. BufferedOutputStrean(OutputStream, int) Crea el flujo especfico

16:
17:

OutputStream almacenado en un bfer de tamao int.

18:

El mtodo rite (int) del flujo de salida se puede usar para enviar un solo by.e al flujo, y el

19:

mftodo writ.<ftyt./J. int, int, escribe mltiples by.es desde el arreglo de by.es pen

cado. Los argumentos para este mtodo son el arreglo de bytes. el punto de m.c,o del arreglo

21:

22:

y la cantidad de bytes que debe escribir.

23:

20:

24:

25:

26:

Aunque el mtodo write() toma un entero como entrada, el valor debera

Nota

27:

ser desde 0 a 255 Si usted especifica un nmero mayor que 255, sera guar

28:

cuando ejecute el proyecto que crear ms adelante en esta misma seccin.

30:

dado como el residuo del nmero dividido entre 256. Esto lo podr probar

29:

31:

class ArgStream {

int start = O;

int finish = 255;

ArBStrea(lnt st, int fin) /


start = st;

boolean wrlteStream) /

try {

34:

41:

java.io.*;

publie static void main(String[] arguments) {

5:

int

6:

int finish = 255;

7.
'i

;;

= 6;

if (argunents.length > 1) {
start = integer.parselnt(arguments[ej);

finish = integer.parselnt(arguments[1]);

P"on.

e.getMessage());

45:

46:
48:

51:

3: publie class BufferDemo {

System.out.println("Exception

return false;

44:

50:

2:

"tch (lOException e) {

43:

49:

start

return true;

42:

47:

4:

buff.cise();

40:

en bfer desde el archivo y vuelve a leer los bytes. El listado 17.3 conuene el cod.go fuente.

out =

System.out.'printf- + out).

38:

Despus de escribir en el archivo delex.o. Buf f erDe.o crea un Hujo de en.rada^

t;

39:

java BufferDemo 7 64

import

fUf!eredOutPtsf

35:

37:

en la siguiente instruccin:

1:

FileOutputStreamf-numbers.dat")
BufferedOutputStream buff = ne

33:

36:

En el proyecto siguien.e, la aplicacin Buf f erDe.o escribe una sene de by.es en un flujo
de salida almacenado en bfer, ociado con un archivo de texto. El pr.mero y e ulumo
enteros de la serie, estn especificados como dos argumentos de lnea de comandos, como

,tado 17.3. Texto computo de bufferdemo .java,

'

FileOutputStream file = new

32:

Cuando los datos se dirigen hacia un flujo almacenado en bfer. no sern enviados a su des,ino has.a que el flujo se llene o se llame al mtodo f lush() del flujo almacenado en bufer.

finish = fin;

52:
53:
54:
55:

56:
57:

58:

boolean readStream() {
try

FilelnputStrean file = new

FilelnputStream( "nunibers. dat"

BufferedlnputStream buff = " *


BufferedlnputStream(fiie)

int in = e;
do

in = buff.readM;

-T (in != -1)

Systera.out.print(" +in)

(in != -1);

'

Flujos de datos

Listado 17.3. continuacin


return

catch

true;

(IOException _,

System.out.println("Exception:

e.getMessage())

* puedan ,ccr o cscrili IJl^ lc , u " T


; byte, doubla, noat, C^^ "^ *" """
ri'ujod- ., ,

.C""S'r"CIOr0ataInPutStream(^/'"Sfreafli). Kl

un Hujo de entrada de archivo" ^"^ C'""'" "" ""^ ^ l"""'iul:i illlllilrt-":"1 ^


Por otra pane, un flujo de salida de da.os necesi,, ci ccns.ruc .or

O.t.OutptStr.,flUfpl/tSt/,M). t, cua|
Writing:
4 5 6 7
Reading:

6 7

10

11

12

13

8 9

18

11

12

13

de en,,-

readBoolean(),wrteBoolean(to0jean)

readByte(),writeByte(i/7eeer)

readDouble(),writeDouble(doWe)
readFloat(),writeFloat(fioar)

constructor ArgStream().

readlntf), writelnt(iV))

readLong(),writeLong(Jon5)
linca 16 para volver a leer esos bytes.

readShort(),writeShort(nr)

.....

o,,,

d.,

do read () se utiliza para recibir datos.

. Se cierra el flujo almacenado en bfer.

en Mte .

. Por ejemplo, el m.odo readFloat,, devuelve un valor f loat

Da 17

1450

los flujos de Java

Como una alternativa, puede esperar que una EOFException (excepcin de fin de archivo)

36:

sea lanzada cuando el mtodo de lectura alcance el final del flujo. El ciclo encargado de leerj

37:

for

38:

los dalos se puede encerrar en un bloque try, y la instruccin asociada caten slo debe

(checkNumber % i ==
return false;

39:

mnnejar objetos EOFException. Uamc :i cise () en el flujo y cuide otras tarcas ile limpieza

40:

dentro del bloque catch.

return true;

41:

42:

Esto queda demostrado en el prximo proyecto. Los listados 17.4 y 17.5 contienen dos pro

451

gramas que utilizan flujos de datos. La aplicacin WritePrimes escribe los primeros 400
nmeros primos como enteros, en un archivo llamado 400primes.dat. La aplicacin
ReadPrimeSslee los enteros de este archivo y los despliega.

Escriba
1:

Escroa
1:

2:

LisIado 17.4. Texto completo de writeprimes.java.

inporf

3:
4:

java.io.*;

3:

6:

class WritePrimes

publie static void main(String arguments[])

5:

int[]

6:

int

7:

numPrimes

candidato:

//

int candidate = 2;

9:

while

el nmero que podra ser primo

(numPrimes < 408)

if

11:

primes[numPrimes]

12:

numPrimes++;

11:

13:

14:

candidate;

15:

19:
20:

18:

// Escribe en el disco la salida

19:
20:

FileOutputStream file = new


File0utputStreamC468primes.dat");

21:

BufferedOutputStream
DataOutputStream

23:

while (true)

buff

data

> catch (EOFException eof) /


buff.close();

} catch (IOException e) {

22:
23:
24:

new

25:

= new

DataOutputStream(buff);

24:

25:

for (int i = 0;

26:

i++)

primos, se cscnbe,, en ,;,s ,,11CJ n

data.closef);

28:
30:

i < 480;

data.writelnt(primes[i));

27:
29:

System.out.print(in + '

21:

BufferedOutputStream(file);

22:

try

int in = data.readlnt();

18:

16:
try

DatalnputStream data = new


Datalnputstreain(buff};

17:

candidate++;

15:
17:

utStream buff = new

Bufferedlnputstrea
dl

16:

13:
14:

10:
12:

(isPrime(candidate))

ril!InPUtStre<"
ni<10<)P'i'"es

9:

0;

8:

FilelnputStream me = new

8:

primes = new int[480];

7:

10:

class ReadPrimes {

5:

2:
4:

import java.io.*;

catch

(IOException e)

System.out.println("Error

--

+ e.toStringO);

31:
32:

33:
34:

35:

publie static boolean isPrime(int checkNumber)


double root = Math.sqrt(checkNumber);

-' ** ^ -ociado con un arch.vo ,,aniado

de sa,ida a,macen;,do

asocia con ., flujo , ^

nuevo fluj0 de sa)ida

' II

=
FileReader("index-

'

;KK|,>s incluidos en

na ve. que tenga ""''^"^f^vo:1' ^ ^


, para leer la

gj slguiente caraciei c

^/e! nmero de
d
. re^cnarl, Z^;.,^^hmero
caracteres u leer.
to
inicial
md.cado
V
^.^ ^
el ponto inicial

de bytes. En vez
vez de
de ^
^
,e,eron. o devuelve-1M

.specficudo con
^

carac,rcs anus

, ^^^

^^^^ y

^.^ el bje,o

El mtodo siente carga un ar,v


despliega sus caracteres.

int

do {

inByte;

_ text.read0".

t,t

*.....?..-

*<

Da 17

1454

de Java

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

21:
22:

23:

8yt..,out.prlntln("Error -. + e.t
tb5tring());.

con el objeto especificado Reader, como FileReader.

. 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

readSTr,], int, int) descritos en FileReader. Puede leer una lnea de texto usando el

areljivo ReadSource3 Java"0""5 ^ e'l da: C' hjCI FileReatJer asociado w. el

de bfer se

mtodo readLine().

El mtodo readLine() devuelve un objeto String que con.iene la prxima lnea de texto

TC.* ncluiri carcter o caracteres que representan el fina, de una lnea. S, se llega

- - * dc entrad.,. c. ohJ,

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:

Cmo escribir archivos de texto

Un carcter de lnea nueva ('\n')

. Un carcter de retorno de carro ( ' \ r')

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

1 :

3:
4:

5:

7:

6:
8:
9:
10:
11:

#
#

publie class ReadSource {

publie static void .iiUStringl] arguments) {


try

FileReader file = new


FileReader("ReadSource.java

boolean eof = false;


while

eof

14:

else

15:

18:
19:

(!eof)

String line = buff.readLine()r


if (line == nuil)

13:

17:

);

BufferedReader buff = new


BufferedReader(file);

12:

16:

clases de escritura de flujos debe

java.io.*:

true;

System:out.println(line);

buff.cise();

} caten (IOException e)

para convenir enaceres de

Hay dos constructores Filewriter: FileWriter, ct

bolean). La cadena indica el nombre

* -o, e, aumento booiJno

import

de

Unicode en bytes.

la cual puede incluir una ruta para

Escriba
2:

,. aplicaciI1 ReadSource es e) a

,de,

write(ii7t) Escribe un carcicr.

con el punto de'into'y

Ircn " f " '


T""

" nujo de coraciere.


> -"- actual

4ue con las

455 i

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

Da 17

|458

459,
Listado 17.7. continuacin
cap.convert();

6:
7:
8:

9:
10:

11:

class AllCaps {
String

sourceName;

12:
13:

AllCaps (String sourceArg)


sourceName =

14:

sourceArg;

El nombre del archivo que se va a

15:

ejecutar AUCapsDemOi como en , j

16:
17:

void convert)
try

18:

20:

la lnea de comandos, al

avaAUCapsDemo TempFile. java

// crea objetos de archivo

19:
21:

Allc^^emo. java y darle un nombre

como TempFile. java.

File source = new File(sourceName);

File temp = new File("cap"

+ sourceName +

".tmp")

22:

23:

// crea flujos de entrada

24:

FileReader fr = new

Resumen

FileReader(source);

25:

BufferedReader

26:

in =

new

BufferedReader(fr);

27:

=---=

28:

29:

//

30:

FileWriter

crea flujos de salida


fw =

new

Filewriter(temp);

31:

BufferedWriter

32:

out

new

BufferedWriter(fw);

33:
34:
35:

boolean eof

36:

int

37:

do

inChar

=
=

false;
8;

38:

inChar = in.read();

39:

if (inChar != -1) {
char outChar = Character.toUpperCase(

40:

42:

else
eof

43:
44:

} while

45:

in.close();

46:

out.close();

true;

(!eof);

, t, ^ it

47:

48:

boolean deleted

49:

if

54:

caten

(IOException e)

SysteiJ!.out.println("Error

52:

53:

(deleted)
temp.renameTo(source);

56:
51:

(char)inChar

out.write(outChar);

41:

catch

(SecurityException se)

System.out.println("Error

{
-

, ^ e

*j

Ola 17

1442

-^!^l^il^ide ,os flujo.

Si usted ejecuta este programa, obtendr el siguiente mensaje de error:


Error

--

java.io.FileNotFoundException:

class.dat

lida de archivo

Este mensaje d error se ve como el tipo de excepciones generadas por el compilador, pero en
realidad viene del bloque caten en las lneas 21-23 de la aplicacin ReadBytes. La excep
cin es lanzadapor las'lneas 6 y 7, porque no se pudo encontrar el archivo class.dat.

Usted necesita|in archivo de bytes en el que pueda leer. ste puede ser cualquier archivo, una
eleccin adecuada es el archivo de clase del programa, el cual contiene las instrucciones del

cdigo de bylef ejecutado por la mquina virtual de Java. Cree este archivo haciendo una
copia de Readlytes.class y volviendo a nombrar la copia class.dat. No renombre el

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

.\

Los usuarios de UNIX pueden escribir lo siguiente en una lnea de comandos:


cp

ReadBytes.class

S:t:r rva ^

Con e, constructor Fiie0utPlJtStream(Sf


^ archivo oue agregue datos despudc^7' ^"^ *** " " "Jo de sa,id,

e -h,vo y e, argumeilt0 booJ^o ^ *J -chivo emente. La cadena' espec, c


sobreescnbTT cualquier
^ 'i8re;lr
i8re;lr dl
cualquier infi
informacin exi.s.en.e
dalos. veze de

archivo ReadBytes.class, o no estar en posibilidad de ejecutar el programa.


*

Tip

Tenga mucho cuidado aJ especificar w ,,-

rrarlo.
El mtodo write (byteI] i t

" d

este meIdo son el arrezo

class.dat

y'L cn el Jrcf"vo, uiilice el mtodo cise ()

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

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

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

0 8 0

7 0
0

53

12 0 9 0

13 0 60 0
93

Bytes

000

14

90

10 0

16 0 63 0

0 96 0

read:

0
21

97

22

17 0

0005000604070606010

11

0 23

10 0 67 0
0

22

12

18 0 71

122

0 49

13 0 55

14

0 5

19 0 83 0 20 0 90 0 1?

58

57

-1

1121

185, 285, 84
254, 105, 33

La cantidad de bytes desplegados en cada lnea depende de! ancho de la columna que pueda

ocupar el texlo en su sistema. El nmero de bytes que aparezca, depende del archivo

lJ

para crear class.dat.


oseo;

> catch (IOExc.ption e) /

yte..out.println(-Error - ^,

460

Da 17

Preguntas y respuestas

Semana

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

enteros en la misma fcrma que lo hace un programa de Java. Como recordar, todos los
programas se pueden representar como un byte individual, o como una serie de bytes.
En Java, un entero se representa utilizando cuatro bytes organizados en lo que se

conoce como un orden big-endian. Puede determinar el valor del entero combinando
los bytes de izquierda a derecha. Un programa en C implementado en una PC Iniel. es
probable que represente enteros en un orden little-endian. lo cual significa que los byies
deben arreglarse de derecha a izquierda para determinar el resultado. Para poder utilizar
un archivo de datos creado con un lenguaje de programacin distinto al de Javu. tendra
que aprender tcnicas avanzadas, como corrimiento de bits.

Da

Comunicacin a travs de

Internet

La biblioteca de clases de Java incluye el paquete java.net, que hace posible la

comun.cacn en una red con sus programas de Java. El paquele p oporcio a

abstracciones de p^aforma cruzada para operaciones simpes n2 2 ,,as I.

conexa y recuperacin de archivos por medio de pro.ocolos com 1 de w b

y la creacin de sockets bsicos tipo UNIX.

Si utilizamos este paquete conjuntamente con flujos de entra

escnb.r arch.vos en la red es tan c, como leer y escrib,

Da 18

1462

Hoy podr escribir algunas aplicaciones de Java para Web y aprender por qu es ms difcil
hacer lo mismo con un applet. Crear un programa que pueda cargar un .documento de Workl

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

Ejecutar su navecador en I-,

=r~ rr

Cargar sus archivos de clase

la mquina en que est corriendo el navegador, ni se pueden conectar a oros sistemas distin
tos al sistema en que fueron guardados originalmente. Aun con tales restricciones, usled
podr lograr mucho y sacar ventaja de Web para leer y procesar informacin en la Red.

-* - -

Esta seccin describe dos formas sencillas de comunicarse con oros sistemas de la Red:
getInputStream() es un mtodo que abre una conexin a un URL y le permite sacar
datos de esa conexin.

Las clases de socket, Socket y ServerSocket, que le permiten abrir conexiones


estndar de socket a liosts, y leer y escribir de esas conexiones.

Apertura de conexiones con Web

Para recuperar archivos de Web vav. i

w"^ aya a los mtodos y Jas ciases.

En vez de pedirle al navegador que slo cargue el contenido de un archivo, sera mejor sacar
proveera-del contenido de ese archivo para usarlo en su applel. Si el archivo que desea abrir
esl guardado en Web y se le puede accesar a travs de las formas ms comunes ilc URL

(htlp. F-TP y ms), su programa Java puede usar la clase URL para obtenerlo.
Por la/.ones de seguridad, los applels slo se pueden conectar al mismo dosis del que

provienen originalmente. Esto significa que s ha guardado sus applels en un sistema llumadn

www. pref ect. com, la nica mquina con la que su applet puede abrir una conexin ser con

ese mismo host. y con el mismo nombre, as que tenga mucho cuidado con los "alias". Si el
archivo que quiere recuperar el applet est en el mismo sistema, la forma ms fcil de obte
nerlo es mediante las conexiones URL.

Esta restriccin de seguridad cambiar su forma de escribir y probar applels que cargan

archivos a travs de sus URLs. Puesto que usted no ha manejado conexiones de red. le ha

::;:::;:r *> - > - * - * -

Da 18

1464

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

23:

GetFile frame = new GetFile O;

24:

25:

WindowListener 1 = new WindowAdapterO /


publie void windowClosing<windowEvent e) /

26:
27:

hace ms complejo.

System.exit(e);

28:

Este proceso es muy confuso, por eso es til seguir los pasos a travs de un programa que lo

29:
30:

molemente El siguiente es un ejemplo'de una aplicacin que utiliza la tcnica de los cuatro
pasos para ahrir una conexin con un sitio Web y leer un documento IITML. dundo el docu

32:

mento est totalmente cargado, se desplegar en un rea de texto.

33:

frane.addWindowListener(l); "

31:

frame. pack(-);

frame.setVisible(true);

34:

El listado 18.1 nos muestra el cdigo; la figura 18.1 nos da e. resultado de la lectura del

if (frame.runner == nuil) {

35:

frame.runner = new Thread(frame,;

36:

archivo.

frame.runner.start()i

37:
38:
39:

Figura 18.1
La aplicacin

40:

.TUlE-Ti.cH youh.Jv i .7 ir 21 D WTITlE

Ge t File.

EOOY 60C0L0R--f FFFf f UNfe'

41:

UN"-MI00r

publie void run()

42:

43:

.HJAUON*RtOKTWO 6S

BufferedReader data;'

44:

w,01H=11! HEKWfcJM B0R0E1M UOM.M-IMCK f

String line;

45:

StringBuffer buf = new StringBufferf)j

46:
47:

Listado 18.1. Texto completo de getfile.java.

conn = this.page.openConnectionf)-

48:

conn.connect();

49:
1 :
2 :

import
import

java.awt.*;
java.awt.event.*;

import

java.net.*;

52:

import

java.io.*;

53:

3
4

5
6

Thread

URL

12

page;

58:

try

18:

catch (IOException e)

59:

14

17:

box.setText(buf.toString());

57:

);

publie GetFile() {
super("Get File");
add(box);

16:

bf.appendfline + "\n");

56:

TextArea box = new TextArea("Gettmg text ...

13
15

box.setText("Reading data
')
while ((line = d.ta.re.dLine())'!= nuil, {

55:

runner;

)-

in = new InputStreamReaderfconn.getlputStreamM
)
data = new BufferedReader(in) r
"iream(j),

SU:

10
11

box.setTextC'Connection opened

50:
51:

i publie class GetFile extends Frame implements Runnable {

URLConnection coj^n = nuil;


InputStreamReader in;

60:

System.out.println(IO Error:" + e.getMessage());

61:

62:

{
page

new

"URL(-http://www.prefect.com/java21/index.html

catch (MalformedURLException e) {
System.out.println("Bad URL: "

);

+ page);

19:
26:
21:

22:

publie static void main(String[) arguments) {

e venZas d
V "ecib 7 T ^

y recibir entradas de usuario.

l proce-

Da 18

1466

El mtodo constructor GetFile(), de las lneas 11-20, establece el objelo URL y el rea de
lextoen que se lesplegar el documento. El URL en este ejemplo es http://www.pre-

Sockets

Puralasaplicacioncsdeconectividaddcredmisill.il.

fect.com/java2f1/ index.html, el cual constituye la pgina principal del sitio Web de l;i

versin en ingls lie este libro. Tambin podra ser cualquier otra pgina Web que usted

URLConnection (por ejemplo Mra n,m

quC frecon lu* cl;lscs URL V

-d ms oCnerale }P J;lv, Z2 r
Para ap'CaCOnes"* conectividad de
* ,S tcnicas de ^Z^^"* ~ un, abstrae

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,

InputStreamReader y BufferedReader. Adems, se crean dos objetos para guardar los

Nota

datos cuando lleguen: un String y un StringBuffer.

bajar con datagramas conulta1


* aParW- S tene int6rS en tra
documentacin de Java para el paquete

Las lneas 47 y 48 abren una conexin URL, la cual es necesaria para obtener un flujo de

j ava. net.

entrada desde esa conexin.

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

."">

connection . new Socket(nombreHost, nu.Puerto);

readLine() para leer una lnea de texto del flujo de entrada. Conforme van llegando, el lec
tor pone los caracteres en un bfer y los saca cuando se le pide.

Ll ciclo while, de la\ lneas 53-55, lee el documento Web lnea por linca anexando cada una
al objeto StringBuffer, que fue creado para guardar el texto de la pgina. Se utiliza un

bfer de cadena, en ve/, de una cadena, porque la cadena no se puede modificar de esa forma

en tiempo de ejecucin.

Una vez luidos lodos los dalos, la lnea 5b utiliza el mtodo toString( ) para convertir c\
bfer de cadena en una cadena simple, y pone el resultado en el rea de texto del programa.
I lay algo que debemos notar c.i este ejemplo, y es que la pane del cigo que abri la cone

BufferedlnputStream bis =

xin a la red, ley el archivo y cre una cadena, est rodeada por las instrucciones try y
catcli. Si ocurrieran errores durante la lectura o procesamiento dol archivo, estas instruc

ciones le permiten recuperarse de ellos sin anular lodo el programa. (Un este caso, el progra

ma saldra con un error porque, si la aplicacin no puede leer el archivo, no hay nada ms que
hacer.) El try y caten le dan la oportunidad de manejar los errores y recuperarse de ellos.
connection.closef);

Nota

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

la aplicacin se cierre correctamente cuando se cierre su ventana; durante el


da 21 aprender ms sobre "Manejo de eventos de usuario con Swing".

dlos en

"*" "'"" "'" !"""'

t.

Da 18

Para crear un socket de servidor y unirlo a un puerto, debe crear una nueva instancia de

^ T

ServerSocket con el nmero del puerto:

ServerSocket sConnection = new ServerSocket(8B88);

"-

Par, escuchar en ese puerto (y aceptar una conexin de clicn.es. si llegan a hacerse) utilice el
mtodo accept():
sConnection.accept();

Diseo del programa Trivia

Una vez hecha la conexin del socket. puede utilizar flujos de entrada y salida para leer de y

escribir al cliente.

En la prxima seccin, "Trivia: un socket simple tipo cliente-servidor", trabajar con algunos

ma que vige un puerto determinado, para las conex one

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

re Je diseo se ajusta a la n,ela original de las Cases par., socU-ts . i^

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-

e, fcn resumen, el servidor realiza las tareas siguientes:

1- Espera la conexin de un cliente.

merTun mecan.smo de encrip.acin como el SSL) o tener mluples implementacones de

2. Acepia la conexin del cliente.

sockets por cada unidad de tiempo de ejecuc.on de Java.

3. Enva una pregunta al azar.

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

4. Espera la respuesta del cliente.

5. Verifica la respuesta y notifica al cliente.

clase! de estas clases, que utilicen la .mplementacin predeterminada de sockets, o una de su

6. Le pregunta a! cuente si desea que le haga otra pregunta.

prop.a creacin. Esto permit posibilidades de red mucho ms flexibles.

7. Espera la respuesta del cliente.

Hay otras caractersticas nuevas que se han agregado al paquete java.net:

8. Repite el paso 3, en caso necesario

. Nuevas opciones para socke.s. basadas en las opciones BSD (por ejemplo. TCPJWDE
LAY

IP_MULTICAST_LOOP,

SO_BINDADDR).

. 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

b
sobre

' l-i -I>-Ma de. usuano y ten,,,,,:, !,,s ,, lillv:ls dcl t,icill, co,lsisU.n cl>.

xidad en
Java aqu
conexidad
en Java,
aqu est
est un
un ejemplo
ejemplo de
de un^gran
un^

de Java que utiliza las clases para socke.s para imp.ememar una apl.cac.n s.mple basada
la red, denominada Trivia.

Comunicacin a travs de Internet

Da 18

UtS-r W-ant^- ~- - - * ansWerS[num)

String inLine = is.readLine();


if (inLine.length() > 8) <
outLine = processInput(inLine);

State = WAITFORCONFIRM

break;

os.println(outLine);
os.flushf);

if

'

'

case WAITFORCONFIRM

(outLine.equals("Bye."))
break;

//

State = WAITFORANSWER;

limpia todo

os.ciosef);

else {

is.close();
clientSocket.closeO

catch

(Exception e)

outStr = "Bye.";
}

System.<?rr.println(" Exception:

'

state = WAITFORCLIENT;

break;

+ e);

e.printSt3CkTrace();

return outStr;

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

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
se hace evidente porque el servidor enva la cadena -Bye. V Entonces, el todo run()
limpia los flujos y el socket del cliente.

El mtodo processinput () mantiene el estado del servidor y maneja la lgica de todo el piuceso pregunta/respuesta. El cdigo fuente para processinput es el siguiente:
String processInput(String inStr)

String outStr = nuil;


switch

(state)

case WAITFORCLIENT:
//

hace una

pregunta

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

"se

prtguma!,.

re,p,,enas

,.neai

Da 18

de su respuesta en la lnea siguiente, la cual, a su vez, est seguida por la siguiente pregunta.

index++;

He aqu una lista del archivo QnA.txt:


start

What caused the craters on the moon?


meteorites
i
How far away f.s the moon (in miles)?

239000

93

How far away S.s the sun

catch (FileNotFoundException e, {

(in millions of miles)?

Is the Earth a perfect sphere?

quesUon

catch (IOException e) {

no

Wliat is the internal temperature of the Earth

?)S;em-err-P

(in degrees F)?

9000

error

trying

return false

El miodo initQnA() maneja el trabajo de leer las preguntas y respuestas del archivo
de texto, y su almacenamiento en arreglos de cadenas separados, como se muestra a conti

return true-

nuacin:
prvale

try

boolean

initQnA()

{
File

inFile = new File( "ClnA. txt");


FilelnputStream inStream = new FilelnputStream(inFile);

byte[)

- *-

ha(11

,,

data = new byte[ (int)inFile. length() ];

*. .

l|os;ir ;i|

lijBj

// lee las preguntas y respuestas en un arreglo de bytes

if

(inStream.read(data) <= 0) {
System.err.println("Error: couldn't

read questions

and

arguments)

answers");

serven, start M-

return false;

TriaServer() ;

// ve cuntos pares de preguntas/respuestas hay


for

(int

i = 0;
if

i < data.length;
(data[i)

==

numQuestions++;

numQuestions /= 2;
questions = new String[numQuestions];
answers

^^

i++)

(byte)' \n' )

new String[numQuestions;

Escriba
1 :

2:
3:

// coloca las preguntas y respuestas en arreglos de cadenas


int

start

boolean

for

= 0,

ndex = 0;

6:

i++)

if

if

(isQ)

questionsjindex] = new Stringfdata, start, i start D.


isQ = false;

7:

8:
9:
18:
11:

12:

else {

13:

answers(ndex) = new String(data, start, i - start -1);


isQ =

true;

import java.til.Randoro;

5:

isO = true;

(int i = 0; i < data.length;


(data[i) == (byte)'\n'J {

4:

import java.io.*;
import java.net.*;

pnvate StringfJ answers;

prvate ServerSocket serverSocket

P^vate int numQuestions-

Prvate int nUm = e

'

'

\\

Da 18

476

.Comunicacina travs de Internet

Listado 18.2 continuacin


15:
16:
17:
18:

19:

20:

24:
25:'

65:

caten (IOException e) {
System.err.println("Exception:

31:
32:

70:

couldn't crate sockef);

72:

73:

37:

38:
39:
40:
41:

44:
45:

46:
47:

52:

53:

56:

57:
58:

59:

if (outLine.equals("Bye "))

78:

break;

79:

public void run()

80:

81:

Socket clientSocket = nuil;

82:

// inicia los arreglos de preguntas y respuestas


if

(linitQnAO)

System.err.println("Error:

couldn't initialize questions

and answers");

// limpia todo

83:

os.close();

84:

is.close();

85:

clientSocket.closef)

86:
87:

return;

catch (Exception e) {

88:

Systeni.err.println("Exception-

89:

// busca clientes y hace preguntas de la trivia


while (true) {
// espera un cliente

if
try

94:

95:

clientSocket = serverSocket.accept();

catch (IOException e) {
Systei.err.println("Exception:

couldn't connect to

sockef);

97:

try {

W *
File inFile = new FileCQnA.txt");

99:
100:
101:

en un arre9ide bytes

102:

}
// ejecuta el procesamiento de pregunta/respuesta
{
InputStreawReader

96:

private boolean initQnA) i

98:

System.exit(i);

try

91:
93:

(serverSocket == nuil)

client

e-printStackTrace();

90:

92:

return;

54:

55:

os.fiush();

77:

server.start();

50:

51 :

os.println(outLine)-

76:

TriviaServer server = new TriviaServer();

48:
49:

outLine = processInput(inLine);

75:

public static void main(String[] arguments) {

42:

43:

if (inLine.length() > 0) {

74:

34:

36:

?' Salida a la entrada del usuario


ring nune = is.readUne()

71:

System.exit(i);

33r
35:

'

OS.flush();

69:

28:
30:

os.println(outLine);

68:

27:
29:

e1"8
" la SliCtud
e
processlnput(null)-

66:
67:

...");

6:

String outUne;

64:

serverSocket = new ServerSocket(PORTNUM);


System.out.println("TriviaServer up and running

= "ew PrintWriter(new

BufferedOUtputStream(clientSocket.8etOutPutStrea1(J,1

63:

public TriviaSorver() {
super("TriviaServer");
try

Buffl ,

62:

private Random rand = new Random();

22:
23:

60:

61:

private lnt state = WAITFORCLIENT;

21:

477

isr

new

InputStreanReader(clientSocket.getlnputStreain());

103:

104:
105:

return false;

I 470

't

Dla 18

471

1. Conectarse con el servidor.

2.

Esperar una pregunta.

3.

Desplegar la pregunta y aceptar una respuesta.

4.

Enviar la respuesta al servidor.

5.

caten (IOException e) {
System.err.Drintin/c

?r^Un( Exception: couldn't crate- socket-",;

Esperar una contestacin del servidor.

6.

Desplegar lafconlestacin y pedirle al usuario que confirme si desea otra pregunta.

7.

Enviar la respuesta del usuario.

r()

- :::

publie void run() {

8. Volver al pa|o 2, en caso necesario.

Socket clientsocket = nuil;

Triylltm.r

^'

Implementacin del servidor Trivia


respuestas

F.l corazn del ejemplo Trivia csi en el servidor. El programa del servidor Trivia se llama
TriviaServer. Las variables de instancia definidas en la clase TriviaServer son:
private

static final

int

private

static final

int WAITFORCLIENT =

PORTNUM =

1234;
0;

private

static final

int WAITFORANSWER =

1;

private

static final int WAITFORCONFIRM = 2;

private StringM questions;


private

String[]

""">

answers;

private ServerSocket

.,,

espera a un cliente

if (serverSocket == nuil)

serverSocket;

private

int numQuestions;

prvate

int

num = 0;

prvate

int

state = WAITFORCLIENT;

try

>

private Random rand = new Random();

return-

ClentSock = serverSocket.accept,,;

catch (IOException e) {

Todas las variables WAITFORCLIENT, WAITFORANSWER y WAITFORCONFIRM son constantes

kW oslado i|iie definen los diferentes estados del servidor; en un momento m.i.s \cr.i oslas
constantes en accin. Las variables de pregunta y respuesta son arreglos de cadenas que se

socket");

SySt

connecr

System.exit(i);

ulili/an para guardar las presuntas y sus respuestas correspondientes. La variable de instancia

serverSocket mantiene la conexin con el socket del servidor. Para guardar el nmero lolal
de preguntas se utiliza numQuestions, en tamo que num es el nmero de las preguntas

^ P-nto de PregUnta/resPuesta

hechas. L; variable state contiene el estado actual del servidor, como est detmido por las
lies constanles de estado (WAITFORCLIENT, WAITFORANSWER y WAITFORCONFIRM). Finalmente,
la variable rand se utiliza para escoger preguntas al azar.

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

System.out.println("TriviaServer

up

and

running

...");

entrada del

usuari0

.v.!,i.\;-;'P

Da 18

|478

Listado 18.2 continuacin


106:
107:

149:

109:
110:

111:
112:
113:

151:

for (int i = 0; i < data.len'gth; i++)


if

108:

(data[i]

==

153:

numQuestions++;

// coloca las preguntas y respuestas en arreglos de

115:

int start = 0,

116:

boolean

117:

if

118:

i < data.length;

if

120:

(byte)'\n')

(isQ) {
questions[index]

start

i++)

163:

else

166:

124:

start

125:

isQ

126:

index++;

131 :
132:

170:

true;

start = i + 1;

174:

(FileNotFoundException e)

System.err.println("Exception:

136:

catch

(lOException e)

System.err.printlnC'Exception:

return

144:

String processlnput(String inStr)

147:

148:

Implementacin del cliente Trivia

String outStr = nuil;

mtodo dennido en

145:

146:

1/0 error trying to read

de los eventos de
clie_n,e se llama

true;

141:

143:

^'^ "mo una aplicacin de ,a Un

comandos. Ta, ve

139:

142:

178:

return false;

138:
140:

177:

return false;

questions");
137:

break;

}
return outStr;

176:

couldn't find the question

"Bye."j

state = WAITFORCLIENT;

175:

catch

outStr =

172:

173:

134:

135:

else

171:
i

file");
133:

169:

1);

129:
130:

outStr = questionsnuml;
State = WAITFORANSWER;

168:

start,

127:
128:

:ztZ,;,r

167:

= new String(data,

' '

165:

1);

answers[index]

(.y/nr;

case WAITFORCONFIRM

164:

start,

122:

123:

break;

162:

isQ = false;

121:

state = WAITFORCONFIRM;

161:

= new String(data,

Want anotner?

". Want another? (y/n)"-

160:

true;

(data[i] ==

119:

159:

ndex = 0;

(int i = 0;

strequ"r

158:

cadenas

for

// verifica la respuesta

156:
157:

114:

'

case WAITFORANSWER:

154:

155:

answers = new String[numQuestions];

isQ =

break;

152:

(byte)'\n')

numQuestions /= 2;
questions = new String[numQuestions];

//

outStr = questionstnumj;
state = WAITFORANSWER-

150:

// ve cuntos pares de preguntas/respuestas hay

switch

(state)

case WAITFOHCLIENT:
//

hace

una

pregunta

ncluveene, Ido 8

""" h"C "^ '-" '

;isc Trivia m

de.

""d ^^ T:""b' **y un ,1o

Da 18

480

481

Listado 18.3. Texto completo de thivia.java.

47:

System.out.println(-ciienf " + ,tPl.

46:
1:

import

java.io.*;

49:

2:

import

java.net.*;

50:

5:
6:
7:

8:

public class Trivia {

prvate static final int PORTNUM =

public static void roain(String[]

52:

1234;

arguments)

InputStreamReader isr = nuil;

57:

58:

11:

PrintWriter out = nuil;

59:

12:

String

60:

13:

in

nuil;

address;

14:

// verifica la direccin del host en los argumentos de Ja


//

lnea de comandos

15:

if

(arguments.length != 1) {
System.out.println("Usage:

16:

21:
22:

//
try

24:

27:
29:

3e:

PORTNUM);

new lnputStreamReader(socket.getInputStream());

caten {lOException e) {
System.err.println("Exception:

31:

socket "
+ e.getMessageO);

32:

System.exit(i);

couldn't

crate

stream

35:

// procesa la entrada del usuario y las respuestas del servidor

36:

try

37:

StringBuffer str = new StringBuffer(128);

38:

String inStr;

39:

int

40:

41:
42:
43:
44:

45:
46:

?f

o. iDe ah e, argumenl0

lgn can.

c;

while ((inStr = in.readLine())


System.out.println("Server:
if

!= nuil)
"

+ inStr);

(inStr.equals("Bye."))
break;

while ((c = System.in.read())


str.append((char)c);

En algunos sistema operativos puede oroh

correr el servidor Trivia

el nomore de dorninio

33:
34:

T ? "'" aplk"M'>n de J:'Vi' y n0


V" C' PP'e'; " hl>' U"

in = new BufferedReader(isr);
out = new PrintWriter(socket.getOutputStream(),true);

26:

28:

socket = new Socket(address,


isr =

25:

del cliente, tiene que codificar 3

^ coudos. S cod a

inicializa el socket y los flujos


{

el ^ Ce ,fmM

rvidor predeterminado, por lo que uZ e

address = arguments[0];

23:

^1^

^ applct, no basta conectarse de nuevo con el s

else

20:

y.t....rr.prlBtln(.I/0 error; -+ e.tostring()).

* con,

18:
19:

61:

catch (lOException e) {

java Trivia <address>");

return;

17:

in.close();
socket.cise();

55:

BufferedReader

9:

out.close();

56:

10:

9
m

// limpia todo

53:

54:

Socket socket = nuil;

''

str.setLength(e);

51:

3:
4:

out.println(str.tostringo)';

out.flush();

!=

'\n')

hadend

:-

>

Da 18

1482

Comuna.,<,, .,

Hoy hemos aprendido a utilizar URLs y conexiones URL, jumo con flujos de entrada para

Trivia en accin
Al igual i|iic en fortune, el servidor Trivia debe estar en ejecucin par;i que el cliente
pueda trabajar, fara iniciar todo, primero debe ejecutar el servidor por medio del intrprete de

Java, listo se hale desde una lnea de comandos como sta:

sacar informacin desde Web y meterla en sus programas.

Tambin aprendi a escribir programas cliente-servidor en Java y la forma en que un para

ma scmdor se sita en un puerto de Internet, esperando un cliente que haga contacto con*I.

java TriviaServer

El cliente Trivia tambin se ejecuta desde una lnea de comandos, pero debe especificar la
direccin de un servidor como nico argumento. El siguiente es un ejemplo de cmo ejecutar
el cliente Trivia y conectarse al servidor localhost:
java Trivia

"localhost"

httP=//www. blah.com/cgi-bin/myscript7f oo=Ubar=2&narae=Laura

"127.0.6.1"

Despus de ejecuiar el cliente Trivia y responder algunas preguntas, el resultado que debe
ver es similar :t ste:

Server: What is the internal temperature of the Earth (in degrer


F)?

Client:

Wrong,

Client:

Client:

93

Client:

Server:

Server:

the correct answer is 9800. Want anolher?

(y/n)

the correct answer is no. Want another?

What is the internal temperature of the Earth

(y/n)
(in degrees

F)?
Client:

9008

Client:

Server:

Bye.

Server: That's correct! Want another?

para imitar un formulario, obtener la entrada del usuario y construir un nuevo obje.o

URL con los datos incluidos al final: despus, slo pase ese URL al nave-ador por
mJio de getAppletContext(). showDocument () y ste enviar los restados del

I' Cmo puedo hacer envos de formularios con POST?

K Tiene que imitar lo que hace lu navegador para enviar formularios por medio de POST.

Is the Earth a perfect sphere?

Server: Wrong,

Puesto que la informacin est codificada en el URL. puede escribir un applet de Java

formulario. Es todo loque necesita para formularios simples.

meteorites

Server:

Los formularios HTML se pueden enviar de dos maneras: mediante la solicitud GET o

POST. Si usa GET, la informacin se codificar en el URL, algo as como:

El comando es el siguiente:

5AUJJA

I* Cmo puedo imitar el envo de .... formulario HTML cu un :,,,>le di- Java?
R En realidad, los ppiets dificultan esto. La mejor manera (y la ms fcil) es utilizar la
notacin GET para hacer que el navegado,-enve la informacin del formulario.

Tambin puede tratar de ejecutarlo con la dileccin 1P que representa el pueno "localhost".

java Trivia

Preguntas y respuestas

Abra un sockel en el servidor y enve los dalos, lo cual se ve como lo siguiente, (l-l fr
malo exacto est determinado por el protocolo HTTP; eslo slo es un subcon.junlo.)

POST /cgi-bin/mailto.cgi HTTP/1.0

Contentype: application/xwww-formuriencoded

Content-lengtn: 36
(y/n)

Resumen
La.concctividad de redes tiene muchos que usted puede aprovechar en sus propias aplica
ciones. (Juiz mi se ha dado cuenta, pero el proyecto GetFile l'ue un navegador Web rudi

mentario. Captur una pgina de texto de Web y la despleg en un programa de Java. Desde
luego que la colocacin de HTML es lo que convirti un cmulo de diquelas en una pagina
Web real. Sun escribi todo un navegador Web en Java: Hoava.

{sus datos codificados van aqu}

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

Semana

Da

19

JavaBeans y otras
caractersticas avanzadas
TJZkTJT
T quen rpid0
Java-esnuevafcilversin
semirsedelaber^uajeL
la gran cam.dad de clases
ofrece como
Sun. Cada

consto caractersticas avanzadas como JavaBeans, JavaDatubase Cornee i vi,y y

procesamiento de imgenes 2D.

unnecm iiy y

Por fortuna, para estar en posibilidad de crear programas tiles no tiene que domi

nar todas las panes de la biblioteca estndar de clases de Java. Puede enocar 7

atencn en los paquetes y clases necesarios en su rea de inters, y ampIar sus

conocamos hacia nuevas reas conforme las vaya necesitando.

Hoy le presentaremos algunas de las caractersticas avanzadas que se ofrecen en hs

as recentes ediciones de Java, incluyendo l,s siguientes:

Jiiviillriins.

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

""<>""> * <lcsnrro,,o c' et 's e m

datos1 y comunificin entre un applct y el navegador.

'ii

" "'" dc"m"lado' * seleccionad

JavaBeans

Una tendencia creciente eivelxampo del desarrollo de software es la idea de componentes reutiliwihles: elementos de un pmgrama que se pueden utilizar con ms de tui paquele de soltware.
Trmino Nuevo

Un componente de software es una pieza aislada en una estructura separada, leil-

::.Trr

nij-nu- ivulilizahle.

Si desarrolla partes de un programa de forma que sean independientes, sera posible ensam

>

<

blar esos componentes en programas con un desarrollo mucho ms eficiente, lista idea de
volver a utilizar software cuidadosamente empaquetado se lom prestada, hasta cierto punto,

de la ide i de las lneas de ensamble tan popular en Eslados Unidos durante la Revolucin
Industrial, mucho ames deia era moderna de la computacin. La idea, tal como se aplica al
software es fabricar componentes pequeos y reulizables una sola vez. y volverlos a usar

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.

El objetivo de JavaBeans

- Na a.np.in.d de huJJ^u^ Z " TfK"V


"^
* ^ Cn<K<"
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

; r; ;is;idos-cn

Rededor
'an>bin tiene el efec

. 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

sus applcs de j!na

la dependencia de ActiveX del cdigo Windows de 32 bits, todava est por


plataforma.

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

especficas

vlcXi
"" n!?O r'"1S ll bcnefit'ilis '^''"^ aplicables a
c ensiR.is un, imponamcs de Java, aunque poco mencina

verse la forma en que Microsoft resolver el tema de la dependencia de

Algunas tecnologas de componentes tambin sufren por haber sido desarrolladas en un

''"

le clases, lo cual pcrmile la inleraccin


integrar en

lado un sistema en el que los objelos se


>nar sus ornees o iiisloria de desarrollo. Es!e mecanismo

necesario en cualquier arquitectura TZ^^^ *'^ * "" ^'l

s S!,ir' r^;"rs"eictia
de ia ^^^ * *, es ,a ,,,,.
' \''P'""' '' ie "" nbJe|0 para guardar y recuperar su csiado

interno. En JavaBe-mt i>


ns.

pers.stenca se maneja en frlna autom|c;, po,. ,)lct(j() ^ ^.^

Da 19

1488

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.

lin JavaBeans la computacin distribuida se lia resumido limpiamente para mantener las cusas

de JavaBeans que rea.icen algnI Z2n ^T^ """^

nenes. De esta manera. JavaBe su ,Z^ f"" " ^^ ^

-^invisibies-todo eii d * -r::rJ;lva Mta

Trmino Nuevo

botones y mens, esto le PLce


neme es simP,ememe un PZgma
r visible. Un buen ejemplo esTncZn

de empo a intervalos espejeos Est0 c

componentes de JavaBeans.

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

*' AWT Cm

"

"***" *

X2e ^

siten soporte distribuido. La meta final en el diseo de JavaBeans tiene que ver con los lemas
de tiempo de diseo y la forma en que los programadores construyen aplicaciones utilizando

ue no tenga una sa,,da vis,

desarro.,0 de componen^, ~ ^^

ajustadas, sin dejar de ofrecer una amplia gama de opciones a los programadores que nece

sus propias interfaces y proporcionan ln n ,Jd

Parama, Ms an. pu.d! " , ' "**""

"Pi-ein sin tener qL escrib, J Z

- * -,bi,,dad y

IBCUente ** W c?C' reqUS' ^ecr *

' el * * tos

- o, de

componentes muestran
-, .ener que

La API de JavaBeans

u OCX. De esta forma, los programadores especifican cmo se van a utilizar y manipular los
componentes en un entorno de desarrollo.

Cmo se relacionan JavaBeans y Java

"da la funcionalidad

estndar de clases de Java

conjunto de AP,,

sta de los

Aunque la naturaleza orientada a objetos de Java proporciona los medios para que los objetos
trabajen en conjunto, hay reglas o estndares que gobiernan la forma en que se conduce esta
interaccin. Estos tipos de reglas son necesarios para obtener soluciones robustas para los
componentes de software, y estn disponibles a travs de JavaBeans.

JavaBeans especifica un amplio conjunto de mecanismos para la interaccin entre los objetos,
junio con acciones comunes de soporte necesarias para la mayora de los objetos, como la
persistencia y el manejo de eventos.

Combinacin de in.erfaces grficas de usuario


Persistencia
* 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

forma de pequeas APls dentro de la API de Zu^n^^ ^''^ ** mPtemenla

reusabilidad de los componentes del AWT de Java, como los botones.

Da 19

1490

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

Las-especincaciones de JavlBeans estn dispon.bfes en el sitio Web * Java:


\

http://www.sun.com

proporcionada por l componente. Las APls de combinacin de imerfaz permiten que los
componentes acrecen caractersticas al men y a la barra de herramientas del documento
del contenedor. Taijibin definen el mecanismo que facilita el diseo de la interlaz entre los

componentes y sus|contenedores.
Las APls de persistencia especifican el mecanismo por el cual se pueden guardar y recuper

Trucos con applets


TTrmino Nuevo

navegador Web que indica (entre otns inf


^ S la |wnc llcl
seccin ,e ensear a logra " 2 , """"T""0 " "ud hi'*""'" * ,do. ,,,

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

10 LtcU0 > olus "'"'^s-populares ele applcls.

El mtodo showstatus()

libertad de disear soluciones de persistencia ms elaboradas.

ElmtodoshowStatuso delaclase

Las APIs de manejo de eventos especifican una arquitectura que define la forma en que interactan los componentes entre s. El AWT de Java incluye un poderoso modelo para manejar
eventos, el cual sirve de base para las APIs que manejan los eventos de los componentes,

Este mtodo puede ser llamado con una instruccin como ,a sigu.ente-

listas APls son muy importantes para darle a los componentes la libertad tic interaciuar entre
ellos de manera consistente.

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

Informacin del applet

nivel en que se utilizan. Por ejemplo, las APls de introspeccin de bajo nivel le permiten a las
herramientas de desarrollo el acceso directo a las paites internas del componente, la cual es

una funcin que usted no querra en manos de los usuarios. Esto le lleva a las APIs de nivel

:M 1

proporciona, i

superior. stas utilizan a las APIs de nivel inferior para determinar qu panes del componente

cin.

se han de exportar para ser modificadas por el usuario, de modo que aunque las herramienta*de desarrollo utilicen ambas APIs. slo utilizarn las APIs de nivel superior cuando propor
cionen informacin del componente al usuario.

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

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.

publie String getAppietInfo() {

return "GetRaven Copyright 1998 Laura Lemay";

Creacin de vnculos dentro de los applets

Puesto que los apple.s se ejecutan dentro de los n,adows Web

la capacidad de ese navegador para cargnr nuevas ^ W*v, T

para decirle a, navegador que cargue una pahu n et UnTd

i .,

'

"

T" mW:in'S"U>

r::rera
::r crear----- ^:;t:~;:l

1492

Da 19,

'

4931

Crear una nueva instancia de la clase UfiL para vincularla a una pgina nueva, aunque aqu es
mucho ms fcil trabajar con esa instancia que en el proyecto de ayer.
Para crear un nuevo objeto URL, utilice uno de estos cuatro distintos constructores:

Figura 19.1

El applet B'ittonLink.

BMS

URL(String) crea un objeto URL desde una direccin completa de Web, tal como:
;

http://www.prefect.com/java21 oftp://ftp.netscape.com.

URL(URL,

String) crea un objeto URL con una direccin base proporcionada por el

URL especificado y una ruta relativa dada por String. Utilice getDocumentBase()

para el URL de la pgina que contiene su applet, o getCodeBase () para el URL del
archivo de clase de su applet. La ruta relativa se aadir a la direccin base.
URL {String, String, int, String) crea un nuevo objeto URL, con un protocolo
(como http, o ftp), el nombre de host (como www. pref ect. com o ftp. netcom. cora),

dores. Cuando lo compHe con la herrn


9 ""* amp' de
aviso de desaprobacin.
he"ai"'* Javac d.i JDK, .2. r ecibir

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

un

puerto.

Al utilizar el constructor URL (String), tendr que tratar con objetos

MalformedURLException. Podra usar un bloque try.. .caten como se muestra a conti


nuacin:

try {
theURL = new URL("http://www.mcp.com );
} catch (MalformedURLException e) {
System.out.println("Bad URL: " + theURL);

Una vez obtenido un objeto URL, todo lo que tiene que hacer es pasarlo al navegador, con lo
que el navegador cargar esa direccin:
getAppletContextO .showDocument (theURL);

El navegador que contiene el applet de Java con este cdigo, cargar y desplegar el docu

4:

5:

6:
7:
8:

publie volt) init() {

"http://www. prefect.com/java2r)

bLi$t[2J- new BookmarkCJavaSoff


nttp://java.sun.com");

mento en ese URL.

El listado 19.1 contiene dos clases: ButtonLink y una clase de ayuda llamada Bookmark. El
applet ButtonLink despliega tres botones que representan posiciones importantes en Web;

los botones se nuestran en la figura 19.1. Haciendo clic en los botones, se carga el documen
to de las posiciones a las que se refieren los botones.

publie boolean action(Event .*, Ofject arg,


if (evt.target instanceof Button) /
linkTof (String)arg );

return true;

else return false;

ft

Da 19

1494

Listado 19.1 continuacin


28:

29:
30:

Comunicacin entre applets

Habr veces en que desee tener una pein. HTMl

tiene que hacer es repetir varias veces I

void|linkTo(String ame) {
IJRL theURL = nuil;

31:
32:

33:

|6r

(int

if (ame.equals(bmList[i].ame))

34:

if

36:

(theURL

37:

i = 0;

i< bmList.length;

i++)

{.

'*.* de su ap ,,".,,

"

C" Va

S aPP'C'S- '^ CSI' 'd il)

theURL = bmList[i].url;

35:

495

applei

!= nuil)

getAppletContext().showDocument(theURL);

38:

39:
40:
41:

class

Bookmark

42:

String

43;

URL

rr~

ame;

dores y entornos * TJlT* " ^'^ S69n los diversos

url;

44:

45:

Bookmark(String ame,

46:

this.name

47:

try

48:
49:

50:

String theURL)

ame;

this.url = new URL(theURL);


}

catch

(MalformedURLException

e)

System.out.println("Bad URL:

"

+ theURL);

51:
52:

53:

Este upplet se puede probar con e! siguiente HTML:


<APPLET CODE="ButtonLink.class"

HEIGHT=120 WIDTH=240>

</APPLET>

Hay dos clases que constituyen a este applet: la primera, ButtonLink, implementa el applet

un ciclo for que se parece a

actual, la segunda, Bookmark, es una clase que representa un marcador. Los marcadores
tienen dos parles: un nombre y un URL.

Este applet en particular crea tres instancias de marcadores (h'neas S-13) y las guarda en un
arreglo de marcadores. El applet se puede modificar fcilmente para que acepte marcador
como parmetros de un archivo HTML. Para cada marcador, se crea un botn cuya etiqueta
es el valor del nombre del marcador.

Al presionar los botones se llama al mtodo linkTo(). ste, tal como se define en las linea
30-38, extrae del evento el nombre del botn, lo utiliza para ver el URL del objeto Bkai
y le dice al navegador que cargue el URL nombrado por ese marcador.

Enumeration en tumo Nol


< ,
de la clase llZt'a ** "f" 1C
otro appie.) n cel co T aP'

apple,
;..'a clase MyAppletSubclass).
"" "*' ""* ^
p (e
(en Le
esle ca
cas.

conQCCCSO
una-de
ios
;l cada e'cmento dl

nion es una instancia


e de su

Dia 19

496

a un mtodo en un applet especfico, es. un poco ms compcado.Para hacer es.o

nombre a sus app.ets y luego refirase a ello, por nombre dentro de. cuerpo de.

pegarlo entre campos y reas de lexiol Pd

datos de un componente a otro

cdigo de ese applet.

^ * pudieran tr;"ltifa

Para darle nombre a un applet, utilice el atributo^AME para <APPLET> en su archivo HTML:

<p>This applet sends information:

<APPLET COOE-'Mypplet.class" WIOTH-iee HEIGHT-15


NAME="sender">
</APPLET>

<p>This applet receives information from the sender:


<APPLET CODE="MyApplet.Class" WIDTH=100 HEIGHT=150

Creacin de objetos transferidles

NAME="receiver ">

</APPLET>

Para referirse a otro applet en la misma pgina, use el mtodo getApplet () del contexto del
apoto con el nombre de ese applet. Esto le da una referencia para el applet de ese nombre.
Entonces se podr referir a ese applet como si fuera otro objeto: llamar a mtodos, establecer
sus variables de instancia y as sucesivamente. He aqu un cd;go que hace eso:
// saca provecho del applet receptor

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
la clase genrica Applet; probablemente tendr que convenir ese objeto en una instancia

de su subclase. Una vez dada .a referencia a. apple, nombrado, puede llamar mtodos en ese

applet como si fuera otro objeto en su propio entorno. Aqu, por ejemplo, s, ambos applets
tienen un mtodo update(), puede decirle al receptor que se actualice a si Husmo por mecho
de la informacin que tiene el applet actual.

Si le pone nombre a sus applets y se refiere a ellos por medio de los mtodos descritos en esta
seccin, permitir que sus applets se comuniquen y permanezcan en sincrona entre ellos,
proporcionando un comportamiento uniforme entre todos los applets de su pagina.

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

CZ funcionalidad incluida en sus plataformas nativas (por ejemplo, se poda cop.ar texto y

at
Flavo
Da Piavor

urdedo,que represen, una Case de

^ "" ^"^"^
^"^"^ bor
bor ".egiblc".egiblc- EEl objeo
? ^ '*'* ^
resultante .endrd un Upo MIME de .pplic.tion/,-,.v.

,.v.,.ri.Uz..

1498

DataFlavor{String,

Da 19

String) crea un sabor de datos que representa un tipo MIME,

i::!:^n::iivii:si"ei"b^-p-^u,i,iZarsu1Pmf" P?nWes "".o para copiar y

en el que el primer argumento es el tipo MIME y el Segundo es la cadena "legible" para

puede mili, ,

pegar entre los componentes en un apple[.

el usuario. La clase que representa este sabor ser InfcutStream.

Cualquier com

Con ese objet de sabor de datos, y para negociar la forma en que se transferir la informa

ue desee milb-,

cin, puede pjegunlai por sus valores o comparar los lipos MIMI: con oros objetos tic salior.

Los sabores d dalos son utilizados por los objelos transferibles, los cuales se definen por medio

de la interfaz transf erable. Un objeto iransfcrible deber incluir l:i informacin que se va a
transferir y \ai instancias de cada sabor que represente a ese objeto. Para que su objeio se pueda

negociar y transferir, tambin liene que implementar los mtodos getTransf erDataFlavors(),

,,,

"7 71"'- ~-

Sr"" * - *

isDataFlavoTSupported(), y getTransferData(). (Para obtener ms detalles, consulte la

nterfaz Transf erable.)


Por medio deios objetos DataFlavor y la nterfaz Transf erable, la clase StringSelection

del portapapelex).

inipleinenla ji objeio simple iransfcrible para transmitir cadenas de texto. Si su inters principal

es copiar texto, StringSelection es un lugar excelente para comenzar (y, de hecho, quiz es el
nico objeto iransfcrible que necesita).

Observe que los objelos transferibles se usan para encapsular datos y para describir su lonnalo; no hacen nada en ninguno de los extremos para formaiear esa informacin. Esa es respoTV
sabidad de su programa, al utilizar el ponapapeles (Clipboard) para obtener dalos de una

El portapapeles

^nsferable que lamb.en puede implcncniar al dueo

.,

' ^:

Cuando tenga un objeto transferible, utilice un ponapapeles para transferirlo enire componentes
y desde Java a la plataforma nativa. Java 2 proporciona un mecanismo de ponapapeles de uso

fcil que le permite colocar dalos en el ponapapeles y recuperarlos del mismo. Puede utilizar el

: .

3
4

,;

fuente.

:.,

'""""" '"*""""- *""

' *"

,, ,-, ,, ,,f,

ponapapeles estndar del sistema para mover informacin hacia, y desde, oros programas que

se ejecuten en la misma plataforma nativa, o bien utilice sus propias instancias del ponapapeles

""t

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:

stH. el cdigo para es.e ejemplo:

Clipboard clip = getToolkit().getSystemClipboard()

Una observacin importante en relacin con el portapapeles del sistema, es que los applels no

tienen aceefso al sisiema por razones de seguridad (podra haber informacin confidencial en
ese portapapeles). Esio evita que los applets puedan copiar y pegar cualquier cosa en, o desde.

Figura 19.2

El applc CopyPaste.

;kl() ly- <

Da 19

500

JBeans y otras caractersticas

Listado T9.2. Texto completo de copvpaste.java.


import

2:

import java.awt.event.*;

3:
4:

5:
6:

import

50:

java.awt.*;

52:
53:

java.awt.datatransfer.*;

54:

55:

public class CopyPaste extends Frame


implements ActionListener, ClipboardOwner {
Button

9:

TextField tfCopy,

10:

11:
12:

copy,

58:

paste;

59:

tfPaste;

60:

63:
64:

System.exit(O);

16:

test.addWindowListener(l);

20:

test.setSize(200,

21:

test.showf);

it (e.getSourcef) == COpy)

70:

150);

docopy();

71:

else if (e.getsourceo == paste)

72:

doPaste();

73:

23:

CopyPaste()

74:

super("Copy and Paste");


clip = getToolkit().getSystemClipboard();

25:

26:
27:

FlowLayout fio = new FlowLayout();

28:

setLayout(flo);

29:
30:

copy = new Button("Copy From");

31:

tfCopy = new TextField(25);

32:

paste =

33:

tfPaste = new TextField(25);

new Button("Paste To");

35:

copy.addActionListener(this);

36:

paste.addActionListener(this);

37:

paste.setEnabled(false);

add(copy);

46:

add(tfCopy);

41:

add(paste);

42:

add(tfPast);

76:

contents)

77:
78:

prximos dos das,

indica que es.a clase implementar la ir

ani un

44:

47:
48:
49:

void

doCopy()

if (tfCopy.getText()

* ^"^ M USUaria Duranle los


^ ""*"* ^ d-"-do 'as aP,,

\\ !t nrrn,mPOrt ha" d^ * qe J.v....dltatr.n,f.r.

43:

46:

Las insirucciones especficas para copiar y pegar son:

38:

39:

75:

cacioncs de Swino

34:

45:

j.

public void ctionP.rfor.ed(ActionEvent e)

69:

22:
24:

#.toStrlng(

66:
68:

};

19:

65:
67:

17:

18:

Paste-setEnabled(false)} catch (Exception e) {


}
SyStem.out.println(-Error

62:

CopyPaste test = new CopyPastef);


WindowListener 1 = new WindowAdapter() {
public void windowClosing(WindowEvent e)

15:

.setText(txt)-

61:

public static void main(String[] argunejits)

14:

56:

Clipboard clip;

13:

void doPaste()

57:

7:

8:

paste.setEnabled(true);

51:

1:

avanzadas

!= nuil)

String txt = tfCopy.getText();

StringSelection trans = new StringSelection(txt);


clip.setContents(trans,

this);

ei
Cl b'n C^ Fr-- * "na .11 m-o-

en el campo de texto de Copy From, el texto se saca del

Da .19

1502

campo en la lnea 47, se utiliza para crear ua,nuevo objeto transferible en la lnea 48 y
se coloca en el ponapapeles en la lnea 49. Despus, se activa el botn Paste To.

JavaBeans y otras caractersticas avanzadas

La arquitectura de la RMl

Lneas 54-66 Cuando se hace clic en el botn Paste To, se llama al mtodo
doPaste () . Pura verificar el contenido del ponapapeles. se tnili/a el objelo
Transf erable. Si noesta" vaco, se recupera la informacin (lineas 58 y 5V) y se

coloca en el campo de texto Paste To (linca 60), Una vez hecho esto. Paste To queda
desactivado.

Lneas 75-77

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.

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

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

usted se comunica entre objetos est definido y estandarizado en la RMl. sta es un mecanis

pa s de oLr
^ J0S ~S C" el fi" * P- objetos completos o
Zlos
12121"
?
^
"i"""3ocurrir
^ durante
VUlOr''"'laC01"
^o
jar los errores de la red que pudieran
operacin
remota. accinales para mane
de estas capas para llegar a su dest.no (consulte la fio,,,,, ,;..-,,. E|| a,l|u|;lJ ,,., |a.s ^^
Figura 19.3
Las capas de la RMl.

CI ion lo

Capa de relerencia

tener que saber de antemano qu protocolo hablar, o cmo hablarlo.

Capa de transporte

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

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.

Aunque el concepto de la RMl pudiera presentar visiones de objetos repartidos por todo el
mundo comunicndose alegremente entre s, en realidad se utiliza en situaciones ms tradi
cionales cliente/servidor. Una sola aplicacin de servidor recibe conexiones y solicitudes de
un cieno nmero de clientes. La RMl slo es el mecanismo de comunicacin entre el cliente
y el servidor.

Aplicacin

Capa de stubs

mo ms sofisticado para comunicarse entre objetos de Java distribuidos, que una simple
conexin de socket. Usted le puede hablar a olio programa de Java, por medio de la RMl. sin

Nota

Servidor

Aplicacin

Capa de esqueletos

Capa (Jo rclc-ruicia

remota

remola

Red

Capa de transpone

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

k:H(M

con los locales: el objeto siub es un sustituto local del objeto remoto.

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.

Estas tres capas de la RMl permiten el control o .a imp.ementacin independiente de cada

con
o t )os objelos
W y coneSq"que (ralan
S PCmiiten
;' 'aS d!'SeS
dd ClC"le
y el *"*<*
como
ruma |ocu|cs
y ml.z;ii
cxociaincnic
f;is n comportarse
,sm;fc;i|.;ic_
.en ,.cas del lenguaje de Java para accesar a esos objetos. La capa.de referencia remota separa el procesamiento de los objetos remotos en su propia capa, la cual se puede optimizar o
volver a tmplememar, independientemente de las aplicaciones que dependen de ella Por lti
mo, la capa de transpone de red se utiliza en forma independiente de las otras dos de modo

o
i

Da 19

504

que usted puede usar distintos tipos de conexin de sockets para la RMI (TCP, UDP o TCP
con algn otro protocolo, como el SSL).
Cuando una aplicacin clienle hace una llamada a un mtodo reinlo. l;i llamada se pasa ni siub
y de ah a la capa de referencia, la cual empaqueta los argumentos en caso necesario y los pasa

al servidor por medio de la capa de transporte; una vez en el servidor, la capa de referencia
desempaca los argumentos y los pasa al esqueleto y de ah a la iinplementacin del servidor.

servidor,

^^^

* implememara los mtodos deTto^re

lado del

"Kior de bridad pan, ese servid, rn

* ^^ CrCar e inSlalar u"

el administradora

"^ ""**

'-gan conexiones y Halda, no a

I^ T

Luego, los valores devueltos para la llamada al mtodo emprenden el viaje de regreso hacia el

"* Cln"CT

lado del cliente.

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

Contiene las clases para localizar y registrar los servidores RMI

en 'in sistema local.

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

una inier az que contenga todos los mtodos que soporte su objeto remoto. Todos los mtodo-

de esa inierfaz deben incluir una clusula throws RemoteException, la cual manejar los
problem; s potenciales de la red; esto podra impedir la comunicacin entre el clienle y el
servidor.

cas para desarrollar bases e^^Z,^^ *"" ^ ".* a ls ,ce,,i-

medio de JDBC, no difiere mucho de laTntaccio

as herramientas tradicionales Esto debe" d7aT

C" """ ^ de da'S SQL PW

""" "" * dat0S SQL P" dio

-ca en bases de datos, la cn^^'^

JDBC cuenta con el respaldo de los lderes de I, in

Ce hcamien-as de desarro.lo J^Z^

Da 19

506

La API de JDBC incluye clases para las construcciones comunes de bases de datos SQL,

incluyendo conexiones, instrucciones SQL y conjuntos de resultados. Los programas Java que

uliMzan JDBC tienen la capacidad de usar el modelo de programacin SQL para emilir
instrucciones SQL y procesar los datos resultantes. La API de JDBC depende en gran parle
de un administrador de controladores que soporte la conexin de mltiples consoladores a

diferentes bases de datos. Los controladores de bases de datos JDBC se pueden escribir lotalmente en Java o implementar a travs de mtodos nativos para unir las aplicaciones de Java
con las bibliotecas de acceso a la base de dalos.

JDBC tambin incluye un puenle entre JDBC y ODBC, la imertaz comn de Microsoft para
acecsar a las bases de dalos SQL. El puente JD13C-ODI5C permite que los controlados
JDBC se usen como controladores ODBC.
Las clases JDBC son parle de Java 2 como el paquee j ava. sql c incluyen clases para mane

jar coniroladores, establecer conexiones con las bases de datos, construir consullas SQL y
procesar los resultados.

El sitio Web de Sun contiene una amplia informacin y especificaciones de JDBC.

JavaBeans y otras caractersticas avanzadas

Preguntas y respuestas
1'

showStatus(,

nfor

csi.iuo i mis lecidrcs?

"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

*n , ...i .^in, vi, u.Hto,,,-

rn.res de NullPomterException. Qu6 .si^.ific, esto"

TT??

t se des.ruven con

p"leLs- " la )<>'"" - M Sun, y ,a

-Smo m I' ^TVeeUdr


' d'CC"(|UC
ddK ^
ruiicllrSl" w"ba^;i1
'=" ' "- en
W
"llplCmC"1:l
M*H
o si L inlcJnudo

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

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

Diseo de una interfaz de

usuario con Swing


al PJ, ,mpei,1INlar , nlerta Je u

Swing ofrece una funcionalidad muy mejorada con rcpeco a

Diseo de una interfaz de usuario con Swing

Swing utiliza la misma infraestructura de clases que el AWT, lo cual hace posi
ble combinar los componentes de ambos en la misma interfaz. Sin embargo, en
algunos casos los dos tipos de componentes no se comportarn correctamente

Precaucin

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.

Estructura de una aplicacin

Los beneficios de Swing


!:

El primer paso para crear una aplicacin simple de Swing es crear una clase que sea una sub
clase de JFrame. La clase JFrame es una extensin de Frame, y se puede utilizar de manera

sa con r

similar.

El cdigo que aparece en el listado 20.1 puede ser una estructura para cyalesquier aplica

imerto grHca de usuano y e

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:

Es... caracterstica ofrece e, cambio us ^^ ^ MStema ,iaUV0 de operacin, conu,


p^ma de Java con una interfaz que_

u ^ui

^dowsoSolan.ounnuevoesu.oun.eodeJa

^ ^ ^^.^ M(uiL

A herencia de sus P^decesores, ,u -^^T,^^ co.npa.ibi.i- a

iraport java.awt.GridLayout;
import java.awt.event.;
import javax.swing.*;

4:

5:

publie class Framework extends JFrame {

6:
7:
8:

publie

Framework()

super('Application Title");

9:

10:

// Agregue aqu los componentes

11:

12:

.swing. Para poder uiili^ar una

13:
14:

publie static void main(String[]


JFrame

args)

frame = new Framework();

15:
16:
siguiente:

17:

18:

WindowListener 1 = new WindowAdapter()

publie void windowClosing(WindowEvent e)


System.exit(0);

19:

frame.addWindowListener(l);
frame.pack();

frame.setVisible(true);

511

513|

Diseo de una interfaz de usuario con Swing


Da'20

El programa del listado 20.2 usa la estructura de ja aplicacin y agrega un boln al panel de

contenido del marco. El boln se crea desde la clase JButton, la versin Swing de un botn
seleccionable. Este programa es similar al proyeelo Slacker del da 11, "Construccin de

m
m
m

interfaces de usuario sencillas para los applets".

Listado 20.2. Texto completo de swinger.java.


1:

import

java.awt.GridLayout;

2:

import

java.awt.event.*;

3:

import

javax.swing.*;

publie

class Swinger

4:

5:

extends JFrame

6:
7:
8:
9:

10:

publie

String note = "1 receive a disproportipnate amount of

"joy from being clicked. Please iriteract with me.";

11:
12:

Swinger()

super("Swinger");

JButton

hotButton

new JButton(note);

13:

Setvisit>le(.ooleano). S. el

cierne pau, ello.

14:

JPanel pane = new JPanel();

15:

pane.add(hotButton);

16:
aniumen,o

fuera f al.e en vez de xrue.

17:

setContentPane(pane);

18:
19:
..

m;lrco se abrir al tama

20:
21:

gar ant.s c
Los componemes se enen que ag&

publie static void main(String[]

args)

JFrame frame = new Swinger();

22:

23:

WindowListener

1 = new WindowAdaper()

puDlic void windowClosing(WindowEvent

a-al.

e)

System.exit(0);

25:
26:
27:

28:

};

frame.addWindowListener(l);

29:
30:

frame.pack();

31:

frame.setVisible(true) ;

32:
33:

La figura 20.1 muestra la salida de esla aplicacin.

Reuni ad(conponente).

fe

"

Da 20

514

5151

El nico material nuevo en el listado 20.2 son las lneas 10-17, en las que tiene lugar lo
siguiente:

Lneas 12 y 13

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.

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

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

pane = new JPanel()

pane.add(button);

setContentPane(pane);
Figura 20.2
Un cuno en un
JButton.

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

PUede utilizar Para sus

Web junto con los archivos que conforman el applet.

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.

Tambin hay constructores para iimclios de los coni|xmenies que loman un obje
to I con como argumento. Un icono es un grfico pequeo, normalmente en

formato G1F, que se puede utilizar en un botn, etiqueta u otro elemento de la interfaz, como
un medio visual para identif.car al componente que representa. Usted ve iconos todo el tiem

Etiquetas
h aneadn de una etiqueta

Swino.Constants: LEFT^S

loma el nombre de archivo o URL de un grfico, como argumento nico. El ejemplo siguiente

carga un icono del archivo unabom.gif y crea un JButton con el icono como su etiqueta. La
figura 20.2 nos muestra el resultado.

? clarjLabei-La fum>^ -

Algunos de los mtodos constructores que puede usar, incluven ,os siguien.es-

nt) Es una

po en las carpetas de archivo de los sistemas operativos grficos como Windows 95 y MacOS.
La creacin de un. Icn se hace de la misma manera que con un objeto Image. El constructor

y el nilco de, .cono

j con el

texto, icono yaneacin

Botones

pc:rLr

combinacin de ambos.

es del awt ...,.


etiquea de icono o una

Diseo de una interfaz de usuario con Swing

517

Da 20
,16

JCheckBox( Icono)

Una casilla de verificacin con la etiqueta de icono especificada.

JCheckBox (Icono, booleano)

Una casilla de verificacin con la diquela de

icono especificada, que se selecciona en caso de que el segundo argumento sea true.

JCheckBox(Cadena,

ron el icono especificado.

jButton

Icono)

Una casilla de verificacin con las etiquetas especifi

cadas de lexlo c icono.

jButton(Cadena,

Icono)

JChockBox(Cir/o/)fl, Icono, boolomto)

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 argunienid sea true.

lin Swing, los grupos de casillas de \erilicacion se iiiiplenieiiiun con la clase ButtonGroup.
Como ha visto, en un grupo de casillas de verificacin slo se puede seleccionar un compo

nente a la vez. Para agregar un componente al grupo debe crear un objeto ButtonGroup y
a-o

L0i

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.

3. El mtodo setEditable(tiooJeanD). de los cuadros combinados, se usa con el argu

jTextArea(int
columnas.
JTextArea(Cacena,

^ de lexlo con

el nmero especificado de

Este ltimo mtodo convierte el cuadro combinado en una lista de seleccin: las nicas selec

texto, filas y columnas.

Casmas de verificacin v^

mento f alse.

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

Da 20

I 518

JScrollBar(in)

Diseo de una

Es una barra de desplazamiento con la orientacin especificada.

29

, jScrollBar(int, int, int, int, int) i Es una barra de desplazamiento con la

30

orientacin, valor inicial, tamao del cuadro ele desplazamiento, valor mnimo y valor

31:

32:

mximo especificados.

33:

35:

SwingConstants.

36:
37:

Un ejemplo: la aplicacin SwingCoiorTest

38:
39:

Si recuerda bien, uno de los proyectos del da 14, "Desarrollo de interfaces de usuario avan

41:

42:

sus valores RGB o-HSB.

43:

49:

java.awt.*;

2:

import

java.awt.event.*;

3:

import

javax.swing.*;

4:

5:
6:
7:

8:
9:
18:

11:

12:
13:
14:

15:
16:
17:

18:

JPanel

swatch = new JPanel();


swatch.setBackground(Color.blacK);

RGBcontrols = new SwingColorControls(this,


"Green",

"Blue");

HSBcontrols = new SwingColorControls(this,


"Brightness");

27:

28:

class SwingColorControls extends JPanel {


SwingCoiorTest frame;

JTextField tfieldi, tfield2, tfield3;

SwingColorControls(SwingCoiorTest parent
String 11, string 12, String 13) {

frame = parent;

add(tfield2);

62:

add(new JLabel(13, JLabel.RIGHT));

add(tfield3);

63:
64:

"'

65:

"Red",
"Hue ,

66:

publie Insets getlnsets() {

67:

return new Insets(10,

68:
69:

10, 0, 0);

pane.add(RGBcontrols);
pane.add(HSBcontrols);
setContentPane(pane);

25:

26:

18) 10).

add(new JLabel(12, JLabel.RIGHT))

61:

pane.setLayout(new GridLayout(1, 3, 5, 15));

return new Insets(i0, 10,

add(tfleldi);

68:

JPanel pane = new JPanel();

publie Insets getlnsets() {

tfield2 = new JTextField("0") '


tfield3 = new JTextField("0") '
add(new JLabel(H, JLabel.niGHT))

59:

super("Color Test");

Saturation",

24:

56:
57:

58:

publie SwingCoiorTest()

frane.pack();

! frame.setVisible(true);

setLayoutfnew GridLayout(3,2,i0)le),.
tfieldi = new JTextFieldf"0")

55:

swatch;

pane.add(swatch);

23:

53:

publie class SwingCoiorTest extends JFrame {


SwingColorControls RGBcontrols, HSBcontrols;

19:
21:

52:
54:

20:
22:

50:

51:

inport

fraine.addWindowListener(l) ;

45:
46:
47:

1:

'

44:

48:
Listado 20.3. Texto completo de swinocolortest.java.

System.exit(0);

40:

zadas con el AWT". era el applet ColorTest, el cual permita seleccionar un color a travs de

de eventos.

PbUc void windowClosing(WindowEvent e)

34:

La orientacin se indica con las variables de clase HORIZONTAL o VERTICAL de

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

WindowListener 1 = new windo-Ad.pt.rO {

ntenaz son iguales a Jas de sus similares no Swing.


publie statie void main(StringI] args) {
JFrame fraroe = new SwingCoiorTest();

i-'-l

Da 20

520

Figura 20.3

Cmo establecer la apariencia

La aplicacin
SwingColorTest.

El programa SwingColorTest utiliza la estructura de la aplicacin presentada con anteriori


dad, por lo que muchas partes del programa tambin ya han sido introducidas previamente.

Este programa se compone de tres clases: la clase principa] SwingColorTest, la clase auxi
liar privada SwingColorControls y la clase interna definida en las lneas 30-34.

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

Apariencia de Windows 95 o Windows NT

mismo soporte que los componentes del AWT.

Apariencia en el sistema Motif X-Window

La clase SwingColorControls es una subclase de JPanel. Esta clase se actualiz para

Metal, la nueva apariencia de Swing de plataforma cruzada

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.

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

que representa ,a apanenda Me,a. de plataforma cruja de Java

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

tenido en vez de a la ventana principal del programa.

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.

'*'*o ^vuelve lH1objc,o

que representa la apariencia de su sisicma.

Si el mtodo setLookAnoTee., ,> no ?uet e^bleccr la aparca |n7, un

UnsupportedLookAndFeelException.

"

Para designar Metal como la apariencia en cu,,,u,er

ciones siguientes:
try

programa, se debcrn ,, ,

UlManager.setLookAndFeel(
} caten (Exception e) {

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

SU MMc'":l' 1M|I|(-'C 9etSystemLookAndFeelClassName().


'

'

( s srstemas operativos. Si uiili/.;i

apariencia de Windows 95. l^sZl^^^n^ZZ

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

* la cadena debe ser la descripcin de. ,exto

del componen

ma de Java a invidentes y otras personas con diversas aptitudes.

El ejemplo siente establece la descripcin de un objeto JButton-

Cuando se utilizan los mtodos abreviados de teclado, simulan la accin del ratn, y la Corma

JButton quit = new JButton("Quit")

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.

El mtodo setAccessibleNa-eC**, ruilt,OIli|

Los mtodos abreviados de teclado se establecen llamando al mtodo setMnemonic (char),

argumento char es la tecla que se debe usar como parte del mtodo abreviado. El ejemplo
infoButton =

el nombre de un campo de textoL

new JButton("Information");

infoButton.setMnemonic('i');

JTextField nm = new JTextField)

sibleConttO

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-

cin sobre herramientas con los componentes de una interfaz. Es probable que ya est familia
rizado con la informacin sobre herramientas, pues son los textos que aparecen en algunos
programas cuando detiene el puntero del ratn durante unos segundos en un componente.
La informacin sobre herramientas describe el propsito del componente. Cuando est apren
diendo a usar un programa por primera vez, la informacin sobre herramientas es un recurso
excefente para su aprendizaje.

do para el objeto *^

siguiente crea un objeto JButton y asocia el carcter ' i' con el botn:
JButton

^^1 sc pucdc utu

en el mismo componente en que se puede utilizar el mtodo abreviado como control. El

Cuadros de dilogo estndar

Proporcionan un nL^n

: rros
que se pucden
TTE'"S *

cuadro de dilogo bajo ,a apariencia de Meta.


Figura 20.4

Un cuadro de dilogo

estndar.

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

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:

manejan auiomticamenie.

Hay cuatro cuadros de dilogo estndar:.

'I(L I

Diseo de una interfaz.de usuario con Swing

Da 20

524

. inputDialog

,. MessageDialog
. optionDialog

Es un cuadro de dilogo que le pide una entrada de texto.

. .. ,,

Es un cuadro de dilogo que despliega un mensaje.

...

JOptionPane.ERROR_MESSAGE)
^,

.. ,

''

'

'

La figura 2p.5,mue$tra e] cuadro de dilogo resallante bajo la apariencia de Windows,

Es un cuadro de dilogo que incluye los otros tres tipos de cuadros.

Cada cuadro de dilogo tiene su propio mtodo en la clase JOptionPane.

Figura 20.5

Un cuadro de dilogo

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

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.

de confirmacin.

Cuadros de dilogo de entrada


Un cuadro de dilogo de entrada hace una pregunta y utiliza un campo de texlo para guardar

la respuesta. La figura 20.6 nos muestra un ejemplo con la apariencia de Molif.

el cuadro aparecer centrado en la pantalla.

El segundo argumemo puede ser una cadena, un componente o un objeto Icn. Si es una

Figura 20.6

cadena, ese texto aparecer desplegado en el cuadro de dilogo. Si es un componente o un

Un cuadro de dilogo

icono, se desplegar el objeto en lugar de un mensaje de texto.

Este mtodo devuelve uno de tres posibles valores enteros, y cada uno es una variable de

' ': JOptionPane. YES_NO_OPTION,

'.

'''"' "'!! Cj:I:,-V ..;,,,-. ,f.':-....

525i

de entrada.

mtsms

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;

response = JOptionPane.showConfirmDialog(nuil,
"Should I delete all of your irreplaceable personal files );

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

La forma ms fcil de crear un dilogo de entrada es llamando al mtodo showlnput -

Dialog (Componente, Objeto). Los argumentos son el componente ancestro y la cadena,

el componente, o el icono que se va a desplegar en el cuadro.

La llamada al mtodo de dilogo de entrada devuelve una cadena que representa la respuesta
del usuario. La instruccin siguiente crea el cuadro de dilogo de emrada que aparece en la

figura 20.:

String response = JOptionPane.showInputDi'alog(nul


"Enter your ame:");

'

son:

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.

. Un entero que describe el tipo de cuadro de dilogo, por medio de las siguientes varmblcsilc cbse: EnROR.MESSAGE, INFORMATION.MESSAGE, PLAIN.MESSAGE, QUES-

TI0NJ1ESSAGE o WANINGJUESSAGE. Con este argumento se determina qu icono se ha


de dibujar junto con el mensaje,

int response = JOptionPane.showConfirmDialog(null,

Error reading file. Want to try again?",


"File

Input

Error",

Tambin puede crear un cuadro de dilogo de entrada con el mtodo '


showInputDialog(Componente, Objeto, Cadena, int). Los dos primeros argumemos

son iguales los de la llamada abreviada del mtodo, y los dos restantes son los siguientes:
El ttulo que se va a desplegar en la barra de ttulo del cuadro de dilogo.

Una de las cinco variables de clase que describen e! tipo de cuadro de dilogo:

ERROR_MESSAGE,INFORMATION_MESSAGE, PLAIN_MESSAGE, OUESTION MESSAGE O

WARNING_MESSAGE.

La instruccin siguiente crea un cuadro de dilogo de entrada a travs de este mtodo:


String response = JOptionPane.showInputDialognull
"What is your ZIP code?",

"Enter ZIP Code",

JOptionPane.QUESTI0N_MESSAGE);

'

Diseo de una interfaz de usuario con Swing

Da 20

'El icono que va a desplegar, con las variables de clase ERROR_MESSAGE, INFORMATION MESSAGE, PLAIN_MESSAGE, QUESTION^ESSAGE, WaWnG MESSGE ola

literal 0 si no va a utilizar ninguno.

Un objeto Icn, para desplegarlo en lugar de los iconos del argumento anterior.
S. no se utilizan las opciones YES_NO_OPTION y YES NO CANCEL OPTION, un arre
glo de objetos que contenga los componentes u otros objetos que representen las

Figura 20.7

opciones en el cuadro de dilogo.

t7/i cuadro de dilogo

Si no se utilizan las opciones YES_NO_OPTION y YES_NO_CANCEU, el objeto que repre

le mensaje.

senta la opcin predeterminada.

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

wu comb.nac.on de varios componentes como un arreglo de obje.os. Estos componcn.es se

desphegan por med.o de. administrador de diseos de flujo, porque denuo del dilogo no hay

lorma de especificar otro administrador.

El ejemplo siguiente crea un cuadro de dilogo de opcin que utiliza un arreglo de obje.os JButton

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

gender[2] = new JButtonf"None of Your Business")-

int responsa = JOptionPane.showOptionDialog(null,'


wiat is your gender?",
"Gender",

devuelve un valor.

0,

rsir
Asteroid Destruction

JOptionPane.INFORMATlON MESSAGE
nuil,

Alert ,

joptionPane.WARNING.MESSAGE);

Cuadros de dilogo de opcin

H, c adro de d.ogo ma-s complejo es e, ^^

comb,na las caractensticas de todos los otrosd,aU, Sepuede

showOptionDialogtComponente, O*je, Cadena, mt.

gender,

.. gender[2]);

La figura 20.8 nos muestra el cuadro de dilogo resultante con la apariencia de Motif.
Figura 20.8
Un cuadro de dilogo
de opcin.

Objeto).

Los argumento* pan, este mciodo son los siguicn.es:


'. El componente ancestro del dilogo.

. El .ex.o. cono o componente que se va a desplegar.

. Una cadena para desplegar en la barra de ttulo.

Un ejemplo: la aplicacin inf o


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

cual es colocada en los campos de texto de la ventana principal de la aplicacin

Da 20

Diseo de una nterfaz de usuario con Swing

Escriba el listado 20.4 y compile el resultado.

47:

pane.add(typeLabel);

48:

pane.add(type);

49:

Listado 20.4. Texto completo de wc java.

50:

setContentPane(pane);

51:

1:

import java.awt.GridLayout;

52:

2:

import

53:

java.awt.event.*;

3: import javax.swing.*;

5^ public class Info extends JFrarae {

l\

7".

I
1B

prvate JLabel titleLabel = new JLabel( Title.

12:
13:
14:

15:
16:
17:

18:
19:
20:

21 :
22:
23:
24:

25:

26:
27:

57:

__

private JLabel typeLabel = new JLabeK Type.

59:

Information

34:

35:

36:
37:
38:

39:
40:

41 :
42:
43:
44:
45:

46:

"look and feel:

"

+ e);

JFrame frame = new lnfo();

63:
64:

WindowListener 1 = new WindowAdapter() {


public void windowClosing(WindowEvent e)

65:

p.

Systera.exit(O);

67:

-,;

68:

69:

nrres:o:s:P

frame.addWindowListener(l);

70:

"Enter the site title:");

title = new JTextField(response1, 20);

71:

frarae.pack();

72:

frame.setVisible(true);

73:
74:

in8respns:2p
"Enter the site address:");
address = ne* jTextField(response2, 20);

La figura 20.9 presenta la ventana principal de esta aplicacin con la apariencia del sistema
(er. ssta pantalla s w incows). Hay res campos de exio con valores proporcionados por los

'

30:

33:

66:

62:

SwingConstants.RIGHT);

super("Site

(Exception e)

System.err.println("Couldn't use the systera "

60:

private JTextField type;

public Info()

UIManager.getSystemLokAndFeelClassNameO);

61:

private JTextField address;

29:

32:

} catch

58:

prlvae Slidr^bel - new JLabel("Address: ",

UIManager.setLookAndFeel(

56:

SwingConstants.RIGHT);

28:

31 :

try

55:

SwingConstants.RIGHT);

11:

public static void maln(Strlng[] arg) {

54:

"What type of site is it? ,

cuadros de dilogo.

Figura 20.9
La ventana principal

"Site Type",

de la aplicacin Info.

JOptionPane.QUESTION_MESSAGE,

nuil,

Mucho de esta aplicacin es el cdigo del modelo de texto que se puede utilizar con cualquier

cholees,

choices[e]);

type = new jTextField(choices[responSe3],


jPanel pane = new JPaneK);

pane.setLayout(new GridLayout(3, 2)),


pane.add(titleLsbel);
pane.add(tltle);

pane.add(addressLabel):
pane.add(address);

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

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

sitio que se utilizar en el constructor de otro objeto JTextField.

529 I

Da 20

530

Lnea 30

Se crea un arreglo de objetos String llamado choices, con tres elementos

que son valores dados.

Semana 3

Lincas 3 1-38 Se usa un cuadro de dilogo opcional para pedir el lino do sino, l-.l
arreglo choices es el sptimo argumento, el cual establece los lies bolones del dilogo
con las cadenas del arreglo: Personal, Commercial y Unknown. El ltimo argumento,

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.

Resumen

Da

21

Despus que varios cientos de miles de prograniadores tuvieron la oportunidad de usar las

primeras versiones de Java, una de las quejas principales se refera al AWT. Aunque permile
crear una interfaz funcional, haba algunos problemas para hacer que todas las inierfaccs tra
bajaran en plataformas diferentes y algunos elementos de una imerfaz grfica de usuario no
estaban soportados por el AWT.

Swing es una respuesta efectiva a todas eslas crticas por medio de un sofisticado sistema de
ventanas que se adapta a muchos tipos distintos de programas de Java. Si Je echa una mirada

Manejo de eventos de

usuario con Swing

a la documentacin incluida en Swing, encontrar ms de treinia componentes distintos.

Maana llevar a cabo un ejercicio para convertir una interfaz en una aplicacin completa.

Preguntas y respuestas
P Se puede crear una aplicacin sin Swing?

R Desde luego. Swing es slo una ampliacin del AWT, y puede seguir utilizando el
AWT para las aplicaciones con Java 2. En vez de usar las lcnicas disponibles para los
applets de Java 1.0.2, debe utilizar las tcnicas de manejo de eventos, sobre las que
hablaremos maana. Acerca de si debe crear una aplicacin sin Swing, ese es otro

punto. No hay comparacin entre las posibilidades que ofrece Swing y las del AWT.
Con Swing, puede utilizar muchos ms componentes y controlarlos de manera ms
sofisticada.

Anvs de un conjunto de clases llamadas luchadores de e ventos.

3i

a 21

El evento principal

En el sistema de manejo de eventos que aprendi la semana anterior, los eventos se maneja

Manejo de eventos de usuario con Swing

dase siguiente se declara para que pued


eda manejar eventos de accin y de te*t0-

ban i travs de un conjunto de mtodos que estn disponibles en todos los componemos.

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

Cmo establecer los componentes

Dentro del sistema de manejo de eventos de Java 2, si una clase desea responder a un evento
de usuario debe implememar la interfaz que maneje los eventos. Estas interfaces se llaman
escuthadores de eventos.

Cada escuchador maneja un tipo especfico de evento, y una clase puede implementar tamos
escuchadores de eventos como sea necesario.

7Zrd
P
mtodos Hr
del componente:

He aqu los siguientes escuchadores de eventos disponibles:

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

movimiento de una barra de desplazamiento.

FocusListener . Eventos de enfoque de teclado que surjen cuando un componente,


por ejemplo un campo de texto, gana o pierde el enfoque.

. itemListener

Son eventos de elemento que se dan al cambiar un elemento, como

una casilla de verificacin.

KeyListener

Eventos de teclado que suceden cuando un usuario escribe texto con el

teclado.

. MouseListener

Eventos de ratn generados por clics de un ratn al entrar a (y salir

addActionListener(, Componentes de JButton, JCheckBox, JCo.boBox,


JTextField, y JRadioButton.

addAdjustmentListenern Componemos de JScrollBar.

addFociisListenerf) Todos los componentes de Swing.

addltemListenero Componentes de JButton, JCheckBox, JComooBox v

JRadioButton.

addKeyListener() Todos los componentes de Swing.

addMouseListener-0 Todos los componentes de Swing.

addMouseMotioiiListenerO Todos los componentes de Swing.

addWindowListener) Todos los componentes de JWindow y jFranm.

de) un rea del componente.

. MouseMotionListener

Son eventos de movimiento de ratn que han servido para

llevar un registro de todos los movimientos del ratn en un componente.

'" windowListener

Eventos de ventana generados al aumentar, disminuir, mover o

cerrar la ventana de la aplicacin principal.

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
nente al contenedor, tiene que agregarle los escuchadores de ev-en-

os y maneja, cual

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

Da 21

1534

Manejo de eventoide
JButton zap = new JButton("Zap");

if (src == quitButton)

zap.addActionListener(this);

quitProgram();

Todos los mtodos agregados toman un argumento: el objeto escuchador de evento de esa
clase. Por medio de this, usted indica que la clase actual es el escuchador de evento.
Tambin puede especificar un objeto diferente, siempre y cuando la clase de! objeto imple-

else if (src == sortRecords)

u!uarin con Swing

'

sortRecords();

mente el escuchador de evento apropiado.


el

sortRecords ()

Mtodos manejadores de eventos

evento, llamara al mtodo

Cuando usied asocia una interfaz a una clase, la clase debe manejar lodos los eventos con
tenidos en la interfaz.

lee,

En el caso de los escuchadores de eventos, cuando tiene lugar el evento de usuario correspon
diente, el sistema de ventanas llama a cada mtodo en forma automtica.
La interfaz ActionListener tiene un solo mtodo. Todas las clases que Actior.Listener
publie void actionPerformed(ActionEvent evt)

iodo de

*e podra usaran

imple-menta deben tener un mtodo con una estructura como la siguiente:

^> t"--'rar,a,, un

evento de accin:

// maneje el evento aqu

voidactionPerformed(ActionEvent evt)
Object src = evt.getSource();
if (src mstanceof JTextField)

Si en la imerfaz grfica de usuario de su programa hay un solo componenie con un

calculateScoref);

escuchador de evento para lor eventos de accin, utilice el mtodo actionPerf ormed() para

else if (src instanceof JButton)


quitProgram();

responder a un evento generado por ese componente.

Si hay ms de un componente con un escuchador de evento de accin, deber utilizar el mto


do para deducir qu componente se us y actuar en su programa de acuerdo con ello.

1 m"ia

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.

El objeto ActionEvent y todos los otros objetos de evento son parte del paquete
java.awt.event.y a su vez son subclases de la clase EventObject.

Cada mtodo de manejo de eventos enva un objeto de evento de alguna clase. Para determi
nar qu componente envi el evento, utilice el mtodo del objeto getSource(), como en el
ejemplo siguiente:

publie void actionPerforraed(ActionEvent evt) {


Object src = evt.getSource();

Escriba
1:
2:
3:
4:

Listado 21.1. Texto completo de changft.t, p . JAVA.

import java.awt.event.*;

import javax.swing.*;
import java.awt.*;

5:
6:
7:

8:
9:

10:

El objeto devuelto por el mtodo getSource () se puede comparar con los componentes si

11:
12:

usa el operador == . Las instrucciones siguientes se podran utilizar dentro de! ejemplo

13:

actionPerf ormed() anterior:

14:

2 = new JButton("Gulldenstern'j;
publie ChangeTitle() {
super("Title Bar");

bi.addActionListener(this);
b2.addActionListener(this);

JPanel pane = new JPanelf);

Da 21 "

536

Listado 21.1. continuacin


15:

pane.add(b1);

16:

pane.add(b2);

17:

setContentPane(pane);

18:

Trabajo con mtodos

19:
28:

public

21:

static void main(String[]

JFrame fraroe

22:

args)

new ChangeTltle();

23:

Windowlistener 1 =

24:

public

25:

new WindowAdapterf)

void windowClosing(WindowEvent

e)

System.exit(O);

26:
27:

Eventos de accin

};

28:

frame.addWindowListener(l);

29:
30:

31':

frame.pack();

JCneckBox, JCoroboBox, jTextFieldo

JRadioButton.

frame.setVisible(true);

32:
33:
34:

public

35:

void actionPerformed(ActiortEvent

36:

Object

37:

if

evt)

souree = evt.getSource();

(souree == b1)
setTitle("Rosencrantz");

38:

else if

39:

(souree

=-

que genere un evento d act, n no

ese componente.

'

it

e 4UK;ra 't"10" '"* lentos ele accin de

b2)

setTitle("Guildenstern");

40:

repaint();

41:
42:

43:

vold actionPerformedfActionEvent evt, {

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.

II

Las lneas 12 y 13 agregan escuchadores de eventos de accin a los dos objetos


JButton.

rauf i.

Las lneas 35-42 responden a los eventos de accin derivados de los dos objetos

Jbutton. El mtodo getSource () del objeto evt se utiliza para determinar la fuente

\"

.Da 21

Manejo de eventos de usuario con Swinq

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.

Nota

import java.awt.event.*;

Un ejemplo de esto seria un programa con un botn Quit y una opcin Quit
en un men desplegable. Si en un mtodo de manejo de eventos le da el

mismo comando de accin a los dos componentes, los podra manejar con

el mismo cdigo.

el... WellAdJlted extend. JFrarae lrapleraents AdJustBentUstener


6:

' 7:

Eventos de ajuste

Los cven.os de ajuste se dan cuando se mueve un componente JScrollBar por medio de las
flechas de la barra, el cuadro de desplazamiento o haciendo clic en cualqu.er pane de la barra.

11:

adjustmentValueChanged[EventoDeAjuste): Toma la,forma siguiente:

16:

bar.addAd]ustmentListener(this)

15:
17:

1B: ,

..

19:

llame al mtodo getValue () en el objeto AdjustmentEvent. Este mtodo devuelve un

entero que representa el valor de la barra de desplazamiento.

Tambin puede determinar la forma en que el usuario movi la barra de desplazamiento, a


travs del mtodo AdjustmentEvent del objeto getAdjustmentTyPe(). Esto devuelve uno
de cinco valores, cada uno de los cuales es una variable de clase de la clase Adjust.ent:

UNIT INCREMENT

Es un aumento de 1 en el valor, el cual puede ser causado dando

clics en una flecha de la barra de desplazamiento o usando una tecla de cursor.


. UNIT_DECREMENT

. BLOCK_INCREMENT

Es una reduccin de 1 en el valor.

Es un aumento mayor al valor, causado al dar clics en la barra de

desplazamiento, en el rea entre el cuadro de desplazamiento y la flecha.

. BLOCK_DECREMENT

Es una reduccin mayor al valor.

TRACk" Es un cambio en el valor causado por un movimiento del cuadro de desplaza-

21: '
22:

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.

JPanel pane = new JPanel();


. . pane.setLayout(bordJ;

pane.add(valu, "South",;

pane.addfbar,

"Center");

setContentPane(pane,;

23:
24:
25:

public static void main(String[] args, /

26:

JFrame frame = new WellAdjusted(,;

27:
28:

2S:
30:

WindowListener 1 = new WindowAdapterf) /


.,.
public void windowCloSing(WindowEvent e) /
System.exit(0,;

31:

' X

32:
33:

frame.addWindowListener(l);

34:

35:

frame.pack(,;

36:

frame.setVisible(true,;

37:

38:

' 39: '

,.

20: '

Par, ver cul es el valor actual de JScrollBar, dentro de este melado de manejo de eventos,

mienio.

super("Well Adjusted");

13:

14:

public WelUdjusted() {

12:

Slo hay un mtodo en la interfaz AdjustmentListener:

//

bar -new JSer.lltar(8.i,c.n.t.nt.. HORIZONTAL,

9:

10:

Para manejar estos eventos, una clase debe implementar la interfaz Adj ustmentListener.

public void adjustmentValueChanged(AdjustmentEvent evt)

"eW Td.rL.yout

valu = new JTextField)

8:

40:

41:

source = evt.getSource();

if (source == bar, {

42:

int newValue = bar.getValue(,


valu.setText(" + newValue);

43:
44:
45:

repaint();

46:
47:

'

evt,

Da 21

540

Manejo do eventos de usuario con Swing

La figura 21.2 muestra una pantalla de la aplicacin.


Figura 21.2

' 1 Iw

Im xalitla (/ l i'l'H-

!ul

541

Eventos de elemento
elmmo

, Trmino Nuevo
j

cucin 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

voi^itemStateChangeddtemEvent
^
evt)

una cadena nuil, y estn concatenadas al entero newValue para convertir el argumento

en una cadena. Como podr recordar, si concatena una cadena con un tipo diferente, Java
siempre manejar el resultado como una cadena. La cadena nuil es un mtodo abreviado
para cuando quiera desplegar algo que todava no es una cadena.

oa>"6

Eventos de enfoque

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

o a la ItemEvent.

componente i|i.e cM; activo para recibir entradas desde el teclado. Si uno de los campos liene
el enfoque (en una interfaz de usuario con varios campos de texto editables), lo mostrar por

m
#

medio de un cursor parpadeando en ese campo.

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.

Para manejar un evento de enfoque, deber implementer la interfaz FocusListener desde


una clase. Hay dos mtodos en las interfaces focusGained(EventoDeEnfoque) y

Listado 21.3. Texto completo de selectitem..


1:

2:

3:
4:

ocj.i.i.t;E-/etoDeEn-roque), de e modo toman a forma siguieme:


publie void focusGained(FocusEvent evt)

b:
6:
7:
8:

publie void focusLost(FocusEvent evt)

9:

18:
11:
12:

13:

Para determinar cul es el objeto que gan o perdi el enfoque, se puede llamar al mtodo
getSourceO en el objeto FocusEvent enviado como argumento a Jos mtodos
focusGainedf) y focusLost().

import java.awt.event.*;

iniport javax.swing.*;
import java.awt.*;

14:

15:
16:
17:
18:

bord = new BorderLayout)

JTextField result = new JTextField(27

JComboBox pick = new JComboBox();


publie Selectltem() {
super("Select tem");

pick.addltemUstener(this);

pick.addltem("Navigator");
pick.addltein(-lnternet Explorer")
Pick.addItem("Opera");
pick.setEditable(false)

19:
20:
21:
22:

JPanel pane = new JPanel();

Pane.setLayout(bord);
pane.add(result, "South");

ItemLiStener

Da 21

Manejo de eventosdeus^ri con Swing

543 |

21.3. CONTINUACIN

pane.add(pick,

23:
24:

"Center");

siguiente:

setContentPane(pane);

25:

public void KeyPressedtKeyEvent evt) {

26:

27:
28:

public statlc vold main(String[] args) {


JFrame trame = new Selectltem():

29:

30:

Y ke^, que toman la forma

public void keyReleasedKevEvent evt) {

WindowListener 1 = new WindowAdapter(') {

31:

public void windowClosing(WindowEvent e) {

32:

System.exit(B);

33:

public void keyTypeddCeyEvent

34:
35:

evt)

frarae.addWindowListener(1);

36:

37:

frame.pack();
trame.setVisible(true);

38:
39:
40:

41:

Eventos de ratn

public void itemStateChanged(ItemEvent evt) {


Object source = evt.getSource();

42:
43:

if

44:

45:

(source == pick)

Object newPick = evt.getltem{);

result.setText(newPick.toString() + ' is the selection.

46:

Los eventos de ratn se generan por

Un ratn entrando al rea de un componente.


Un ratn saliendo del rea de un componente

47:

repaint();

4B:

49:

56:

varios tipos diferentes de interacciones del

Un clic de ratn.

);

La fi-iirn-2 I 3 muestra osla aplicacin con el elcmcnio Opera como la seleccin acm.,1 cu el
cuadro combinado. El m.odo toString() del objeto se utiliza para recuperar el texto del
objeto devuelto por getltem().

Figura 21.3
Im salida de la apli
cacin Selectltem.

Cada uno toma la misma forma bsicade n

Eventos de tecla

uMomm
Los >"de Ieda ocurren cuand0 se presiona una tecla en el leclad0'
iMP^ Cualquier componente puede generar estos eventos y, para dar soporte a los
eventos se tiene que implementar una interfaz KeyListener desde una clase.

public void ouseReleased(MoseEvent evt) {


}

Los mtodos siguientes funcionan para los objetos MouseEve

usuano:

21*

544

getClickCount ()
con el ratn.

getPoint()

Devuelve, como un entero, el nmero de veces que dio un clic

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.

getY()

Devuelve la posicin y.

windowDeiconified(EventoDeVentana)
windowlconifiB(EventoDeVentana)

Eventos de movimiento del ratn

"indowOpene(EventoDeVentana)
Todos toman la misma forma del mtodo window0pened( )
void windowOpenedfWindowEvent evt) <

Los eventos de movimiento del ratn ocurren cada vez que se mueve el ratn en un compo
nente. Al igual que con cualquier otro evento de ratn, cualquier componente puede generar

eventos de movimiento del ratn. Para darles soporte, se debe implementar la interfaz
MouseMotionListener desde una clase.
En la interfaz MouseMotionListener hay dos mtodos: mouseDragged(Even:oDeMovi-

mientoDelRatn) y mouseMoved(EventoDeMovimientoDelRatn), y toman la forma


siguiente:

public void mouseDragged(MouseEvent evt)


//

pa"
Un ejemplo: la aplicacin SwingColorTest

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.

Hay siete mtodos en la interfaz WindowListener:

windowActivated(venroDeVentana)

class Syvingcolorcontrols extends JPanel

implements ActionListener, FocusListener {


P

windowClosed(EventoDeVentana)
windowClosing{EventoDeVentana)

despus de

"CUChadores de rentos se deben aadir

Da 21 -

546

tfieldi.addFocusListener(this);

Manejo de eventos de usuario con Swing

-'

tfield2.addFocusListener(this);
tfield3.addFocusListener(this);

1:

tfieldi.addActionListener(this);

2:

tfield2.addActionListener(this);

3:

tfield3.addActionListener(this);

4:

5:

Por ltimo, agregue todos los mtodos definidos en Jas dos interfaces que implemema esta
clase: actionPerformed(Vento0e/4ccin),

6:

ocuslostiEventoDeEnfoque) y

ocus6aine(EventoDeEnfoque).

7:

8:

9:

Los comiles de color se usan para registrar un valor numrico para un color, y esto hace

10:

que el color se dibuje en un panel. Tambin actualiza los otros controles de color para que

"nB0;:rCOTl "G

publie SwinflColorTest() {
super("Color Test");

12:
14:

Intro en un campo de texto, lo cual genera un evento de accin, o salindose del campo para

15:

swatch.setBackground(Color.black)

RCBCSrO1=e:^Cl

17:
18:

Las instrucciones siguientes implementan los intodos actionPerformed() y focusLost()

que se deben agregar a la clase:

JPanel pane = new JPanel()-

pane.setLayout(new GridLayoutd, 3, 5 15))swatch = new JPanel();


'
'>'

16:

editar otro campo diferente, lo cual genera un evento de enfoque.

19:

Saturation", "Brlghtness")

28:

publie void actionPerformed(ActionEvent evt)

instanceof TextField)

f rame.update(tfiis);

pane.add(swatch);

21:

pane.add(ReBcontrols);
pane.add(HSBcontrols);

22:

23:
24:

setContentPane(pane);

25:

publie void focusLost(FocusEvent

evt)

26:

frame.update(this);

27:
.

28:
29:

Uno de ellos, f ocusGained(), no necesita manejo. Entonces, se debe agregar una definicin

36:

de mtodo ..vaco:

31:

publie void focus6ained(FocusEvent evt)

{ }

Los mtodos manejadores de eventos agregados a SwingColorControls, llaman a un mto


do en su clase madre, update(SwingColorControls).

Este mtodo no contiene ningn comportamiento para el manejo de eventos, slo actualiza

34:
35:
36:

37:
38:
39:
49:

El listado 21.4 contiene la aplicacin, incluyendo las clases SwingColorTest y

.... WindowListener 1 = new WindowAdapter() {

publie void windowClosing(WindowEvent e)


System.exit(e);

33:

a la versin creada durante el da 14, "Desarrollo de interfaces de usuario avanzadas con el


AWT".

publie statlc void main(StrinB[) arB$) {


. ;
JFrame trame = new SwngColorTest();

32:

la muestra del color y todos los controles para que reflejen un cambio de color. Es idntico

SwingColorControls.

publie class SwingColorTest extends J

13:

I lay dos formas para que un usuario pueda terminar una nueva eleccin de color: prcsionaiuli1

(evt.getSourcp()

inport jsvax.swing.*;

11:

rcliejen el cambio de color.

if

iaport java.awt.*;

lmport Java.awt.event.*; .

41:
42:
43:

};

frame.addWindowListener(l);
frame.pack{);

frame.setVisible(true);
publie Insets getlnsetsf) {

return new Insets(18, le, 10,

ie);

44:
45:
46:

void update(SwingColorControls controlPanel)


Color c;

Da 21

548

Listado 21.4. continuacin

47:

//

obtiene

48:

//

49:

int

los

valores

de

cadena

convierte

en

enteros

valuel

de

cadena de

los

campos

de texto

96: ;

Integer.parselnt(controlPanel.tfieldi.getText());

tfield2 = new JTextFieldfO" j '


tfield3 = new JTextFleld("e")

'99:

50:

int

value2 = Integer.parseInt(controlPanel.tfield2.getText());

100:

int

value3 = Integer.parseInt(controlPanel.tfield3.getText());

101:

tfieldi.addFocsListener(this)
tfield2.addFocusListener(this);
tfield3. addFocsListener (this )'
tfieldi.addActionListener(thisj
tfield2.sddActionListener(this)
tfield3.addActlonListener(this)-

102:

52:

if

(controlPanel ==

54:

//

RGB

55:

c =

ha

RGBcontrols)

cambiado,

actualiza

new Color(value1,

value2,

103:
HSB

104:

value3);

105:

106:

56:
57:

//

58:

floatf]

convierte

los

valores

RGB

en

HSB

addfnew JLabel(H, JLabel.RIGHT))-

107:

HSB - Color.RGBtoHSB(value1,

value2,

value3,

add(tfieldi);

108:

60:

HSB[0]

360;

110:

61:

rfSB[1]

*=

100;

111:

62:

HSE[2]

*=

100;

112:

113:

63:
restablece los

campos

114:

64:

//

HSB

65:

HSBcontrols.tfieldi.setText(String.valueOf((int)HSB[O]));

115:

66:

HSBcontrols.tfield2.setText(String.valueOf((int)HSB[1)));

116:

67:

HSBcontrols.tfield3.setText(String.valueOf((int)HSB[2]));
}

else

70:

//

71 :

cambiado,

Color.getHSBColor((float)value1

(float)value2 /

72:

100,

(float)value3

360,

100);

public void actionPerformed(ActionEvent evt) {


if (evt.getSource() instanceof JTextField)
frame.update(this);

121:
122:
123:

73:
//

74:

restablece

los

campos

public void focusLost(Focusvent evt) i

124:

RGB

frame.update(this);

125:

75:

RGBcontrols.tfieldi.setText(String.valueOf(c.getRed()));

76:

RGBcontrols.tfield2.setText(String.valueOf(c.getGreen()));

126:

77:

RGBcontrols.tfield3.setText(String.valueOf(c.oetBlue())) ;

127:
128:

78:

10, 0, 0);

117:

120:

actualiza RGB

add(tfield3);

return new Insets(10,

119:

HSB ha

public Insets getlnsets() {

118:

66:

'

addfnew JLabel(12, JLabel.RIGHT))add(tfield2);


"'
add(new JLabel(13, JLabel.RIGHT))-

109:

(new float[3]));

59:

69:

= new JTextField("0")

98:

51:
53:

Uy"t(3,2,10,18) )

97:

public void focusGained(FocusEvent evt) { >

79:
80:

//

81:

swatch.setBackground(c);

actualiza

la

muestra

82:

swatch.repaint();

La figura 2!.4 muestra el producto terminado.

83:
84:

Figura 21.4

85:

Im aplicacin

86:
87:

class SwingColorControls extends JPanel


implements ActionListener,

FocusListener

l JJBJ

SwingColorTest.

88:
89:

SwingColorTest frame;

90:

jTextField tfieldi,

tfield2,

Resumen

tfield3;

91 :
92:

93:

SwingColorControls(SwingColorTest

String

11,

String

94:

95:

frame

parent;

12,

parent,

String 13)

Zd Pr SWi"8 es ch "-s robus.0 y de

para que maneje nuevos tipos de interacciones de usuario.

Por fuera el nuevo sistema tambin debe tener ms sentido, desde el punto de vista de un

programudor. El manejo de eventos se ^reg. .1 programa , travs de los mismos pasos:

/^

Da 21

1550

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

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,

d h

TT

:la aPJicac*n

cornlf
ahernatV-y asla
^de,ha"comportamiento
ms fcii * Proyec
comportadme, asocado d
se conjunta
no resonado

1
Si-

Apndices
A Resumen del lenguaje Java

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


Esie apndice contiene un resumen del lenguaje Java, tal u.n.o se describe en csic

libro.

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

incluye una gramtica completa.

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.

Las partes opcionales se indican entre corchetes (excepto en la seccin de sintaxis

de arreglos). En caso de que haya varias opciones que se excluyan mutuamente, se


presentan separadas con smbolos de canalizacin () como esto:

t publie prvate protected ) tipo nombrevariable

\W\

556

Apndice A

Resumen del lenguaje Java

Palabras reservadas

[ nmero ).nmero

Las palabras siguientes estn reservadas para el uso del propio lenguaje Java. (Algunas de

nmero[

ellas estn reservadas pero no se usan actualmente.) No debe utilizar estos trminos para

nmero[ d

referirse a clases, mtodos o nombres de variables:


do

abstrct

import

return

1 +

void

instanceof

short

volatile

'carcter'

break

else

int

static

while

"caracteres"

byte.

extends

interface

super

long

switch

catch

finally

native

synchronized

float

criar

new

throw

const

goto

private

throws

continu

if

protected

transient

implemertfs..

default

Las palabras true,

public

try

false y nuil tambin estn reservadas para ser usadas como literales.

Cadena vaca
Retroceso
Tabulador
Avance de lnea

Avance de hoja
Relorno de carro

\"

ComJla doble

Comilla sencilla

\\

\unmhexadecimal
nuil

true

/*

s'ct

puede
//

es

un

Escape Unicode

Booleano (verdadero)

Booieano (falso)

comentario que

abarcar varias lineas*/

ste es un comentario de una sola linea

/**ste es un comentario Javadoc */

int ! long , nmbrenle Entero (seieccionar un tipo)


double , nortrenrM.
FIo,:,me ^.^ ^
Doolean nombrevariable

nmero

L]

Qxnmhexadecimal

Declaracin de variables
cnar nombrevariable

Literales
nmeroll

Diagonal invenida
Nulo

false

Comentarios

Un solo carcter

Cadena de caracteres

\n

\f

package

Con signo

Expolente

\t

\r

for

\b

this

class

Tipo ouble

nmero[e E]nmero

double

final

Tipo float

D]

booleah

case

Tipo double

F)

]nmero

Caracteres
Booleano

Tipo int

nombreclase nombrevariable

t-

Tipo int

tipo nombrevariable, nombrevarxable,

Mlil|. ,

Entero hexadecimal

(dXnmhexadecimal

Entero hexadecimal

Qsnmoctal

Entero octal

5571

nombrevariable

Tipos de ciases _

Mltiples variables

m
i

Apndice A

1558

Las opciones siguientes estn disponibles slo para las variables de clase e instancia.
arg

Cualquiera'te ellas se puede utilizar con una declaracin de variable:


[

static

final

)
]

public

declaracinDeVariable

Consumios

declaracinDeVariable

prvate

protected

Variable de clase

Control de acceso

Asignacin de variables
=

valor

Asignacin

variable**

Incremento posterior

++variable

Incremento previo

variable--

Decremento posterior

-variable

Decrcmento previo

variable

+=

valor

Suma y asigna

variable

valor

Rosla y asigna
Multiplica y asigna

variable

*=

valor

variable

1=

valor

arg

arg

arg

<=

arg

>= arg

Menor que
Mayor que

arg

Menor o igual a

arg == arg

declaracinDeVariable

variable

<

arg >

Divide y asigna

arB

1=

arg

arg

&&

arg

ar9 !
!

ANO Jsia)

arg

OR lgico

arg

arg &

arg

arg

arg

arg

arg

NOT lgico
AND
OR

arg

arg

arg

arg

arg

>

XOR

Desplazamiento a la izquierda
Desplazamiento a la derecha

arg

Desplaza a la derecha y rellena con ceros

~ arg

Complnenlo

(tipo) cosa

Conversin mediante casi

variable %= valor

Obtiene el residuo y asigna

variable

&=

AND y asigna

variable

variable

'=

variable

<<=

variable

>>= valor

Desplaza a la derecha y asigna

new clase();

variable

>?>=

Rellena do ceros, desplaza a la derecha y asigna

new clase(arg, arg, arg.

valor

valor
valor

valor

valor

arg instanceof clase

Instancia de

test ? trueOp : falseOp

Operador ternario (if)

OR y asigna
XOR y asigna

Desplaza a la izquierda y asigna

Objetos
Crea una nueva inslancia

Nueva instancia con parmetros

new tW(arg, arg, arp.

Operadores

ew tipo(arg,

arg

arg

Suma

arg

arg

Resta

t>)eto.variable

arg

arg

Multiplicacin

objeto.varclase

arg

arg

Divisin

Clase.varclase

arg %

arg

Mdulo o residuo

objeto.mtodo()

arg,

objeto.mtodoiarg, arg, arg.

Crea una nueva instancia de


una clase annima
arg.

Crea una nueva inslaucia de


una clase annima

Variable de instancia
Variable de clase

Variable de clase

Mtodo de instancia
(sin argumentos)
..}

'I

Mlodo de inslancia

Apndice A

560

objeto. classmethodO

Mtodo de clase (sin

'

break [etiqueta J

argumentos)

objeteKdassmethod(arg, arg, arg...)

continu [ etiqueta ]

Mtodo de clase

label:

Mtodo de clase (sin

Clase.mtodoclase()

Etiquetado de ciclo

argumentos)

Mtodo de clase

Ciase.ititodoclase(arg, arg, arg...)

Definiciones de clases
class nombreclase bloque

Arreglos

En esta seccin, los corchetes son partes de la creacin del arreglo o de las instrucciones de
' acceso. No denotan partes opcionales, como en otras partes de este apndice.
tipo nombrevariableW

Variable de arreglo

tipo[)

Variable de arreglo

new

nombrevariable

Nuevo objeto de arreglo

tipo[nmElementos)

new tipo] {inicializador)

Nuevo objeto de arreglo annimo


Acceso a un elemento

arreglo/ndice]

Longitud de arreglo

arreglo.longitud

A la definicin de clase se le puede apegar cuak,uiera de los' siguientes


siguiente modificadores
( final ] class
nombreclase bloque

[ abstract ] class
nombreclase bloque

publie 1 class
nombreclase bloque

class nombreclase ( extends


Superclase

bloque

limplements interfaces] bloque

Ciclos y condicionales
prueba

) bloque

if i

prueba ) bloaue

else bloque

switch

( prueba

interface nombrelnterfaz
Condicional

Iextends otralnterfaz,

Condicional con else

...

switch (slo con tipos integer o char)

{}

case valorinstrucciones

inicializador;

cambio

) ~bloque

while (

prueba

do bloque

while (prueba)

No instanciablc

Accesible desde fuera del paquete

Hereda de una superclase

Implemenla una o ms interfaces


Definicin de interfaz simple

bloque

Definiciones de mtodos y constructores


void:

default : instruccin
(

Sin subclases

El mtodo bsico luce as, donde tipoDevuelto es un nombre de tipo, un nombre de clase o

case valorinstrucciones

for

Definicin de clase simple

opcionales:

class nombreclase

if (

interrupcin de ciclo o switcl)


Continuacin de ciclo

prueba;

Ciclo for

tipoDevuelto nombreUtoo( bloque

Miodo bsico

tipoDevuelto nombreMtodo

Mtodo con parmetros

(parmetro, parmetro. . . )bloque

) bloque

Ciclo while

Ciclo do

Los parmetros de mtodo aparecen as:


tipo nombreParmetro

m
*

, Apndice A

562

Resumendel, lenguaje Java

Las variaciones de mtodo pueden incluir cualesquier palabras clave opcionales siguientes:
[abstract

nombrMitodo()

static';]

.i

tipoDevuelto

nombreutodo()
[

final

import paquete.nombreclnso
Mtodo de clase

tipoDevuelto

nombreM'ivdo) bloque
]

import paquete.*
Mtodo nativo

package nombrePaquete

Mtodo final

[ public ] interface

bloque

tipoDevuelto

nombreMtooO

bloque

synchronized

Importacin

bloque

native

Mtodo abstracto

tipoDevuelto

nombrelnterfaz bloque

fabstract ] interface

Mtodo sincronizado

tipoDevuelto nombreMtodo()

nombrelnterfaz bloque

bloque

[ public

private

Control de acceso

protected] tipoDevuelto
nombreMtodo()

nombreclase()

Constructor bsico

bloque

nombrec. ase(parmetro,
parmetiv...)

publii

parmetro,

Constructor con
parmetros

bloque

private

nombrec. ase()

protected

Control de acceso

this

Se refiere al objeto actual

nombreclsse.this

Se refiere a un objeto particular de clase interna

super

Se refiere a la superclase

super.nonbreMtodo(}

Llama a un mtodo de la superclase

this(...

Llama a un constructor de la misma clase

super(.. .)

Llama a un constructor de la superclase

tipo.clfss

Devuelve el objeto de clase para el tipo

valor

Devuelve un valor

. ,

Importa todas las clases del paquete


Las clases en este archivo
pertenecen a este paquete

-Inierliiz pblica

Inierfa?. abstracta

bloque

caten ( excepcin ) bloque


[ finally bloque )

try bloque [ caten ( excepcin )


bloque ) finally bloque]

Espera un bloqueo sobre el objeto

Instrucciones protegidas
Se ejecuta si se l:in/.i una excepcin
Se ejecuta siempre

Igual al anterior (se puede utilizar la


opcional caten finally ahora,
pero no ambos)

bloque

En c! cuerpo del mtodo/constructor, utilice estas referencias y mtodos:

return

synchponized ( objeto ) bloque


try

Los constructores lucen as:

lni|M>rl;i iin.i i-tosi-

especfica

Proteccin
'

bloque

1
flr

h }

!.'<

Apndice

Recursos de Java en

Internet

Este apndice contiene una lista de libros, sitios Web, loros de discusin en Internet

y otros recursos que puede utilizar para ampliar su conocimienio de Java.

Sitio Web de este libro

Rogers Cadenhead, coautor de este libro, mantiene el sitio oficial del mismo en

Web, en la direccin siguiente:

http://www.prefect.com/3ava2i

Visite este sitio para tener el cdigo fuente de todos los proyectos del libro aclara

ciones, conexiones actualizadas y cualquier otra informacin al respecto.

567 1

Recursos de Java en Internet

What's New? Esta rea contiene anuncios relacionados con la publicacin de actua
lizaciones para los productos y eventos como JnvaOne. la consulta semestral para los
programadores de Java. Tambin incluye as publicaciones y la programacin de las
sesiones de capacitacin que se ofrecen.

E5S

dichos nmeros son necesarios p

Documentaon

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

970. 7-O85-6

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

034"'

n,lSBN:968-8S0-804-0

http://www.jars. com.

For Developers

ste es un pumo de partida hacia JDC (Java Developcr Conneclion),

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.

Java in the Real Worid

Caractersticas y lneas de tiempo sobre las -hislonas exi

tosas" del lenguaje Java en lugares tan diversos como U.S. Postal Service. UCLA
Medical Cerner, Ergon lnformatik y la misin Mars Pathfmder.

Webd: los autores.

Business & Licensing

tros para el uso de los productos de Java.

E| sitio de 5un

Support & Services

Tal ce molo aprendi durame el

Un listado de los servicios de soporte tcnico, soporte a clientes

y venias.

. Employment

la sig lente direccin:


http-.// java.sun.com

Proporciona los lincamientos para obtener licencias y regis

biblioteca de clases de

Una lista actualizada de oportunidades de trabajo en ingeniera, escritu

ii

ra tcnica, mercadotecnia/ventas y oros departamentos de Sun.

Java Store

Un catlogo de la mercanca oficia! de Java que se puede adquirir a travs

. A-Z ndex

APIs, productos y los principales conceptos de la tecnologa de Java, en

de Web, incluyendo camisas de mezclilla, lazas para caf, playeras y gorras de bisbol.
orden alfabtico. Perdido? Tambin se proporcionan algunos tips para navegar en este

'

i: :

I i'

i:

i.

568

Apndice B

Este sitio se actualiza constantemente con recursos de uso libre para los programadores de
Java. Una de las parles que podra aprovechar de inmediato es la pgina Documentaron en la
direccin siguiente:
http://java.sun.com/docs/index.html

Otros sitios Web sobre Java

Recursos de Java en Internet

miembros del equipo Gamelan actualizan el sitio diariamente. Camelan tambin realiza las

mejores presentaciones en su directorio de la pgina:

http://www.gamelan.com/special/picks.html

Servicio de clasificacin de applets de Java

Han, arcesar a otro directorio de clasificacin de npplm de Java, dirija su navegador hacia la

Debido a que gran parte del fenmeno Java se ha inspirado en su uso en pginas Web, un
gran nmero de sitios Web estn enfocados en Java y su programacin.

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-

una lista de libros actuales y por editarse. La puede encontrar en la direccin siguiente:
http://www.javaworld.com/javaworld/books/jw-books-index.html

L-liiotte Rusty Harold, autora de varios libros descritos en la pgina Web, presenta otra selec
cin de libros relacionados-con JavaT^^io con las revisiones de muchos de esos libros. La
lisia de Harold se puede consultar en:
http: //sunsite. une. edu/jav,af aqJbooks.html

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.

El lugar para iniciar esta bsqueda es Developer.Com's Camelan, el sitio Web que presenta
un catlogo de programas, recursos de programacin y ms informacin de Java, en la
siguiente direccin:
http://www.gamelan.com

Gamelan es el directorio mas amplio en su clase dentro de Web, superando incluso a Sun en
cuanto a la profundidad de su cobertura. Se ha convertido en el primer lugar de registro de
informacin para los programadores de Java, tan pronto como terminan el programa. Los

569

#
ft

http://www.jars.com

El logotipo de la manzana del JARS aparece en los numerosos app.ets que se ofrecen en las
paginas Web. El sitio JARS ha sido ampliado iceien.cincme p:iri, inclu, las novedades acerca
del lenguaje y los desarrollos relacionados, revisiones de las herramic.as de desarrollo para

-iva, y otra informacin de utilidad.

JavaWorld

Una de las mejores revistas que han surgido al servicio de la comunidad Je programadores

de Java, y tambin es la ms econmica. .MmHWWest disponible en forma -ratum, en la

siguiente direccin Web:

http://www.javaworld.com

JavaWorld suele publicar artculos .morales, junto con novedades de desarrollos de Java y

oirs caractersticas, las cuales se actualizan cada mes. En el rea de artculos de manual, el .

formato umeo de Web ofrece una ventaja sobre las revistas impresas (como Java Uepor,) En

cuanto un articulo va enseando un concepto particular o tipo de programacin, JavaWorld

o/rece un applet de Java que muestra a ieccin.

Preguntas ms frecuentes en Java

Como complemen.o a las listas de FAQs (preguntas ms frecuen.es) sobre Java que estn
disponibles en el sitio Web de Sun Microsystems, los programadores de Java que u,ili/an
los grupos de discusin de Internet, han colaborado con sus propias listas de preguntas y
respuestas.

Elliot.e Rus.y Harold. patrocinador de la pgina Web sobre libros de Java, ofrece tambin lu
lisia actualizada de Java FAQ en Ja direccin siguiente:

http://sunsite.unc.edu/javafaq/javafaq.html

Otro recurso similar, la "Unofficial Obscure Java FAQ-, se inici como un esfuerzo para con

testar algunas preguntas menos frecuentes. Se localiza en la direccin siguiente:

http://k2.scl.cwru.edu/-gaunt/java/java-faq.htnii

.J*-?.

Apndice B

1570

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

de Usuarios de Internet. A continuacin se describen algunos de los grupos de discusin de


Java en Usenet:

Oportunidades
de empleo
S. est aprendiendo Java como un medio mr,
omo un medio mr,

tas relacionadas
lid con ese tema en Web C
listas
C77" '^^ ** **"' "^ de h

cuentan con una seccin dedicada , |,s ,m , ,7 ,

"W* ^ a"arccen en eMc

''> <>pomini<ad.s de Iralxijo .

comp.lang. java.mise Aunque este grupo ha sido designado como el rea de dis

cusin y comentario de Java para todos los temas que no pertenecen a ningn otro

P;,ra

grupo, es ms utilizado que los dems. Reemplaz a comp. lang. j ava a mediados de
1996. Aqu se puede comentar cualquier tema relacionado con Java.

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.

ellj^srArarse a!d T"'" T C'

Pirfa tar como resultadotna eom^i ^"T'' ^"'

Java. Para averiguar ema regis," ^

seccin Add , Resource, de Gamehm

' " ^ M"

PtIM"lllnicnlc- d>ri

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

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

-enas de pe

"cspccmc<)

Pero el servicio es gratuito, y hay ms de 1000

' " """ "C" l|" ^ixl^-

- ^ Caveto,: 12n7Z1TMh
C" U'S l|UC P"alC b"Slllxtrnet Nl d

nttp://wv/v/.careerpatfi.com

i I

ireccin

cionadas con la programacin de Java. Esto lo conviene en otro buen lugar que deben
frecuentar los nuevos programadores.

comp.lang. java.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

575 I

Apndice

Tome nota de esla carpeta tal como esl anulada en In Folder. Esla es la crpela Path del
JDK, y la teiidra'<|uc utilizar muy pronio.
Un ejem

^ e) cual es p.ne de! JDK. E. argumento.

Esle comando ejecuta el interpre.


Esle

^a un intento con este

e comando y ,c despea -

Si

csu'i

utilizan

Verifique la instruccin path


Para asegurarse que su sistema est buscando los archivos del JDK 1.2 en el lugar correcto,

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

"-*--

rsrt,, o un mensaje de File not

distinto.

5=

comandos:

Entrada

path

Ver una lista de todas las carpetas en que Windows busca programas de MS-DOS; sios
vienen separados por signos de punto y coma. He aqu un ejemplo:
PATH=C:\WIND0WS;C:\WIND0WS\C0MMAND;C:\JDK1 .2\BIN

En este listado de PATH, el texto C: \JDK1 .2\BIN se refiere a la carpeta PATH del JDK, que es
la carpeta donde el sistema buscar el archivo java. exe. Tambin hay otras dos carpetas ano
tadas en PATH, que son C: \WINDOWS y C: \WINDOWS\C0MMAND.

Su configuracin de PATH debe incluir una referencia a la carpeta PATH del JDK. (Las letras

SSi

maysculas no son importantes en esta instancia, C: \JDK1.2\BIN es igual que


C: \jdk1 .2\bin.)

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
Figura C.1
Resultado de una

bsqueda de
java.exe.

(Control Panel I Settings) desde la barra de tareas.

\\

Para cambiar PATH en un sistema Windows 95, debe editar el archivo de texto

autoexec.bat. Haga clic con el botn derecho del ratn en el archivo y seleccione el coman
do Edicin para abrir autoexec.bat en el Bloc de notas.

El archivo autoexec.bat contendr mucho malcrial tcnico incomprensible para los princi
piantes en el sistema MS-DOS.

Busque una lnea que comience con el texto PATH=, SET -PATH= o PATH seguido de un espacio
en blanco.

[i

577 I

Configuracin del JDK


Apndice C
576

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

Tip

http://www.prefect.com/java2i.

Si al utilizar el compilador de Java en un archivo fuente obtiene el error Class notJ

lo Drimero que debe verificar es si escribi el nombre correctamente respetando las mayuscu

Us y minLas. Asegrese de estar en .a carpeta que contiene el archivo ,ueme que ,n- de
compilar y vuelva a verificar el nombre del archivo.

C:\jdk1 .2\bin

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

;-;

Lpteo de cada archivo se desp.egara en 1. columna que est mas a la derec:ha * . h


carpetas, tal como aparece en la figura D.2. Los non.bres abrevados do .os auhn^, que

apLe en el lado izquierdo de la lista se deben ignorar, ya que son nombre, que uuhza
Windows para manejar los archivos.

Figura C.2
Lista de archivos en

una ventana de
es de las carpen,.

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

La configuracin de CLASSPATH se debe cambiar editando autoexec. bat. un archivo de icmo

Resultado de uno

ubicado en la crpela ra?, del disco duro (normalmente es el dispositivo C).

bsqueda de

Para cambiar la configuracin de CLASSPATH. en un sistema Wimlows NT. no tiene que abrir

tools-jar.

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-

escriba el texto CLASSPATH= seguido de la carpeta Patrt del JDK. como en el ejemplo

r, ASsPAVH.

siguiente:

CLASSPATH*.C:\jdk1.2\lib\tools.jar

Guarde el archivo despus de hacer el cambio. Para que este cambio suria electo deber reiniciar el sistema. Si el archivo tools .jar est en la carpeta que milico en la instruccin

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
581

Configuracin del JDK

Apndice C

unsetenv

CLASSPATH

Para que este cambio sea permanente, debe retirar el comando que estableci CLASSPATH de
su archivo .profile, .eshre o .login.

Estos cambios no tendrn efecto hasta que ciee la sesin actual e inicie oir, o utilice

CLASSPATH-.;C:\DEV\CHATSERVER\:C:\jdk1.2\lib\tools.]Br

el comando source conelnombre del archivo que cambi. Si aller de alguna forma el
'rrhivo .login, el comando source ser el siguiente:
source

-/.login

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

Repa! acin de errores Class notfound en otras

ment

] i
i
r

e al momento de iniciar la sesin


ver se estab,eci6 CLASSPATH,

escriba lo s,gU,en,e en e, indicador de comandos:

PPIW echo SCLASSPATH

ec,6 un va,or de CLASSPATH. puede borrar.o escnbiendo e, comando siguiente:


blec,

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.

Esta caracterstica toma nombres distintos segn el editor. Cuando guarde un

documento o establezca sus propiedades, busque una opcin de formato como las
siguientes:

Texto simple
Texto ASC11

Uso

de un editor de texto coneUPK_

Apndice D

guente error'^nenuio por el compador del


,

nassFont

not-found

Bs,c error .neluye un si.no de dos pu.os . ^u

archivo fuente de Java. El numero es la hm.a q^

^fc

b0,n inicio, es un

lcxlo. Slo puede ma.u.j

de MU^f^. Al,mvo.
Z \-\-
formatos
fo
d . bmar desde el
d

sdc un M^

^ ^.^

a tas el mor. E n """ ' ^ " , , > tad, , d

*p.m un pro,. ^;':::":,"" "i,-.-

-'- -

& tcxU)

Cmo crear una

asociacin de archivos

en
,

Une,
Une en que se cnc-cnuav

sor.

S5

d.tando

csl presente

dio en

la carpo,.

,, i,lc,,rra la O
K,,a croar -a

(vea la figura E.2).

Figura D.2

Figura D.1

declararon.

,;l

vez
en texto mpte >
ve
mcn,os
mcn,os con
con que
que irab..jo y

MS-DOS, pero "cli


"

intype

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

5871

Apndice D

Desplcese a travs de la lisia Regislered lile lypes hasta que e.icuenuv el ii|)o yue incluya a
JAVA en su campo Extensin. El lugar ms probable para encontrarlo es bajo un ttulo como
Java files o Java programs, pero ese podra no ser el faso en su sistema.

Cuando encuentre el tipo correcto de archivo, necesitar borrar la-asociacin existente para

Sucediera algo extrao, debe borrar

la asociacin ex.stente d. . .va.

Cmo borrar una asociacin de archivo


to p

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.

nueva asociacin.

cn 0,

reemplazarla con una nueva. Seleccione Remove (Quitar) para borrar la asociacin actual, y

Cmo crear una nueva asociacin


Al hacer doble clic en un archivo que no tenga una asociacin conocida para su extensin de

abtrf , ven, de Opciones con .,

archivo, se abre una ventana Open Wilh (Abrir con), que se muestra en la figura U.4.
Figura D.4
Asociacin de unc

Figura D.3

extensin de archivo

/^, ficha FU'1 Tyi"'s-

con un programa.

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 588

Apndice D

Cmo asociar un icono con un tipo de archivo


Despus de asociar los archivos .java con el editor seleccionado, en forma predeterminada se

le asigna un icono a todos los archivos . java de su sistema.

Si desea cambiar este icono, seleccione View I Oplions I File Types (Ver I Opciones de crpela

I Tipos de archivo) desde la barra de mens de una crpela para ver el cuadro de dilogo File
Typcs. Desplcese a travs de Registered File Types (Tipos de archivo registrados) para

encontrar el que est asociado con la extensin de archivo JAVA.

Cuando este tipo de archivo est resaltado, seleccione Edil (Editar) para abrir una ventana

Edil File Type (Editar tipo de archivo), como la que se muestra en la llgura E.5.
Figura D.5
La ventana Edil File

Type.

ndice

jjc] '? -Il ' .-rgflg^'

- '.* .'

jr-

wr- -.

h*t7l-:.-

...._ .,

;.r, . i

iiv

|.Acfci *;:;>,' -^-"-"

!l

Smbolos
fichiov* '

DtfK* |

//anotacin de con.eMh.no.

* (""IM-Tsaml), 83
* (asterisco), 180, 305

si :'.:i'V

21), Rrjficos, 20(1-201, 5.S0-5X1


applei Map2D. 22i-2'')

I ) (Havi-j), r7, US
I 1 'crcheles), 112

arcos

dibujo, 20Xi 224

A (circunflejo), 83

Seleccione C hange Icn (Cambiar icono) en la ventana Edil File Type y podr decir un cu

ejemplo. 2O"-211

= (sigilo igual)

relleno, 20y

operador de asignacin

dilereme pan desplegar todos los archivos .java.

Si le gusta alguno de los iconos desplegados en la ventana Currem Icn (Icono actual),

operador igual, 105

trazos de dilmjo. 222

operador NOT(.'), 83

coordinai si.siema. 202


i-'lp.ses, 223

(pimo), 93-M

'unciones co|)iar/peyai. 212

I (t)arra verlical), X3

Crap!uV.s2D. ohjeuis, 21';

+ (signo ms),

lneas, 203, 223

operador de concaienacin

valos, 207

operador de incrememo(++1
XI

''

; (puni y coiii), C6

/-../anotacin de comentario,
/**...*/anotacin de
comentario, 73

463

coordinar espacios. 21')

- (ilion), SI

Lina ve/ cn< onirailo el cono que desea, resllelo y lug;i elie en OK p:ir;i seleccionarlo.

miiesira. 464-4M)

'-'lInpilSlreumO. mc'todo

220-221

1(15

garn en la 'emana Current Icn.

IM

deil-ile, aplicacin de

patrones de relleno.

''perador csiuual ('-i

Para ver qu iconos contienen, puede abrir cualquier archivo de iconos, programa de
Windows 9.'. o un archivo .OLL. Despus de seleccionar un archivo, sus iconos se desple

HiiliereilKeader. objetos,

'olor, 220

' (si8no de exclamacin)

Browse (Ext minar) para ver los iconos de los archivos de su sistema.

ci>iicxiiine< de socket, 4(0

inexiunes cu Web. I62-1(,3


""os en Internet

airibuu,!. de transforman,',,,

68. 72

martllelo y I aga ciic en OK para hacer el cambio. Si desea ver oros iconos, seleccione

al.rir

polgonos
agregar punios a. 2(l(>

dibujo. 205. 22-J-225


icciangiilos

dibujo, 203. 223

esquinas redondeadas
r0-l-205

patrones de relleno, 204

l'HI.Ciim.i.viMiii. objetos
4(,3

AbstIacl\Vil,rio,vln(,-,O()JkiI
i AWT
acceso

control de. .182-383, .186-387

elementos de arreglo, 114.) 5

herencia. 387

mtodos de. 387-388,412


Paquetes

predeterminado. 30.S
privado. 38-1-385
protegido. 385-386

pblico. 385. 39X-3yy


variables

de clase, 96

ndice

1590

ndice

de instancia^ 93-94

de naipes

agregar, 299

AccessControlConlext, dase,

creacin, 299

610

desplegar, 300

AcccssController, clase,
610

accin, evenlos (le, manejo,


341-343,537.

HdiunO, mlodo
argumentos. 341-342

ejemplo, 300-302

ActiveX, 486
ddActionLislciicr(), mtodo,

argumentos

clases internas. 411

de variables, 142-143

AIJGN (i'liquvla <A1MM.BT>).


atribulo, 185
alineacin

uddl'oinlO, mtodo, 2116


addSpolO, mtodo, 322

adjuslnieniValueChangedl),

mlodo 538
programa de miiesir.i.
538-54(1

adjusimenlValutChangedO
n.cl..d>,, 538
adininislrailores de diseo

aliernali 'as de, 315

249-253
punorama.231-232
parpadeo

ejemplo, 240

panorama, 239

componentes, 292-293

reduccin. 240-243

296-298
diseos de cuadrcula.
295-296

diseos de cuadrcula de

bolsa, 302-313

Adjustmentl.istencr, escucha de
i-vcnlu, 532

253-256

lcnica de animacin.

applets, 185
diseos de bordes,

addUncO. mlodo. 32X

lisiado del cdigo fuente

piular/repintar, 232-233
sonido

diseos de naipe. 299-302

DigialClock, ejemplo.

mrgenes, 313
paneles, 298-299

AiiHM.-buMiilli.javu, programn,

(ejemplo aritmtico sencillo),

236-239
ejecucin. 234-236

inicio, 235
paro, 235
vea atnbii'n grficos

78-7!

ampersand (&), 83
ampliacin de nterfaces,

aplicacin lcTriva (sockt't

cliente/servidor). 468

BaseFramc 1, 355-356
cerrar, 378

C'opyArrayWhile
cdigo fuenie, 129

inain(), mlodo. 129-130


salida. 129

Copyl'asie, 500-501
ChangcTule, 535-537
de compilacin

plataformas de Windows,
28-30
sisinnas Solans. 31

definicin, 146

anchor, restriccin, 310-311

disear. 469-470

DoTest. 131

AND, operadores, 83

ejecuiar, 482

EchoArgs, 149

de bord< s, 296-298

Andrecssen, Marc, 14

lisiado del cdigo fuenie,

EvenSleven. 120-121

de cuad1 cula, 294-296

animacin

creacin 292

dcinieit n de, 268

de cuad cula de bolsa

407-408

de imgenes

479-481
servidor

ere; cin. 304-307

carga, 243

consirucior. 470

de- rminar proporciones,

dibujo, 245

ejecuiar, 482

muestra del applet

inilQnAO, niiodo. 474-475

3-17-309
diw o, 303-304

eje nplo, 311-313


org mi/:ic'U>i) tic

CHiipoucnles. 3O9-. II

Rumore. 246-247
observadores, 246

lisiado del cdigo fuenie.

475-479

HclloDan
archivo fuente, 26-28

compilacin, 28-31
ejecucin, 30-31

independientes del AWT.


364-365
Info, 527-530

recuperacin. 243

inainO. muuio. 475

LabelTeM. 133

rulas rclalivas de aivhivo.

pUKVSvIlipillO, IIKMihK).

mainO. mtodo. 147

QnA.lM, archivo, 474

NamesLoop, 127-128
NumberReader, 124-125

creacin, 257-258

run(), mtodo, 471-472

polticas de seguridad, 434-135

ejemplo. 293-294

definicin de, 257

variables de insianciu, 470

Flowl.ayouK),

ejemplo de applet

WAITFORANSWER.

PopUpWindow, 354-356
SeeMeihod (ejemplo de

panorama, 302
relleno de celdas, 31?
de flujo

constructor, 294

244

doble bfer

Checkers, 258-261

472-473

eslado, 473

ciienie. 479-481

reflexin), 108-109
SumAverage, 150

vea laminen applets: lisiados


Applel, clase. 177

<AI'I'!.ET> iliqutta (HIM1.I.


dO

atribuios

AUGN. 185
C'ODI-:. IN3. ISfi

COIiUASK. 1.S7
IISHACB, 186
VSPACE. 186
ejemplo, 182-183

applels, 11-13

asociar informacin con. 491


cargar un servidor Wch. IS4

dase Applel. 177


colores de fondo. 2IK

ColorSwirl, 240-24 I
ColorTesi. 366
diseo. 367
inicio, 368

lisiado de cdigo fuenie.


manejo de eventos. 371
marcado de HTML. 377
- resultados de actua

lizacin, 372-374

subpaneles, 369-370
comparado con las aplica
ciones, 13, 174. 377

comunicacin enire

gelAppletO, mlodo, 496


gelAppleiComexiO,
mlodo, 495
gelAppletsO, mtodo,
495
creacin. 177-178

listado del cdigo fuenie.


260-261
depurar salida. 197
desplii-pio en panlalla. 1X0

DigialClock

presentacin. 470

375-377

doble biifer, 259

detencin. 179.233

implememacin del
servidor. 469-479

Checkers. 258

destruccin. 179-180

mplemenlacin del

116

cteme

combina , 298-299

ejecucin. 482

priniNanics), mlodo,

cuadros de dilogo, anexar.


360

definicin de. 11

mtodos. 545

clase, 116

salida. 116

.,

Irivia clientc/scrviiliir. 4(x

cdigo fuenie, 115-116


main(), mlodo, 117

comparadas con appleis. 13,


174. 377

definicin, 233

546-549

pasar. 148

ejecucin, 2(>2

diseos de flujo. 293-294

escuchas de eventos. 545

listado del cdigo fuenie.

ArrayTest

clases auxiliares, 147-148

subproeesos

clases,-545

manejo, 148-151

ciclos. 262-264
frmalos de archivo, 261

SwingOilorTesi. 518-520

eslado, 473
aplicaciones

copiar imgenes, 24X-249

ulcunce

511-512

WAITFORCONFIRM,
AIICapsDemo, 457-459

537

uddltcmO, inlodu, 278

caplurur imgenes, 24K

Swing, marco ele irahujo

eslado, 473

compilacin, 256

de lxico, 134

534,537

Neko, applel

WAITFORCLIENT,

mrgenes, 313,

valor devuelto, 342


evento, 532, 537

'

color de fondo, 25?

definicin de, 118

aelioiil'crforimdl), mtodo,

Graphics, 256

especificacin, 292-293

definicin, 341

AcliunLislencr, escucha de

I i m ilaciones, 257
eliminacin de un objeto

ciclo while), 237

lisiado del cdigo fuenie,


236-237
p.unn). mtodo. 238

repainu). mlodo. 238


ninj. mlodo. 238

sleepl I, mlodo. 23S

variables de instancia. 238

Dminos, 12
cicmplo l'alimliome

aichivo H'I'ML, 182- 1X3

lisiado del cklig<i Ja\,i.


I SO-181

painid. miihlo. 181

l-'illmore. 246-247
firmas digitales
autoridades de certifi
cacin. 431

cvililicados. A'MI
ejemplo. 431-433
navegador especfico,

433-434

lormaios de archivado
archivos CAU. 190
archivos JAR. I8S-I89

archivos Zip, 189-190

HTML. marcado
alineacin. I85-IS6
<APPLET>, etiqueta,
182-185
espaciado. 186

<O13JL:CT>, entnela.

187-188
<PARAM>, eiiijueta.
191-192
rompimienios de lnea.
185-186

inicio. 178-179. 233


liiniaciones, 175

'

ndice

1592

lnea de estado, 491.

init(), mlodo, 346

lneas

listado del cdigo fuente,


348

addl.inc(), mtodo. 328

marcado de HTML, 348

inill. mlodo, 326

listado del cdigo fuenie,

objetos File, 456

definicin de clase, 321

conhol. 2X3

mouseDownQ, mlodo,

iniO, mlodo, 322

creacin, 282

lisiado del cdigo fuente,

ejemplo de, 282-283

323-324
mareado de HTML. 324

mouseDownO, mtodo,

mouseUpO, mlodo, 328

322

paint(), ml(idi). 329

painlQ. mtodo. 323

Pciims, clase. 327

repainu), mlodo. 323

manejo de ovemos

ches de raln, 31 y-325

teclas. 333

Ar(".Slream(), mtodo, 448


argumentos

manejo, 1-18

SumAveragc, cjcniplo,
150-151

inil(), mlodo, 334

de ba xa de desplazamien-

keyDownf), mtodo, 335

aplicaciones. 148

listado del cdigo fuente,

applels. 191-195

maivado de HTML, 337

ilc ti.- ia iIl- barra du

paintO, mtodo. 335

de' plazamiento, 344


de ic;lado. 331-338

vea tambin aplicaciones: lislados

cjen pi de applet

Se Back, 345-348

han. leEvemO. mlodo,

versiones Java, 176-177


vinculacin. 491
BuuonLink, ejemplo.

31 -1-319. 338-340

492-494

mo\ miemos de raln.

3:5-331
lipr; de eventos, 318
Map2r , 225-228
mlod s. 178
NewP. lindrome

arihivn HTML. 194-195


Jigo fuente de Java,
93-194
p;iN2i parmetros a

definicin. 16
paquete java.awi.dnd

appletviewer, herramienta,

mainO, mlodo. 117


piinlNamest). mtodo. 1 16

vea ambin referencias

accesar, 114-115
cambiar. I 15-117
lipos de dalos, 1 14

iinplenicniacin. 112

ejemplo. 2O'--2II

muliidimensionales, 117-118

lelleno. 209

objetos, 113-1 14

archivos

programa de muestra

asociacioner

ArrayTest, clase, 116

borrar. 457

cdigo fuenie, 115-1 16

pru. la. I 83-1 4

cambiar not bre. 457

mainO, mlodo, 117

seg ridad. 177

class.dat. 4-2

pnniNamesO, mlodo.

poli cas de seguridad.


A? 1-435

Sel lack. 345


aolionO, mlodo. 3-16-347

cliangcCciloiO, mtodo,
347

devolver lai lao. 457


frmalos

atrapar excepciones, 418

bloques try...caich, 419-421


instruccin finally, 421-422
atribuios de eliminacin
(.Invn2l>)

color, 220

patrones de relleno. 220-221


trazos de dibujo. 222

"tribuios, de clase, 38-39


atributos (HTMI.j
<APPLET>. etiqueta
ALIGN, 185

CODE, 60. 183, 187


CODEBASE, 187
HEICHT, 60, 183
HSPACE, 186

ArrayTcst, aplicacin

elememos

mlodo ilrawArci). 208

asterisco (), 180,395

excepcin, 417

arreglos, 5611

dibujo

eventos, 533-534

informacin con applcls, 491

ArraylmlexOulOfltounds.

apuntadores (C/C++). 100


arcos

componentes con escuchas de

inierfaces. 576

salida. 1 16

611-61

asistentes, JDK Sctup, 23-24


asociacin

clases. 577

cdigo fuenie. 115-116

Arc2D.Flo.it. clase 22-1

> :ilores nulos. 192, 195

iiTasIrar y colocar

objetos URL. 492

:iParameier(), mlodo,
PAKAM>. eliuucla. 191

mindos. 143-145

clase. 116

c cmpUi, 192-195
19!

pasar a:

linkToO. mlodo, 494


visualizacin. 60-61

558

lichoArgs. ejemplo. M9

de r:rt de texto, 344

336-337

valores variables, 68, l~i 88

Swing. 5I(>

definicin de clase, 334

de er foque. 343-344

306

manejo de evcnios. 344

dc^in, 341-343

,0, 144-345

resiricciones a componemes

reas de texto

addSpoiO. mlodo. 322

328

asignacin

archivos de ciclos de sonidos:

329-331
maicadu de IITML. 3.11

mouscDragO. mtodo,

262-264

Spots

327-328

'>'."

Zip, 190
conos de tipo de archivo, 646

116
salida, 116

CAB. 1-0-191

subndices. 1 14

JAR, I KM 89

variables, I 12-113

VSPACE. 186
W1DTH.60, 183

<PARAM> etiqueta, 190

audio

frmalos de archivo. 261


reproduccin

ciclos, 262-264
play (), mlodo 262

AWT (Kit de herramientas


de manejo abstracto de
ventanas)

adminisiradores de diseo
aliernalivas, 315
combinar, 298-299
creacin, 292

de bordes. 296-298
de cuadrcula, 294-296
de flujo, 293-294
de rejilla de bolsa,
302-313
de trjela, 299-302

especificacin, 292-293
mrgenes, 313
panorama, 292

animacin

definicin. 356

applei Neko. 248-256

ejemplo de Te.MDialog,

cargar imagen. 243

357-360

dibujo de imgenes, 245

modal, 356

doble bfer, 257-261


eliminacin de un objeto

objetos de archivo de
dilogo, 361

Graphics, 256
observadores de imagen

ventanas de dilogo. 357

diferencias en plaiaformas,

246

268

parpadeo, 239-243

marcos

piniar/rcpiniar, 232-233

crcauii, 352

recuperacin ,lc maten

ilchimuin de. 352

243

dunensionamicnio. 353

resumen, 231-232

ejemplo di. .'JaselTame,

rulas relativas do aichivii.

355-156

2-l-J

IM.'ltiIS

sonidos. 261-264

acii\.ir. 363

subprocesos. 233-239
aplicaciones independiemos

barras Uc mens. 362


.lo-.aoiiv.il. 363

364-365

elemeiitiis do nicm.s.

clases. 268, 569

.i63-.t(,4

ColorTest. applel. 366


diseo, 367

despliegue, 353
ejemplo de una ventana

375-377

coniiM.iu.il. 354-356

marcado de HTML. 377

mensaje llnsigned Java

cin, 372-374

Applel Window, 353

subpaneles. 369-370

ocultar. 353

componemos

'fu iwiihit'-ti grlia; JPC

agregar a coillonodoios.

269-270

botones, 273
279-2X2

casillas de verificacin.
274-277
etiquetas, 271-272
lien/os. 2X7-2SX

lista de seleccin,
277-279

lisias dcspla/ahlcs.
283-285

cuadros de dilogo
agregar a los appletx 3(,(j
creacin. 357

eventos. 361-302

resullados de actualiza

campos de lexio.

poor. 3I.S

manejo de evcnios, 371

2S5-2X6

u-ntanas. 352

listado del cdigo luenic

reas de lexio. 282-283

ovenlos. 364

inicio, 368

barras de desplazamiento.

t
i

B
liad ciimniand o error en nom
bre de archivo, mensaje, 26

haras de desplazamiento
creacin, 285-286

ejemplo, 286

manejar valores de. 286


manejo de eventos. 344-345.
538-540

Swing. 517-518

barras de niems. 362


llaselM-aiiiol, a|>lioaoiiiri,
3SS-3SC,

BasicPermissiun, clase, 610


beans, rea JavaHeans
l>ibliolecas de ciases, .18

Indi"

1594

bloques, 118-119
definicin, 67

try...calch. 419-421
ltoole, (corgc, 42

CABBASE (etiqueta

<PARAM>), atributo, 190


cadenas, 76-77
clases

BorderLayouK), mlodo, 297

StringSclection, 498, 576

borrar archivos 457

StringTokenizer, 620

botones

de caracteres, 76-77

Cerrar
aplicaciones, 378

Certifcale
clase, 613

ejemplo, 273

nuil, 540

inlcrfaz, 609

de opcin

cambio

creacin, 274
Swing, 517

manejo de eventos
:le accin, 537

de elcmenios, 541-5-'.'

Swing, 515-516
BR, eliqucla, 185-186
Itreaklterator, clase, 616
ItiifTcrcdliipiifSlrcaniO,
mlodo, 445

BulTiTcdOutputStrcamO,
mtodo, 446
BufferedKeaderO, mtodo 454

115-117

JComboBox, 517

valores de variable de clase,

lor

ejemplo, 127-128

valores de variable de
instancia, 94-95

campos de texto
caracteres de ocultamiento,
280

BultonLink, applet de r.ueslra,


492-494
bylcs, lili ros de, 445

bylcs, Hujos de, 438-44 I


archivos de entrada
creacin, 44

lectura. 440-442

archivos de salida
creacin, 443
escribir en, 443- 44

bytes, tipos de datos, 7i

190-191

CABarc, herramienta 190

mtodos, 53
JI-raniL'. 51 I

whilc. 128-130

JLabei, 515

clases, 35-36, 62, 135

ejemplo, 280-281
manejo de eventos

541 -542

Swing, 5)6

cupucidades de Java, panora


ma, 1J
caracteres de fin de lnea,
454-456

JPasswordField, 516

Applet. 177

JRadioButton. 517
JScmlIBar, 517
JTexIArca. 516
JTexiField, 516
l-ine2D.I-loai, 223

Arc2D.Floai, 224

Meihod, 109

abstractas, 392-393

AbstraciColleclion. 618
agregar a paquetes. 39S

atribuios, 38-39, 620

Modilicr, 109

auxiliares, 147-148

MyReci

UullonGroup, 517

CLASSPATH. variable. 397


compilar, 43-44

CardLayoutO, mtodo, 299

conflictos de nombre, 396

cargar

constantes, 137-I3S

imgenes, 243, 24S-249

Countlnstances, 3S9

NamedPoini, 167
Pcr.son, 159

Web, 184

casillas de verificacin
botones de opcin, 274-27 '
creacin, 274

definicin de, -11

mtodos, 42-43
variables de instancia.
41

PriniClass, 163
PrimSubClass, 163

l>rimSubClass2, 164

ServerSocket, 467

devolver estado de, 274

Choicc, 277-279

Socket, 467

ejemplo, 274

definicin, 136

manejo de eventos

diseo. 36-38

Socketlmpl, 468
SiringSeleciion. 498

eventos de accin, 53*

Ellipse2D.FIoai, 223

subclases

eventos de elemento,

Error, 416

creacin. 55-60

Field, 109

definicin. 48. 62

no excluyentes, 274

FileDialog, 361

Swing, 516-517

finales, 392

verificar/no verificar, 274

FontMetrics, 214

claves

privadas, 433
pblicas. 433
ileai Uiii( i, iiHJiodii, 212

superclases

definicin. 48, 63
indicar, 136

TextDialog. 358-359

lizacin, 372-374

siihpaiiclf.-. 369-370
siMcnia de color KG,B, 216

ColorSivirl, i|i|)lrl, 240-241


ColorTest, ippltt, 366
diseo. 367

iniciali/acin, 3(>S
lisi.jdo del ckIl'u fuente
CiilorConiiiils. clase
.!7d-.t77

ColoiTcsi. clase 375-376

clientes
aplicacin de Tiivia
ejecucin, 4X_>

lisiado del i-ilijrn lianic


479-4NI
soekels. 4fi7

Clipboard, 498

aplicacin de muestra
499-502

ClipboardOwner. imerfa/
499

operaciones de copiar/pegar
499

close), mtodo, 439


closePathO, mtodo, 225

CMYK, sistema de color, 216


CODE (etiqueta <AI>]'lj;i>),
atributo, 183, 187

COUKBASE (etiqueta
<AITLET>), atribulo, 187
CodeSource, clase, 610

cdigo de bylcs, 18

cdigo de mquina, ](,

cdigos de escupe, 75
color

atributo de transformacin
220, 2I6-2IK

bsqueda del color actual.218


CMYK. sisiema de color, 216
de fondo. 218

ColorTesi, applei. 366

tramado. 216

ruliirrs'<li< IoikIo. 218

clickCount, variable, 324

lisiado del cdigo luenic

MyRect2, 161-162

creacin

del JDK), 397

clave de interrupcin. 13)

155-i 56

Constructor, 109

cargar applcts a un servidor

Cl.ASSI'ATH (configuracin

definicin de clase, 155


156-157

class, palabra clave, 136


class.dal, archivo. 442

buildReciQ, mlodo

clases, 180

541-542

CAB (gabinete), archi eros,

valores de ndice, 126

creacin, 279-280

eventos de elemento,

bullonO, mtodo, 273

diseo, 52

circunflejo (A), 83

304-309

BultonGroup, clase, 517

creacin, 50-52

instrucciones vacas. 127

control, 281-282

buildConstraintsO, mtod .,

sobrecarga, J56

errores comunes. 127

panorama, 125-126

error, 30-31, 397

JCheckBox, 516

jerarquas

rcsiillaiis dt- la actua

Class not fuind. mensaje di

Jabberwock example, 45-47

do...\vhile, 130-131

96

vm liimhiri, iiiicrfat-fs

Windows, 352

ventajas, 410

fuentes de eiiquetas, 271

eventos de accin, 537

declinacin, 155-156

alcance, 411

JRuiinn. 5I.S

375-377
mam-jti de cvcnitu. 371
marcado de HTML, 377

de instancia, 136-137

nombrar, 411

repeticin de, 128-130

listado del cdigo fuente,

de clase, 138

ejemplo, 410

ciclos,

disea 3fi7

iniciit, 36S

variables

internas, 409-410

dibujar, 207

BufferedWrilerO, mtodo, 456

buildKcctO, mlodo

simple, 54. 401

importar, 5K, 180, 395

inierrupcin de, 131-132

elementos de un arreglo,

ejemplo, 275-277

panorama, 48-50

certificados (firmas digitales),


430-431

TcxiFielu. 27'). 574


TJmmable, 4I(>
UlManager, 521

mltiple, 54, 401

Unjas. 4.W

de concatenacin, 86
clculo distribuido, 488

herencia

conexiones de socket. 467

creacin, 273
etiquetado, 273

marcado de HTML, 377

ii

manejo de evenios, 371

resultadas de la actualizacin
-VIII-SCu!,,,!), IIICIikIi,
37-1

liCiUiollSlio. mtodo.
373
updaiel;, mlodo. 372

subpanclcs, 369-370
comando cd, 28

combinar administradores de
diseo, 298-299
loincniariiis, 72-73

comparacin eiure objelos,

105-106
compoiicnicj,

ActiveX. 4S6

adminisirador de la imcrla/
de usuario, 521
agregar a las aplicaciones,

269-270.512-514
alineacin, 292-293
diseos de borde. 296-298
diseos de cuadrcula.
295-296
diseos de cuadricula de
bolsa. 302-313

diseos de (lujo. 293-294


diseos de naipes. 299-302
mrgenes. 313
paneles, 298-299

s
'i

ndice

596

reas de icxio

control, 283
creacin, 282

ejemplo, 282-283
Swing. 516
asociacin con escuchas de
evento, 533-534-

barras de desplazamiento

interfaz de usuario/conso

121-122

persistencia, 487

switch

porttil, 487

ejemplos. 123-125

sitio Web, 491

Swiiig. M7-3I8

soporte de computacin

distribuida, 488
diseo. 4X8

lienzos. 2S7-2K8

Swing, 515-516

listas de seleccin

bolones de opcin, 274-277, 517


campos de texto
caracteres de

(cuitamiento, 2X0

ejemplo, 278-279

Swing, conjunto, 517

casillas de ver ficacin

creacin. 2 74

control, 285

no excluye ites, 274

creacin. 283-2S4

516-517
verifiejr/n verificar, 274

creacin de di -ieripciones

para, 522

463
sockets

dul lado del cliente, 467


del lado del servidor.
467-46K

implemcntacin de la

capa de transpone. 46S


Trivia, aplicacin. 468

diseo, 469-470

ejecucin. 482
implenicnl.tcin de

nombrar. 523

cliente, 479-481

restricciones

implemeniacin del

fill, 3)0

servidor, 470-479
conexiones en Web,
462-463

creacin. . 71

gridheight, 306

ejemplo, 171-272

gridwidth. 306

fuentes, 2 ' I

gridx, 306

Swing, ce ijunto, 5!5

gridy. 306

constantes, 137-138

le.un. 271

weightx. 307

Constructor, clase, 109

weigthy. 307

contenedores

vcniajas. !71

invisibles. 4> )
JavaBcans

API de ii rospeccin.
I'H)

API de m inejo de

eventos 490
API de pe sistencia,
490

arquilectu a, 487

sugerencias, 522
ventajas. 486
componentes de software, vea
componentes

comunicacin entre iipplcls

getApplet(), mtodo, 496


getAppIeiContext(). mtodo,
495 .

getApplets(), miodo. 495

conflictos de nombres (clases),


396

componentes, agregar.

269-270
definicin. 268
continu, palabra clave, 132
conversin

de texto a maysculas.
457-459
de tipos primitivos a objeios.

104-105

so|X>rtc para, 496-497

coordnate spuecs, (grneos),


219

coordnale syslem, (grficos), 202


copiar/pegar, operaciones
Clipboard, 498-499

aplicacin de muestra,
499-502

ClipboardOwner. interfaz
499

objetos transferibles
cadenas de texto, 498
definicin de. 497

sabores de datos, 497-498


soporte para, 496-497

copyArcO. mtodo, 212

l'o|>.vArray\Vhlc, programa
129-13

corchetes ([ ]), 112

corinr/pcgiir, operaciones
Clipboard, 498-499

aplicacin de muestra,
499-502

ClipboardOwner, interfaz,
499

objetos transferibles
cadenas de texto, 498

Clicckcrs, upplcl, 258

i
*

doble bler. 259

eoini(lluiiiM), mtodo, 27V


cuadricula de liolsa,

lisiado ik-l entilan fleme,

260-261

administrador del di.sio de

iluikl.venl), mtodo, 12]

comparado con el admi

ClKiee. clase, 277-279

nistrador del diseo de


cuadrcula; 302
componentes, arreglo de
309-3II

creacin, 302-303

DalaHawirO, lili'loiln, 497

diseo de muestra. .I l-.ii;

DalaliipiilSlrenniO, mtodo,

relleno de celdas. 313

DuluOulpiiiStrciiiiK), mtodo,

creacin, 305

4-IV

administrador del diseo

dalos, llnjos de

de cuadrcula. 295-29(>

aplicaciones *le muestra

administrador del diseo


de cuadrcula de bolsa.

Ueadl'nmes. 451
cieacin. 449

diseo. 303-304
na, 307-31)9

relleno de celdas. .113


cuadros combinados
eventos

lectura, 449

dalos, sabores de
cieaciiin. 497-49S

lifliiiicii'in ik'. 497


declaraciin
arreglos

de accin, 537

arreglos de irrcglns,

de elemento, 541-542
cuadros de dilogo

II7-MS
variables, 112-113

anexar a los applets. 360

clases, 136, 561

creacin. 357, 523-524

consianies, 137-138

aplicacin de ejemplo,

imerfaces, 405-406

527-530

miudos. 139. 561-562

de confirmacin. 524-525

constructores. 562

de entrada. 525

decase, 145-146

de mensaje, 526

ejemplo, 139

de opcin. 52(>-527

listas de paimciros, 140

definicin. 356

lilis, palabra clave. 14 1-142

modales. 356

variables. 67, 557-55S

objetos de dilogo de archivo

de clase, 95

361

de instancia, 136-137

TexiDialog, ejemplo,
357-360
ventanas, 357

changcColorO, mtodo. 347


ChangeTitle, aplicacin,
535-537

charAtO. mtodo, 98

t
3

WritePrimcs, 450-451

304-307

proporciones rengln/colum

44'*

cuadrculas

updateO, rnlodo, 372


subpanclcs, 369-370
coiivcrtlfO, mtodo, 124

clieckboxO, mtodo, 274

CheckhoxGroup, clase, 275-276

CniiKlnsiiincrs. clase, .W

373

converlNumQ, mtodo, 125

charWidlhO, mtodo, 214

sabores de dalos.
497-498

RCBtoHSBO, mtodo

UKLConnccion. objetos.

teclado, 522

anchor, 310-311

374

463

ejemplo, 284-285

etiquetas

gclHSBColorO, mtodo

getInputStream(), mtodo,

mtodos abreviados de

definicin, 26 i. 486

marcado de HTML. 377


resultados de la actualizacin

cacin, 464-46C

2S4

estado de ci:volucin, 274


Swing, coi junto,

464

(Jcll'ilc Suipk-, apli

agregar a contenedores.

agregar elementos a. 284

ColorTest, ciase, 375-376


manejo de cvcnlos, 371

HitITciedRcadcr, objetos.

listas dcsplazables

ejemplo. 2 4

376-377

finjas

control, 279

ejemplo, 2*0-281
Swing. 51 * >

definicin, 462

agregar elementos a, 278

creacin, 279-280

listado del cdigo fuente


ColorControls. clase,

conexiones Web, 462-463

278

creacin, 277-278

diseo del applei. 367


inicio, 368

conectividad de redes

agregar a contenedores.

control. 2X1-282

tipos primitivos, 102


invertidor KCH a USt, 366

limitaciones. 123

lemas de tiempo de

diquelar, 273

a clases, 103-104
a interfaecs. 104, 405
Ciraphics2D. 219

palabra clave else. 119


operador condicional,

clases, 487

definicin de, 497

definicin, 101
objetos

ejemplos, 120-12)

mecanismo para descubrir

sealizacin, 488

ejemplo. 273

conversin por cast

if

lidacin de API, 490

manejo de valores de, 286

creacin, 273

"I5-'

definicin, 1)9

488-489

creacin, 285-286

bolones

condicionales, 560-561

comparados con Java,

mltiples, 68

decrcmento, operador de (),


81

degradados acclicos, 220


degradados cclicos, 220
dclelcO, mlodu, 457

dcIcleOiiExiK), mtodo. 457

ndice

|598

599|
desarrollo, historia de Java

Digital Clock, applct

ciclo while, 237


j
listado del cdigo fuente, '

endoso de Netscape, 14
navegador Hoava, 14

desborde (asignacin de
variable), 88
descargar

CABarc, 190

disablc(), mtodo, 363

cambio, 115-117

diseo

JFC, 510

conexiones de sockel,

painlO, mc*lodo, 1SU

JDK, parmetros de
configuracin
ventanas, 353

des(roy(), mlodo, 179

469-470

diagonal (/), 72

DialogO, mtodo, 357

dibujar

Arc2D.Floai, ca e, 224

drawArcQ. mlo lo. 208

encapsulacin, 383

Clieckcrs, ejemplo del applcl,

Web, 12

lrawOvalO, mlodo, 27
IrawPolygonO, mlodo,
205-206

de entrada de archivos,

i'rawRect(), mtodo, 203

440-442

( rawKoundRect(), mtodo,

de salida de archivos, 443-

204

444

< raString(), mtodo, 200, 214

escribir a. 439

programa de muesira,

541-542

KeyLisicncr, 542-543
MouseLislener, 543

MouseMoiionLisiener,
544

WindowLisiener, 544
espacio coordenado de usuario
219

espacios de color, 216


estilos

de enlaces (trazos de dibujo)


222

lectura, 438

Reciangle2D. :loat, clase.

enumeracin de listas

223

trazos de dit jjo, 222

indlodo. 54 I

filtro, 439, 444-445

drawRcctO, n ctodo, 203

220-221

lemSlaleChangedO,

452-456
de datos, 44y-451

rectngulos, 204- .05

color, 220

IlemLisicner

creacin, 438

Ellipse2D.FIoai. clase,

cacin de airih nos

importacin, 533

cerrar. 439

131

drawOval(), m odo, 207

icxio, 200-201

FocusLisiencr, 532, 540

445-448

do caracteres. -438.

205

533-534

definicin de, 531

almacenamicnio en bfer.

irawUnel), mtodo, 2(13

Java2D, 224-! 25

asociar componentes con

ilujo.s

definicin, 438

drawPolygon(' mlodo.

538-540

343-344

de hvies, 438-440

polgonos, 206, 22 i

piograitia de inucslra

entrada/salida

iraImage(), mlodo, 245-246

223

mlodo, 538

losiFocusQ, mlodo,

irawArcO, mtodo, 208

valos

adjusnenlValueChanged().

343-344

limitaciones, 257

Dminos applct, sitio

ActionListcncr, 537

AdjusimcniLisicner

gciFocusO, miodo.

definicin, 257

324-325

cseiieliiis de eventos, 5.12

manejo de eventos

258-261

enlazadas, 408-409

IfhoArgs, aplicacin, 149


clitores (lexlo), 26
asociaciones de archivo

borrar, 586-587
creacin, 585-587

iconos d tipo de archivo.


588

Bloc de notas, 584

envo de formas, 483


KOKKxccplion, excepciones,
417

equalsO, mtodo, 105


errores, 435
Error, clase, 416

manejo iradicional de errores,

414-415

443-444

enfoque

Une2D.F!oai, c ase, 223

patrones de i ;lleno,

cnable(), mtodo, 363

doble bfer

drawLineQ, mt >do, 203

transformacin, :s|>eeill-

empleo, oportunidades, 571

DoTest, programa de muestra,

dlsposcO, mlcido, 25<>


do...while, ciclos, 130-131

imgenes, 245

sistemas coorder idos, 202

^^

Kili|>sr2l>.I'lmil. elusc. 223

dol, notacin, 93-94

(ib
j

elsc. palabra clave, 119

espacios coordenadi >. 219


lneas

Ellipsc2D.Float. clase, 223

jerarquas ik' el.'isc. 51-52

creacin, 257-258

446-448

de caraclcres, 455-456
de salida de archivos,

drawOvalQ, mlodo, 207

doble clic, eventos de,

arcos, 209-211

con almacenamiento en bfer,

elipses, dibujo

cuadrculas, 303-304

destruccin de applets, 179-180

escribir en flujos, 439

upos de dalos, 114

clases, 36-38

applclviewcr. 60-61

archivo incorrecto, 26
vea tambin excepciones

elementos en arreglos
acceso, 114-115

JDK, 22-23

applcts

634-639

etiquetas (HTML)

de lapa final (traaos de


-

dibujo), 222

eti(|iii'l:is

cambiar lexio. 271


ciclos. 132-133
creacin, 271

ejemplo, 271-272

eiiqueas de boln, 273


fuentes, 271

Swing, 515
ventajas, 271

! -t

instruccin finally, 421-422

<APPLET>

jerarqua de clase
Error, clase. 416

ALIGN, lribuio, 185

Comando o nombre de

play(), mlodo, 262

dir, comando, 29

despliegue

Class not found, 30-31,

ciclos. 262-264

mlodos, 238

variables de instancia. 238

mensajes

ejecutar archivos de sonido

236-237

proyecto Grcen, 13-14

versiones de Juva, 15

DOS. Edil, 584


seleccin, 641-643

CODE, atributo, 183,

Excepiion, clase, 417

186

lOException, clase, 417

CODEBASE, ulribulo.

Tlirowable, clase. 416

187

lanzar, 422-427

ejemplo, 1-82-183
H.STACI-. iinb.il... l,
VSl'ACIi, atribulo, 1X6
<BR>, 185-186
<OnJF.CT>. 1X7-188
I'AKAM>, I'JI

definicin de. 416


e\cc|Vnnes explcitas. 424
e.uvjvjones implcitas.

424
lemas de herencia

|9J

l.'.s -I.1

KvenSlevcn, programa de

Ihi'ous, palabra clave,

prueba, 120-121

423

eventos de ajuste, manejo,

limitaciones, 429

538-540

Mall'nrmedURLHxcepiion,

eventos ele clic, iiumcj

417

clemenlo, 541-542

ma/)cjaJures afiidatlos,

niMiiscIJowiio. inioiii)

427-42.S

319-320

panorama. 436

mouseUpO, mtodo, 320

pasar, 424-425

Spois, applet de muesira

tiempo de ejecucin. 417

321-324

verificacin de consistencia.

eventos de ratn, 3J9, 543-544

bolones mltiples del ratn


337-338

doble clic, 324-325

4IX

exisisO, mtodo, 457


e\|)ii'si<ines

definicin. 66. 77

Lines. applei de muesira,

notacin de punto, 94

326-331

valores devueltos, 66. 77

mtodos

mouscDownO, 319-320
mouseDragO, 325

mouseEnterO, 326

i--i'

W'i/ iainbin operadores

exlends, palabra clave, 136,


407

mouseExiK), 326
mouseMoveO, 325
mouseUpO, 320

Spots, applet de muestra,


321-324
excepciones
atrapar, 418

bloques lry...calch, 419-421


creacin, 427
t'lliulil (llili/iiil.is y cii;illiKi
no, 42X-429

definicin. 414

EOFExcepiion, 417
errores de compilador,

429-430

f oplion (comando de jar). 189


feedjabberwock(), mtodo, 42
Field, clase, 109
filcO, mtodo, 456

File, objeto. 456


l'k'))i:ii<>j!<), mtodo. .Vil
l''il>l>iuli>K, cluse, .Uil

KilelnpulSti-vamO, mtodo, 440


FiieOutputStreamO, mtodo,
443

FileReaderO, mtodo, 453

explcitas, 424

FileVVrilfrt), mtodo, 455

implcitas. 424

litro de nujiK, 439, 444-445

lili, restriccin, 310

; f;

ndice

600

archivos de lectura de

nilArcO, mtodo, 208

texto, 453-455

Fillmorc, applcl de muestra,


246-247

de datos

aplicaciones de muestra.

fillOvnK), mtodo, 207

fillPolygonO, mtodo. 205-206

450-451

ni!Rect(), mtodo, 203

creacin, 449

flIlRound RectO. mtodo,

leer, 449

establecer, 213-214

gelJnsctsO, mtodo, 313


gellteniO, mtodo, 279

Font, objetos, 213

gelKeyCharO, mtodo, 543

de etiquetas, 271

funciones, ver mtodos

ell.iiliclo, mtodo, 27J

funciones miembro, ver mtodos

getMessageO, mtodo, 419


SelParamelerO, mtodo, 192

futuro de Java,16

getl'arcnio, mtodo, 360


gctl'oint), mtodo, 543

de lectura, 438

204

final,

gelSelt-cledlndexO, mtodo, 279

aplicacin de muestra,

clases. 392

class.dat, archivo, 442

palabra clave, 137, 390


variables, 391

finalizeO, mtodo, 168-169


finalizer, mtodos, 154.
68-169

Tinally, instruccin, 421-422


firmur cdigo, vea firmas
digitales
firmas (digitales)

readO. mtodo. 440


escribir en, 439
filtrar. 439. 444-445
focusGalncdO, mtodo, 540

FocusListener, escucha de
evento, 532

focusI.o.sK), mtodo, 540


l'oldcr slruclure (paquetes),
398

auiortdades iic ccnilicacin. 43 1

folders, cretcin/lmrrur, 457

certificados, 430

FonK), mtodo, 213

ejemplo, 431-433

FonlMetrics, clase, 214

navegador especfico, -133-434

fiir, ciclos, 125-126

panorama, 4M)

final, tipo de datos, 71

ejemplo. 127-128
euores comunes, 127

instrucciones vacas. 127

flujos
abrir en Internet
BuferedReader, objeh s.

formas,

dibujo. 208

ejemplo. 209-211

GeiFilc. aplicacin de

relleno. 209

muestra. 46-J-466

463
objetos Je conexin 1. RL.

4fi3

cerrar. 439
con almacenamiento en t ifer

lneas, 203
valos, 207
polgonos

agregar puntos a, 206


dibujo, 205
rectngulos

creacin. 445-446

dibujo. 203

escribir er.. 446-448

esquinas redondeadas.

204-205

lectura. 445

creacin. 438
definicin, 438

de byies, 43^-440
flujos de entrada de

archivos. 440-442
flujos de salida de
archivos, 443-444
de caracteres, 43S. 452

archivos de cscritun de
icmo, 455-456

gabinete (CAH), archiveros,


190-191

Gainelan, sitio Web, 32,568-569


generadores de nmeros
aleatorios, 91

CcneralPath, clase, 225


geometra, vea formas
gclAccessibltContexli), mtodo,
523
iclActionCoimnandO. mtodo,
537

getAdjustmentTypeO. mtodo,
538
g*t Ap|ilt'l('oi>le\l( J, mtodo.
491, 495

getAppletlnfoO, mtodo, 491


getAudioClipO, mtodo, 262
getClass), mtodo, 107

arcos

4(>4

getlnpuiStreamO, ml ido,

get.Selecti-dlndexesO, mtodo

441

mtodos, 391

relleno, 204

sistema de coordenadas. 202


formatos de archivado

CAB, 190
JAR, 188-189

Zip, 189-190
FrameworkO, mtodo, 512
fuentes,
devolver informacin acerca

de, 214-215

gel('lickCuiiiit). mtodo. 543


l>elCodeltusv(), mtodu, 244
gcfColor), mtodo. 218

285

gelSelectedltemO, mtodo, 279


getSelectedltcmsO, mtodo, 285

gelSizeQ, mtodo, 212

gclSourceO, mtodo, 534, 537


getStalc'O, mtodo, 274
gelSialeChangeO, mtodo, 541

elS'vsieniCliplloiirdO, mtodo
49S

nei.SystemUiokAndFeelClass
Niinu-O, mtodo, 52

gelTe.vl<),mtodo, 271, 2S1

gelToolkilO, mtodo, 498


getValueO, mtodo. 286
j;el\Vdf|i(), mtodo, 245
elXO, mtodo, 543
KelVO, mtodo, 543

(osling, James, 13
Roil-ocusO, mtodo, 343
< ni leos
animacin

app.'ct Neko. 248-256

getCrossl'iatforniLookAndrccl

cardar imgenes, 243

ClassNameO, mtodo, 521

dibujar imgenes, 245


disposicin de objetos
Graphics, 256
doble bfer, 257-261
observadores de im

getCurrnIO, mtodo. 277


golDocumcntllaseO, mtodo,
244

getFile), mtodo, 466


getFilc, aplicacin de muestra
HufferedReadcr. objeto, 4(>6
GeiFile), constructor. 466

geiInputSircamO, mtodo,
466

listado del cdigo fuente.


464-465
manejo de error, 466

readl.ineO, mtodo, 466


run(), mtodo, 466
getFontMetrlcsO, mtodo, 214

gelHelglilO, mtodo, 214, 245

gctlISHColort), mtodo, 374


getlnputSlreamO, mtodo, 463

genes, 246

panorama, 231 -232

parpadeo, 239-243

pintar/repintar 232-233
recuperacin de imgenes
243

rutas relativas de archivo


244

subprocesos. 233-239
arcos

dibujo, 208, 224


ejemplo. 209-21 ]
relleno, 209

atributos de transformacin
color, 220

patrones de relleno.

220-221
trazos de dibujo, 222
elipses, 223

guin (-), 81

GUIs (Interfaces Grficas de


liMiariiil. 268-269
administradores de diseo

alternativas de, 315

combinacin, 298-299

espacios coordenados. 219

creacin, 292

funciones copiar/pegar. 212

de bordes, 296-298

Oaphics2D, objetos, 219


GU1, componentes

de cuadrcula. 294-296
de cuadrcula de bolsa,

reas de le.vio. 282-2X3

barras de desplazamiento
285-286

botones. 273
campos de lexio. 279-2X2

casillas de verificacin
274-277

etiquetas. 271-272
lienzos. 287-2XS

listas de seleccin.
277-27"

listas dcspla/ahles
283-285
conos
creacin. 514

definicin. 514
Pardon My lions! Web
site, 515
lneas. 203, 223

Map2D, ejemplo, 22.V22.V


valos, 207
panorama. J 99-200

polgonos
agregar punios a. 206

dibujo. 205. 224-225


rectngulos

dibujo. 203. 223

orillas tedondeaJav
204-205
rellenar. 204

sistema coordenado, 202


texto. 200-201

rea tambin AWT; Gl'ls

(Jraphics2D, clase, 219


Green, proyecto, 13-14
Cridheighl, orden, 3(16

(>'ridLayoul(), mtodo, 295


gridvtidth, restriccin. 306
Cridx, restriccin. 3(Wi

gridy. restriccin. 306


grupos de noticias, 32, 570

302-313
de Unjo, 293-294

de naipes. 299-302
especificacin. 292-293
migenes, 313
p.moiaiua. 292

aplicaciones independientes
del AWT. 3i>4-3o5

f'olor'li'vi. applei de muestra.


Mi(,
aciuali/.i.-iii de resolla
dos. 172-.74
diserto. 367

iniciali/aciii. 368

Iim.uJo del cdigo liiente,


375-177

manejo de esculos, 371


marcad,, de IIJML. 377

stihpaiieles, 369-370
componentes

agregar a contenedores.

2n9-27O

reas de texto. 282-283

barras de desplazamiento.
285-2X6

botones. 273
campos de texto, 279-282

casillas de verificacin.
274-277

etiquetas. 271-272
lienzos, 287-288
listas dcsplazables,
283-2X5

listas de seleccin,
277-279
cuadros de dilogo
agregar a applets. 360

aplicacin de muestra.
527-530

confirmar dilogos,
524-525

1602

ndice

creacin, 357, 523-524

mens

activar, 363

de entrada, 525

barras de mens, 362

archivo fuente, 26-28

de mensaje, 526

desactivar, 363

compilacin

de opcin, 526-527

elementos de, 363-364

modales, 356

eventos, 364
administrador de inlerfaz

dilogo, 361
TextDialog, ejemplo,

plataformas de Windows,

ventanas de dilogo, 357

bolones, 515-516

268
manejo de eventos

elics de ratn. 319-325,


543-544
ChangeTitle. aplicacin
de muestra. 535-537

<OBJECT>, 187-188

<PARAM>, 191-J 92

sistemas Solaris, 31
herencia

definicin de, 48
excepciones. 425-426

casillas de verificacin.

jerarquas de clase
creacin. 50-52

descripciones de
componentes, 522

independencia de plataforma
temas de desempeo. 19

asociacin con tipos de


archivos, 588
creacin, 5 14

mtodos, 53

definicin de, 514

Keys. applel, 334


Lines. applel, 320

l'ardon My Icons!, sitio Wcli

sobreponer, 178

de barra de

marco de trabajo de

sencilla, 54. 401

i' . instrucciones

subclases, 55-60

ii'iiUoAd, niiou1,,, 474.475

ejemplos, 120-121
clse, palabra clave, 119
imgenes

nscrlTcxio, inlodo, t.\

teclado, 522
nombres de componentes,

523

de lista desplazable.
344

paneles de componentes,

de teclado, 331-338.

512-514

542-543

Sugerencias, 522

de ventana, 544-545

SwingColorTesi, apli
cacin. 518-520

escuchas de eventos.

531-533

ventajas. 510-511

establecer componente,

ventanas

533-534
handleEvcntO, mtodo,

318-319,338-340
mtodos. 534-535
mo\ imienios de ratn.

aplicacin. 545-549

marcos

BascFrame, ejemplo,
355-356
creacin. 352

definicin, 352
dimensionar, 353

dibujo, 245

policytool. 435

mapas de bits, 582-5S6

hidel), mtodo, 353

observadores, 246

historia de Java

recuperacin, 243

endoso de Nelsca|X.\ 14
Green. proyecto 13-14
Hoava, navegador, 14

versiones de Java. 15

evenios, 361-362

HSli (tono, matiz, brillante/)

rulas relativas de archivos,


244

ira tambin grficos

ImugcObscrver, inlerfaz, 246

iniplcnu'iuir

interfaces

instalar el JDK

probar la instalacin, 25-26


.sistemas Solaris. 24-25
Windows 95, 23-24
Windows NT, 23-24

inslanceof, operador, 84 ]()7


535

instancias, vea objetos


instrucciones
bloques, 67, 11S-I |y,
419-421

carcter de terminacin, 66
ciclos

sistema de color, convertir a,

ejemplo, 408-409

do, 130-131

ventana desplegablc,

366

inlerfaces niiltiples.

for. 125-128

Window, clase, 352

actuali/.acin de resultados

geiHSBColorU. mtodo.

403-404

inlerfaces sencillas,

374

KGBloHSHO. mtodo.

H
handlcDeselccK., mtodo, 344

handleEvenlO, nlodo, 318319, 338-340

handleSelectO, mtodo,
HEIGHT, atril .uto (<APPLET>
etiqueta), 60

373
updaieO, mtodo. 372

despliegue del applet. 367


inicio, 368

listado del cdigo fuente


ColorControls. clase.
376-377

ColorTesi, clase, 375-376


manejo de eventos, 371

402-403

soefcets de capa de transpone


4>8

valores del ndice. I 2(i


whilc, 128-130

condicionales. 560-561
definicin de. 11 y
if, 119-121

implemento palabra clave ">34


402
" '

operador condicional.

impori, iiislruccmn, 395-3'M


importacin

swiich. 122-125

clases, 58, 180,395

ejemplo. 408-4IW

inlerfaces mltiples.
403-40-1

inlerfaces sencillas,
lOMtl.i

KiiMiiable 2.14

inlerlaz/fusin de usuario de
API (Javal)eansj, 490
Internet K.vpluri-r, 434

inlerriipciones de lnea,
marcado de HTML,
185-ISn

Infei-rupledExceptinn,
excepciones, 41')

introspeccin API (Javal)eans)


490

introspeccin, vea reflexin


invocacin remola de mtodos
irallMI

invaking, inhKlo, 96-98

isKdil:il)le(). mtodo, 282


Henil.isliiur, esculla de even
tos, 532

ilemSiuleChiii<>ilo. mlodo,
541

121-122
expresiones. 66. 77

escuchas de eventos. 533

finally, 421-422
importar. 395-396

paquete del AWT, 268

paquete. 3')8

paquetes, 59. 395-396

swiich

resumen del lenguaje Java. 563

>: CHIls

ImaecObscrver, 246
implenicniacin

Spots, applel de muestra. 322

ocultar, 353

ejemplo, 345-348

tipos de evento. 318

carga, 243, 248-249

keytoul. 432

Hoava, navegador. 14

SetHack. applel de
SuingColorTcsl,

515

jar, I S!

despliegue, 353

ejemplo, 354-356

325-331.543-544

CABarc, 190

ilc iisuaiio, 1111 (il)ls

grficas de usuario.

applcls. 178-179. 2.1.1

panorama. 48-50

de elemento , 541-542

objetos en. 405


creacin. 4O5-4IK)

subprocffsos. 235
i'iitj, mtodo

listas de seleccin, 517

de enfoque, 343-344, 540

conversin por casting de

inicio
iconos

diseo, 52

herramientas

comparadas con clases, 402

"ifiiili/cirn de appleis, 17

de rea de texto, 344

mtodos abreviados de

i-iimii liptulc vaiahlc. 4(14

indcxOfO, mtodo,!)
indicador de comandos, 25
'"'o application, (ejemplo de

mltiple, 54, 401

344-345

inlerfaces, 54-55, 62, 400-401


ampliacin, 407-408
ClipboardOwner, 499. 576

ventajas. I (,-17

etiquetas. 515

aplicacin, 511-512

ni, tipo de dalos, 70

mquina virtual. J7-I8


nivel fuente, 18

de ajuslc, 538-540

desplazamiento,

panorama, 122-123

cuadro de dilogo), 527-5JM

control de acceso. 387

bolones de opcin, 517

limitaciones, 123

8J

<APPLET>. 182-186
<UK>. 185-186

30

campos de texto, 516

incremento, operador de (++),

etiquetas

plataformas de Windows.

516-517

de accin, 341-343,537

de Hipertexto)

sislema Solaris. 31

barras de desplazamiento,

517-518

HTML (Lenguaje de Marcado

ejecucin

de usuario, 52!

diferencias en plataformas,

subpaneles; 369-370

28-30

reas de texto. 516

357-360

marcado de HTML, 377

muestra

Swing, 509

objetos de archivos de

HelloUan, aplicacin de

definicin, 356

ejemplos. 12.1-125

Jalibertvuck, ejemplo de clase


atributos. 38-41
cdigo fuente, 42-47
compilar. 4.)-44

definicin de clase, 41
ejecucin. 4-1

indiice

I 604

ndice

persistencia, 487 '

mtodos, 39-42

porttil, 487

fecdJabberwockO.

mi JDK

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

Java21), 218
,,|>PU-i .le n.m-ra. 225-22X
3,b, 22-1

espacios coordi lados. 219


Giaphics2D, obelos, 219
lincas, 223
polfonos, 224-225
presentar airthi tos

color, 220

patrones di relleno.
220-221

ibujo, 222

rectngulos.' 23
JavalU-uns

comparada c -n Java.

488-489
definicin de

4S7

iniert;/ de ii nai io/eonsuli.lacin All.4'J0


introspecci i. APIs de,
491)

manejo de i ventos, Al'ls de.


-.

sisiemas Solaris, 31
JavaScript, 32

Jchecklox, clase, 516

JDBC (Conii.cividad de Java


Datbase), 5.S-506

JDK (Kit de Desarrollo de


.lava)
c<>iii"ii:iiiaan ile Windows

490

persistencia APIs de, 490


sjiio Wch, 4JI
ventajas
arquilec ura compacta.

4S7

mecanis nu de
descul rimiemo

de ca e, 4S7

dir,29

575-576

configuracin UN1X,
58U-5XI

carcter, 83
lneas, dibujo de

teclado, 522

drawLineO, mtodo, 203

Line2D.FIoat, clase, 223

ventajas, 510-511
ii-j uunbit'ii AWT: grficos
Jfraine, clase, 511

Unes, applet de muestra


listado del coigo fuente,
329-331

Jlabel, clase, 515

marcado de HTML, 331

JpasswordKield, clase, 516

mtodos

addLineO, 328

Jscrollllar, clase, 517-518

inii(), 326

JlritArea, clase, 516

mouseDownO, 327-328
mouseDragO, 328
inouseUpfJ, 328

kcyl'ressedO, mtodo, 542

keyUeleased), mtodo, 543

Keys, applet de muestra. 333


definicin de clase. 334

disponibilidad. !5

listado de] cdigo fuer.ie.


336-337

asisiente, 23-24

marcado de HTML, 337

probar la instalacin.

mtodos

25-26

sistemas Solaris, 24-25


Windows 95, 23-24
Windows NT. 23-24
nmero de versin, verilicar.
574

initO. 334
keyDownl). 335
painK). 335

kcylmil, utilera 432

kcyTj ped(l, mtodo, 543


kcylipO, mtodo, 332

panorama, 21-22

PATH, 575

JFC (Clases Fundamentales de


Java)

arrastrar y colocar, 16
descarga, 510

IinkToO, mtodo, 494


list(), mlodo, 284

clase, 214

listados

adniinistradores de diseo
de bordes, 297

de cuadrcula, 295-296
de cuadrcula de bolsa,

311-313
de flujo, 293-294

AllCapsDemo, aplicacin,
,

ArrayTest, aplicacin,

barras de desplazamiento,
286

listas desplazables, 284

liquelados, 132-133
for, 127-128

instrucciones

if, 120

l.abelTest, programa de

swilch, 124-125
Jabberwock, ejemplo
aplicacin, 45-46

: ..,

while, 129

ColorSwirl, applet, 240-241

Selectltem, 541

SwingColorTest, 546-549

WellAdjusted, 539
Map, applet

archivo HTML, 201


cdigo fuente de Java,
200,210-211
Map2D, applet

archivo HTML, 227

clase, 42-44

cdigo fuente de Java,


226-227
mtodos

definicin, 140-14]
llamar a, 97

MyRect, clase, 155-157


MyReei2. clase, 161-162
NamedPuim, clase, 167
Neko, applet, 253-256
NewPalindrome, applet de
muestra

archivo HTML, 194-195


cdigo fuente de Java,
W2-I94

OBJECT, etiqueta. 188


objetos
comparacin, 106
creacin, 91

l'alindrome, applel de muestra


archivo HTML, 182

cdigo fuente de Java,


181

Palindrome, ejemplo de clase


cdigo fuente, 59

HelloDan, aplicacin, 27

ChangcTitie, 535-536

marcado de HTML, 60

lisias de seleccin, 27S

bloques iry...finally,

aplicaciones

campos de lexio, 2SI

lienzos, 287

355

manejo de eventos,

casillas de verificacin,
etiquetas, 272

BseFramel, aplicacin,

de audio, 263-264

botones, 273

275

115-116

do...whle, 131

lienzos, 287-288

reas de lexto, 282-283

276-277

de naipes, 300-301

labeU), mtodo, 271

muestra, 133

GetFile, aplicacin. 464-465


GU1, componentes

bolones de opcin,

ciclos

Cl-ASSl'ATH. 579

BuTerDemo, 446-448

WritePrimes, 450-451
Fom.Melrics, ejemplo de

BunonLink, applet, 493-494

configuracin

flujos, aplicaciones

ReadSource, 454-455

421-422

JDK, edicin de parmetros de

Fillmore, applet, 246

WrileByles, 443

LinkedList, clase, 619

457-459

ejemplo aritmtico simple,


78-79

ReadByies, 441

Points, clase, 327

532

236-237

EchoArgs, aplicacin, 149

ReadPrimes, 451

lineToO, mtodo, 225 .

Keyl.istencr, escucha de cenlo,

Checkers, applet, 260-261


DigitalClock, applet,

constructor. 159

paintQ, 329

krvDmvnl), mtodo, 332

Countlnstances, clase, 389

ejemplo de mlodo

JijdioKullon, clase, 517

.lli-\ll"i-lil. clase. 5lh

399-400
500-501

panorama, 509

copiar, 22-23
instalacin

ColorTest, clase, 375-376

manejo de eventos, 531 -545

576-57S
578-580

, ; ', ...

376-377

CopyPaste, aplicacin,

Class nol found. errores,

PATH. instruccin.

,-:

lne^arra () de canalizacin,

OVWindims NI,

CI.ASSI'ATH, instruccin.

.-.. , . .

definicin de, 16
mtodos abreviados de

28-30

JcomboBtx, clase, 517

ColorTest, applet

i . ColorConirols, clase,

control de acceso a paquete,

573-57?

elipses, 223

trazos de

plataformas de Windows.

.lliullon, clase, 515-516

cd, 28 ,.

cuadros de dilogo. 52.V5.iO

computacin, 4XX
javac

.lavaWorld, sitio Web, 569

Line2D.Float, dase, 223,-

ln*a de comandos (MS-DOS)

lnea de estado (applets),

componentes, 512-518

soporte distribuido de

JAR (java archive), nrchivos,

Java Dcvelopnient Kit,

518-520

sealizacin, 488

showAuributesO, "*3. 47

de- Java Applet). 569 ,

aplicaciones, 511-512.

diseo, 488

main(), 45-47

jar, herramicnla, 188


JARS (Servicio de Monitoreo

de usuario. 521

propiedades de tiempo

42.48

1X8-1H9

Swing,
administrador de inicrfaz

6051

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

ScopeTesl, programa,
142-143
SeiBack, applet, 348

Key.s applcl, 336-337

Spots, applet, 323-324

LinkedUs!, aplicacin, 408-W9

SumAverage, aplicacin, 150

u~.

ndice

Swing

lnlb. aplicacin, 528-529


in:irco de trabajo de la
aplicacin, 511'

loslFocusO, mtodo, 343

loslOwnershipO, mtodo, 499


llamar a mtodos, 96-98, lO
llves({ |). 17. 118

SwingColo.Test. apli
cacin. 518-519

Swinger, aplicacin, 513

TextDialog, clase, 358-359


Trivia. aplicacin de.

(.lenle, 480-481'

servidor. 475-479
variables de instancia
definicin. 136
prueba/modificacin.

94-95

WritePrimes, aplicacin, 430


lisias

de seleccin
agregar a conlenedoics.

278

agregar dmenlos a. 27K


coiinol. 27')

creacin, 277-278

ejemplo, 278-279
desplazables

agregar a coniencdorcs.
284

M
Macmillan Compuler

278

45-47

charWidlhO, 214

FrameworkO. 512
gciAecessibleCiiniexK). 23

movimientos de ratn. 544


Lines, applet de muestra.

326-331
325
32i

immwl-.xiul. muiiio.
.'2o

miiueMove(). mtodo.
325

SwingColorTcst applicalion

listado del cdigo fuente,


546-549

mtodos, 545

teclado, 331
keyDownO. mtodo. 332
Keys, applet de muesiia.

535-537

538-540

333-337

keyUpO. mtodo. 332


tocias miidiieadoias.

337-338

teclas predeterminadas,

asociar componentes con.

533-534

332-333

tipos de eventos. 318

definicin. 531

manejo de la memoria, 93

FocusLisiener, 532, 540

Map2D, applet, 225-228


mapas d"bils

cdigos de escape. 75

imponacin, 533
lieniListener, 541-542
KeyListener, 542-543

definicin, 73

MouseListencr, 543

de carcter, 75
ven tambin conjunt < de

MouseMotionListencr, 544

mquina virtual

408-409

literales, 556-557
booleanas, 74-75
cadenas, 76-77

caracteres Unicodi

WindowListener. 544
eventos

enteras, 73-74

de accin, 537

numricas, 73-74

de ajusie, 538-540

loi:p(), mtodo, 262

de elemenlos, 541-542

535

escuchas de eventos, 545

Adju.NiineiiiLisieiicr.

vinculadas, enumeracin de,

charAtO, 98

tipos. 363

clases. 545

creacin. 277-278

elemenlos, agregar, 278

creacin. 363-364

mouseDownO. nitodii.

AciionLisicner, 537

IbciisGincdl 1.540
lociisl.osnl. 540

doble clic, 324-325

escuchas de eventos

HowLayouiO, 293-294

l-oni(). 213

manejo de eventos, 531

Cli.ingeTille.java, ejempio.

firmas. 139. 154

convcnNumQ, 125

changeColorO. 347

actionl'crformedl), 534

inanejadoios de excepciones

ColorTest applet, 371

convenliO, 124

barras de, 362

elementos de

MalformcdLKl.Kxccplioii,

321-324

activar, 363

mtodos

mciuscEmert). mtodo.

319-320

finalizadores. 154. Iti8-lp9

finnli/c(). lftS-l(i9. I7J

copyArea). 212

475
makcRangcO, mtodo, 140-141

clics de ratn, 543-544

pblico, 385
herencia. 387

coiintlienisO. 279

mouscDrag), mtodo.

anidadas, 427-42X

final, inclndok. 391

definicin de, 362

TriviaServer, aplicacin,

excepciones, 417

llllRoundRecn). 2(H

protegido. 385-386

desactivar. 363

mstanceof, palabra clave.

firma, 147
Jabberwock.java, ejemplo.

privado, 384-385

niens, 364

566

mainO, mtodo

control, 279
ejemplo, 278-279

niens

liandleliveiilO. inuxlo.

gctSourceO, 534

Spots, applet de muestra.

agregar a conienedores,

Insets, clase, 572

544-545

l'ublishing, sitio Web. 277,

control, 285

despiegabies

nsclsQ, mtodo, 313

de ventana, 361-362,

JavaBcans. 490

mouseUpO. mtodo, 320

ejemplo, 284-285

margenes

de teclado, 542-543

318-319

agregar elcmcnios a, 284


creacin, 283-2R4

de enfoque, 540

6071

clases. 583-586

interfaces, 582-583
panorama, 17-18

soporte para el navegador. 19


marcos

creacin, 352
dimensionar, 353

eventos, 364

Melliod, clase, 109

mlodos, 39-4(1, 62, 98-99,


145-146

abstractos, 392-393
actionO

chcckrxuO. 274

gciAciionComniaiidd. .:"

checkEvcn). 121

geiAdjtisinieniT\pc( i, 53S

Dalal-lavorO. 497

geiA|ipleiCniiicMl I. 491. 495

DalalnputSireanid. 449

gelApplellllIrtl 1.491

DaiaOulputSlreami). 449

felAudioCiipi . 2o2

definicin. 561-562

gelC'lasstl. )0n

argumentos. 341-342

ejemplo. 139

definir, 341

listas de parmetros. 141)

ci('odfHaM-( i. 244

lilis, palabra clave. 141-142

viColoni. 2IS

valor devuelto, 342

aciionPerformedO. 534, 537


;idclAciioiil.islci>er(). 5.17
addlieiiK). 278

deleteO.-457
dclclr()ul:xii(). -157
dcstrovl I. 179

geiC'lickCounis 1.543

getCrossPlailiirmLoiikAnj

IvcI('I.inN.iiii>"i1. 521

addLine), 328

de acceso, 387-388. -112

.Cll'uiicill: '. -17~


geiniKiniK-niHased. 244

addPoiniO, 206

de durada. 58I-5H2

.idd.SpniO. 322

fetl-"ilel I. 4W>

Dialogo. 357

ailjusimeniValucChangedO,

eeil iiiii.McincM'. 214

disableO. 363

geillcighli). 214. 245

disposel). 25(>

gcillSItCnl'irl 1.374

538

ArgStreamO, 448

BorderLayoulQ. 297

drawArc), 208

gelliipulSueamtl. 4(i3

drawlmageO. 245-246

gi-ilnseisi). 313

BulferedlnpuiSireamO. 445

drawLineO, 203

BufferedOulpiitStreamO, 446

gciltemO. 279

drawOvalU, 207

gelKeyCliarl 1.543

BufleredReaderO, 454

drawPolygonO, 205-2U6

BuffeiedWriierO. 456

gell-alx-li). 273

drawRecK). 203

geiMessagcl 1.419

buildConstraimsO. 304-309

drawRoundRecK). 204

buildRecK), 155-156

getParameierO. 192

drawStringO, 200.214

getParennl. 360
getPoiiiK), 543

buttonO, 273

enahle(). 363

CardLayoutO. 299

equals(), 105

getSelectedlndexO. 279

clearUccK). 212

estik-o. 3S8-39O

geiSekvtedlnde.vesO. 2S5
geiSclectcdliniK. 279

dosel). 439

e.\isis(). 457

closePathO, 225

feedJabberwock). 42

geiSeleciedltemsO. 285

constructores, 92, 153, 158

Filel), 456

getS/.e(), 212

definir, 562

FilcDialogO. 361

ejemplo, 159

getSourceO. 534. 537

FilelnputStreanH). 440

geiStateO, 274

llamar desde otro

FileOutputSireamO, 443

getSaieChange( 1.541

constructor. 160

nombres. 159

FileReader( ).453

getSysiemClipBoardl). 41>S

FilcWriterO. 455

getSysiemLiKikAndFeelCNi^

sobrecargar. 160-162

fillArcl), 208

sobreponer. 166-168

fillOvaK). 207

control de acceso, 382-387


predeterminado, 383

Namcl). 521

geiTexiO. 271. 281

ftlIPolygonl). 205-206

gelToolkill). 498

filIRecu), 203

getValucO. 286

ndice

ndic

608

eventos de clic, 319-320

gelWidthO, 245

eventos de doble clic,

gciXO, 543

324-325

gelY(), 544

Lines. applet, 327

giKocusQ, 343

Spnls. applcl. 322

r,iidl.ayiu.i(). 295
handleDesclecK), 344

mouseDragO, 325
mouscDraggcdl), 544

liamlloEveniO. 318-319,

mouseEiitcrO. 326

338-341)

niousclixiil). 326.

Ji.tmIIi-Si-kvH). 3-l-t

mouseMove(), 325

liidcl). 353

mouscMovcdO. 544

indcxOfO. 98

inouseReleascd). 543

iiiO

muuseUpO, 320

Keys, upptci. 334

..-'

niovcTiif). 225

l.ines, appici. 326

-.- sobreponer. 178


'

Spots, ippici di: muestra,

322

newPramel). 352

inscnTexH). 283

newLinefj. 456

iuselsO- 313

ncxiDouble), 92

isEditable), 282

oneoZcrol), 144

itcmStalcChangcdO. 541

packO. 353, 512

JHiiiiimK), 5Id

pjintO, 57-58, 178-180,

JComboBoxO, 517

232-233

JCheckBoxO. 516

Kcys. applel. 335

Jl.abelo. 515
J.SerollBarO. 518

Lino, applet, 329


para lair/r excepciones,

JTcMAreaO, 516

422-427

JTcxtRcIdO- 516

cucsi iones de herencia,

kcyDown). 332

425-426

kcyIVssedU. 43

definicin. 416

keyReleasei.I. 54 3

explcitas. 424

kcylyvill). 54 3

abcl), 271

nekoSleepO, 252

ucwAudioClipO. 262

milOnAO. 474-475

--keyU|H.. 332

nekoRunO, 250
nekoScraicl.O, 252

iinplciias, 424

throws. palabra clave,

423

JincToO. 225

parselnK), 146

linkToi). 494

passing. arruinemos pata,

MO. 284

143-145

loop*). 262

playl). 262

.losil;ocus(>. 34 3

PUS T. 483

losiOwncrshipi. 4'W

primLnO, 79
primMcO, 165

llamar, 96-98

mainf)

luma. M7
Jahhcrwock.javn, ejemplo.
45-47

TriviaScrver. aplicacin.
475

prinlNamest). 116

processlnpuu), 472-473
read(). 438

readFioalO. 449
readLine(), 454, 466

readStreamO. 448

makeRangeO. 140-141

readUnsignedByict 1,449

nikdir). 457

readUnsignedShonO, 449

motiscOnwn)

sobrecargados

renameToO. 457

creacin, 154-158

movcToO, mtodo, 225

replaccTexlO. 283

definicin. 153-154

MS-DOS

requesiI-iicusO. 335

ventajas, 154

ivslupi-0. 315

cd, 28

sobreposicin de. 53, 154,

rcMe(). 353

ilir. 29

165-166

appleis subprocesadas,

235

TriviaServer. aplicacin.

stand, I7'J, 233

applel Neka. 248-256

caiga. 248-24')

cargar imagen. 243

conjunto. 248

dibujar/iciluijar, 232-23.1
doble bl'er. 257-261

siTollbarO. 285

subslringO, 98

climinaciin de objetos

sclecU 1.279

testUlockO. 118

523

imgenes

sialic, 388-390

M.ipO, 179, 233

sel AcccssiblcDcscripi iiin).

culiii de lomlo. 253


compilacin, 256

animacin

siringWidihO, 214

471-472

lexiAieaO, 282

imgenes de dibujo, 245


observadores de imagen,

253-256

tcnica de animacin.
249-253

iii-kiiKiinO. mtodo, 250

toUppcrCascO. 98

sci.AciionCommanJl i. 537

updateO, 240-243, 372

panorama. 213-232

iicknSltT|i0, mtodo, 252

seiUackgioundO. 218

upilaieO. 240-243

parpadeo, 239-243

Nclscapr Navigator, 434

sctCilorl 1.217. 220

URL 1.492

rccupciaciil Je imagen.

NelM-ape Signing liiol. 434

selConslrainlst). 3n6

valueOI'O, 98

seiC'oiiieiuPaneO. 512

uindoClosed(). 545

sctCuricntl). 277

u'iiuInu'Clitsmg), 544

setEehoCharO. 516

windowOpenedO, 544

seil-.clioC'liaracicrl i. 2SD

writeO, 439, 455

setlldiiablct). 282

writelnK), 452

ciclos, 262-264

archivo HTML. 194-195

seiFonU), 213-214, 271

wriieStreainO, 448

ejecutar, 262

cdigo fucnle de java.

sctl:orcgrnund(). 2l>

Microsoft, sitio Web, 190

selelpMenud. 363

minscula, convenir a

sell.alelo. 273

mayscula, 457-459

sciLit.viuK 1.292. 2'^

mkdir). mtodo, 457

M'il.iiiikA.ul:cell. 521

ni.idale.s. cuadros de dilogo,

sciMciuiUaro. 362
seiMiiemonieO. 522

243
rutas relati\ a> de archivos.
244
subprocesos. 233-239

sonido

mullitareas. 233

dilogo
modificadores, vea palalinis

sciSlringl). 271
sciSirokcl .222

.Modifivr, clase, 1(19

M-iTcxin. 281. 54(1

mouse)ra|;), mtodo, 325

selTiHil ri|ilexH). 522

nHiuscDrH^jcdO, mtodo, 544

setValueO, 286

inmiMjICnlcrO, mtodo, 326

seiVisihleO. 512

mouscExitO, mtodo, 32ft

shiiNvl). 300, 353

MuuscLislencr, escucha de

showAttnbutesO, 43
showConfirmDialoai), 524

evento, 532

MuuseMotionl.istener, escucha

showInpinDialogO, 525

df evento, 532

showMessagcDialogO. 526

mouseMovt'O, mtodo, 325

sliowOpiionDialoiriJ. 526

mouscMovcdO, mtodo, 544

showSialusl 1.491

miiuscKi'leasi'dO, mtodo,

size(). 212

543

iirul.ii-O. mtodo, 456


imu-slra

92-IV4

nevtDoulilfU, mtodo, 92
coiiiponenies de Swing, 523
paquetes. 397-398
variables. 69-70
NO'I. opi-radnr, 83

notacin exponencial, 74

listado del cdigo fuente,

NT

MvUeet2, clase. 161-162

aplicaciones de Java

compilacin, 28-30

ejecucin, 30
configuracin del JDK.
23-24,631-633

Class not found errors

NamedPoint, clase. 1I7

NaniesUlop, programa de
muestra, 127-128
naveRadores

firmas especficas de
navegador, 433-434

HutJava. 14
Java Plug-in. 176

'

nombrar

definicin de clase, 155


156-157

cla\e

NeivPalindronif, appli-l de

declai acin. 155-156


sobrecarga, 156

ne liami'l I, mtodo, 352

buiidkeci), mtodo

ven tambin cuadro de

seiSuucU. 274

ne.\udoClipl). mtodo, 262

MvKect. clase

356

seil'ainK). 220

mkiiScralcliO, nitodu, 252

frmalos de archivos, 261


vt'a amblen grficos; GUls

uviilirai'in. 2-18

selAcccssililcNaincl), 523

246

lisiado del cdigo fuente,

Graphics, 256

texi-'ieldO, 279

;'

l'alindronies, sitio Web, 61


Ni'kn, applel

multimedia

ventajas, 165

nuil)

Neil/Kred's (^antic l.ist of

in.licadoi de couiaiuins, 25

sitper, palahra clave,

RGUloHSBO. 373

navegador, 19
Navigator, 4.34

comandos

162-164

rcium lypes, 139

Plug-in, mejoramiento de

mouscUpO, mtodo, 320

repaimO, 232-233

609 1

634-636

Cl.ASSPATH. instruccin.
636-638

PATH. instruccin. 633-634


nuil, cadenas, 540
nuil, palabra clave, 113, 127
Nulll'ointerF.xceplion, errores

de. 417, 507

4
m

#
m

.iv

ndice

Numberlteader, programa de
muestra, 124-125

nmero pseudo aleatorio,


generacin, 91
nmeros

de pumo fluame, 71, 74


hexadecimales, 74
negativos, representar como

lcrales, 74

ocala*. 74

ventanas, 353

onetoZeroO, mtodo, 144


operadores

asignacin, 79-80
comparacin. 82

concatenacin (+), 86
condicional, 121-122

decrcmento (), 81
desigualdad (!=). 105
igualdad (==), 105
incremento (++), 81

instanceof, 84, 107


lgicos, 83-84

matemticos, 77-79

<njECT> etiqueta (HTML),


TS7-188

new, 85

creacin de objetos.
90-92
instanciacin de arreglos,

objetos

arreglos, 113-114

113

cadenas de lexio, 498

NOT, 83

comparar. 105-106

OR. 83

conversin por ca.sling

precedencia, 84-85

a clases, 103-KM

.i interfaces, 104,405
convenir a tipo-, primitivos.
104-105
creacin

administradores de

memoria, 93

ternario, 121-122
oportunidades de empleo
(Jiivu), 571

orden de precedencia

(operadores), 84-85
organizacin, vea alineacin
valos, dibujar

argumentos, 90-91

dmwOvaK). mlodi, 207

cotislfucloics, 92

U!!ipic2D.I-loal, clase, 223

nuevo operador, 90-92

determinar la clase de. 107


File, 456

Font. 213

Genc-nill'ath. 225
' Graphics2D, 219
Random, 91-92
referencias, 99-100

. sabores de datos, 497-498


;

transferihlcs

cadenas de texto, 498


definicin de, 497
sabores de datos, 497- 98
URL, 492
vea inmbin clases
ocultar

caracteres en campos de
texto, 280

pack(), mtodo, 353, 512


package, instruccin, 398
paintO, mtodo, 57-58, 178-180,

cadenas de texto, 498

pblico, 399-400

definicin de. 497

estructura de la carpeta, 398

publie, 56, 385

nombre, 397-398

super. 165-160

Ihis. 141-142, 160.235


ihrows. 423
palabras reservadas, 556
wu iiimhicn palabras clave
Palindrume, applel de muestra

<1'ARAM> etiqueta (HTML),


191-192
parmetros, pasar a applvts
ejemplo, 192-195
<PARAM> etiqueta, 191
vi'it inmbin argumentos

l'ardon My Icons!, sitio Web,

prueba, 183-184
Palndromo, ejemplo de clase
clases importadas. 5S
cJigo fuente, 59

515
puro

MlhjllOCCMlS, J.5

ejemplo, 240
panorama, 239

maivaclo de HTML. 0(1-01

reduccin

paintO, mtodo, 57-5S


paneles

309-370

mrgenes. 313

relacin con Java)

grupos tic noticias, 570


JAK.S. 569

agregar puntos a. -lid

dilmjaj

laxa I-'AI.K 5(i')


l.ivaSnll. 'mi(i ios

drawPolygoiK J. mloo. 21 5

J.iv.iWVirIJ. 5(i9

Java2D, 224-225

Macmillan C"iiiii|)uter

I'opUpWindoH, aplicacin,
354-356

prinlMeO, mtodo. 165


printNamesO, mtodo. 116

Pihlivliiiig. 566
vinas Web

CaiiH-l.ui. 5(.K 56')

aciiiM.s ilc empico, 571


rcdimt-usionaniK'iilo de marcos.

353

lU-liTcnccs'k'st.java, :i|>licacin,

l'iinlSubClass. clase, 163

a aplicaciones. 148

l'rinlSuhClussa, clase, 164

lefeivncias, 99-IIMI

claves. 597-601

aapplcis. 191-195

pri<iridad (operadores), 84-85

relli-xin, 107-1119

cuniiol de acceso

a mtodos. 143-145

processlnpullI, mlodn, 472-473

paquetes

predeterminado, 398

excepciones. 424-425
I'ATI1. configuracin

(parmetros del JDK)

pnieh:i

instalacin del JDK. 25-20

rt'llfiiii, 3M

puni (.), 93-94

ceidura de la crpela.

cambiar, 575

punto y coma (;), 66

nombres, 397-398
definicin, 62

valos, 207
polgonos. 2W5-2O6

referencia

rectngulos, 203-204

break, 131

nombres de clase. 394

peer, 315

class, 136
continu, 132

nombres de paquetes,

pegar, operaciones de,

395

vea tambin clases; merfaees


ventajas, 393-394

paquetes personalizados

ciases, agregar. 398

Clipboard, 498-499
aplicacin de muestra,
499-502

ClipboardOwner, merfaz,
499

relleno de una celda, 313


renombrar archivos, 457

desplegar. 575

panorama, 55, 393

rellenos de degradado, 220

relameTo(), mtodo, 457

correccin de errores, 576


patrones de relleno

java lang.rericvl. paquete. I(W


rt-tiiirianihi iidi>s. 132

agregar. 576

398

eieiuplo. IOS

applcls. IN3-IX-J

clases, 398

Chvner, inieiiaz. 612

implements, 234,402

recursos de Internet (en

polgonos

parselntO. mtodo, 146

Unes, applet, 329

final, 137,390

relleno. 2(W

recursos de carrera, 571

policytool, utilera, 435

pasar

arcos, 208-209

extends. 136,407

playO, mtodo, 262


l'lug-in, 19, 176

printLiU), mtodo, 79

Java2D. 220-221

else. 119

de, 11

updaien. 240-243

interfaces, 597

abstrae!, 392

plataforma cruzada, cuestiones

l'rmlClass, clase. 163

importacin, 59, 395-396

palabras clave

223

esquinas redondeadas. 204-205

277

I'OST, mlodo, 4H3

Keys, applet, 335

232-233

Kcctangle2D.FIoal, clase,

sobreponer el mtodo

argumentos

dibujar

Personal llookshell. programa,

doble Infcr, 257-261

C'nloi fot. applcl Uc niucNlia.

Kectangle2.FIuat, clase, 223


rt-cln|>ulos

drawRccK), mtodo, 203

parpadeo (animacin)

definicin de clase, 56-57

449

Redante.Float, clase, 223

l'erson, clase, 159

applcts. 179. 2.13

compilacin, 59

creacin, 29S

permisos, 431

f*eatlUiLsigiiL'il.Sliori()t mlodo,

persistencia, 487

valores nuil. 192, 197

I iswdo del cdigo Java. 180-181


paintO, mtodo, 181

sabores de dalos. 497-498


soporte para. 496-497

gelParamelerO mlodo, 192

archivo HTML'182-1X3. IXX

creacin

definicin de. 35. 62

predeterminado, 398

protected. 385

slatic, 95. 138,388

objetos tianslciihlcs

control de acceso

mili, 113
priivate, 384-385

pblico. 399-400

ClicckboxGroup, 275-276

"

iiisianccof, 535

611

Q-R
QnA.txt. archivo (aplicacin
TriviaServcr), 47.1
Random, clase, 91-92

read(), mtodo, 43X


ivadl'loalO. iiiIimIii, 44'>
readLineO, mlodo. 454. 466

UeadPrimes, aplicacin, 451


readStreamO, mtodo. 448
readUnsignedlIyleO. inloilo.
449

repaintO, mlodo, 232-233

rrplatxTcxiO, mtodo, 283


requeslKocusO, mtodo, 335
iTshapcO, mlodo, 315
resizeO, mlodo, 353
restricciones

anchor. 310-311
asignacin a componenics.

304-31(6

nn. 3io

gridlicighl. 306
gridwidlh. 306
eridx. 306

m -

ndice

I 612

gridy, 306

navegador especfico.
433-434

weighlx, 307

weighiy, 307
RGBlollSBO. mtodo, 373
KMI (Invocacin Ucmolu de

Mtodos)
aplicaciones, 504-505
arquiteciura, 503-504

si-lKdioClinraclcr(). mtodo. 2S0

grupos de noticias, 570

setFontO, mtodo, 213-214, 271

pollicas. 434-435

sclForegroundO. mtodo, 218

selecto, mtodo, 279

selIlelpMcuuO, mtodo, 363

semejante, 315

sctLabelO, mtodo, 273

sensibilidad a maysculas y

setLayoutO, mtodo, 292, 298

minsculas, en Java, 69

panorama,502

separadores (mens), 364

selMenuBarf), mtodo, 362

sealizacin (RMI), 488, 504

sctMnemonicO, mtodo, 522

silio Web, 505

ServerSocket, clase, 467

sctl'aintO. mtodo, 220

servidores (aplicacin de

selStateO, mtodo, 274

UI'C (Llamadas de

Trivia)

constructor, 470

MtStrokeO, mtodo, 222


sc(Text(), mlodo, 281,540

applcts con subprocesos. 235

inilQnAO. mtodo. 474-475

sclToolTipTextO, mtodo, 522

TriviaServcr, aplicacin,

listado del cdigo fuenie,

selValucO, mtodo, 286

471-472

475-479

Rminahle, Hierra/., 234

inainO. mtodo. 475

rulas relativas de archivo,

processlnpui(). mtodo,

472-473

244

QnA.txl, archivo, 474

470
sabores (dalos), 497-498
salida, vea entrada/salida
salir

aplicaciones, 378

ciclos, 131-132
ScopeTesl, programa, 142-143
SCKi)IX_A1I.SOJ.UTF.. evento,

SCROLI-_UNE_UOWN,
evento, 345
.SCIH.l._l.lNi:_Ll', evento,

345

SCKOLL_PAGK_DO\VN,
evento, 345

SCROU.J'AGK.UI', evento,
345

scrollliarl), mlodo, 285


SceMclhod, aplicacin (ejemplo
de reflexin), 109
seguridad
applcts. 175-177
firmas digitales

autoridades de cenifi-

cacin, 431
certificados. 430

ejemplo. 431-433

WAITFORANSWER. estado.

473

WA1TFORCLIENT, estado.
473

WA1TFORCONF1RM,
estado, 473
selAccessibleDcscriplionO,

mtodo, 523
sel AccessibleNimc(), mtodo,

libros relacionados con Java.


568

Macmillan Coinpuicr
i'ublislnng, 277. 5o5

Microsol'i, 190

Neil/Fred's Giganlic List of


Palindromes, 61

Netscape Signing Tool, 434


l'ardoii My Icous!, 515
recursos de empleo. 571

L'mcode Consonium, 7b
sizt-0. mtodo, 212

524

skelelon, capa (RMI), S03


Sockel, clase, 467

Snckctlmpl, clase, 468

526

sotkets

shnwOplionDialogO, mtodo, 526

aplicaciiin de Trivia, I6X

shoStatus(), mtodo, 491

diseo, 469-470

Signing Tool (Netscape), 434

ejecucin, 4S2

signo de exclamacin (), 83

implcnicnlacin de

signo igual (=)

Selliack, applet de muestra.

'

obrador de asignacin, 68, 72

lisiado del cdigo l'uenle, 348

del lado del servidor, 467

implcnicnlacin de la capa de

operador de incremento (++).

transpone, 468

changeColorO. 347
inii(), 346

set)ackgroundO> mtodo, 2)8


sc-tColor method, 217, 220

setConstraintsO, mtodo, 306


setContentPane(), mtodo, 512
setCurrenK), mtodo, 277
sctEclioCharO, mtodo, 516

solucin de problemas

simplicity of Java, 20

Class not ound errors

sistema de color UGH (rojo,

plataformas UNiX, 580-581

verde, azul), 216

sistema numrico base-8, 74

actionO. 346-347

sistemas Solaris
aplicaciones de Java, compi-

lar/ejecuiar, 31
instalacin del JDK, 24-25
sistemas SPAKC, nslalacin

del JDK, 24-25


sitios Web
Code Signing. pgina de
recurso, 434

slulic, mloil<i, .I.SS-39K

stalic, |)alabra clave, 95, 138, MiH


stalic, variables, 95, 388-390
stop(), mlodo, 233

sobreponer, 179

MrinxWidtlifj, mlodo, 214

Strouslrup, Djarne, 13
subclases, 50
creacin, 55-60

definicin, 48. 62

subndices (arreglos), 114


subprocesos
definicin. 233
inicio. 235
paro, 235

programas de animacin,
233-234

DiejIaK'loik. ejemplo.
23d-2 V)

iiMpicniL-macin.

del lado del clienie, 467

operador de concatenacin

mtodos

sobrcposicirin. 1 79

senador. 470-479

signo ms -f- }.

sistema numrico base-J6, 74

starlO, mtodo, 233

implemento-ion dei

operador de igualdad. IU5

marcado de HTML, 348

rcpaiiiK). .123

Star7, sistema operativo, 13

cliente, 479-481

81

537

345

JDI3C, 506

( + ). 86

523
scActionCominaiidO, mtodo,

inil(), 322

mou.scDownO. 322
painlO, 323

JDK, 22

showAIlributesO. mtodo, 43

slHm'McssageDialogO, mtodo,

aildSpoK). 322

JavaWorld, 569

sliouConllrmDialogO, mtodo,

variables de instancia.

nilodos

Java FAQs, 569

slinwO. mtodo, 300, 353

showInputDialogO, mtodo, 525

marcado de HTML, 324

JARS. 569

sctV'isibleO, mtodo. 512

runO, mtodo, 471-472

323-324

Java 1.2 documentaron, 73

setStringO, mtodo, 271

ejecutar, 482

I'roccdimicnlo Reino,o i, 51)2


runO, mtodo

listado del cdigo Tueme.

Gamclan. 32, 568-569

sclLookAndFcelO, mtodo, 521

sealizacin, 504
Rmiregistry, programa, SOS

documenlacin de Java 1.2, 73


Dminos, applet, 12

setliditableO, mtodo, 282

plataformas Windows,
576-578

manejo tradicional de errores,


414-415
i (i; itttnhit'n errores
sonido

formatos de archivo. 261


reproduccin

ciclos, 262-264

play(), mtodo, 262

Spots, applel de muestra


definicin de clase. 321

234-23f>

substringO, mtodo, 98

Sugerencias, (informacin sobre


herramientas) 522

Suida erage, aplicacin. 150


super, palabra clave, 165-166
.superclases

definicin de. 4S, 63


indicacin. 36

Swing

#
i
barras de desplazamiento,
517-518

botones, 515-516

bolones de opcin. 517


campos de texto. 516

casillas de verificacin.
516-517

creacin de descripciones

t
i

para. 522
diquelas. 515

lisias de seleccin. 517


nombrar. 523
l'.iu.ii.un.i. 511-515

Sugerencias, 522
cuadros de dilogo
aplicacin ile muestra.

527-53(1

cic.-iciiin, 521-524

de confirmacin. 524-525
de entrada. 525

de mensaje, 526
de opcin. 526-527

definicin de. 16
mancjidc eventos, 531

ClMiigeTle java.
ejemplo. 55-537

I
I
I
1
I
1

csiiKha de eventos.

531-533
CNi.rbleccr componente,
533-534
,1c accin. 537

de ajuste. 53h-54U
de elemento. 541-542
de enfoque. 540

de ratn. 543-544
de teclado. 542-543
ilc vemana. 544-545
insianceof. palabra clave.
535
mtodo. 534

I
)
J

mtodos abreviados de tecla


do. 522

administrador de inierl'a/ de
usti.ii o. 521
aplu-aciones

niarctj de trabajo,
511-512
componentes

agregar a las aplicaciones.


512-514
reas de texio. 516

panorama. 509

wniajas. 51(1-511
SwitigC'olorTcsl, aplicacin de

muestra, 518-520
clases. 545
escuchas de eventos, 545

listado del cdigo fuente.


546-549
mlodos. 545

v
#

ndice

614

ndice

convertir a objetos,

104-105
TCP (Protocolo de Control de
Transmisin), sockcs

aplicacin de Trivia

diseo, 469-470
ejecucin. 482

toUpperCaseO, mtodo, 98
tramado 216
lr_\...calch, hlui|iies

finally, clusula. 421-422

del cliente, 479-481

(silico, 388-390

del lado del servidor, 467

Unicodc. cunjunlu de
caracteres, 69
cdigos de escape. 75

transpone, 468

Unicode Cunsonium, sitio

teclado

Weh. 76

manejo de eventos, 331.

UNIX, JDK, riinnciiracin.

Kcys. applei, muestra.

580-581

Unolllcil Obscurc Java FAQ.


sitio WVIi, 569

333-337

keyUpO, mtodo. 332

ui><t:ile(), mtodo, 24(1-243, 372

ledas modificadoras.

URI-0, mtodo, 492


UKL, objelos, 492

337-33S
teclas predeterminadas,

L'scnct, pimpos de milicias, 32, 570


utileras, vea herramienlas

332-333
mtodos abreviados, 522

TeslField. clase, 27!>


convenir a maysculas,

457-459
dibujo, 200-201

Thawlc Ccrlificalioi , 431


Ibis, palabra clave,

41-142,

16(1, 235

Thruwable, clase, 4 6
tipos de datos, 7(1-7 ,JI0
hooleanus, 42
conversin por c: st,
101-102

convenir a objei -s.

KM-105
tipos primitivos, 7C -71, 110
conversin por i jst.

101-102

^Jvi

instancia, 39. 62, 67


acceso a valores, 93-94
cambio de valores, 94-95

definicin. 136-137
valores iniciales, 69
locales, 67
declaracin. 6X
val.>ies, o1.)

mimbrar, 69-7U

tipo de inierJa/., 40-1


tipos de clases. 71
lipos de dalos 70-71

booleanos. 42

KM-105

valoeOK), nilodo, 98

ventanas

variables de instancia
advertencia Je Unsipnca j.iv.i

alcance. 118

Applei Window, 353

alcance de lxico, 134

desplegar. 353

ScopcTcsi. pruprania

ejemplo de venuna despk1-

142-143

diquelas de, 271

incremento. SU-81

variables de objeto, rea

variables

texto

globales. 67

levlDialon, clase, 35f:-359


IcxtlieldO, mtodo, 279

linkTnO, miodo, 494


UKI..objcios, -192

visualizacin, rea despliegue

gable. 356

asignacin, 6S. 72. 558

evenios de, 3o 1-362

clase. 39. <>2. 67

manejar evenios de,

definicin, 95
valores de acceso, 96

544-545
marcos

valores de cambio, 96

creacin, 352

valores iniciales, 69

definicin. 352

CLASSPATH, 397

dimensionjr. 353

constante

ejemplo de

declaracin. 137-138
definicin, 137

control de acceso,' 382-387


predeterminado. 383

privado, 384-3S5
protegido, 385-386

finales, 391

convenir j objelos.

leslilloekO, mtodo. 118

iextAreaO, mtodo, 282

492-494

112-113 '

desborde. 8S

del lado del clicnle, 467

keyDownO. mloJo. 332

BuionLink, ejemplo.

variables de arreglos.

variables mltiples. 68

definicin de, 67

UIMana>er, clase. 521

542-543

appleis. 491

declaracin. >7. 557-55S

decrcmento, 80-81

del servidor, 470-479

implemcnlacin de la capa de

Vinculacin

101-102

ejemplo, 419-421

implemcntacin del lado


implementacin del lado

pblico, 3S5
conversin por casi,

Baser>.mic.355-35i

acuitamiento. 353
Window, clase. 352
v erilcacin de consistencia
(excepciones!, 418
Vt'riSign, 431

WArn-OKANSWKR, estado

weighly, restriccin, 307


WIDTII, atriliulu (<AP1'I.KT>

vveiglilx, restriccin, 3(17

d.M-i.t,

l'ATH, inslruccin,

WINDOW i:XI'().Si:, ivinl.i, .V,2

virili'O. inri.ido. 439, 455

WINI)OW_M()\'KI), evento, 362

Wrilel'riiius, aplicacin.

indoClosedO, mtodo, 544

'.>iiid(ivv()|)ened(I. mlodo.

184

636-638

errores Class or found,

l'veno, 362

(TriviaServerl, 473
W.AITFORCONI'IKM, oslado
\Veb, publicacin (|c iipjjlils,

CLASSPATH. insimccin

WINI)O\V_I)KSTROY, evini,

YVAITKOKCI.IIiNT.iMado

(TriviaServer), 473

23-24.631-633

Window, clase, 352

iidovvClosiii);(),mlodo, 544
Windoul.i.siener, escucha de

(l'riviaServcr), 47J

configuracin del JDK,

elijiiela). 60

WINDOW l< (INII \, ,,,!, _\,<

(i.t I 611
vvi i-fiiM I ihi'IIiimI, 452

450-451

urilcSl reamo, inlodo, 448

i-vrnli, 532
5-14

Windows 95/Windovvs NT
aplicaciones de Java
compilar. 2S-3I)

ejccuiar. 30

615|

x-z
XOi, operador, H.
/ip, archiveros, l*>0

También podría gustarte