You are on page 1of 334

Fundacin Cdigo Libre Dominicano

Lic. Henry Terrero.


hterrero@codigolibre.org
Ing. Jose Paredes.
jparedes@codigolibre.org
Desarrollo
De aplicaciones
Con Java
TEMARIO CURSO DE JAVA.
Modulo I.
1. Conceptos Bsicos.
Breve historia de Java
El compilador de Java
La Java Virtual Machine
Las variables PATH y CLASSPATH
2. Caacte!sticas del "en#ua$e.
Variables y Tipos de atos
!peradores
Control de "lu#o
Arrays y Cadenas
E#emplos
%. O&$etos' Clases e Inte(aces.
Conceptos de pro$ramaci%n orientada a ob#etos
Crear y &tili'ar !b#etos
eclarar Clases
La Clase como $eneradora de ob#etos
Herencia
M(todos de ob#eto
Paso de ar$umentos a m(todos
M(todos de clase )static*
Constructores
M(todos sobrecar$ados )overloaded*
+u( es un pac,a$e
E#emplos
Conceptos Bsicos.
Be)e *istoia de Ja)a
Java sur$i% en -..- cuando un $rupo de in$enieros de Sun Microsystems trataron de dise/ar un
nuevo len$ua#e de pro$ramaci%n destinado a electrodom(sticos0 La reducida potencia de c1lculo y
memoria de los electrodom(sticos llev% a desarrollar un len$ua#e sencillo capa' de $enerar c%di$o
de tama/o muy reducido0
ebido a la e2istencia de distintos tipos de CP&s y a los continuos cambios3 era importante
conse$uir una herramienta independiente del tipo de CP& utili'ada0 esarrollaron un c%di$o
4neutro5 6ue no depend7a del tipo de electrodom(stico3 el cual se e#ecutaba sobre una 4m16uina
hipot(tica o virtual5 denominada Java Virtual Machine )JVM*0 Era la JVM 6uien interpretaba el
c%di$o neutro convirti(ndolo a c%di$o particular de la CP& utili'ada0 Esto permit7a lo 6ue lue$o se
ha convertido en el principal lema del len$ua#e8 49rite !nce3 :un Every;here50 A pesar de los
es<uer'os reali'ados por sus creadores3 nin$una empresa de electrodom(sticos se interes% por el
nuevo len$ua#e0
Como len$ua#e de pro$ramaci%n para computadores3 Java se introdu#o a <inales de -..=0 La
clave <ue la incorporaci%n de un int(rprete Java en la versi%n >0? del pro$rama @etscape @avi$ator3
produciendo una verdadera revoluci%n en Anternet0 Java -0- apareci% a principios de -..B3
me#orando sustancialmente la primera versi%n del len$ua#e0 Java -0>3 m1s tarde rebauti'ado como
Java >3 naci% a <inales de -..C0
Al pro$ramar en Java no se parte de cero0 Cual6uier aplicaci%n 6ue se desarrolle 4cuel$a5 )o
se apoya3 se$Dn como se 6uiera ver* en un $ran nDmero de clases pree2istentes0 Al$unas de ellas las
ha podido hacer el propio usuario3 otras pueden ser comerciales3 pero siempre hay un nDmero muy
importante de clases 6ue <orman parte del propio len$ua#e )el APA o Application Pro$rammin$
Anter<ace de Java*0 Java incorpora en el propio len$ua#e muchos aspectos 6ue en cual6uier otro
len$ua#e son e2tensiones propiedad de empresas de so<t;are o <abricantes de ordenadores )threads3
e#ecuci%n remota3 componentes3 se$uridad3 acceso a bases de datos3 etc0*0 Por eso muchos e2pertos
opinan 6ue Java es el len$ua#e ideal para aprender la in<orm1tica moderna3 por6ue incorpora todos
estos conceptos de un modo est1ndar3 mucho m1s sencillo y claro 6ue con las citadas e2tensiones de
otros len$ua#es0 Esto es consecuencia de haber sido dise/ado m1s recientemente y por un Dnico
e6uipo0
El principal ob#etivo del len$ua#e Java es lle$ar a ser el 4ne2o universal5 6ue conecte a los
usuarios con la in<ormaci%n3 est( (sta situada en el ordenador local3 en un servidor de 9eb3 en una
base de datos o en cual6uier otro lu$ar0
Java es un len$ua#e muy completo )de hecho se est1 convirtiendo en un macroElen$ua#e8 Java
-0? ten7a -> pac,a$esF Java -0- ten7a >G y Java -0> tiene =.*0 En cierta <orma casi todo depende de
casi todo0 Por ello3 conviene aprenderlo de modo iterativo8 primero una visi%n muy $eneral3 6ue se
va re<inando en sucesivas iteraciones0 &na <orma de hacerlo es empe'ar con un e#emplo completo
en el 6ue ya aparecen al$unas de las caracter7sticas m1s importantes0
La compa/7a Sun describe el len$ua#e Java como 4simple3 orientado a ob#etos3 distribuido3
interpretado3 robusto3 se$uro3 de ar6uitectura neutra3 portable3 de altas prestaciones3 multitarea y
din1mico50 Adem1s de una serie de hala$os por parte de Sun hacia su propia criatura3 el hecho es
6ue todo ello describe bastante bien el len$ua#e Java3 aun6ue en al$unas de esas caracter7sticas el
len$ua#e sea todav7a bastante me#orable0 Al$unas de las anteriores ideas se ir1n e2plicando a lo
lar$o de este manual0
+ue es Ja)a.
Java > )antes llamado Java -0> o JH -0>* es la tercera versi%n importante del len$ua#e de
pro$ramaci%n Java0
@o hay cambios conceptuales importantes respecto a Java -0- )en Java -0- s7 los hubo
respecto a Java -0?*3 sino e2tensiones y ampliaciones3 lo cual hace 6ue a muchos e<ectos Ipor
e#emplo3 para esta introducci%nE sea casi lo mismo traba#ar con Java -0- o con Java -0>0
Los pro$ramas desarrollados en Java presentan diversas venta#as <rente a los desarrollados en
otros len$ua#es como CJCKK0 La e#ecuci%n de pro$ramas en Java tiene muchas posibilidades8
e#ecuci%n como aplicaci%n independiente )StandEalone Application*3 e#ecuci%n como applet3
e#ecuci%n como servlet3 etc0 &n applet es una aplicaci%n especial 6ue se e#ecuta dentro de un
nave$ador o bro;ser )por e#emplo @etscape @avi$ator o Anternet E2plorer* al car$ar una p1$ina
HTML desde un servidor 9eb0 El applet se descar$a desde el servidor y no re6uiere instalaci%n en
el ordenador donde se encuentra el bro;ser0 &n servlet es una aplicaci%n sin inter<ace $r1<ica 6ue se
e#ecuta en un servidor de Anternet0 La e#ecuci%n como aplicaci%n independiente es an1lo$a a los
pro$ramas desarrollados con otros len$ua#es0
Adem1s de incorporar la e#ecuci%n como Applet3 Java permite <1cilmente el desarrollo tanto
de ar6uitecturas clienteEservidor como de aplicaciones distribuidas3 consistentes en crear
aplicaciones capaces de conectarse a otros ordenadores y e#ecutar tareas en varios ordenadores
simult1neamente3 repartiendo por lo tanto el traba#o0 Aun6ue tambi(n otros len$ua#es de pro$raE
maci%n permiten crear aplicaciones de este tipo3 Java incorpora en su propio APA estas
<uncionalidades0
El entono de desaollo de Ja)a
E2isten distintos pro$ramas comerciales 6ue permiten desarrollar c%di$o Java0 La compa/7a Sun3
creadora de Java3 distribuye $ratuitamente el Java)tm* evelopment Hit )JH*0 Se trata de un
con#unto de pro$ramas y librer7as 6ue permiten desarrollar3 compilar y e#ecutar pro$ramas en Java0
Ancorpora adem1s la posibilidad de e#ecutar parcialmente el pro$rama3 deteniendo la e#ecuci%n en el
punto deseado y estudiando en cada momento el valor de cada una de las variables )con el
denominado ebu$$er*0 Cual6uier pro$ramador con un m7nimo de e2periencia sabe 6ue una parte
muy importante )muchas veces la mayor parte* del tiempo destinado a la elaboraci%n de un
pro$rama se destina a la detecci%n y correcci%n de errores0 E2iste tambi(n una versi%n reducida del
JH3 denominada J:E )Java :untime Environment* destinada Dnicamente a e#ecutar c%di$o Java
)no permite compilar*0
Los AEs )Ante$rated evelopment Environment*3 tal y como su nombre indica3 son entornos
de desarrollo inte$rados0 En un mismo pro$rama es posible escribir el c%di$o Java3 compilarlo y
e#ecutarlo sin tener 6ue cambiar de aplicaci%n0 Al$unos incluyen una herramienta para reali'ar
ebu$ $r1<icamente3 <rente a la versi%n 6ue incorpora el JH basada en la utili'aci%n de una
consola )denominada habitualmente ventana de comandos de Linu2*
Los entornos inte$rados permiten desarrollar las aplicaciones de <orma mucho m1s r1pida3
incorporando en muchos casos librer7as con componentes ya desarrollados3 los cuales se incorporan
al proyecto o pro$rama0 Como inconvenientes se pueden se/alar al$unos <allos de compatibilidad
entre plata<ormas3 y <icheros resultantes de mayor tama/o 6ue los basados en clases est1ndar0
El co,pilado de Ja)a
Se trata de una de las herramientas de desarrollo incluidas en el JH0 :eali'a un an1lisis de sinta2is
del c%di$o escrito en los <icheros <uente de Java )con e2tensi%n L0#ava*0 Si no encuentra errores en
el c%di$o $enera los <icheros compilados )con e2tensi%n L0class*0 En otro caso muestra la l7nea o
l7neas err%neas0 En el JH de Sun dicho compilador se llama #avac0 Tiene numerosas opciones3
al$unas de las cuales var7an de una versi%n a otra0 Se aconse#a consultar la documentaci%n de la
versi%n del JH utili'ada para obtener una in<ormaci%n detallada de las distintas posibilidades0
"a Ja)a Vitual Mac*ine
Tal y como se ha comentado al comien'o del cap7tulo3 la e2istencia de distintos tipos de
procesadores y ordenadores llev% a los in$enieros de Sun a la conclusi%n de 6ue era muy importante
conse$uir un so<t;are 6ue no dependiera del tipo de procesador utili'ado0 Se plante% la necesidad
de conse$uir un c%di$o capa' de e#ecutarse en cual6uier tipo de m16uina0 &na ve' compilado no
deber7a ser necesaria nin$una modi<icaci%n por el hecho de cambiar de procesador o de e#ecutarlo
en otra m16uina0 La clave consisti% en desarrollar un c%di$o 4neutro5 el cual estuviera preparado
para ser e#ecutado sobre una 4m16uina hipot(tica o virtual53 denominada Java Virtual Machine
)JVM*0 Es esta JVM 6uien interpreta este c%di$o neutro convirti(ndolo a c%di$o particular de la
CP& utili'ada0 Se evita tener 6ue reali'ar un pro$rama di<erente para cada CP& o plata<orma0
La JVM es el int(rprete de Java0 E#ecuta los 4bytecodes5 )<icheros compilados con e2tensi%n
L0class* creados por el compilador de Java )#avac*0 Tiene numerosas opciones entre las 6ue
destaca la posibilidad de utili'ar el denominado JAT )JustEAnETime Compiler*3 6ue puede me#orar
entre -? y >? veces la velocidad de e#ecuci%n de un pro$rama0
"as )aia&les -AT. / C"ASS-AT.
El desarrollo y e#ecuci%n de aplicaciones en Java e2i$e 6ue las herramientas para compilar
)#avac* y e#ecutar )#ava* se encuentren accesibles0 El ordenador3 desde una ventana de
comandos de Linu23 s%lo es capa' de e#ecutar los pro$ramas 6ue se encuentran en los directorios
indicados en la variable PATH del ordenador )o en el directorio activo*0 Si se desea compilar o
e#ecutar c%di$o en Java3 el directorio donde se encuentran estos pro$ramas )#ava y #avac*
deber1 encontrarse en el PATH0 Tecleando MPATH en una ventana de comandos de Linu2 se
muestran los nombres de directorios incluidos en dicha variable de entorno0
Java utili'a adem1s una nueva variable de entorno denominada CLASSPATH3 la cual
determina d%nde buscar tanto las clases o librer7as de Java )el APA de Java* como otras clases de
usuario0 A partir de la versi%n -0-0N del JH no es necesario indicar esta variable3 salvo 6ue se
desee a/adir con#untos de clases de usuario 6ue no ven$an con dicho JH0 La variable
CLASSPATH puede incluir la ruta de directorios o <icheros L0'ip o L0#ar en los 6ue se encuentren
los <icheros L0class0
Si no la tienes a$re$adas en tus variables de entorno3 la a$re$as con8
e2port JAVAOH!MEPJoptJ#avaJ#d,-0Q0?O?QJ
e2port PATHPJoptJ#avaJ#d,-0Q0?O?QJJbin
Los par1metros son8

JAVAOH!MEPJoptJ#avaJ#d,-0Q0?O?QJ
PATHPJoptJ#avaJ#d,-0Q0?O?QJJbin
CLASSPATHPJoptJ#avaJ#d,-0Q0?O?QJ#reJlibJ#ce0#ar
lo cual ser7a v1lido en el caso de 6ue el JH estuviera situado en el directorio
JoptJ#avaJ#d,-0Q0?O?QJ0
Cuando un <ichero <ilename0#ava se compila y en ese directorio e2iste ya un <ichero
<ilename0class3 se comparan las <echas de los dos <icheros0 Si el <ichero <ilename0#ava es m1s
anti$uo 6ue el <ilename0class no se produce un nuevo <ichero <ilename0class0 Esto s%lo es v1lido
para <icheros L0class 6ue se corresponden con una clase public0
Caacte!sticas del "en#ua$e.
En este cap7tulo se presentan las caracter7sticas $enerales de Java como len$ua#e de pro$ramaci%n
al$or7tmico0 En este apartado Java es muy similar a CJCKK3 len$ua#es en los 6ue est1 inspirado0 Se
va a intentar ser breve3 considerando 6ue el lector ya conoce al$unos otros len$ua#es de
pro$ramaci%n y est1 <amiliari'ado con lo 6ue son variables3 bi<urcaciones3 bucles3 etc0
Vaia&les
&na variable es un nombre 6ue contiene un valor 6ue puede cambiar a lo lar$o del pro$rama0 e
acuerdo con el tipo de in<ormaci%n 6ue contienen3 en Java hay dos tipos principales de variables8
-0 Variables de tipos primitivos0 Est1n de<inidas mediante un valor Dnico 6ue puede ser
entero3 de punto <lotante3 car1cter o booleano0 Java permite distinta precici%n y distintos
ran$os de valores para estos tipos de variables )char3 byte3 short3 int3 lon$3 <loat3 double3
boolean*0 E#emplos de variables de tipos primitivos podr7an ser8 ->G3 GN=QB=N3 G0-N-=3
->eE?.3 RAR3 True3 etc0
>0 Variables re<erencia0 Las variables re<erencia son re<erencias o nombres de una
in<ormaci%n m1s comple#a8 arrays u ob#etos de una determinada clase0
esde el punto de vista del papel o misi%n en el pro$rama3 las variables pueden ser8
-0 Variables miembro de una clase8 Se de<inen en una clase3 <uera de cual6uier m(todoF
pueden ser tipos primitivos o re<erencias0
>0 Variables locales8 Se de<inen dentro de un m(todo o m1s en $eneral dentro de cual6uier
blo6ue entre llaves ST0 Se crean en el interior del blo6ue y se destruyen al <inali'ar dicho
blo6ue0 Pueden ser tambi(n tipos primitivos o re<erencias0
0o,&es de Vaia&les
Los nombres de variables en Java se pueden crear con mucha libertad0 Pueden ser cual6uier
con#unto de caracteres num(ricos y al<anum(ricos3 sin al$unos caracteres especiales utili'ados por
Java como operadores o separadores ) 30KELJ etc0*0
E2iste una serie de palabras reservadas las cuales tienen un si$ni<icado especial para Java y
por lo tanto no se pueden utili'ar como nombres de variables0 ichas palabras son8
abstract boolean brea, byte case catch
char class constL continue de<ault do
double else e2tends <inal <inally <loat
<or $otoL i< implements import instanceo<
int inter<ace lon$ native ne; null
pac,a$e private protected public return short
static super s;itch synchroni'ed this thro;
thro;s transient try void volatile ;hile
)L* son palabras reservadas3 pero no se utili'an en la actual implementaci%n del len$ua#e Java0
Tipos -i,iti)os de Vaia&les
Se llaman tipos primitivos de variables de Java a a6uellas variables sencillas 6ue contienen los tipos
de in<ormaci%n m1s habituales8 valores boolean3 caracteres y valores num(ricos enteros o de punto
<lotante0
Java dispone de ocho tipos primitivos de variables8 un tipo para almacenar valores true y
<alse )boolean*F un tipo para almacenar caracteres )char*3 y Q tipos para $uardar valores num(ricos3
cuatro tipos para enteros )byte3 short3 int y lon$* y dos para valores reales de punto <lotante )<loat y
double*0 Los ran$os y la memoria 6ue ocupa cada uno de estos tipos se muestran en la Tabla >0-0
Tipo de variable escripci%n
Boolean - byte0 Valores true y <alse
Char > bytes0 &nicode0 Comprende el c%di$o ASCAA
Byte - byte0 Valor entero entre E->C y ->B
Short > bytes0 Valor entero entre EG>BQC y G>BQB
Ant N bytes0 Valor entero entre E>0-NB0NCG0QNC y >0-NB0NCG0QNB
Lon$ C bytes0 Valor entre E.0>>G0GB>0?GQ0C=N0BB=0C?C
y.0>>G0GB>0?GQ0C=N0BB=0C?B
"loat N bytes )entre Q y B ci<ras decimales e6uivalentes*0 e EG0N?>C>GEGC a
E-0N?->.CEEN= y de -0N?->.CEEN= a G0N?>C>GEGC
ouble C bytes )unas -= ci<ras decimales e6uivalentes*0 e E-0B.BQ.G-GNCQ>G>EG?C a
EN0.N?Q=QN=CN->NBEEG>N y de N0.N?Q=QN=CN->NBEEG>N a -0B.BQ.G-GNCQ>G>EG?C
Ta&la 2.1. Tipos pi,iti)os de )aia&les en Ja)a.
Los tipos primitivos de Java tienen al$unas caracter7sticas importantes 6ue se resumen a
continuaci%n8
-0 El tipo boolean no es un valor num(rico8 s%lo admite los valores true o <alse0 El tipo boolean
no se identi<ica con el i$ual o distinto de cero3 como en CJCKK0 El resultado de la e2presi%n
l%$ica 6ue aparece como condici%n en un bucle o en una bi<urcaci%n debe ser boolean0
>0 El tipo char contiene caracteres en c%di$o &@AC!E )6ue incluye el c%di$o ASCAA*3 y ocupan
-Q bits por car1cter0 Comprende los caracteres de pr1cticamente todos los idiomas0
G0 Los tipos byte3 short3 int y lon$ son nDmeros enteros 6ue pueden ser positivos o ne$ativos3 con
distintos valores m12imos y m7nimos0 A di<erencia de CJCKK3 en Java no hay enteros unsi$ned0
N0 Los tipos <loat y double son valores de punto <lotante )nDmeros reales* con QEB y -= ci<ras
decimales e6uivalentes3 respectivamente0
=0 Se utili'a la palabra void para indicar la ausencia de un tipo de variable determinado0
Q0 A di<erencia de CJCKK3 los tipos de variables en Java est1n per<ectamente de<inidos en todas y
cada una de las posibles plata<ormas0 Por e#emplo3 un int ocupa siempre la misma memoria y
tiene el mismo ran$o de valores3 en cual6uier tipo de ordenador0
B0 E2isten e2tensiones de Java -0> para aprovechar la ar6uitectura de los procesadores Antel3 6ue
permiten reali'ar operaciones de punto <lotente con una precisi%n e2tendida de C? bits0
C1,o se de(inen e iniciali2an las )aia&les
&na variable se de<ine especi<icando el tipo y el nombre de dicha variable0 Estas variables pueden
ser tanto de tipos primitivos como re<erencias a ob#etos de al$una clase perteneciente al APA de
Java o $enerada por el usuario0 Si no se especi<ica un valor en su declaraci%n3 las variable
primitivas se iniciali'an a cero )salvo boolean y char3 6ue se iniciali'an a <alse y RU?R*0
An1lo$amente las variables de tipo re<erencia son iniciali'adas por de<ecto a un valor especial8
null0
Es importante distin$uir entre la re<erencia a un ob#eto y el ob#eto mismo0 &na re<erencia es
una variable 6ue indica d%nde est1 $uardado un ob#eto en la memoria del ordenador )a di<erencia de
CJCKK3 Java no permite acceder al valor de la direcci%n3 pues en este len$ua#e se han eliminado los
punteros*0 Al declarar una re<erencia todav7a no se encuentra 4apuntando5 a nin$Dn ob#eto en
particular )salvo 6ue se cree e2pl7citamente un nuevo ob#eto en la declaraci%n*3 y por eso se le
asi$na el valor null0 Si se desea 6ue esta re<erencia apunte a un nuevo ob#eto es necesario crear el
ob#eto utili'ando el operador ne;0 Este operador reserva en la memoria del ordenador espacio para
ese ob#eto )variables y <unciones*0 Tambi(n es posible i$ualar la re<erencia declarada a otra
re<erencia a un ob#eto e2istente previamente0
&n tipo particular de re<erencias son los arrays o vectores3 sean (stos de variables primitivas
)por e#emplo3 un vector de enteros* o de ob#etos0 En la declaraci%n de una re<erencia de tipo array
hay 6ue incluir los corchetes VW0 En los si$uientes e#emplos aparece c%mo crear un vector de -?
nDmeros enteros y c%mo crear un vector de elementos MyClass0 Java $aranti'a 6ue los elementos
del vector son iniciali'ados a null o a cero )se$Dn el tipo de dato* en caso de no indicar otro valor0
E#emplos de declaraci%n e iniciali'aci%n de variables8
int 2F JJ eclaraci%n de la variable primitiva 20 Se iniciali'a a ?
int y P =F JJ eclaraci%n de la variable primitiva y0 Se iniciali'a a =
MyClass una:e<F JJ eclaraci%n de una re<erencia a un ob#eto MyClass0
JJ Se iniciali'a a null
una:e< P ne; MyClass)*F JJ La re<erencia 4apunta5 al nuevo ob#eto creado
JJ Se ha utili'ado el constructor por de<ecto
MyClass se$unda:e< P una:e<F JJ eclaraci%n de una re<erencia a un ob#eto MyClass0
JJ Se iniciali'a al mismo valor 6ue una:e<
int VW vectorF JJ eclaraci%n de un array0 Se iniciali'a a null
vector P ne; intV-?WF JJ Vector de -? enteros3 iniciali'ados a ?
double VW v P S-0?3 >0Q=3 G0-TF JJ eclaraci%n e iniciali'aci%n de un vector de G
JJ elementos con los valores entre llaves
MyClass VW listaPne; MyClassV=WF JJ Se crea un vector de = re<erencias a ob#etos
JJ Las = re<erencias son iniciali'adas a null
listaV?W P una:e<F JJ Se asi$na a listaV?W el mismo valor 6ue una:e<
listaV-W P ne; MyClass)*F JJ Se asi$na a listaV-W la re<erencia al nuevo ob#eto
JJ El resto )listaV>W000listaVNW si$uen con valor null
En el e#emplo mostrado las re<erencias una:e<3 se$unda:e< y listaV?W actuar1n sobre el
mismo ob#eto0 Es e6uivalente utili'ar cual6uiera de las re<erencias ya 6ue el ob#eto al 6ue se
re<ieren es el mismo0
Visi&ilidad / )ida de las )aia&les
Se entiende por visibilidad3 1mbito o scope de una variable3 la parte de la aplicaci%n donde dicha
variable es accesible y por lo tanto puede ser utili'ada en una e2presi%n0 En Java todas las variables
deben estar incluidas en una clase0 En $eneral las variables declaradas dentro de unas llaves ST3 es
decir dentro de un blo6ue3 son visibles y e2isten dentro de estas llaves0 Por e#emplo las variables
declaradas al principio de una <unci%n e2isten mientras se e#ecute la <unci%nF las variables
declaradas dentro de un blo6ue i< no ser1n v1lidas al <inali'ar las sentencias correspondientes a
dicho i< y las variables miembro de una clase )es decir declaradas entre las llaves ST de la clase pero
<uera de cual6uier m(todo* son v1lidas mientras e2iste el ob#eto de la clase0
Las variables miembro de una clase declaradas como public son accesibles a trav(s de una
re<erencia a un ob#eto de dicha clase utili'ando el operador punto )0*0 Las variables miembro
declaradas como private no son accesibles directamente desde otras clases0 Las <unciones miembro
de una clase tienen acceso directo a todas las variables miembro de la clase sin necesidad de
anteponer el nombre de un ob#eto de la clase0 Sin embar$o las <unciones miembro de una clase B
derivada de otra A3 tienen acceso a todas las variables miembro de A declaradas como public o
protected3 pero no a las declaradas como private0 &na clase derivada s%lo puede acceder
directamente a las variables y <unciones miembro de su clase base declaradas como public o
protected0 !tra caracter7stica del len$ua#e es 6ue es posible declarar una variable dentro de un
blo6ue con el mismo nombre 6ue una variable miembro3 pero no con el nombre de otra variable
local 6ue ya e2istiera0 La variable declarada dentro del blo6ue oculta a la variable miembro en ese
blo6ue0 Para acceder a la variable miembro oculta ser1 preciso utili'ar el operador this3 en la <orma
this0varname0
&no de los aspectos m1s importantes en la pro$ramaci%n orientada a ob#etos )!!P* es la
<orma en la cual son creados y eliminados los ob#etos0 En Java la <orma de crear nuevos ob#etos es
utili'ando el operador ne;0 Cuando se utili'a el operador ne;3 la variable de tipo re<erencia $uarda
la posici%n de memoria donde est1 almacenado este nuevo ob#eto0 Para cada ob#eto se lleva cuenta
de por cu1ntas variables de tipo re<erencia es apuntado0 La eliminaci%n de los ob#etos la reali'a el
pro$rama denominado $arba$e collector3 6uien autom1ticamente libera o borra la memoria ocupada
por un ob#eto cuando no e2iste nin$una re<erencia apuntando a ese ob#eto0 Lo anterior si$ni<ica 6ue
aun6ue una variable de tipo re<erencia de#e de e2istir3 el ob#eto al cual apunta no es eliminado si hay
otras re<erencias apuntando a ese mismo ob#eto0
Opeadoes de Ja)a
Java es un len$ua#e rico en operadores3 6ue son casi id(nticos a los de CJCKK0 Estos operadores se
describen brevemente en los apartados si$uientes0
Opeadoes ait,3ticos
Son operadores binarios )re6uieren siempre dos operandos* 6ue reali'an las operaciones aritm(ticas
habituales8 suma )K*3 resta )E*3 multiplicaci%n )L*3 divisi%n )J* y resto de la divisi%n )X*0
Opeadoes de asi#naci1n
Los operadores de asi$naci%n permiten asi$nar
un valor a una variable0 El operador de
asi$naci%n por e2celencia es el operador i$ual
)P*0 La <orma $eneral de las sentencias de
asi$naci%n con este operador es8
!perador &tili'aci%n E2presi%n e6uivalente
KP op- KP op> op- P op- K op>
EP op- EP op> op- P op- I op>
LP op- LP op> op- P op- L op>
JP op- JP op> op- P op- J op>
XP op- XP op> op- P op- X op>
variable P e2pressionF
Tabla >0>0 !tros operadores de asi$naci%n0
Java dispone de otros operadores de asi$naci%n0 Se trata de versiones abreviadas del
operador )P* 6ue reali'an operaciones 4acumulativas5 sobre una variable0 La Tabla >0> muestra
estos operadores y su e6uivalencia con el uso del operador i$ual )P*0
Opeadoes unaios
Los operadores m1s )K* y menos )E* unarios sirven para mantener o cambiar el si$no de una
variable3 constante o e2presi%n num(rica0 Su uso en Java es el est1ndar de estos operadores0
Opeado instanceo(
El operador instanceo< permite saber si un ob#eto pertenece o no a una determinada clase0 Es un
operador binario cuya <orma $eneral es3
ob#ect@ame instanceo< Class@ame
y 6ue devuelve true o <alse se$Dn el ob#eto pertene'ca o no a la clase0
Opeado condicional 45
Este operador3 tomado de CJCKK3 permite reali'ar bi<urcaciones condicionales sencillas0 Su <orma
$eneral es la si$uiente8
booleanE2pression Y res- 8 res>
donde se evalDa booleanE2pression y se devuelve res- si el resultado es true y res> si el resultado
es <alse0 Es el Dnico operador ternario )tres ar$umentos* de Java0 Como todo operador 6ue devuelve
un valor puede ser utili'ado en una e2presi%n0 Por e#emplo las sentencias8
2P- F yP-?F ' P )2Zy*Y2KG8yKCF
asi$nar7an a ' el valor N3 es decir 2KG0
Opeadoes ince,entales
Java dispone del operador incremento )KK* y decremento )EE*0 El operador )KK* incrementa en una
unidad la variable a la 6ue se aplica3 mientras 6ue )EE* la reduce en una unidad0 Estos operadores se
pueden utili'ar de dos <ormas8
-0 Precediendo a la variable )por e#emplo8 KKi*0 En este caso primero se incrementa la
variable y lue$o se utili'a )ya incrementada* en la e2presi%n en la 6ue aparece0
>0 Si$uiendo a la variable )por e#emplo8 iKK*0 En este caso primero se utili'a la variable en la
e2presi%n )con el valor anterior* y lue$o se incrementa0
En muchas ocasiones estos operadores se utili'an para incrementar una variable <uera de una
e2presi%n0 En este caso ambos operadores son e6uivalente0 Si se utili'an en una e2presi%n m1s
complicada3 el resultado de utili'ar estos operadores en una u otra de sus <ormas ser1 di<erente0 La
actuali'aci%n de contadores en bucles <or es una de las aplicaciones m1s <recuentes de estos
operadores0
Opeadoes elacionales
Los operadores relacionales sirven para
reali'ar comparaciones de i$ualdad3
desi$ualdad y relaci%n de menor o mayor0
El resultado de estos operadores es
siempre un valor boolean )true o <alse*
se$Dn se cumpla o no la relaci%n
considerada0
La Tabla >0G muestra los operadores relacionales de Java0
!perador &tili'aci%n El resultado es true
[ op- [ op> si op- es mayor 6ue op>
[P op- [P op> si op- es mayor o i$ual 6ue op>
Z op- Z op> si op- es menor 6ue op>
ZP op- ZP op> si op- es menor o i$ual 6ue op>
PP op- PP op> si op- y op> son i$uales
\P op- \P op> si op- y op> son di<erentes

Tabla >0G0 !peradores relacionales0
operadores relacionales de Java0
Estos operadores se utili'an con mucha <recuencia en las bi<urcaciones y en los bucles3 6ue se
ver1n en pr%2imos apartados de este cap7tulo0
Opeadoes l1#icos
Los operadores l%$icos se utili'an para construir e2presiones l%$icas3 combinando valores l%$icos
)true yJo <alse* o los resultados de los operadores relacionales0 La Tabla >0N muestra los operadores
l%$icos de Java0 ebe notarse 6ue en ciertos casos el se$undo operando no se evalDa por6ue ya no
es necesario )si ambos tienen 6ue ser true y el primero es <alse3 ya se sabe 6ue la condici%n de 6ue
ambos sean true no se va a cumplir*0 Esto puede traer resultados no deseados y por eso se han
a/adido los operadores )]* y )^* 6ue $aranti'an 6ue los dos operandos se evalDan siempre0
!perador @ombre &tili'aci%n :esultado
]] A@ op- ]] op> true si op- y op> son true0 Si op- es <alse ya
no se evalDa op>
^^ !: op- ^^ op> true si op- u op> son true0 Si op- es true ya no se
evalDa op>
\ ne$aci%n \ op true si op es <alse y <alse si op es true
] A@ op- ] op> true si op- y op> son true0 Siempre se evalDa op>
^ !: op- ^ op> true si op- u op> son true0 Siempre se evalDa op>
Tabla >0N0 !peradores l%$icos0
Opeado de concatenaci1n de cadenas de caactees 678
El operador m1s )K* se utili'a tambi(n para concatenar cadenas de caracteres0 Por e#emplo3 para
escribir una cantidad con un r%tulo y unas unidades puede utili'arse la sentencia8
System0out0println)_El total asciende a _ K result K _ unidades_*F
donde el operador de concatenaci%n se utili'a dos veces para construir la cadena de caracteres 6ue
se desea imprimir por medio del m(todo println)*0 La variable num(rica result es convertida
autom1ticamente por Java en cadena de caracteres para poderla concatenar0 En otras ocasiones se
deber1 llamar e2pl7citamente a un m(todo para 6ue realice esta conversi%n0
Opeadoes 9ue act:an a ni)el de &its
Java dispone tambi(n de un con#unto de operadores 6ue actDan a nivel de bits0 Las operaciones de
bits se utili'an con <recuencia para de<inir se/ales o <la$s3 esto es3 variables de tipo entero en las 6ue
cada uno de sus bits indican si una opci%n est1 activada o no0 La Tabla >0= muestra los operadores
de Java 6ue actDan a nivel de bits0
!perador &tili'aci%n :esultado
[[ op- [[ op> espla'a los bits de op- a la derecha una distancia op>
ZZ op- ZZ op> espla'a los bits de op- a la i'6uierda una distancia op>
[[[ op- [[[ op> espla'a los bits de op- a la derecha una distancia op>
)positiva*
] op- ] op> !perador A@ a nivel de bits
^ op- ^ op> !perador !: a nivel de bits
` op- ` op> !perador a!: a nivel de bits )- si s%lo uno de los operandos
es -*
b bop> !perador complemento )invierte el valor de cada bit*
Tabla >0=0 !peradores a nivel de bits0
En binario3 las potencias de dos se representan con un Dnico bit activado0 Por e#emplo3 los
nDmeros )-3 >3 N3 C3 -Q3 G>3 QN3 ->C* se representan respectivamente de modo binario en la <orma
)???????-3 ??????-?3 ?????-??3 ????-???3 ???-????3 ??-?????3 ?-??????3 -???????*3
utili'ando s%lo C bits0 La suma de estos nDmeros permite construir una variable <la$s con los bits
activados 6ue se deseen0 Por e#emplo3 para construir una variable <la$s 6ue sea ???-??-? bastar7a
hacer <la$sP>K-Q0 Para saber si el se$undo bit por la derecha est1 o no activado bastar7a utili'ar la
sentencia3
i< )<la$s ] > PP >* S000T
La Tabla >0Q muestra los operadores de asi$naci%n a nivel de bits0
!perador &tili'aci%n E6uivalente a
]P op- ]P op> op- P op- ] op>
^P op- ^P op> op- P op- ^ op>
`P op- `P op> op- P op- ` op>
ZZP op- ZZP op> op- P op- ZZ op>
[[P op- [[P op> op- P op- [[ op>
[[[P op- [[[P op> op- P op- [[[ op>
Tabla >0Q0 !peradores de asi$naci%n a nivel de bits0
-ecedencia de opeadoes
El orden en 6ue se reali'an las operaciones es <undamental para determinar el resultado de una
e2presi%n0 Por e#emplo3 el resultado de 2JyL' depende de 6u( operaci%n )la divisi%n o el producto*
se realice primero0 La si$uiente lista muestra el orden en 6ue se e#ecutan los distintos operadores en
un sentencia3 de mayor a menor precedencia8
post<i2 operators VW 0 )params* e2prKK e2prEE
unary operators KKe2pr EEe2pr Ke2pr Ee2pr b \
creation or cast ne; )type*e2pr
multiplicative L J X
additive K E
shi<t ZZ [[ [[[
relational Z [ ZP [P instanceo<
e6uality PP \P
bit;ise A@ ]
bit;ise e2clusive !: `
bit;ise inclusive !: ^
lo$ical A@ ]]
lo$ical !: ^^
conditional Y 8
assi$nment P KP EP LP JP XP ]P `P ^P ZZP [[P [[[P
En Java3 todos los operadores binarios3 e2cepto los operadores de asi$naci%n3 se evalDan de
i'6uierda a derecha0 Los operadores de asi$naci%n se evalDan de derecha a i'6uierda3 lo 6ue
si$ni<ica 6ue el valor de la derecha se copia sobre la variable de la i'6uierda0
Estuctuas de po#a,aci1n
En este apartado se supone 6ue el lector tiene al$unos conocimientos de pro$ramaci%n y por lo
tanto
no se e2plican en pro<undidad los conceptos 6ue aparecen0
Las estructuras de pro$ramaci%n o estructuras de control permiten tomar decisiones y
reali'ar un proceso repetidas veces0 Son los denominados bi<urcaciones y bucles0 En la mayor7a de
los len$ua#es de pro$ramaci%n3 este tipo de estructuras son comunes en cuanto a concepto3 aun6ue
su sinta2is var7a de un len$ua#e a otro0 La sinta2is de Java coincide pr1cticamente con la utili'ada
en CJCKK3 lo 6ue hace 6ue para un pro$ramador de CJCKK no supon$a nin$una di<icultad adicional0

Sentencias o e;pesiones
&na e2presi%n es un con#unto variables unidos por operadores0 Son %rdenes 6ue se le dan al
computador para 6ue realice una tarea determinada0
&na sentencia es una e2presi%n 6ue acaba en punto y coma )F*0 Se permite incluir varias
sentencias en una l7nea3 aun6ue lo habitual es utili'ar una l7nea para cada sentencia0 Por e#emplo8
i P ?F # P =F 2 P i K #FJJ L7nea compuesta de tres sentencias
Co,entaios
E2isten dos <ormas di<erentes de introducir comentarios entre el c%di$o de Java )en realidad son
tres3 como pronto se ver1*0 Son similares a la <orma de reali'ar comentarios en el len$ua#e CKK0 Los
comentarios son tremendamente Dtiles para poder entender el c%di$o utili'ado3 <acilitando de ese
modo <uturas revisiones y correcciones0 Adem1s permite 6ue cual6uier persona distinta al
pro$ramador ori$inal pueda comprender el c%di$o escrito de una <orma m1s r1pida0 Se recomienda
acostumbrarse a comentar el c%di$o desarrollado0 e esta <orma se simpli<ica tambi(n la tarea de
estudio y revisi%n posteriores0
Java interpreta 6ue todo lo 6ue aparece a la derecha de dos barras 4JJ5 en una l7nea cual6uiera
del c%di$o es un comentario del pro$ramador y no lo tiene en cuenta0 El comentario puede empe'ar
al comien'o de la l7nea o a continuaci%n de una instrucci%n 6ue debe ser e#ecutada0 La se$unda
<orma de incluir comentarios consiste en escribir el te2to entre los s7mbolos JL000LJ0 Este se$undo
m(todo es v1lido para comentar m1s de una l7nea de c%di$o0 Por e#emplo8
JJ Esta l7nea es un comentario
int aP-F JJ Comentario a la derecha de una sentencia
JJ Esta es la <orma de comentar m1s de una l7nea utili'ando
JJ las dos barras0 :e6uiere incluir dos barras al comien'o de cada l7nea
JL Esta se$unda <orma es mucho m1s c%moda para comentar un nDmero elevado de l7neas
ya 6ue s%lo re6uiere modi<icar
el comien'o y el <inal0 LJ
En Java e2iste adem1s una <orma especial de introducir los comentarios )utili'ando JLL000LJ
m1s al$unos caracteres especiales* 6ue permite $enerar autom1ticamente la documentaci%n sobre
las clases y pac,a$es desarrollados por el pro$ramador0 &na ve' introducidos los comentarios3 el
pro$rama #avadoc0e2e )incluido en el JH* $enera de <orma autom1tica la in<ormaci%n de <orma
similar a la presentada en la propia documentaci%n del JH0 La sinta2is de estos comentarios y la
<orma de utili'ar el pro$rama #avadoc0e2e se puede encontrar en la in<ormaci%n 6ue viene con el
JH0
Bi(ucaciones
Las bi<urcaciones permiten e#ecutar una de entre varias acciones en <unci%n del valor de una
e2presi%n l%$ica o relacional0 Se tratan de estructuras muy importantes ya 6ue son las encar$adas de
controlar el <lu#o de e#ecuci%n de un pro$rama0 E2isten dos bi<urcaciones di<erentes8 i< y s;itch0
Bi(ucaci1n i(
Esta estructura permite e#ecutar un con#unto de sentencias en <unci%n del valor 6ue ten$a la
e2presi%n de comparaci%n )se e#ecuta si la e2presi%n de comparaci%n tiene valor true*0 Tiene la
<orma si$uiente8
i< )booleanE2pression* S
statementsF
T
Las llaves ST sirven para a$rupar en un blo6ue las sentencias 6ue se han de e#ecutar3 y no son
necesarias si s%lo hay una sentencia dentro del i<0
Bi(ucaci1n i( else
An1lo$a a la anterior3 de la cual es una ampliaci%n0 Las sentencias incluidas en el else se e#ecutan
en
el caso de no cumplirse la e2presi%n de comparaci%n )<alse*3
i< )booleanE2pression* S
statements-F
T else S
statements>F
T
Bi(ucaci1n i( elsei( else
Permite introducir m1s de una e2presi%n de comparaci%n0 Si la primera condici%n no se cumple3 se
compara la se$unda y as7 sucesivamente0 En el caso de 6ue no se cumpla nin$una de las
comparaciones se e#ecutan las sentencias correspondientes al else0
i< )booleanE2pression-* S
statements-F
T else i< )booleanE2pression>* S
statements>F
T else i< )booleanE2pressionG* S
statementsGF
T else S
statementsNF
T
V(ase a continuaci%n el si$uiente e#emplo8
int numero P Q-F JJ La variable _numero_ tiene dos d7$itos
i<)Math0abs)numero* Z -?* JJ Math0abs)* calcula el valor absoluto0 )<alse*
System0out0println)_@umero tiene - di$ito _*F
else i< )Math0abs)numero* Z -??* JJ Si numero es Q-3 estamos en este caso )true*
System0out0println)_@umero tiene - di$ito _*F
else S JJ :esto de los casos
System0out0println)_@umero tiene mas de G di$itos _*F
System0out0println)_Se ha e#ecutado la opcion por de<ecto _*F
T
Sentencia s<itc*
Se trata de una alternativa a la bi<urcaci%n i< elsei< else cuando se compara la misma e2presi%n con
distintos valores0 Su <orma $eneral es la si$uiente8
s;itch )e2pression* S
case value-8 statements-F brea,F
case value>8 statements>F brea,F
case valueG8 statementsGF brea,F
case valueN8 statementsNF brea,F
case value=8 statements=F brea,F
case valueQ8 statementsQF brea,F
Vde<ault8 statementsBFW
T
Las caracter7sticas m1s relevantes de s;itch son las si$uientes8
-0 Cada sentencia case se corresponde con un Dnico valor de e2pression0 @o se pueden establecer
ran$os o condiciones sino 6ue se debe comparar con valores concretos0 El e#emplo del Apartado
>0G0G0G no se podr7a reali'ar utili'ando s;itch0
>0 Los valores no comprendidos en nin$una sentencia case se pueden $estionar en de<ault3 6ue es
opcional0
G0 En ausencia de brea,3 cuando se e#ecuta una sentencia case se e#ecutan tambi(n todas las case
6ue van a continuaci%n3 hasta 6ue se lle$a a un brea, o hasta 6ue se termina el s;itch0
E#emplo8
char c P )char*)Math0random)*L>QKRaR*F JJ ceneraci%n aleatoria de letras minDsculas
System0out0println)_La letra _ K c *F
s;itch )c* S
case RaR8 JJ Se compara con la letra a
case ReR8 JJ Se compara con la letra e
case RiR8 JJ Se compara con la letra i
case RoR8 JJ Se compara con la letra o
case RuR8 JJ Se compara con la letra u
System0out0println)_ Es una vocal _*F brea,F
de<ault8
System0out0println)_ Es una consonante _*F
T
Bucles
&n bucle se utili'a para reali'ar un proceso repetidas veces0 Se denomina tambi(n la'o o loop0 El
c%di$o incluido entre las llaves ST )opcionales si el proceso repetitivo consta de una sola l7nea*3 se
e#ecutar1 mientras se cumpla unas determinadas condiciones0 Hay 6ue prestar especial atenci%n a
los bucles in<initos3 hecho 6ue ocurre cuando la condici%n de <inali'ar el bucle
)booleanE2pression* no se lle$a a cumplir nunca0 Se trata de un <allo muy t7pico3 habitual sobre
todo entre pro$ramadores poco e2perimentados0
Bucle <*ile
Las sentencias statements se e#ecutan mientras booleanE2pression sea true0
;hile )booleanE2pression* S
statementsF
T
Bucle (o
La <orma $eneral del bucle <or es la si$uiente8
<or )initiali'ationF booleanE2pressionF increment* S
statementsF
T
6ue es e6uivalente a utili'ar ;hile en la si$uiente <orma3
initiali'ationF
;hile )booleanE2pression* S
statementsF
incrementF
T
La sentencia o sentencias initiali'ation se e#ecuta al comien'o del <or3 e increment despu(s de
statements0 La booleanE2pression se evalDa al comien'o de cada iteraci%nF el bucle termina cuando
la e2presi%n de comparaci%n toma el valor <alse0 Cual6uiera de las tres partes puede estar vac7a0 La
initiali'ation y el increment pueden tener varias e2presiones separadas por comas0
Por e#emplo3 el c%di$o situado a la i'6uierda produce la salida 6ue aparece a la derecha8
C%di$o8 Salida8
<or)int i P -3 # P i K -?F i Z =F iKK3 # P >Li* S i P - # P --
System0out0println)_ i P _ K i K _ # P _ K #*F i P > # P N
T i P G # P Q
i P N # P C
Bucle do <*ile
Es similar al bucle ;hile pero con la particularidad de 6ue el control est1 al <inal del bucle )lo 6ue
hace 6ue el bucle se e#ecute al menos una ve'3 independientemente de 6ue la condici%n se cumpla o
no*0 &na ve' e#ecutados los statements3 se evalDa la condici%n8 si resulta true se vuelven a e#ecutar
las sentencias incluidas en el bucle3 mientras 6ue si la condici%n se evalDa a <alse <inali'a el bucle0
Este tipo de bucles se utili'a con <recuencia para controlar la satis<acci%n de una determinada
condici%n de error o de conver$encia0
do S
statements
T ;hile )booleanE2pression*F
Sentencias &ea= / continue
La sentencia brea, es v1lida tanto para las bi<urcaciones como para los bucles0 Hace 6ue se sal$a
inmediatamente del bucle o blo6ue 6ue se est1 e#ecutando3 sin sin reali'ar la e#ecuci%n del resto de
las sentencias0
La sentencia continue se utili'a en los bucles )no en bi<urcaciones*0 "inali'a la iteraci%n 4i5
6ue en ese momento se est1 e#ecutando )no e#ecuta el resto de sentencias 6ue hubiera hasta el <inal
del bucle*0 Vuelve al comien'o del bucle y comien'a la si$uiente iteraci%n )iK-*0
Sentencias &ea= / continue con eti9uetas
Las eti6uetas permiten indicar un lu$ar donde continuar la e#ecuci%n de un pro$rama despu(s de un
brea, o continue0 El Dnico lu$ar donde se pueden incluir eti6uetas es #usto delante de un blo6ue de
c%di$o entre llaves ST )i<3 s;itch3 do000;hile3 ;hile3 <or* y s%lo se deben utili'ar cuando se tiene uno
o m1s bucles )o blo6ues* dentro de otro bucle y se desea salir )brea,* o continuar con la si$uiente
iteraci%n )continue* de un bucle 6ue no es el actual0
Por tanto3 la sentencia brea, label@ame <inali'a el blo6ue 6ue se encuentre a continuaci%n de
label@ame0 Por e#emplo3 en las sentencias3
bucleA8 JJ eti6ueta o label
<or ) int i P ?3 # P ?F i Z -??F iKK*S
;hile ) true * S
i<) )KK#* [ =* S brea, bucleAF T JJ "inali'a ambos bucles
else S brea,F T JJ "inali'a el bucle interior );hile*
T
T
la e2presi%n brea, bucleAF <inali'a los dos bucles simult1neamente3 mientras 6ue la e2presi%n
brea,F sale del bucle ;hile interior y se$uir7a con el bucle <or en i0 Con los valores presentados
ambos bucles <inali'ar1n con i P = y # P Q )se invita al lector a comprobarlo*0
La sentencia continue )siempre dentro de al menos un bucle* permite trans<erir el control a un
bucle con nombre o eti6ueta0 Por e#emplo3 la sentencia3
continue bucle-F
trans<iere el control al bucle <or 6ue comien'a despu(s de la eti6ueta bucle-8 para 6ue realice una
nueva iteraci%n3 como por e#emplo8
bucle-8
<or )int iP?F iZnF iKK* S
bucle>8
<or )int #P?F #ZmF #KK* S
000
i< )e2pression* continue bucle-F then continue bucle>F
000
T
T
Sentencia etun
!tra <orma de salir de un bucle )y de un m(todo* es utili'ar la sentencia return0 A di<erencia de
continue o brea,3 la sentencia return sale tambi(n del m(todo o <unci%n0 En el caso de 6ue la
<unci%n devuelva al$una variable3 este valor se deber1 poner a continuaci%n del return )return
valueF*0
Blo9ue t/ >...? catc* >...? (inall/ >...?
Java incorpora en el propio len$ua#e la $esti%n de errores0 El me#or momento para detectar los
errores es durante la compilaci%n0 Sin embar$o pr1cticamente s%lo los errores de sinta2is son
detectados en esta operaci%n0 El resto de problemas sur$en durante la e#ecuci%n de los pro$ramas0
En el len$ua#e Java3 una E2ception es un cierto tipo de error o una condici%n anormal 6ue se
ha producido durante la e#ecuci%n de un pro$rama0 Al$unas e2cepciones son <atales y provocan 6ue
se deba <inali'ar la e#ecuci%n del pro$rama0 En este caso conviene terminar ordenadamente y dar un
mensa#e e2plicando el tipo de error 6ue se ha producido0 !tras e2cepciones3 como por e#emplo no
encontrar un <ichero en el 6ue hay 6ue leer o escribir al$o3 pueden ser recuperables0 En este caso el
pro$rama debe dar al usuario la oportunidad de corre$ir el error )de<iniendo por e#emplo un nuevo
path del <ichero no encontrado*0
Los errores se representan mediante clases derivadas de la clase Thro;able3 pero los 6ue
tiene
6ue che6uear un pro$ramador derivan de E2ception )#ava0lan$0E2ception 6ue a su ve' deriva de
Thro;able*0 E2isten al$unos tipos de e2cepciones 6ue Java obli$a a tener en cuenta0 Esto se hace
mediante el uso de blo6ues try3 catch y <inally0
El c%di$o dentro del blo6ue try est1 4vi$ilado50 Si se produce una situaci%n anormal y se
lan'a
como consecuencia una e2cepci%n3 el control pasa al blo6ue catch3 6ue se hace car$o de la situaci%n
y decide lo 6ue hay 6ue hacer0 Se pueden incluir tantos blo6ues catch como se desee3 cada uno de
los cuales tratar1 un tipo de e2cepci%n0 "inalmente3 si est1 presente3 se e#ecuta el blo6ue <inally3 6ue
es opcional3 pero 6ue en caso de e2istir se e#ecuta siempre3 sea cual sea el tipo de error0
En el caso en 6ue el c%di$o de un m(todo pueda $enerar una E2ception y no se desee incluir
en dicho m(todo la $esti%n del error )es decir los bucles tryJcatch correspondientes*3 es necesario
6ue el m(todo pase la E2ception al m(todo desde el 6ue ha sido llamado0 Esto se consi$ue mediante
la adici%n de la palabra thro;s se$uida del nombre de la E2ception concreta3 despu(s de la lista de
ar$umentos del m(todo0 A su ve' el m(todo superior deber1 incluir los blo6ues tryJcatch o volver a
pasar la E2ception0 e esta <orma se puede ir pasando la E2ception de un m(todo a otro hasta lle$ar
al Dltimo m(todo del pro$rama3 el m(todo main)*0
En el si$uiente e#emplo se presentan dos m(todos 6ue deben _controlar_ una A!E2ception
relacionada con la lectura <icheros y una MyE2ception propia0 El primero de ellos )metodo-* reali'a
la $esti%n de las e2cepciones y el se$undo )metodo>* las pasa al si$uiente m(todo0
void metodo-)* S
000
try S
000 JJ C%di$o 6ue puede lan'ar las e2cepciones A!E2ception y MyE2ception
T catch )A!E2ception e-* SJJ Se ocupa de A!E2ception simplemente dando aviso
System0out0println)e-0$etMessa$e)**F
T catch )MyE2ception e>* S
JJ Se ocupa de MyE2ception dando un aviso y <inali'ando la <unci%n
System0out0println)e>0$etMessa$e)**F returnF
T <inally S JJ Sentencias 6ue se e#ecutar1n en cual6uier caso
000
TW
000
T JJ "in del metodo-
void metodo>)* thro;s A!E2ception3 MyE2ception S
000
JJ C%di$o 6ue puede lan'ar las e2cepciones A!E2ception y MyE2ception
000
T JJ "in del metodo>
Aa/s / Cadenas.
Aa/s Unidi,ensionales.
&n array es una colecci%n de valores de un mismo tipo en$rosados en la misma variable0
e <orma 6ue se puede acceder a cada valor independientemente0 Para Java adem1s un
array es un ob#eto 6ue tiene propiedades 6ue se pueden manipular0
Los arrays solucionan problemas concernientes al mane#o de muchas variables 6ue
se re<ieren a datos similares0 Por e#emplo si tuvi(ramos la necesidad de almacenar las
notas de una clase con -C alumnos3 necesitar7amos -C variables3 con la tremenda
lentitud de mane#o 6ue supone eso0 Solamente calcular la nota media re6uerir7a una
tremenda l7nea de c%di$o0 Almacenar las notas supondr7a al menos -C l7neas de c%di$o0
cracias a los arrays se puede crear un con#unto de variables con el mismo nombre0
La di<erencia ser1 6ue un nDmero )7ndice del array* distin$uir1 a cada variable0
En el caso de las notas3 se puede crear un array llamado notas3 6ue representa a
todas las notas de la clase0 Para poner la nota del primer alumno se usar7a notasV?W3 el
se$undo ser7a notasV-W3 etc0 )los corchetes permiten especi<icar el 7ndice en concreto del
array*0
La declaraci%n de un array unidimensional se hace con esta sinta2is0
tipo nombreVWF
E#emplo8
double cuentasVWF JJeclara un array 6ue almacenar1 valores
JJ doubles
eclara un array de tipo double0 Esta declaraci%n indica para 6u( servir1 el array3 pero
no reserva espacio en la :AM al no saberse todav7a el tama/o del mismo0
Tras la declaraci%n del array3 se tiene 6ue iniciar0 Eso lo reali'a el operador ne;3
6ue es el 6ue realmente crea el array indicando un tama/o0 Cuando se usa ne; es
cuando se reserva el espacio necesario en memoria0 &n array no iniciali'ado es un array
null0 E#emplo8
int notasVWF JJser7a v1lido tambi(n intVW notasF
notas P ne; intVGWF JJindica 6ue el array constar1 de tres
JJvalores de tipo int
JJTambi(n se puede hacer todo a la ve'
JJint notasVWPne; intVGWF
En el e#emplo anterior se crea un array de tres enteros )con los tipos b1sicos se crea en
memoria el array y se iniciali'an los valores3 los nDmeros se inician a ?*0
Los valores del array se asi$nan utili'ando el 7ndice del mismo entre corchetes8
notasV>WPCF
Tambi(n se pueden asi$nar valores al array en la propia declaraci%n8
int notasVW P SC3 B3 .TF
int notas>VWP ne; intVW SC3B3.TFJJE6uivalente a la anterior
Esto declara e iniciali'a un array de tres elementos0 En el e#emplo lo 6ue si$ni<ica es 6ue
notasV?W vale C3 notasV-W vale B y notasV>W vale .0
En Java )como en otros len$ua#es* el primer elemento de un array es el cero0 El
primer elemento del array notas3 es notasV?W0 Se pueden declarar arrays a cual6uier tipo
de datos )enteros3 booleanos3 doubles3 000 e incluso ob#etos*0
La venta#a de usar arrays )volviendo al caso de las notas* es 6ue $racias a un simple
bucle <or se puede rellenar o leer <1cilmente todos los elementos de un array8
JJCalcular la media de las -C notas
sumaP?F
<or )int iP?FiZP-BFiKK*S
sumaKPnotaViWF
T
mediaPsumaJ-CF
A un array se le puede iniciali'ar las veces 6ue ha$a <alta8
int notasVWPne; notasV-QWF
000
notasPne; notasV>=WF
Pero hay 6ue tener en cuenta 6ue el se$undo ne; hace 6ue se pierda el contenido
anterior0 :ealmente un array es una re<erencia a valores 6ue se almacenan en memoria
mediante el operador ne;3 si el operador ne; se utili'a en la misma re<erencia3 el
anterior contenido se 6ueda sin re<erencia y3 por lo tanto se pierde0
&n array se puede asi$nar a otro array )si son del mismo tipo*8
int notasVWF
int e#emploVWPne; intV-CWF
notasPe#emploF
En el Dltimo punto3 notas e6uivale a e#emplo0 Esta asi$naci%n provoca 6ue cual6uier
cambio en notas tambi(n cambie el array e#emplos0 Es decir esta asi$naci%n anterior3 no
copia los valores del array3 sino 6ue notas y e#emplo son re<erencias al mismo array0
E#emplo8
int notasVWPSG3G3GTF
int e#emploVWPnotasF
e#emploP notasF
e#emploV?WPCF
System0out0println)notasV?W*FJJEscribir1 el nDmero C
Aa/s Multidi,ensionales.
Los arrays adem1s pueden tener varias dimensiones0 Entonces se habla de arrays de
arrays )arrays 6ue contienen arrays* E#emplo8
int notasVWVWF
notas es un array 6ue contiene arrays de enteros
notas P ne; intVGWV->WFJJnotas est1 compuesto por G arrays
JJde -> enteros cada uno
notasV?WV?WP.FJJel primer valor es ?
Puede haber m1s dimensiones incluso )notasVGWV>WVBW*0 Los arrays multidimensionales
se pueden iniciali'ar de <orma m1s creativa incluso0 E#emplo8
int notasVWVWPne; intV=WVWFJJHay = arrays de enteros
notasV?WPne; intV-??WF JJEl primer array es de -?? enteros
notasV-WPne; intV>G?WF JJEl se$undo de >G?
notasV>WPne; intVN??WF
notasVGWPne; intV-??WF
notasVNWPne; intV>??WF
Hay 6ue tener en cuenta 6ue en el e#emplo anterior3 notasV?W es un array de -??
enteros0 Mientras 6ue notas3 es un array de = arrays de enteros0
Se pueden utili'ar m1s de dos dimensiones si es necesario0
lon$itud de un array
Los arrays poseen un m(todo 6ue permite determinar cu1nto mide un array0 Se trata de
len$th0 E#emplo )continuando del anterior*8
System0out0println)notas0len$th*F JJSale =
System0out0println)notasV>W0len$th*F JJSale N??
la clase Aa/s.
En el pa6uete #ava0utils se encuentra una clase est1tica llamada Arrays0 &na clase
est1tica permite ser utili'ada como si <uera un ob#eto )como ocurre con Math*0 Esta
clase posee m(todos muy interesantes para utili'ar sobre arrays0
Su uso es
Arrays0m(todo)ar$umentos*F
(ill
Permite rellenar todo un array unidimensional con un determinado valor0 Sus
ar$umentos son el array a rellenar y el valor deseado8
int valoresVWPne; intV>GWF
Arrays0<ill)valores3E-*FJJTodo el array vale E-
Tambi(n permite decidir desde 6ue 7ndice hasta 6u( 7ndice rellenamos8
Arrays0<ill)valores3=3C3E-*FJJel elemento = al B valdr1n E-
e9uals
Compara dos arrays y devuelve true si son i$uales0 Se consideran i$uales si son del
mismo tipo3 tama/o y contienen los mismos valores0
sot
Permite ordenar un array en orden ascendente0 Se pueden ordenar s%lo una serie de
elementos desde un determinado punto hasta un determinado punto0
int 2VWPSN3=3>3G3B3C3>3G3.3=TF
Arrays0sort)2*FJJEstar1 ordenado
Arrays0sort)23>3=*FJJ!rdena del >o al No elemento
&ina/Seac*
Permite buscar un elemento de <orma ultrarr1pida en un array ordenado )en un array
desordenado sus resultados son impredecibles*0 evuelve el 7ndice en el 6ue est1
colocado el elemento0 E#emplo8
int 2VWPS-3>3G3N3=3Q3B3C3.3-?3--3->TF
Arrays0sort)2*F
System0out0println)Arrays0binarySearch)23C**FJJa
B
El ,3todo S/ste,.aa/sCop/
La clase System tambi(n posee un m(todo relacionado con los arrays3 dicho m(todo
permite copiar un array en otro0 :ecibe cinco ar$umentos8 el array 6ue se copia3 el
7ndice desde 6ue se empie'a a copia en el ori$en3 el array destino de la copia3 el 7ndice
desde el 6ue se copia en el destino3 y el tama/o de la copia )nDmero de elementos de la
copia*0
int unoVWPS-3-3>TF
int dosVWPSG3G3G3G3G3G3G3G3GTF
System0arraycopy)uno3 ?3 dos3 ?3 uno0len$th*F
<or )int iP?FiZPCFiKK*S
System0out0print)dosViWK_ _*F
T JJSale -->GGGGGG

Clase Stin#
Intoducci1n
Para Java las cadenas de te2to son ob#etos especiales0 Los te2tos deben mane#arse
creando ob#etos de tipo Strin$0 E#emplo8
Strin$ te2to- P 4dPrueba de te2to\5F
Las cadenas pueden ocupar varias l7neas utili'ando el operador de concatenaci%n 4K50
Strin$ te2to> P5Este es un te2to 6ue ocupa 4 K
4varias l7neas3 no obstante se puede 4K
4per<ectamente encadenar5F
Tambi(n se pueden crear ob#etos Strin$ sin utili'ar constantes entrecomilladas3 usando
otros constructores8
charVW palabra P SePf3faf3flf3fbf3frf3fafTFJJArray de char
Strin$ cadena P ne; Strin$)palabra*F
byteVW datos P S.B3.C3..TF
Strin$ codi<icada P ne; Strin$ )datos3 4CC=.O-5*F
En el Dltimo e#emplo la cadena codi<icada se crea desde un array de tipo byte 6ue
contiene nDmeros 6ue ser1n interpretados como c%di$os &nicode0 Al asi$nar3 el valor
CC=.O- indica la tabla de c%di$os a utili'ar0
comparaci%n entre ob#etos Strin$
Los ob#etos Strin$ no pueden compararse directamente con los operadores de
comparaci%n0 En su lu$ar se deben utili'ar estas e2presiones8
cadena-0e6uals)cadena>*0 El resultado es true si la cadena- es i$ual a la
cadena>0 Ambas cadenas son variables de tipo Strin$0
cadena-0e6ualsA$noreCase)cadena>*0 Como la anterior3 pero en este caso no se
tienen en cuenta mayDsculas y minDsculas0
s-0compareTo)s>*0 Compara ambas cadenas3 considerando el orden al<ab(tico0
Si la primera cadena es mayor en orden al<ab(tico 6ue la se$unda devuelve -3 si
son i$uales devuelve ? y si es la se$unda la mayor devuelve E-0 Hay 6ue tener en
cuenta 6ue el orden no es el del al<abeto espa/ol3 sino 6ue usa la tabla ASCAA3 en
esa tabla la letra / es mucho mayor 6ue la o0
s-0compareToA$noreCase)s>*0 A$ual 6ue la anterior3 s%lo 6ue adem1s i$nora
las mayDsculas )disponible desde Java -0>*
Stin#.)alueO(
Este m(todo pertenece no s%lo a la clase Strin$3 sino a otras y siempre es un m(todo 6ue
convierte valores de una clase a otra0 En el caso de los ob#etos Strin$3 permite convertir
valores 6ue no son de cadena a <orma de cadena0 E#emplos8
Strin$ numero P Strin$0value!<)->GN*F
Strin$ <echa P Strin$0value!<)ne; ate)**F
En el e#emplo se observa 6ue este m(todo pertenece a la clase Strin$ directamente3 no
hay 6ue utili'ar el nombre del ob#eto creado )como se ver1 m1s adelante3 es un m(todo
est1tico*0
M3todos de las )aia&les de las cadenas
Son m(todos 6ue poseen las propias variables de cadena0 Para utili'arlos basta con
poner el nombre del m(todo y sus par1metros despu(s del nombre de la variable Strin$0
Es decir8 variableStrin$0m(todo)ar$umentos*
len#t*
Permite devolver la lon$itud de una cadena )el nDmero de caracteres de la cadena*8
Strin$ te2to-P5Prueba5F
System0out0println)te2to-0len$th)**FJJEscribe Q
Concatena cadenas
Se puede hacer de dos <ormas3 utili'ando el m(todo concat o con el operador K0
E#emplo8
Strin$ s-P5Buenos 53 s>P5d7as53 sG3 sNF
sG P s- K s>F
sN P s-0concat)s>*F
c*aAt
evuelve un car1cter de la cadena0 El car1cter a devolver se indica por su posici%n )el
primer car1cter es la posici%n ?* Si la posici%n es ne$ativa o sobrepasa el tama/o de la
cadena3 ocurre un error de e#ecuci%n3 una e2cepci%n tipo Ande2!ut!<BoundsE
E2ception0 E#emplo8
Strin$ s-P5Prueba5F
char c-Ps-0charAt)>*F JJc- valdr1 euf
su&stin#
a como resultado una porci%n del te2to de la cadena0 La porci%n se toma desde una
posici%n inicial hasta una posici%n <inal )sin incluir esa posici%n <inal*0 Si las posiciones
indicadas no son v1lidas ocurre una e2cepci%n de tipo Ande2!ut!<BoundsE
E2ception0 Se empie'a a contar desde la posici%n ?0 E#emplo8
Strin$ s-P5Buenos d7as5F

Strin$ s>Ps-0substrin$)B3-?*F JJs> P d7a
inde;O(
evuelve la primera posici%n en la 6ue aparece un determinado te2to en la cadena0 En
el caso de 6ue la cadena buscada no se encuentre3 devuelve E-0 El te2to a buscar puede
ser char o Strin$0 E#emplo8
Strin$ s-P5+uer7a decirte 6ue 6uiero 6ue te vayas5F
System0out0println)s-0inde2!<)46ue5**F JJa -=
Se puede buscar desde una determinada posici%n0 En el e#emplo anterior8
System0out0println)s-0inde2!<)46ue53-Q**F JJAhora da >Q
lastInde;O(
evuelve la Dltima posici%n en la 6ue aparece un determinado te2to en la cadena0 Es
casi id(ntica a la anterior3 s%lo 6ue busca desde el <inal0 E#emplo8
Strin$ s-P5+uer7a decirte 6ue 6uiero 6ue te vayas5F
System0out0println)s-0lastAnde2!<)46ue5*F JJa >Q
Tambi(n permite comen'ar a buscar desde una determinada posici%n0
ends@it*
evuelve true si la cadena termina con un determinado te2to0 E#emplo8
Strin$ s-P5+uer7a decirte 6ue 6uiero 6ue te vayas5F
System0out0println)s-0ends9ith)4vayas5*F JJa true
stats@it*
evuelve true si la cadena empie'a con un determinado te2to0
eplace
Cambia todas las apariciones de un car1cter por otro en el te2to 6ue se indi6ue y lo
almacena como resultado0 El te2to ori$inal no se cambia3 por lo 6ue hay 6ue asi$nar el
resultado de replace a un Strin$ para almacenar el te2to cambiado8
Strin$ s-P5Mariposa5F
System0out0println)s-0replace)eaf3fef**FJJa Meripose
System0out0println)s-*FJJSi$ue valiendo Mariposa
eplaceAll
Modi<ica en un te2to cada entrada de una cadena por otra y devuelve el resultado0 El
primer par1metro es el te2to 6ue se busca )6ue puede ser una e2presi%n re$ular*3 el
se$undo par1metro es el te2to con el 6ue se reempla'a el buscado0 La cadena ori$inal no
se modi<ica0

Strin$ s-P5Ca'ar armadillos5F
System0out0println)s-0replace)4ar535er5**FJJa Ca'er ermedillos
System0out0println)s-*FJJSi$ue valiendo Ca'ar armadilos
toUppeCase
evuelve la versi%n en mayDsculas de la cadena0
to"o<eCase
evuelve la versi%n en minDsculas de la cadena0
toC*aAa/
!btiene un array de caracteres a partir de una cadena0
"ista co,pleta de ,3todos
m(todo descripci%n
char charAt)int inde2* Proporciona el car1cter 6ue est1 en la
posici%n dada por el entero inde20
int compareTo)strin$ s* Compara las dos cadenas0 evuelve un valor
menor 6ue cero si la cadena s es mayor 6ue
la ori$inal3 devuelve ? si son i$uales y
devuelve un valor mayor 6ue cero si s es
menor 6ue la ori$inal0
int compareToA$noreCase)strin$ s* Compara dos cadenas3 pero no tiene e
cuenta si el te2to es mayDsculas o no0
Strin$ concat)Strin$ s* A/ade la cadena s a la cadena ori$inal0
Strin$ copyValue!<)charVW data* Produce un ob#eto Strin$ 6ue es i$ual al
array de caracteres data0
boolean ends9ith)Strin$ s* evuelve true si la cadena termina con el
te2to s
boolean e6uals)Strin$ s* Compara ambas cadenas3 devuelve true si
son i$uales
boolean e6ualsA$noreCase)Strin$ s* Compara ambas cadenas sin tener en cuenta
las mayDsculas y las minDsculas0
byteVW $etBytes)* evuelve un array de caracteres 6ue toma a
partir de la cadena de te2to
void $etBytes)int srcBe$in3 int srcEnd3 Almacena el contenido de la cadena en el
charVW dest3 int dstBe$in*F array de caracteres dest0 Toma los caracteres
desde la posici%n srcBe$in hasta la posici%n
srcEnd y les copia en el array desde la
posici%n dstBe$in
int inde2!<)Strin$ s* evuelve la posici%n en la cadena del te2to s
int inde2!<)Strin$ s3 int primeraPos* evuelve la posici%n en la cadena del te2to s3
empe'ando a buscar desde la posici%n
PrimeraPos
int lastAnde2!<)Strin$ s* evuelve la Dltima posici%n en la cadena del te2to s


m(todo descripci%n
int lastAnde2!<)Strin$ s3 int primeraPos* evuelve la Dltima posici%n en la cadena del
te2to s3 empe'ando a buscar desde la
posici%n PrimeraPos
int len$th)* evuelve la lon$itud de la cadena

Strin$ replace)char carAnterior3 char evuelve una cadena id(ntica al ori$inal
ncar@uevo* pero 6ue ha cambiando los caracteres
i$uales a carAnterior por car@uevo
Strin$ replace"irst)Strin$ str-3 Strin$ Cambia la primera aparici%n de la cadena
str>* str- por la cadena str>

Strin$ replace"irst)Strin$ str-3 Strin$ Cambia la primera aparici%n de la cadena
str>* uno por la cadena dos

Strin$ replaceAll)Strin$ str-3 Strin$ Cambia la todas las apariciones de la cadena
str>* uno por la cadena dos
Strin$ starts9ith)Strin$ s* evuelve true si la cadena comien'a con el
te2to s0
Strin$ substrin$)int primeraPos3 int evuelve el te2to 6ue va desde primeraPos a
se$undaPos* se$unaPos0

charVW toCharArray)* evuelve un array de caracteres a partir de
la cadena dada

Strin$ toLo;erCase)* Convierte la cadena a minDsculas

Strin$ toLo;erCase)Locale local* Lo mismo pero si$uiendo las instrucciones
del ar$umento local

Strin$ to&pperCase)* Convierte la cadena a mayDsculas
Strin$ to&pperCase)Locale local* Lo mismo pero si$uiendo las instrucciones
del ar$umento local
Strin$ trim)* Elimina los blancos 6ue ten$a la cadena
tanto por delante como por detr1s
Static Strin$ value!<)tipo elemento* evuelve la cadena 6ue representa el valor
elemento0 Si elemento es booleano3 por
e#emplo devolver7a una cadena con el valor
true o <alse
O&$etos / Clases
-o#a,aci1n Oientada a O&$etos
Se ha comentado anteriormente en este manual 6ue Java es un len$ua#e totalmente
orientado a ob#etos0 e hecho siempre hemos de<inido una clase pDblica con un m(todo
main 6ue permite 6ue se pueda visuali'ar en la pantalla el pro$rama Java0
La $racia de la P!! es 6ue se hace 6ue los problemas sean m1s sencillos3 al permitir
dividir el problema0 Est1 divisi%n se hace en ob#etos3 de <orma 6ue cada ob#eto <uncione
de <orma totalmente independiente0 &n ob#eto es un elemento del pro$rama 6ue posee
sus propios datos y su propio <uncionamiento0
Es decir un ob#eto est1 <ormado por datos )propiedades* y <unciones 6ue es capa'
de reali'ar el ob#eto )m(todos*0
Antes de poder utili'ar un ob#eto3 se debe de<inir su clase0 La clase es la de<inici%n
de un tipo de ob#eto0 Al de<inir una clase lo 6ue se hace es indicar como <unciona un
determinado tipo de ob#etos0 Lue$o3 a partir de la clase3 podremos crear ob#etos de esa

-opiedades de la -OO
Encapsula,iento
&na clase se compone tanto de variables )propiedades* como
de <unciones y procedimientos )m(todos*0 e hecho no se pueden de<inir
variables )ni <unciones* <uera de una clase )es decir no hay variables $lobales*0
!cultaci%n0 Hay una 'ona oculta al de<inir la clases )'ona privada* 6ue s%lo es
utili'ada por esa clases y por al$una clase relacionada0 Hay una 'ona pDblica
)llamada tambi(n inter<a' de la clase* 6ue puede ser utili'ada por cual6uier
parte del c%di$o0
-oli,o(is,o
Cada m(todo de una clase puede tener varias de<iniciones
distintas0 En el caso del parch7s8 partida0empe'ar)N* empie'a una partida para
cuatro #u$adores3 partida0empe'ar)ro#o3 a'ul* empie'a una partida de dos
#u$adores para los colores ro#o y a'ulF estas son dos <ormas distintas de emplear el
m(todo empe'ar3 6ue es polim%r<ico0
.eencia
&na clase puede heredar propiedades de otra0

Intoducci1n al concepto de o&$eto
&n ob#eto es cual6uier entidad representable en un pro$rama in<orm1tico3 bien sea real
)ordenador* o bien sea un concepto )trans<erencia*0 &n ob#eto en un sistema posee8 una
identidad3 un estado y un comportamiento0
El estado marca las condiciones de e2istencia del ob#eto dentro del pro$rama0
L%$icamente este estado puede cambiar0 &n coche puede estar parado3 en marcha3
estropeado3 <uncionando3 sin $asolina3 etc0
El comportamiento determina como responde el ob#eto ante peticiones de otros
ob#etos0 Por e#emplo un ob#eto conductor puede lan'ar el mensa#e arrancar a un coche0
El comportamiento determina 6u( es lo 6ue har1 el ob#eto0
La identidad determina 6ue cada ob#eto es Dnico aun6ue ten$an el mismo valor0
@o e2isten dos ob#etos i$uales0 Lo 6ue s7 e2iste es dos re<erencias al mismo ob#eto0
Los ob#etos se mane#an por re<erencias3 e2istir1 una re<erencia a un ob#eto0 e modo
6ue esa re<erencia permitir1 cambiar los atributos del ob#eto0 Ancluso puede haber
varias re<erencias al mismo ob#eto3 de modo 6ue si una re<erencia cambia el estado del
ob#eto3 el resto )l%$icamente* mostrar1n esos cambios0
Los ob#etos por valor son los 6ue no usan re<erencias y usan copias de valores
concretos0 En Java estos ob#etos son los tipos simples8 int3 char3 byte3 short3 lon$3
<loat3 double y boolean0 El resto son todos ob#etos )incluidos los arrays y Strin$s*0
Clases
Por e#emplo3 si 6uisi(ramos crear el #ue$o del parch7s en Java3 una clase ser7a la
casilla3 otra las <ichas3 otra el dado3 etc03 etc0 En el caso de la casilla3 se de<inir7a la clase
para indicar su <uncionamiento y sus propiedades3 y lue$o se crear7a tantos ob#etos
casilla como casillas ten$a el #ue$o0
Lo mismo ocurrir7a con las <ichas3 la clase <icha de<inir7a las propiedades de la <icha
)color y posici%n por e#emplo* y su <uncionamiento mediante sus m(todos )por e#emplo
un m(todo ser7a mover3 otro lle$ar a la meta3 etc03 etc03 *3 lue$o se crear7an tantos ob#etos
<icha3 como <ichas ten$a el #ue$o0
Las clases son las plantillas para hacer ob#etos0 &na clase sirve para de<inir una serie de
ob#etos con propiedades )atributos*3 comportamientos )operaciones o m(todos*3 y
sem1ntica comunes0 Hay 6ue pensar en una clase como un molde0 A trav(s de las clases
se obtienen los ob#etos en s70
Es decir antes de poder utili'ar un ob#eto se debe de<inir la clase a la 6ue pertenece3
esa de<inici%n incluye8
Sus atributos0 Es decir3 los datos miembros de esa clase0 Los datos pueden ser
pDblicos )accesibles desde otra clase* o privados )s%lo accesibles por c%di$o de su
propia clase0 Tambi(n se las llama campos0
Sus m(todos0 Las <unciones miembro de la clase0 Son las acciones )u
operaciones* 6ue puede reali'ar la clase0
C%di$o de iniciali'aci%n0 Para crear una clase normalmente hace <alta reali'ar
operaciones previas )es lo 6ue se conoce como el constructor de la clase*0
!tras clases0 entro de una clase se pueden de<inir otras clases )clases internas3
son consideradas como asociaciones dentro de &ML*0
@ombre de clase
Atributos
M(todos
Alustraci%n =3 Clase en notaci%n &ML

El <ormato $eneral para crear una clase en Java es8
VaccesoW class nombreeClase S
VaccesoW VstaticW tipo atributo-F
VaccesoW VstaticW tipo atributo>F
VaccesoW VstaticW tipo atributoGF
000
VaccessW VstaticW tipo m(todo-)listaeAr$umentos* S
000c%di$o del m(todo000
T
000
T
La palabra opcional static sirve para hacer 6ue el m(todo o la propiedad a la 6ue
precede se pueda utili'ar de manera $en(rica )m1s adelante se hablar1 de clases
$en(ricas*3 los m(todos o propiedades as7 de<inidos se llaman atributos de clase y
m(todos de clase respectivamente0 Su uso se ver1 m1s adelante0 E#emploF
class @oria S
double radioF
void $irar)int velocidad*S
000JJde<inici%n del m(todo
T
void parar)*S000
T
@oria
radio8double
parar)*
$irar)int*

O&$etos
Se les llama instancias de clase0 Son un elemento en s7 de la clase )en el e#emplo del
parch7s3 una <icha en concreto*0 &n ob#eto se crea utili'ando el llamado constructor de
la clase0 El constructor es el m(todo 6ue permite iniciar el ob#eto0
datos miembro )propiedades o atributos*
Para poder acceder a los atributos de un ob#eto3 se utili'a esta sinta2is8
ob#eto0atributo
Por e#emplo8
@oria0radioF
M3todos
Los m(todos se utili'an de la misma <orma 6ue los atributos3 e2cepto por6ue los
m(todos poseen siempre par(ntesis3 dentro de los cuales pueden ir valore snecesarios
para la e#ecuci%n del m(todo )par1metros*8
ob#eto0m(todo)ar$umentoselM(todo*
Los m(todos siempre tienen par(ntesis )es la di<erencia con las propiedades* y dentro
de los par(ntesis se colocan los ar$umentos del m(todo0 +ue son los datos 6ue necesita
el m(todo para <uncionar0 Por e#emplo8
Mi@oria0$ira)=*F
Lo cual podr7a hacer 6ue la @oria avance a = HmJh0
.eencia

En la P!! tiene mucha importancia este concepto3 la herencia es el mecanismo 6ue
permite crear clases basadas en otras e2istentes0 Se dice 6ue esas clases descienden de
las primeras0 As7 por e#emplo3 se podr7a crear una clase llamada veh7culo cuyos
m(todos ser7an mover3 parar3 acelerar y <renar0 g despu(s se podr7a crear una clase
coche basada en la anterior 6ue tendr7a esos mismos m(todos )les heredar7a* y adem1s
a/adir7a al$unos propios3 por e#emplo abrirCap% o cambiar:ueda0
Ceaci1n de o&$etos de la clase
&na ve' de<inida la clase3 se pueden utili'ar ob#etos de la clase0 @ormalmente consta de
dos pasos0 Su declaraci%n3 y su creaci%n0 La declaraci%n consiste en indicar 6ue se va a
utili'ar un ob#eto de una clase determinada0 g se hace i$ual 6ue cuando se declara una
variable simple0 Por e#emplo8
@oria noriaePalenciaF
Eso declara el ob#eto noriaePalencia como ob#eto de tipo @oriaF se supone 6ue
previamente se ha de<inido la clase @oria0

Para poder utili'ar un ob#eto3 hay 6ue crearle de verdad0 Eso consiste en utili'ar el
operador ne;0 Por e#emplo8
noriaePalencia P ne; @oria)*F
Al hacer esta operaci%n el ob#eto reserva la memoria 6ue necesita y se iniciali'a el ob#eto
mediante su constructor0 M1s adelante veremos como de<inir el constructor0
@oriaePalencia8@oria
Alustraci%n B3 !b#eto @oriaePalencia
de la clase @oria en notaci%n &ML
Especi(icadoes de acceso
Se trata de una palabra 6ue antecede a la declaraci%n de una clase3 m(todo o propiedad
de clase0 Hay tres posibilidades8 public3 protected y private0 &na cuarta posibilidad
es no utili'ar nin$una de estas tres palabrasF entonces se dice 6ue se ha utili'ado el
modi<icador por de<ecto )<riendly*0
Los especi<icadores determinan el alcance de la visibilidad del elemento al 6ue se
re<ieren0 :e<eridos por e#emplo a un m(todo3 pueden hacer 6ue el m(todo sea visible
s%lo para la clase 6ue lo utili'a )private*3 para (stas y las heredadas )protected*3 para
todas las clases del mismo pa6uete )<riendly* o para cual6uier clase del tipo 6ue sea
)public*0
En la si$uiente tabla se puede observar la visibilidad de cada especi<icador8
sin
modi<icador
private protected public
'ona )privado* )<riendly* )prote$ido* )pDblico*
Misma clase a a a a
Subclase en el a a a
mismo pa6uete
Clase )no a a
subclase* en el
mismo pa6uete
Subclase en otro a a
pa6uete
@o subclase en a
otro pa6uete

De(ini ati&utos de la clase 6)aia&les' popiedades o datos de la clases8
Cuando se de<inen los datos de una determinada clase3 se debe indicar el tipo de
propiedad 6ue es )Strin$3 int3 double3 intVWVW3000* y el especi<icador de acceso )public3
private3000*0 El especi<icador indica en 6u( partes del c%di$o ese dato ser1 visible0
E#emplo8
class Persona S
public Strin$ nombreFJJSe puede acceder desde cual6uier clase
private int contrase/aFJJS%lo se puede acceder desde la
JJclase Persona
protected Strin$ direcci%nF JJAcceden a esta propiedad
JJesta clase y sus descendientes
Por lo $eneral las propiedades de una clase suelen ser privadas o prote$idas3 a no ser
6ue se trate de un valor constante3 en cuyo caso se declarar1n como pDblicos0
Las variables locales de una clase pueden ser iniciali'adas0
class autoS
public n:uedasPNF
Persona
Knombre8Strin$
Econtrase/a8Strin$
hdireccion8Strin$
Alustraci%n C3 La clase persona en &ML0 El si$no K si$ni<ica public3
el si$no h protected y el si$no E private
De(ini ,3todos de clase 6opeaciones o (unciones de clase8

&n m(todo es una llamada a una operaci%n de un determinado ob#eto0 Al reali'ar esta
llamada )tambi(n se le llama enviar un mensa#e*3 el control del pro$rama pasa a ese
m(todo y lo mantendr1 hasta 6ue el m(todo <inalice o se ha$a uso de return0
Para 6ue un m(todo pueda traba#ar3 normalmente hay 6ue pasarle unos datos en
<orma de ar$umentos o par1metros3 cada uno de los cuales se separa por comas0
E#emplos de llamadas8
bal%n0botar)*F JJsin ar$umentos
miCoche0acelerar)-?*F

<icha0comer)posici%n-=*Fposici%n -= es una variable 6ue se
JJpasa como ar$umento
partida0empe'arPartida)4-C8-=53colores*F
Los m(todos de la clase se de<inen dentro de (sta0 Hay 6ue indicar un modi<icador de
acceso )public3 private3 protected o nin$uno3 al i$ual 6ue ocurre con las variables y
con la propia clase* y un tipo de datos3 6ue indica 6u( tipo de valores devuelve el
m(todo0
Esto Dltimo se debe a 6ue los m(todos son <unciones 6ue pueden devolver un
determinado valor )un entero3 un te2to3 un valor l%$ico3000* mediante el comando
return0 Si el m(todo no devuelve nin$Dn valor3 entonces se utili'a el tipo void 6ue
si$ni<ica 6ue no devuelve valores )en ese caso el m(todo no tendr1 instrucci%n return*0
El Dltimo detalle a tener en cuenta es 6ue los m(todos casi siempre necesitan datos
para reali'ar la operaci%n3 estos datos van entre par(ntesis y se les llama ar$umentos0 Al
de<inir el m(todo hay 6ue indicar 6ue ar$umentos se necesitan y de 6u( tipo son0
E#emplo8
public class vehiculo S
JLL "unci%n principal LJ
int ruedasF
private double velocidadP?F
Strin$ nombreF
JLL Aumenta la velocidadLJ
public void acelerar)double cantidad* S
velocidad KP cantidadF
T
JLL isminuye la velocidadLJ
public void <renar)double cantidad* S
velocidad EP cantidadF
T
JLL evuelve la velocidadLJ
public double obtenerVelocidad)*S
return velocidadF
T
public static void main)Strin$ ar$sVW*S
vehiculo miCoche P ne; vehiculo)*F
miCoche0acelerar)->*F
miCoche0<renar)=*F
System0out0println)miCoche0obtenerVelocidad)**F
T JJ a B0?
En la clase anterior3 los m(todos acelerar y <renar son de tipo void por eso no tienen
sentencia return0 Sin embar$o el m(todo obtenerVelocidad es de tipo double por lo
6ue su resultado es devuelto por la sentencia return y puede ser escrito en pantalla0
Coche
ruedas8int
Evelocidad8doubleP?
hdireccion8Strin$
nombre8Strin$
Kacelerar)double*
K<renar)double*
KobtenerVelocidad)*8double
Alustraci%n .3 Versi%n &ML de la clase
Coche
A#u,entos po )alo / po e(eencia
En todos los len$ua#es (ste es un tema muy importante0 Los ar$umentos son los datos
6ue recibe un m(todo y 6ue necesita para <uncionar0 E#emplo8
public class Matem1ticas S
public double <actorial)int n*S
double resultadoF
<or )resultadoPnFn[-FnEE* resultadoLPnF
return resultadoF
T
000
public static void main)Strin$ ar$sVW*S
Matem1ticas m-Pne; Matem1ticas)*F
double 2Pm-0<actorial)>=*FJJLlamada al m(todo
T
En el e#emplo anterior3 el valor >= es un ar$umento re6uerido por el m(todo <actorial
para 6ue (ste devuelva el resultado )6ue ser1 el <actorial de >=*0 En el c%di$o del m(todo
<actorial3 este valor >= es copiado a la variable n3 6ue es la encar$ada de almacenar y
utili'ar este valor0

Se dice 6ue los ar$umentos son por valor3 si la <unci%n recibe una copia de esos
datos3 es decir la variable 6ue se pasa como ar$umento no estar1 a<ectada por el c%di$o0
E#emplo8
class prueba S
public void metodo-)int entero*S
enteroP-CF
000
T
000
public static void main)Strin$ ar$sVW*S
int 2P>NF
prueba miPrueba P ne; prueba)*F
miPrueba0metodo-)2*F
System0out0println)2*F JJEscribe >N3 no -C
T
Este es un e#emplo de paso de par1metros por valor0 La variable 2 se pasa como
ar$umento o par1metro para el m(todo metodo-3 all7 la variable entero recibe una
copia del valor de 2 en la variable entero3 y a esa copia se le asi$na el valor -C0 Sin
embar$o la variable 2 no est1 a<ectada por esta asi$naci%n0
Sin embar$o en este otro caso8
class prueba S
public void metodo-)intVW entero*S
enteroV?WP-CF
000
T
000
public static void main)Strin$ ar$sVW*S
int 2VWPS>N3>NTF
prueba miPrueba P ne; prueba)*F
miPrueba0metodo-)2*F
System0out0println)2V?W*F JJEscribe -C3 no >N
A6u7 s7 6ue la variable 2 est1 a<ectada por la asi$naci%n enteroV?WP-C0 La ra'%n es
por6ue en este caso el m(todo no recibe el valor de esta variable3 sino la re<erencia3 es
decir la direcci%n <7sica de esta variable0 entero no es una replica de 23 es la propia 2
llamada de otra <orma0
Los tipos b1sicos )int3 double3 char3 boolean3 <loat3 short y byte* se pasan por
valor0 Tambi(n se pasan por valor las variables Strin$0 Los ob#etos y arrays se pasan
por re<erencia0
De)oluci1n de )aloes
Los m(todos pueden devolver valores b1sicos )int3 short3 double3 etc0*3 Strin$s3 arrays e
incluso ob#etos0
En todos los casos es el comando return el 6ue reali'a esta labor0 En el caso de
arrays y ob#etos3 devuelve una re<erencia a ese array u ob#eto0 E#emplo8
class "abricaArrays S
public intVW obtenArray)*S
int arrayVWP S-3>3G3N3=TF
return arrayF
T
T
public class returnArray S
public static void main)Strin$VW ar$s* S
"abricaArrays <abPne; "abricaArrays)*F
int nuevoArrayVWP<ab0obtenArray)*F
T
T
So&eca#a de ,3todos
&na propiedad de la P!! es el polimor<ismo0 Java posee esa propiedad ya 6ue admite
sobrecar$ar los m(todos0 Esto si$ni<ica crear distintas variantes del mismo m(todo0
E#emplo8
class Matem1ticasS
public double suma)double 23 double y* S
return 2KyF
T
public double suma)double 23 double y3 double '*S
return 2KyK'F
T
public double suma)doubleVW array*S
double total P?F
<or)int iP?F iZarray0len$thFiKK*S
totalKParrayViWF
T
return totalF
T
La clase matem1ticas posee tres versiones del m(todo suma0 una versi%n 6ue suma dos
nDmeros double3 otra 6ue suma tres y la Dltima 6ue suma todos los miembros de un
array de doubles0 esde el c%di$o se puede utili'ar cual6uiera de las tres versiones
se$Dn conven$a0

"a e(eencia t*is
La palabra this es una re<erencia al propio ob#eto en el 6ue estamos0 E#emplo8
class punto S
int posa3 posgFJJposici%n del punto
punto)posa3 posg*S
this0posaPposaF
this0posgPposgF
T
En el e#emplo hace <alta la re<erencia this para clari<icar cuando se usan las
propiedades posa y posg3 y cuando los ar$umentos con el mismo nombre0 !tro
e#emplo8
class punto S
int posa3 posgF
000
JLLSuma las coordenadas de otro puntoLJ
public void suma)punto punto>*S
posa P punto>0posaF
posg P punto>0posgF
T
JLL obla el valor de las coordenadas del puntoLJ
public void dobla)*S
suma)this*F
T
En el e#emplo anterior3 la <unci%n dobla3 dobla el valor de las coordenadas pasando el
propio punto como re<erencia para la <unci%n suma )un punto sumado a s7 mismo3 dar7a
el doble*0

Los posibles usos de this son8
this0 :e<erencia al ob#eto actual0 Se usa por e#emplo pasarle como par1metro a un
m(todo cuando es llamado desde la propia clase0
this0atributo0 Para acceder a una propiedad del ob#eto actual0
this0m(todo)par1metros*0 Permite llamar a un m(todo del ob#eto actual con los
par1metros indicados0
this)par1metros*0 Permite llamar a un constructor del ob#eto actual0 Esta
llamada s%lo puede ser empleada en la primera l7nea de un constructor0
Ceaci1n de constuctoes

&n constructor es un m(todo 6ue es llamado autom1ticamente al crear un ob#eto de una
clase3 es decir al usar la instrucci%n ne;0 Sin embar$o en nin$uno de los e#emplos
anteriores se ha de<inido constructor al$uno3 por eso no se ha utili'ado nin$Dn
constructor al crear el ob#eto0
&n constructor no es m1s 6ue un m(todo 6ue tiene el mismo nombre 6ue la clase0
Con lo cual para crear un constructor basta de<inir un m(todo en el c%di$o de la clase
6ue ten$a el mismo nombre 6ue la clase0 E#emplo8
class "icha S
private int casillaF
"icha)* S JJconstructor
casilla P -F
T
public void avan'ar)int n* S
casilla KP nF
T
public int casillaActual)*S
return casillaF
T
T
public class app S
public static void main)Strin$VW ar$s* S
"icha <icha- P ne; "icha)*F
<icha-0avan'ar)G*F
System0out0println)<icha-0casillaActual)**FJJa N
En la l7nea "icha <icha- P ne; "icha)*F es cuando se llama al constructor3 6ue es el 6ue
coloca inicialmente la casilla a -0 Pero el constructor puede tener par1metros8
class "icha S
private int casillaF JJValor inicial de la propiedad
"icha)int n* S JJconstructor
casilla P nF
T
public void avan'ar)int n* S
casilla KP nF
T
public int casillaActual)*S
return casillaF
T
T

public class app S
public static void main)Strin$VW ar$s* S
"icha <icha- P ne; "icha)Q*F
<icha-0avan'ar)G*F
System0out0println)<icha-0casillaActual)**FJJa .
En este otro e#emplo3 al crear el ob#eto <icha-3 se le da un valor a la casilla3 por lo 6ue la
casilla vale al principio Q0
Hay 6ue tener en cuenta 6ue puede haber m1s de un constructor para la misma
clase0 Al i$ual 6ue ocurr7a con los m(todos3 los constructores se pueden sobrecar$ar0
e este modo en el c%di$o anterior de la clase "icha se podr7an haber colocado los
dos constructores 6ue hemos visto3 y ser7a entonces posible este c%di$o8
"icha <icha-P ne; "icha)*F JJLa propiedad casilla de la
JJ<icha valdr1 -
"icha <icha-P ne; "icha)Q*F JJLa propiedad casilla de la
JJ<icha valdr1 Q
Cuando se sobrecar$an los constructores )se utili'an varias posibilidades de
constructor*3 se pueden hacer llamadas a constructores mediante el ob#eto this
m(todos y propiedades $en(ricos )static*
Clase
Atributos y m(todos static
!b#eto- !b#eto- !b#eto-
Atributos y Atributos y Atributos y
m(todos m(todos m(todos
din1micos din1micos din1micos
Alustraci%n -?3 ia$rama de <uncionamiento de los
m(todos y atributos static
Hemos visto 6ue hay 6ue crear ob#etos para poder utili'ar los m(todos y propiedades de
una determinada clase0 Sin embar$o esto no es necesario si la propiedad o el m(todo se
de<inen precedidos de la palabra clave static0 e esta <orma se podr1 utili'ar el m(todo
sin de<inir ob#eto al$uno3 utili'ando el nombre de la clase como si <uera un ob#eto0 As7
<unciona la clase Math )v(ase la clase Math3 p1$ina >G*0 E#emplo8
class Calculadora S
static public int <actorial)int n* S
int <actP-F
;hile )n[?* S
<act LPnEEF
T
return <actF
T
T
public class app S
public static void main)Strin$VW ar$s* S
System0out0println)Calculadora0<actorial)=**F
T
T
En este e#emplo no ha hecho <alta crear ob#eto al$uno para poder calcular el <actorial0
&na clase puede tener m(todos y propiedades $en(ricos )static* y m(todos y
propiedades din1micas )normales*0
Cada ve' 6ue se crea un ob#eto con ne;3 se almacena (ste en memoria0 Los m(todos
y propiedades normales3 $astan memoria por cada ob#eto 6ue se cree3 sin embar$o los
m(todos est1ticos no $astan memoria por cada ob#eto creado3 $astan memoria al de<inir
la clase s%lo0 Es decir los m(todos y atributos static son los mismos para todos los
ob#etos creados3 $astan por de<inir la clase3 pero no por crear cada ob#eto0
Hay 6ue crear m(todos y propiedades $en(ricos cuando ese m(todo o propiedad vale
o da el mismo resultado en todos los ob#etos0 Pero hay 6ue utili'ar m(todos normales
)din1micos* cuando el m(todo da resultados distintos se$Dn el ob#eto0 Por e#emplo en
un clase 6ue represente aviones3 la altura ser7a un atributo din1mico )distinto en cada
ob#eto*3 mientras 6ue el nDmero total de aviones3 ser7a un m(todo static )es el mismo
para todos los aviones*0
El ,3todo ,ain
Hasta ahora hemos utili'ado el m(todo main de <orma incoherente como Dnico posible
mecanismo para e#ecutar pro$ramas0 e hecho este m(todo dentro de una clase3 indica
6ue la clase es e#ecutable desde la consola0 Su prototipo es8
public static void main)Strin$VW ar$s*S
000instruccionese#ecutables0000
T
Hay 6ue tener en cuenta 6ue el m(todo main es est1tico3 por lo 6ue no podr1 utili'ar
atributos o m(todos din1micos de la clase0
Los ar$umentos del m(todo main son un array de caracteres donde cada elemento
del array es un par1metro enviado por el usuario desde la l7nea de comandos0 A este
ar$umento se le llama comDnmente ar$s0 Es decir3 si se e#ecuta el pro$rama con8
#ava claseConMain uno dos

Entonces el m(todo main de esta clase recibe un array con dos elementos3 el primero es
la cadena 4uno5 y el se$undo la cadena 4dos5 )es decir ar$sV?WP5uno5F ar$sV-WP5dos5*0
destrucci%n de ob#etos
En C y CKK todos los pro$ramadores saben 6ue los ob#etos se crean con ne; y para
eliminarles de la memoria y as7 ahorrarla3 se deben eliminar con la instrucci%n delete0
Es decir3 es responsabilidad del pro$ramador eliminar la memoria 6ue $astaban los
ob#etos 6ue se van a de#ar de usar0 La instrucci%n delete del CKK llama al destructor de
la clase3 6ue es una <unci%n 6ue se encar$a de eliminar adecuadamente el ob#eto0
La sorpresa de los pro$ramadores CKK 6ue empie'an a traba#ar en Java es 6ue no
hay instrucci%n delete en Java0 La duda est1 entonces3 en cu1ndo se elimina la
memoria 6ue ocupa un ob#eto0
En Java hay un recolector de basura )$arba$e collector* 6ue se encar$a de
$estionar los ob#etos 6ue se de#an de usar y de eliminarles de memoria0 Este proceso es
autom1tico e impredecible y traba#o en un hilo )thread* de ba#a prioridad0
Por lo $eneral ese proceso de recolecci%n de basura3 traba#a cuando detecta 6ue un
ob#eto hace demasiado tiempo 6ue no se utili'a en un pro$rama0 Esta eliminaci%n
depende de la m16uina virtual3 en casi todas la recolecci%n se reali'a peri%dicamente en
un determinado lapso de tiempo0 La implantaci%n de m16uina virtual conocida como
HotSpot- suele hacer la recolecci%n mucho m1s a menudo
Se puede <or'ar la eliminaci%n de un ob#eto asi$n1ndole el valor null3 pero teniendo
en cuenta 6ue eso no e6uivale al <amoso delete del len$ua#e CKK0 Con null no se libera
inmediatamente la memoria3 sino 6ue pasar1 un cierto tiempo )impredecible3 por otro
lado* hasta su total destrucci%n0
Se puede invocar al recolector de basura desde el c%di$o invocando al m(todo
est1tico System0$c)*0 Esto hace 6ue el recolector de basura traba#e en cuanto se lea
esa invocaci%n0
Sin embar$o puede haber problemas al crear re<erencias circulares0 Como8
class uno S
dos dF
uno)* S JJconstructor
d P ne; dos)*F
T
T
class dos S
uno uF
dos)* S
u P ne; uno)*F
T
public class app S

Para saber m1s sobre HotSpot acudir a #ava0sun0comJproductsJhotspotJinde20html0

public static void main)St$rin$VW ar$s* S
uno prueba P ne; uno)*FJJre<erencia circular
prueba P nullF JJno se liberar1 bien la memoria
T
T
Al crear un ob#eto de clase uno3 autom1ticamente se crea uno de la clase dos3 6ue al
crearse crear1 otro de la clase uno0 Eso es un error 6ue provocar1 6ue no se libere bien
la memoria salvo 6ue se eliminen previamente los ob#etos re<erenciados0
El ,3todo (inali2e
Es e6uivalente a los destructores del CKK0 Es un m(todo 6ue es llamado antes de
eliminar de<initivamente al ob#eto para hacer limpie'a <inal0 &n uso puede ser eliminar
los ob#etos creados en la clase para eliminar re<erencias circulares0 E#emplo8
class uno S
dos dF
uno)* S
d P ne; dos)*F
T
protected void <inali'e)*S
d P nullFJJSe elimina d por lo 6ue pudiera pasar
T
T
<inali'e es un m(todo de tipo protected heredado por todas las clases ya 6ue est1
de<inido en la clase ra7' !b#ect0
La di<erencia de <inali'e respecto a los m(todos destructores de CKK estriba en 6ue
en Java no se llaman al instante )de hecho es imposible saber cuando son llamados*0 la
llamada System0$c)* llama a todos los <inali'e pendientes inmediatamente )es una
<orma de probar si el m(todo <inali'e <unciona o no*0
.eencia
Intoducci1n

Es una de las armas <undamentales de la pro$ramaci%n orientada a ob#etos0 Permite
crear nuevas clases 6ue heredan caracter7sticas presentas en clases anteriores0 Esto
<acilita enormemente el traba#o por6ue ha permitido crear clases est1ndar para todos
los pro$ramadores y a partir de ellas crear nuestras propias clases personales0 Esto es
m1s c%modo 6ue tener 6ue crear nuestras clases desde cero0
Para 6ue una clase herede las caracter7sticas de otra hay 6ue utili'ar la palabra clave
e2tends tras el nombre de la clase0 A esta palabra le si$ue el nombre de la clase cuyas
caracter7sticas se heredar1n0 S%lo se puede tener herencia de una clase )a la clase de la
6ue se hereda se la llama superclase y a la clase heredada se la llama subclase*0
E#emplo8
class coche e2tends vehiculo S
000
T JJLa clase coche parte de la de<inici%n de veh7culo
superclase
veh7culo
Kruedas8intF
Kvelocidad8double
Kacelerar)int*
heredado
K<renar)int*
subclase
coche
Kruedas8intPN
rede<inido
K$asolina8int
propio
Krepostar)int*
Alustraci%n --3 herencia
M3todos / popiedades no *eedados

Por de<ecto se heredan todos los m(todos y propiedades protected y public )no se
heredan los private*0 Adem1s si se de<ine un m(todo o propiedad en la subclase con el
mismo nombre 6ue en la superclase3 entonces se dice 6ue se est1 rede<iniendo el
m(todo3 con lo cual no se hereda (ste3 sino 6ue se reempla'a por el nuevo0
E#emplo8
class vehiculo S
public int velocidadF
public int ruedasF
public void parar)* S
velocidad P ?F
T
public void acelerar)int ,mh* S
velocidad KP ,mhF
T
class coche e2tends vehiculoS
public int ruedasPNF
public int $asolinaF
public void repostar)int litros* S
$asolinaKPlitrosF
T
T
00000000000000000000000000000000000000000000000000000000000
public class app S
public static void main)Strin$VW ar$s* S
coche coche-Pne; coche)*F
coche0acelerar)C?*FJJM(todo heredado
coche0repostar)->*F
Anulaci1n de ,3todos

Como se ha visto3 las subclases heredan los m(todos de las superclases0 Pero es m1s3
tambi(n los pueden sobrecar$ar para proporcionar una versi%n de un determinado
m(todo0
Por Dltimo3 si una subclase de<ine un m(todo con el mismo nombre3 tipo y
ar$umentos 6ue un m(todo de la superclase3 se dice entonces 6ue se sobrescribe o anula
el m(todo de la superclase0 E#emplo8

Animal
comer)*
dormir)*
reproducir)*
toby8Perro
comer)*
Mam7<ero reproducir)*
dormir)*
reproducir)*
ladrar)*
anula
$runir)*
Perro
dormir)*
anula ladrar)*
$runir)*
Alustraci%n ->3 anulaci%n de m(todos
Supe
A veces se re6uiere llamar a un m(todo de la superclase0 Eso se reali'a con la palabra
reservada super0 Si this hace re<erencia a la clase actual3 super hace re<erencia a la
superclase respecto a la clase actual3 con lo 6ue es un m(todo imprescindible para poder
acceder a m(todos anulados por herencia0 E#emplo
public class vehiculoS
double velocidadF
000
public void acelerar)double cantidad*S
velocidadKPcantidadF
T
T
public class coche e2tends vehiculoS
double $asolinaF
public void acelerar)double cantidad*S
super0acelerar)cantidad*F
$asolinaLP?0.F
T
En el e#emplo anterior3 la llamada super0acelerar)cantidad* llama al m(todo acelerar de
la clase veh7culo )el cual acelerar1 la marcha*0 Es necesario rede<inir el m(todo acelerar
en la clase coche ya 6ue aun6ue la velocidad var7a i$ual 6ue en la superclase3 hay 6ue
tener en cuenta el consumo de $asolina
Se puede incluso llamar a un constructor de una superclase3 usando la sentencia
super)*0 E#emplo8
public class vehiculoS
double velocidadF
public vehiculo)double v*S
velocidadPvF
T
T
public class coche e2tends vehiculoS
double $asolinaF
public coche)double v3 double $*S
super)v*FJJLlama al constructor de la clase vehiculo
$asolinaP$
T
T
Por de<ecto Java reali'a estas acciones8
Si la primera instrucci%n de un constructor de una subclase es una sentencia 6ue
no es ni super ni this3 Java a/ade de <orma invisible e impl7cita una llamada
super)* al constructor por de<ecto de la superclase3 lue$o inicia las variables de la
subclase y lue$o si$ue con la e#ecuci%n normal0
Si se usa super)00* en la primera instrucci%n3 entonces se llama al constructor
seleccionado de la superclase3 lue$o inicia las propiedades de la subclase y lue$o
si$ue con el resto de sentencias del constructor0
"inalmente3 si esa primera instrucci%n es this)00*3 entonces se llama al
constructor seleccionado por medio de this3 y despu(s continDa con las sentencias
del constructor0 La iniciali'aci%n de variables la habr1 reali'ado el constructor al
6ue se llam% mediante this0
Castin# de clases
Como ocurre con los tipos b1sicos )ver conversi%n entre tipos )castin$*3 p1$ina -C3 es
posible reali'ar un castin$ de ob#etos para convertir entre clases distintas0 Lo 6ue
ocurre es 6ue s%lo se puede reali'ar este castin$ entre subclases0 Es decir se reali'a un
castin$ para especi<icar m1s una re<erencia de clase )se reali'a sobre una superclase
para convertirla a una re<erencia de una subclase suya*0
En cual6uier otro caso no se puede asi$nar un ob#eto de un determinado tipo a otro0

E#emplo8
Vehiculo vehiculo=Pne; Vehiculo)*F
Coche cocheePepe P ne; Coche)4BM95*F
vehiculo=PcocheePepe JJEsto s7 se permite
cocheePepePvehiculo=FJJTipos incompatibles
cocheepepeP)coche*vehiculo=FJJAhora s7 se permite
Hay 6ue tener en cuenta 6ue los ob#etos nunca cambian de tipo3 se les prepara para su
asi$naci%n pero no pueden acceder a propiedades o m(todos 6ue no les sean propios0
Por e#emplo3 si repostar)* es un m(todo de la clase coche y no de veh7culo8
Vehiculo v-Pne; Vehiculo)*F
Coche cPne; Coche)*F
v-PcFJJ@o hace <alta castin$
v-0repostar)=*FJJdddError\\\
Cuando se <uer'a a reali'ar un castin$ entre ob#etos3 en caso de 6ue no se pueda reali'ar
ocurrir1 una e2cepci%n del tipo ClassCastin$E2ception0 :ealmente s%lo se puede
hacer un castin$ si el ob#eto ori$inalmente era de ese tipo0 Es decir la instrucci%n8
cocheepepeP)Coche* vehiculoNF
S%lo es posible si vehiculoN hace re<erencia a un ob#eto coche0
Instanceo(
Permite comprobar si un determinado ob#eto pertenece a una clase concreta0 Se utili'a
de esta <orma8
ob#eto instanceo< clase
Comprueba si el ob#eto pertenece a una determinada clase y devuelve un valor true si
es as70 E#emplo8
Coche miMercedesPne; Coche)*F
i< )miMercedes instanceo< Coche*
System0out0println)4ES un coche5*F
i< )miMercedes instanceo< Veh7culo*
System0out0println)4ES un coche5*F
i< )miMercedes instanceo< Cami%n*
System0out0println)4ES un cami%n5*F
En el e#emplo anterior aparecer1 en pantalla8
ES un coche
ES un vehiculo
Clases a&stactas

A veces resulta 6ue en las superclases se desean incluir m(todos te%ricos3 m(todos 6ue
no se desea implementar del todo3 sino 6ue sencillamente se indican en la clase para
6ue el desarrollador 6ue desee crear una subclase heredada de la clase abstracta3 est(
obli$ado a sobrescribir el m(todo0
A las clases 6ue poseen m(todos de este tipo )m(todos abstractos* se las llama
clases abstractas0 Son clases creadas para ser heredadas por nuevas clases creadas
por el pro$ramador0 Son clases base para herencia0 Las clases abstractas no deben de
ser instanciadas )no se pueden crear ob#etos de las clases abstractas*0
&na clase abstracta debe ser marcada con la palabra clave abstract0 Cada m(todo
abstracto de la clase3 tambi(n llevar1 el abstract0 E#emplo8
abstract class vehiculo S
public int velocidadP?F
abstract public void acelera)*F
public void para)* SvelocidadP?FT
T
class coche e2tends vehiculo S
public void acelera)* S
velocidadKP=F
T
T
public class prueba S
public static void main)Strin$VW ar$s* S
coche c-Pne; coche)*F
c-0acelera)*F
System0out0println)c-0velocidad*F
c-0para)*F
System0out0println)c-0velocidad*F
T
T
Ainal

Se trata de una palabra 6ue se coloca antecediendo a un m(todo3 variable o clase0
elante de un m(todo en la de<inici%n de clase sirve para indicar 6ue ese m(todo no
puede ser sobrescrito por las subclases0 Si una subclase intentar sobrescribir el m(todo3
el compilador de Java avisar1 del error0

Si esa misma palabra se coloca delante de una clase3 si$ni<icar1 6ue esa clase no
puede tener descendencia0
Por Dltimo si se usa la palabra <inal delante de la de<inici%n de una propiedad de
clase3 entonces esa propiedad pasar1 a ser una constante3 es decir no se le podr1
cambiar el valor en nin$una parte del c%di$o0
Clases intenas
Se llaman clases internas a las clases 6ue se de<inen dentro de otra clase0 Esto permite
simpli<icar aun m1s el problema de crear pro$ramas0 ga 6ue un ob#eto comple#o se
puede descomponer en clases m1s sencillas0 Pero re6uiere esta t(cnica una mayor
pericia por parte del pro$ramador0
Al de<inir una clase dentro de otra3 estamos haci(ndola totalmente dependiente0
@ormalmente se reali'a esta pr1ctica para crear ob#etos internos a una clase )el motor
de un coche por e#emplo*3 de modo 6ue esos ob#etos pasan a ser atributos de la clase0
Por e#emplo8
public class Coche S
public int velocidadF
public Motor motorF
public Coche)int cil* S
motorPne; Motor)cil*F
velocidadP?F
T
public class MotorS JJClase interna
public int cilindradaF
public Motor)int cil*S
cilindradaPcilF
T
T
T
El ob#eto motor es un ob#eto de la clase Motor 6ue es interna a Coche0 Si 6uisi(ramos
acceder al ob#eto motor de un coche ser7a8
Coche cPne; Coche)->??*F
System0out0println)c0motor0cilindrada*FJJSaldr1 ->??
Las clases internas pueden ser privadas3 prote$idas o pDblicas0 "uera de la clase
contenedora no pueden crear ob#etos )s%lo se pueden crear motores dentro de un
coche*3 salvo 6ue la clase interna sea static en ese caso s7 podr7an0 Por e#emplo )si la
clase motor <uera est1tica*8
JJsuponiendo 6ue la declaraci%n del Motor dentro de Coche es
JJ public class static MotorS0000
Coche0Motor mPne; Coche0Motor)->??*F
Pero eso s%lo tiene sentido si todos los Coches tuvieran el mismo motor0
e#ando de lado el tema de las clases static3 otro problema est1 en el operador this0
El problema es 6ue al usar this dentro de una clase interna3 this se re<iere al ob#eto de la
clase interna )es decir this dentro de Motor se re<iere al ob#eto Motor*0 Para poder
re<erirse al ob#eto contenedor )al coche* se usa Clase0this )Coche0this*0 E#emplo8
public class Coche S
public int velocidadF
public int cilindradaF
public Motor motorF
public Coche)int cil* S
motorPne; Motor)cil*F
velocidadP?F
T
public class MotorS
public int cilindradaF
public Motor)int cil*S
Coche0this0cilindradaPcilFJJCoche
this0cilindradaPcilFJJMotor
T
T
T
Por Dltimo las clases internas pueden ser an%nimas )se ver1n m1s adelante al estar m1s
relacionadas con inter<aces y adaptadores*0
Ceaci1n de pa9uetes

&n pa6uete es una colecci%n de clases e inter<aces relacionadas0 El compilador de Java
usa los pa6uetes para or$ani'ar la compilaci%n y e#ecuci%n0 Es decir3 un pa6uete es una
biblioteca0 e hecho el nombre completo de una clase es el nombre del pa6uete en el
6ue est1 la clase3 punto y lue$o el nombre de la clase0 Es decir si la clase Coche est1
dentro del pa6uete locomoci%n3 el nombre completo de Coche es locomoci%n0Coche0
A veces resulta 6ue un pa6uete est1 dentro de otro pa6uete3 entonces habr1 6ue
indicar la ruta completa a la clase0 Por e#emplo locomoci%n0motor0Coche
Mediante el comando import )visto anteriormente*3 se evita tener 6ue colocar el
nombre completo0 El comando import se coloca antes de de<inir la clase0 E#emplo8
import locomoci%n0motor0CocheF
cracias a esta instrucci%n para utili'ar la clase Coche no hace <alta indicar el pa6uete en
el 6ue se encuentra3 basta indicar s%lo Coche0 Se puede utili'ar el s7mbolo asterisco
como comod7n0
E#emplo8
import locomoci%n0LF
JJAmporta todas las clase del pa6uete locomoci%n
Esta instrucci%n no importa el contenido de los pa6uetes interiores a locomoci%n )es
decir 6ue si la clase Coche est1 dentro del pa6uete motor3 no ser7a importada con esa
instrucci%n3 ya 6ue el pa6uete motor no ha sido importado3 s7 lo ser7a la clase
locomoci%n0BarcoeVela*0 Por ello en el e#emplo lo completo ser7a8
import locomoci%n0LF
import locomoci%n0motor0LF
Cuando desde un pro$rama se hace re<erencia a una determinada clase se busca (sta en
el pa6uete en el 6ue est1 colocada la clase y3 sino se encuentra3 en los pa6uetes 6ue se
han importado al pro$rama0 Si ese nombre de clase se ha de<inido en un solo pa6uete3
se usa0 Si no es as7 podr7a haber ambi$iedad por ello se debe usar un pre<i#o delante
de la clase con el nombre del pa6uete0
Es decir8
pa6uete0clase
! incluso8
pa6uete-0pa6uete>000000clase
En el caso de 6ue el pa6uete sea subpa6uete de otro m1s $rande0
Las clases son visibles en el mismo pa6uete a no ser 6ue se las haya declarado con el
modi<icador private0
O#ani2aci1n de los pa9uetes
Los pa6uetes en realidad son subdirectorios cuyo ra7' debe ser absolutamente accesible
por el sistema operativo0 Para ello es necesario usar la variable de entorno
CLASSPATH de la l7nea de comandos0 Esta variable se suele de<inir en el archivo
autoe2ec0bat o en MA PC en el caso de las Dltimas versiones de 9indo;s )V(ase
proceso de compilaci%n3 p1$ina .*0 Hay 6ue a/adirla las rutas a las carpetas 6ue
contienen los pa6uetes )normalmente todos los pa6uetes se suelen crear en la misma
carpeta*3 a estas carpetas se las llama <ilesystems0
As7 para el pa6uete prueba0relo# tiene 6ue haber una carpeta prueba3 dentro de la
cual habr1 una carpeta relo# y esa carpeta prueba tiene 6ue <ormar parte del classpath0
&na clase se declara perteneciente aun determinado pa6uete usando la instrucci%n
pac,a$e al principio del c%di$o )sin usar esta instrucci%n3 la clase no se puede
compilar*0 Si se usa pac,a$e tiene 6ue ser la primera instrucci%n del pro$rama Java8
JJClase perteneciente al pa6uete tema= 6ue est1 en e#emplos
pac,a$e e#emplos0tema=F

En los entornos de desarrollo o AEs )@etBeans3 JBuilder3000* se puede uno
despreocupar de la variable classpath ya 6ue poseen mecanismos de ayuda para
$estionar los pa6uetes0 Pero hay 6ue tener en cuenta 6ue si se compila a mano mediante
el comando #ava )v(ase proceso de compilaci%n3 p1$ina i* se debe a/adir el modi<icador
Ecp para 6ue sean accesibles las clases contenidas en pa6uetes del classpath )por
e#emplo #ava Ecp prueba0#ava*0
El uso de los pa6uetes permite 6ue al compilar s%lo se compile el c%di$o de la clase y
de las clases importadas3 en lu$ar de compilar todas las librer7as0 S%lo se compila lo 6ue
se utili'a0
Pa6uete interior
vehiculo
clientes
ZZaccess[[
dosruedas
Coche
Bici
Moto
Cami%n
El pa6uete vehiculo puede ver
la parte pDblica del pa6uete clientes
ZZimport[[
motor
El pa6uete vehiculo importa el contenido pDblico
del pa6uete motor como si <uera parte del propio
pa6uete vehiculo

Fundacin Cdigo Libre Dominicano
Lic. Henry Terrero.
hterrero@codigolibre.org
Ing. Jose Paredes.
jparedes@codigolibre.org
Desarrollo
De aplicaciones
Java Con Netbeans

EJERCICIO GUIADO. JAVA: INTRODUCCIN A LA !OO
Introduccin a la Programacin Orientada a Objetos
La programacin orientada a objetos es una nueva forma de entender la creacin de programas. sta
filosof!a de programacin se basa en el concepto de objeto.
Objeto
"n objeto se define como un elemento #ue tiene unas propiedades y mtodos.
"n objeto posee unas caracter!sticas $ancho% alto% color% etc&' ( las caracter!sticas de un objeto se
les llama propiedades.
"n objeto es un elemento )inteligente*. ( un objeto se le puede dar rdenes y +l obedecer,. ( estas
rdenes se les llama mtodos. -on los m+todos podemos cambiar las caracter!sticas del objeto%
pedirle informacin% o hacer #ue el objeto reaccione de alguna forma.
n Java todo son objetos. .eamos algunos ejemplos de uso de objetos en Java/
Ejemplo 1
0upongamos #ue tenemos una eti#ueta llamada etiTexto. sta eti#ueta es un objeto.
-omo objeto #ue es% la eti#ueta etiTexto tiene una serie de caracter!sticas% como por ejemplo/ el color
de fondo% el tama1o% la posicin #ue ocupa en la ventana% el ser opaca o no% el ser invisible o no%
etc& 0on las propiedades de la eti#ueta.
( una eti#ueta le podemos dar rdenes% a trav+s de mtodos.
( trav+s de los m+todos podemos por ejemplo cambiar las caracter!sticas del objeto. Por ejemplo% se
puede cambiar el tama1o y posicin de la eti#ueta usando el m+todo setBounds/
etiTexto.setBounds(10,20,100,20);
2ormalmente% los m+todos #ue permiten cambiar las caracter!sticas del objeto son m+todos cuyo
nombre empie3a por set.
Los m+todos tambi+n permiten pedirle al objeto #ue me de informacin. Por ejemplo% podr!amos usar
el conocido m+todo getText para recoger el te4to #ue contenga la eti#ueta y almacenarlo en una
variable/
String texto;
texto = etiTexto.getText();
Los m+todos #ue le piden informacin al objeto suelen tener un nombre #ue empie3a por get.
Los m+todos tambi+n sirven para ordenarle al objeto #ue haga cosas. Por ejemplo% podemos ordenar
a la eti#ueta etiTexto #ue se vuelva a pintar en la ventana usando el m+todo repaint/
etiTexto.repaint();
F d i Cdi Lib D i i
Ejemplo 2
0upongamos #ue tenemos un cuadro de te4to llamado txtCuadro. -omo todo en Java% un cuadro de
te4to es un objeto.
"n objeto tiene propiedades% es decir% caracter!sticas. 2uestro cuadro de te4to txtCuadro tiene
caracter!sticas propias/ un color de fondo% un ancho% un alto% una posicin en la ventana% el estar
activado o no% el estar visible o no% etc&
( un objeto se le puede dar rdenes% llamadas mtodos. stas rdenes nos permiten cambiar las
caracter!sticas del objeto% pedirle informacin% o simplemente pedirle al objeto #ue haga algo.
Por ejemplo% podemos cambiar el color de fondo del cuadro de te4to txtCuadro usando el m+todo
llamado setBackground/
txtCuadro.setBackground(Color.R!);
5tros m+todos #ue permiten cambiar las propiedades del objeto txtCuadro son/
setVisible 6 permite poner visible 7 invisible el cuadro de te4to
setEnabled 6 permite activar 7 desactivar el cuadro de te4to
setEditable 6 permite hacer #ue se pueda escribir o no en el cuadro de te4to
setText 6 permite introducir un te4to en el cuadro de te4to
setBounds 6 permite cambiar el tama1o y posicin del objeto
setToolTipText 6 permite asociar un te4to de ayuda al cuadro de te4to
etc
"n objeto nos da informacin sobre +l. Para pedirle informacin a un objeto usaremos m+todos del
tipo get. Por ejemplo% para pedirle al cuadro de te4to el te4to #ue contiene% usaremos el m+todo
getText/
String cadena = txtCuadro.getText();
5tros m+todos #ue le piden informacin al cuadro de te4to son/
getWidth 6 te dice la anchura #ue tiene el cuadro de te4to
getHeight 6 te dice el alto #ue tiene el cuadro de te4to
getSelectedText 6 te devuelve el te4to #ue est, seleccionado dentro del cuadro de te4to
getToolTipText 6 te dice el te4to de ayuda #ue tiene asociado el cuadro de te4to
etc
Tambi+n se le puede dar al objeto simplemente rdenes para #ue haga algo. Por ejemplo% podemos
ordenar al cuadro de te4to txtCuadro #ue seleccione todo el te4to #ue contiene en su interior a trav+s
del m+todo selectAll/
txtCuadro.select"ll();
5tros m+todos #ue ordenan al cuadro de te4to son/
repaint 6 le ordena al cuadro de te4to #ue se vuelva a pintar
copy 6 le ordena al cuadro de te4to #ue copie el te4to #ue tenga seleccionado
cut 6 le ordena al cuadro de te4to #ue corte el te4to #ue tenga seleccionado
paste 6 le ordena al cuadro #ue pegue el te4to #ue se hubiera copiado o cortado
etc
F d i Cdi Lib D i i
Clase
Todo objeto es de una )clase* determinada% o dicho de otra forma% tiene un )tipo de datos*
determinado.
Por ejemplo% las eti#uetas #ue se usan en las ventanas son objetos #ue pertenecen a la clase !abel.
Los cuadros de te4to en cambio son objetos de la clase Text"ield.
Para poder usar un objeto hay #ue declararlo y construirlo.
8eclarar un 5bjeto
La declaracin de un objeto es algo similar a la declaracin de una variable. s en este momento
cuando se le da un nombre al objeto. Para declarar un objeto se sigue la siguiente sinta4is/
Clase no#$reo$%eto;
Por ejemplo% para declarar la eti#ueta del ejemplo 9% se usar!a el siguiente cdigo/
&'a$el etiTexto;
Para declarar% en cambio% el cuadro de te4to del ejemplo :% se usar!a el siguiente cdigo/
&Text(ield txtCuadro;
-onstruir un 5bjeto
n el momento de la )construccin* de un objeto% se le asignan a este una serie de propiedades
iniciales. s decir% unas caracter!sticas por defecto. 0e puede decir #ue es el momento en #ue )nace*
el objeto% y este nace ya con una forma predeterminada% #ue luego el programador podr, cambiar
usando los m+todos del objeto.
s necesario construir el objeto para poder usarlo. La construccin del objeto se hace a trav+s del
siguiente cdigo general/
no#$reo$%eto = ne) Clase();
Por ejemplo% para construir la eti#ueta del ejemplo 9% se har!a lo siguiente/
etiTexto = ne) &'a$el();
Para construir el cuadro de te4to del ejemplo :% se har!a lo siguiente/
txtCuadro = ne) &Text(ield();
25T(. n algunos casos% la sinta4is de la declaracin y la construccin se une en una sola l!nea. Por
ejemplo% supongamos #ue #ueremos declarar la eti#ueta etiTexto y construirla todo en una l!nea%
entonces se puede hacer lo siguiente/
&'a$el etiTexto = ne) &'a$el();
n general% para declarar y construir un objeto en una sola l!nea se sigue la siguiente sinta4is/
Clase no#$reo$%eto = ne) Clase();
F d i Cdi Lib D i i
La -lase como generadora de objetos
-onociendo la -lase% se pueden crear tantos objetos de dicha -lase como se #uiera. s decir% la
-lase de un objeto funciona como si fuera una plantilla a partir de la cual fabricamos objetos iguales.
Todos los objetos creados a partir de una clase son iguales en un primer momento $cuando se
construyen' aun#ue luego el programador puede dar forma a cada objeto cambiando sus
propiedades.
Por ejemplo% la -lase JLabel define eti#uetas. sto #uiere decir #ue podemos crear muchas eti#uetas
usando esta clase/
&'a$el etiTexto = ne) &'a$el();
&'a$el etiResultado = ne) &'a$el();
&'a$el eti!ato = ne) &'a$el();
n el ejemplo se han declarado y construido tres eti#uetas llamadas etiTexto# eti%esultado y eti&ato.
Las tres eti#uetas en este momento son iguales% pero a trav+s de los distintos m+todos podemos dar
forma a cada una/
etiTexto.setBackground(Color.R!);
etiTexto.setText(*+ola,);
etiResultado.setBackground(Color.-R.);
etiResultado.setText(*rror,);
eti!ato.setBackground(Color.B'/);
eti!ato.setText(*Cadena,);
n el ejemplo se le ha dado% usando el m+todo setBackground% un color a cada eti#ueta. ; se ha
cambiado el te4to de cada una. 0e le da forma a cada eti#ueta.
EJERCICIO
Hasta ahora ha usado objetos aun#ue no tenga mucha conciencia de ello. Por ejemplo ha usado
botones. -omo ejercicio se propone lo siguiente/
6 <-u,l es el nombre de la clase de los botones normales #ue usa en sus ventanas=
6 <-mo declarar!a un botn llamado btnAceptar% y otro llamado btnCancelar=
6 <-mo construir!a dichos botones=
6 Indi#ue algunos m+todos para cambiar propiedades de dichos botones $m+todos set'
6 Indi#ue algunos m+todos para pedirle informacin a dichos botones $m+todos get'
6 Indi#ue alg>n m+todo para dar rdenes a dichos botones $alg>n m+todo #ue no sea ni set ni
get'
F d i Cdi Lib D i i
CONCLUI!N
Un Objeto es un elemento "ue tiene una serie de caracter#sticas llamadas
PROPIE$%$E&
Por otro lado' al objeto se le pueden dar rdenes "ue cumplir( de inmediato& %
dic)as rdenes se les denomina *+,O$O&
Los mtodos se pueden di-idir b(sicamente en tres tipos.
Para cambiar las propiedades del objeto /*todos set0
Para pedir in1ormacin al objeto /*todos get0
Para dar rdenes al objeto&
,odo objeto pertenece a una CL%E&
La CL%E nos permite declarar objetos 2 construirlos.
$eclaracin.
CL%E nombreobjeto3
Construccin.
nombreobjeto 4 ne5 CL%E/03
$eclaracin 2 Construccin en una misma l#nea
CL%E nombreobjeto 4 ne5 CL%E/0'
En la construccin de un objeto se asignan unas propiedades /caracter#sticas0 por
de1ecto al objeto "ue se constru2e' aun"ue luego' estas caracter#sticas pueden ser
cambiadas por el programador&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. POO& CL%E PROPI%
Objetos propios del lenguaje
Hasta el momento% todos los objetos #ue ha usado a la hora de programar en Java% han sido objetos
incluidos en el propio lenguaje% #ue se encuentran disponibles para #ue el programador los use en
sus programas.
Estos ob'etos son( las eti)uetas *!abel+# botones *Button+# los cuadros de texto
*Text"ield+# cuadros de ,eri-icaci.n *CheckBox+# botones de opci.n *%adioButton+#
colores *Color+# im/genes de icono *0mage0con+# modelos de lista *&e-ault!ist1odel+#
etc# etc2
Todos estos objetos% por supuesto% pertenecen cada uno de ellos a una -lase/
!as eti)uetas son ob'etos de la clase !abel# los botones son ob'etos de la clase
Button# etc2
Todos estos objetos tienen propiedades #ue pueden ser cambiadas en la ventana de dise1o/
Ancho# alto# color# alineaci.n# etc2
(un#ue tambi+n poseen m+todos #ue nos permiten cambiar estas propiedades durante la ejecucin
del programa/
setText cambia el texto del ob'eto# setBackground cambia el color de -ondo del ob'eto#
setVisible hace ,isible o in,isible al ob'eto# setBounds cambia el tama3o y la posici.n
del ob'eto# etc2
n cual#uier momento le podemos pedir a un objeto #ue nos de informacin sobre s! mismo usando
los m+todos get/
getText obtenemos el texto )ue tenga el ob'eto# getWidth obtenemos la anchura del
ob'eto# getHeight obtenemos la altura del ob'eto# etc2
Los objetos son como )pe#ue1os robots* a los #ue se les puede dar rdenes% usando los m+todos #ue
tienen disponible.
4or e'emplo# le podemos decir a un ob'eto )ue se pinte de nue,o usando el mtodo
repaint# podemos ordenarle a un cuadro de texto )ue co'a el cursor# con el mtodo
re)uest"ocus# etc2
Todos estos objetos% con sus propiedades y m+todos% nos facilitan la creacin de nuestros programas.
Pero a medida #ue nos vamos introduciendo en el mundo de la programacin y nos especiali3amos
en un tipo de programa en concreto% puede ser necesaria la creacin de objetos propios% programados
por nosotros mismos% de forma #ue puedan ser usados en nuestros futuros programas.
F d i Cdi Lib D i i
5bjetos propios
( la hora de dise1ar un objeto de creacin propia% tendremos #ue pensar #u+ propiedades debe tener
dicho objeto% y m+todos ser,n necesarios para poder trabajar con +l. 8icho de otra forma% debemos
pensar en #u+ caracter!sticas debe tener el objeto y #u+ rdenes le podr+ dar.
Para crear objetos propios hay #ue programar la -lase del objeto. "na ve3 programada la -lase% ya
podremos generar objetos de dicha clase% declar,ndolos y construy+ndolos como si de cual#uier otro
objeto se tratara.
( continuacin se propondr, un caso pr,ctico de creacin de objetos propios% con el #ue trabajaremos
en las pr4imas hojas.
Lo #ue viene a continuacin es un planteamiento terico de dise1o de una -lase de 5bjetos.
F d i Cdi Lib D i i
C%O PR8C,ICO. *UL,ICINE %7ENI$%
Planteamiento
Los ?ulticines (venida nos encargan un programa para facilitar las distintas gestiones #ue se reali3an
en dichos multicines.
l multicine cuenta con varias salas% y cada una de ellas genera una serie de informacin. Para
facilitar el control de la informacin de cada sala programaremos una -lase de objeto a la #ue
llamaremos alaCine.
La Clase SalaCine
La -lase SalaCine definir, caracter!sticas de una sala de cine% y permitir, crear objetos #ue
representen salas de cine. -uando la -lase SalaCine est+ programada% se podr,n hacer cosas como
las #ue sigue/
Los ?ulticines (venida tienen una sala central donde se proyectan normalmente los estrenos. 0e
podr!a crear un objeto llamado central de la clase SalaCine de la siguiente forma/
SalaCine central;
Por supuesto% este objeto puede ser construido como cual#uier otro/
central = ne) SalaCine();
l objeto central representar, a la sala de cine central de los ?ulticines (venida.
5tro ejemplo. Los ?ulticines (venida tienen una sala donde proyectan versiones originales. 0e podr!a
crear un objeto llamado salaV5 de la clase SalaCine de la siguiente forma/
SalaCine sala01; 22declaraci3n
sala01 = ne) SalaCine(); 22construcci3n
Propiedades de los objetos de la clase SalaCine
( la hora de decidir las propiedades de un objeto de creacin propia% tenemos #ue preguntarnos%
<#u+ informacin me interesa almacenar del objeto= Trasladando esta idea a nuestro caso pr,ctico%
<#u+ informacin me interesar!a tener de cada sala de cine=
Para este ejemplo supondremos #ue de cada sala de cine nos interesa tener conocimiento de las
siguientes caracter!sticas $propiedades'/
6 %1oro/ define el n>mero de butacas de la sala $un n>mero entero'.
6 Ocupadas/ define el n>mero de butacas ocupadas $un n>mero entero'.
6 Pel#cula/ define la pel!cula #ue se est, proyectando en el momento en la sala $una cadena de
te4to'
6 Entrada/ define el precio de la entrada $un n>mero double'
F d i Cdi Lib D i i
7alores por de1ecto de los objetos SalaCine
-uando se construye un objeto% se asignan unos valores por defecto a sus propiedades. Por ejemplo%
cuando se construye una eti#ueta $-lase JLabel'% esta tiene un tama1o inicial definido% un color% etc.
Lo mismo se tiene #ue hacer con los objetos propios #ue definimos. s necesario decidir #u+ valores
tendr, las propiedades del objeto al construirse.
n nuestro caso% las caracter!sticas de un objeto SalaCine en el momento de construirse ser,n las
siguientes/
(foro/ 9@@
5cupadas/ @
Pel!cula/ )* *la cadena ,ac6a+
ntrada/ A%@@
5bserva este cdigo% en +l construimos el objeto correspondiente a la sala central del multicine/
SalaCine central;
central = ne) SalaCine();
n este momento $en el #ue el objeto central est, reci+n construido' este objeto tiene asignado un
aforo de 9@@% el n>mero de butacas ocupadas es @% la pel!cula #ue se proyecta en la sala central es )*
y la entrada para esta sala es de A euros.
Los valores por defecto #ue se asignan a los objetos de una clase son valores arbitrarios #ue el
programador decidir, seg>n su conveniencia.
*todos de los objetos SalaCine
Para comunicarnos con los objetos de la -lase SalaCine #ue construyamos% tendremos #ue disponer
de un conjunto de m+todos #ue nos permitan asignar valores a las propiedades de los objetos%
recoger informacin de dichos objetos y #ue le den rdenes al objeto.
0er, el programador el #ue decida #u+ m+todos le interesar, #ue posea los objetos de la -lase #ue
est, programando.
Para nuestro caso particular% supondremos #ue los objetos de la -lase SalaCine deber,n tener los
siguientes m+todos/
?+todos de cambio de propiedades $?+todos set '
setAforo 6 asignar, un aforo a la sala de cine
setOcupadas 6 asignar, una cantidad de butacas ocupadas a la sala de cine
setLibres 6 asignar, una cantidad de butacas libres a la sala de cine
setPelicula 6 asignar, un t!tulo de pel!cula a la sala de cine
setEntrada 6 fijar, el precio de las entradas a la sala de cine
Bracias a estos m+todos podemos dar forma a un objeto SalaCine reci+n creado.
Por ejemplo% supongamos #ue #ueremos crear el objeto #ue representa la sala de versiones
originales. Cesulta #ue esta sala tiene de aforo A@ localidades% #ue se est, proyectando la pel!cula
)?etrpolis* y #ue la entrada para ver la pel!cula es de D euros. La sala est, vac!a de momento.
F d i Cdi Lib D i i
Para crear el objeto% se usar!a el siguiente cdigo/
22Se constru4e el o$%eto
SalaCine sala01;
sala01 = ne) SalaCine();
22Se le asignan caracter5sticas
sala01.set"6oro(70); 22a6oro 70
sala01.set8elicula(*9etr3polis,); 22la pel5cula :ue se pro4ecta
sala01.setntrada(;); 22entrada a ; euros
(l construir el objeto salaV5 tiene por defecto los valores siguientes en sus propiedades/
(foro/ 9@@
5cupadas/ @
Pel!cula/ )*
ntrada/ A%@@
Bracias a los m+todos disponibles hemos asignados estos nuevos valores/
(foro/ A@
5cupadas/ @
Pel!cula/ )?etrpolis*
ntrada/ D%@@
?+todos para pedirle informacin al objeto $?+todos get'
0e programar,n los siguientes m+todos get en la clase SalaCine/
getAforo 6 devuelve el aforo #ue tiene el objeto
getOcupadas 6 devuelve el n>mero de butacas ocupadas #ue tiene el objeto
getLibres 6 devuelve el n>mero de butacas #ue tiene libres el objeto
getPorcentaje 6 devolver, el porcentaje de ocupacin de la sala
getIngresos 6 devolver, los ingresos producidos por la sala $entradas vendidas por precio'
getPelicula 6 devolver, el t!tulo de la pel!cula #ue se est, proyectando
getEntrada 6 devolver, el precio de la entrada asignado al objeto
stos m+todos nos permitir,n obtener informacin de un objeto del tipo SalaCine. Por ejemplo%
supongamos #ue tenemos el objeto llamado central $correspondiente a la sala principal del multicine'%
para obtener la pel!cula #ue se est, proyectando en dicha sala solo habr!a #ue usar este cdigo/
String peli; 22una <aria$le de cadena
peli = central.get8elicula();
5% por ejemplo% para saber los ingresos producidos por la sala central&
dou$le ingresos;
ingresos = central.get=ngresos();
?+todos para dar rdenes al objeto
0e programar,n los siguientes m+todos para dar rdenes a los objetos de la clase SalaCine.
F d i Cdi Lib D i i
vaciar
6 ste m+todo pondr, el n>mero de pla3as ocupadas a cero y le asignar, a la pel!cula la
cadena vac!a.
entraUno
6 ste m+todo le dice al objeto #ue ha entrado una nueva persona en la sala. $sto debe
producir #ue el n>mero de pla3as ocupadas aumente en uno'
REU*EN %L%CINE
He a#u! un resumen de la -lase de objetos SalaCine% la cual se programar, en la pr4ima hoja/
-lase de objetos/ SalaCine
Propiedades de los objetos SalaCine/
%1oro 6 n>mero entero $int'
Ocupadas 6 n>mero entero $int'
Pel#cula 6 cadena $0tring'
Entrada 6 n>mero decimal $double'
.alores por defecto de los objetos del tipo SalaCine/
(foro/ 9::
5cupadas/ :
Pel!cula/ /cadena -ac#a0
ntrada/ ;
?+todos de los objetos del tipo SalaCine/
?+todos de asignacin de propiedades $set'
setAforo 6 modifica la propiedad (foro
setOcupadas 6 modifica la propiedad 5cupadas
setLibres 6 modifica la propiedad 5cupadas tambi+n
setPelicula 6 modifica la propiedad Pel!cula
setEntrada 6 modifica la propiedad ntrada
?+todos de peticin de informacin $get'
getAforo 6 devuelve el valor de la propiedad (foro
gnetOcupadas6 devuelve el valor de la propiedad 5cupadas
getLibres 6 devuelve el n>mero de butacas libres
getPorcentaje 6 devuelve el porcentaje de ocupacin de la sala
getIngresos 6 devuelve los ingresos obtenidos por la venta de entradas
getPelicula 6 devuelve el valor de la propiedad Pel!cula
getEntrada 6 devuelve el valor de la propiedad ntrada
?+todos de orden
Vaciar 6 vac!a la ocupacin de la sala y borra la pel!cula
entraUno 6 le indica al objeto #ue ha entrado una persona m,s en la sala
F d i Cdi Lib D i i
F d i Cdi Lib D i i
EJERCICIO PR8C,ICO
0upongamos #ue programamos una -lase de objetos llamada %ectangulo% la cual permitir, construir
objetos #ue representen a rect,ngulos.
6 <-mo declarar!a y construir!a un objeto llamado suelo del tipo %ectangulo=
6 0upongamos #ue las propiedades de los objetos de la clase %ectangulo sean las siguientes/
o Ease $double'
o (ltura $double'
<Fu+ m+todos de tipo set programar!a para cambiar las propiedades de los objetos del tipo
%ectangulo=
6 -omo ejemplo de los m+todos anteriores% suponga #ue #uiere asignar al objeto suelo una
base de D@ y una altura de A@. <Fu+ cdigo usar!a=
6 Teniendo en cuenta #ue nos puede interesar conocer el ,rea de un objeto %ectangulo y su
per!metro% y teniendo en cuenta #ue los objetos %ectangulo tienen dos propiedades $Ease y
(ltura'% <#u+ cuatro m+todos get ser!an interesantes de programar para los objetos del tipo
%ectangulo=
6 Teniendo en cuenta los m+todos del punto G. 0upongamos #ue #uiero almacenar en una
variable double llamada area el ,rea del objeto suelo. <Fu+ cdigo usar!a= ; si #uiero
almacenar el per!metro del objeto suelo en una variable llamada peri=
CONCLUI!N
Para crear un objeto propio' necesita tener claro lo siguiente.
Nombre de la Clase del objeto&
Propiedades "ue tendr(n los objetos de dic)a clase&
7alores iniciales "ue tendr(n las propiedades cuando se constru2a cada
objeto&
*todos "ue ser(n interesantes de programar.
*todos de ajuste de propiedades /set0
*todos de peticin de in1ormacin /get0
*todos de orden
Una -e< "ue se tenga claro lo anterior' se podr( empe<ar la programacin de la
Clase de objetos&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. POO& PRO6R%*%CI!N $E UN% CL%E
Programacin de una Clase
n este ejercicio guiado% crearemos la -lase SalaCine% #ue hemos descrito en la hoja anterior. Luego%
a partir de esta clase% fabricaremos objetos representando salas de cine% y los usaremos en un
proyecto Java.
Cecuerda las caracter!sticas #ue hemos decidido para la -lase SalaCine en la hoja anterior/
CL%E %L%CINE
2ombre de la -lase/ SalaCine
Propiedades de los objetos SalaCine/
%1oro 6 n>mero entero $int'
Ocupadas 6 n>mero entero $int'
Pel#cula 6 cadena $0tring'
Entrada 6 n>mero decimal $double'
.alores por defecto de los objetos del tipo SalaCine/
(foro/ 9::
5cupadas/ :
Pel!cula/ /cadena -ac#a0
ntrada/ ;
?+todos de los objetos del tipo SalaCine/
?+todos de asignacin de propiedades $set'
setAforo 6 modifica la propiedad (foro
setOcupadas 6 modifica la propiedad 5cupadas
setLibres 6 modifica la propiedad 5cupadas tambi+n
setPelicula 6 modifica la propiedad Pel!cula
setEntrada 6 modifica la propiedad ntrada
?+todos de peticin de informacin $get'
getAforo 6 devuelve el valor de la propiedad (foro
getOcupadas 6 devuelve el valor de la propiedad 5cupadas
getLibres 6 devuelve el n>mero de butacas libres
getPorcentaje 6 devuelve el porcentaje de ocupacin de la sala
getIngresos 6 devuelve los ingresos obtenidos por la venta de entradas
getPelicula 6 devuelve el valor de la propiedad Pel!cula
getEntrada 6 devuelve el valor de la propiedad ntrada
?+todos de orden
Vaciar 6 vac!a la ocupacin de la sala y borra la pel!cula
entraUno 6 le indica al objeto #ue ha entrado una persona m,s en la sala
F d i Cdi Lib D i i
PRO6R%*%CI!N $E UN% CL%E
"ichero de la Clase
La programacin de una clase de objetos se reali3a en un fichero aparte% cuyo nombre es
e4actamente el mismo #ue el de la propia clase% y cuya e4tensin es .java.
Por ejemplo% si #ueremos programar la clase 0ala-ine% esto se debe hacer en un fichero llamado/
SalaCine.%a<a
-uando programemos esta clase dentro de 2etEeans% veremos las facilidades #ue nos proporciona
este para la creacin de la clase. 8e momento% solo veremos de forma terica como hay #ue
programar la clase. $2o tiene #ue introducir lo #ue viene a continuacin en ning>n sitio'
Estructura b/sica de la Clase
8entro del fichero de la clase% comen3ar, la programacin de esta de la siguiente forma/
pu$lic class SalaCine >
?
La programacin de una clase comien3a siempre con una l!nea de cdigo como la #ue sigue/
pu$lic class .o#$re!e'aClase >
?
Toda la programacin de la clase se introducir, dentro de las dos llaves.
4ropiedades de la Clase
Lo primero #ue se debe introducir en la clase #ue se est, programando son las propiedades. Las
propiedades de una clase son b,sicamente variables globales de +sta. 0i introducimos las
propiedades de la clase SalaCine% esta nos #uedar!a as!/
pu$lic class SalaCine >
int "6oro;
int 1cupadas;
String 8el5cula;
dou$le ntrada;
?
Constructor de la Clase
-uando se plante la clase SalaCine% se tuvo #ue decidir #u+ valores iniciales deber!an tener las
propiedades de la clase. Para asignar estos valores iniciales% es necesario programar lo #ue se
denomina el Constructor.
F d i Cdi Lib D i i
l Constructor de una clase es un m+todo $un procedimiento para entendernos' un poco especial% ya
#ue debe tener el mismo nombre de la clase y no devuelve nada% pero no lleva la palabra ,oid. 8entro
del constructor se iniciali3an las propiedades de la clase.
n general% la programacin del constructor sigue la siguiente sinta4is/
pu$lic .o#$re!e'aClase() >
propiedad1 = <alor;
propiedad2 = <alor;
etc@
?
La clase SalaCine% a1adiendo el Constructor% tendr, el siguiente aspecto/
pu$lic class SalaCine >
int "6oro;
int 1cupadas;
String 8el5cula;
dou$le ntrada;
22Constructor
pu$lic SalaCine() >
"6oro = 100;
1cupadas = 0;
8elicula = *,;
ntrada = 7.0;
?
?
5bserva como usamos el constructor de la clase SalaCine para asignar a cada propiedad los valores
por defecto decididos en el dise1o de la clase #ue se hi3o en la hoja anterior.
1todos del tipo set
Todas las clases suelen contener m+todos del tipo set. Cecuerda #ue estos m+todos permiten asignar
valores a las propiedades de la clase.
8ebes tener en cuenta tambi+n #ue cuando se habla de m+todo de una clase% en realidad se est,
hablando de un procedimiento o funcin% #ue puede recibir como par,metro determinadas variables y
#ue puede devolver valores.
Los m+todos del tipo set son b,sicamente procedimientos #ue reciben valores como par,metros #ue
introducimos en las propiedades. stos m+todos no devuelven nada% as! #ue son ,oid.
0e recomienda% #ue el par,metro del procedimiento se llame de forma distinta a la propiedad #ue se
asigna.
.eamos la programacin del m+todo setA-oro% de la clase SalaCine/
pu$lic <oid set"6oro(int a6o) >
"6oro = a6o;
?
F d i Cdi Lib D i i
-onstructor
5bserva este m+todo/
". s void% es decir% no devuelve nada $el signi-icado de la palabra public se ,er/ m/s adelante'
#. l m+todo recibe como par,metro una variable del mismo tipo #ue la propiedad #ue
#ueremos modificar $en este caso int' y un nombre #ue se recomienda #ue no sea igual al de
la propiedad $en nuestro caso% a-o% de aforo'
D. Puedes observar #ue lo #ue se hace simplemente en el m+todo es asignar la variable pasada
como par,metro a la propiedad.
La mayor!a de los procedimientos set usados para introducir valores en las propiedades tienen la
misma forma. (#u! tienes la programacin de los dem,s procedimientos set de la clase SalaCine.
229Atodo setOcupadas
pu$lic <oid set1cupadas(int ocu) >
1cupadas = ocu;
?
229Atodo setPelicula
pu$lic <oid set8elicula(String peli) >
8elicula = peli;
?
229Atodo setntrada
pu$lic <oid setntrada(dou$le entra) >
ntrada = entra;
?
Hay un m+todo set de la clase SalaCine llamado set!ibres cuya misin es asignar el n>mero de
localidades libres del cine. 0in embargo la clase SalaCine no tiene una propiedad )Libres*. n
realidad% este m+todo debe modificar el n>mero de localidades ocupadas. 5bserva su programacin/
229Atodo set'i$res
pu$lic <oid set'i$res(int li$) >
int ocu;
ocu = "6oro B li$;
1cupadas = ocu;
?
(l asignar un n>mero de localidades ocupadas% estamos asignando indirectamente el n>mero de
localidades libres. -omo puedes observar en el m+todo% lo #ue se hace es calcular el n>mero de
localidades ocupadas a partir de las libres% y asignar este valor a la propiedad 5cupadas.
2o se pens en crear una propiedad de la clase llamada !ibres ya #ue en todo momento se puede
saber cuantas localidades libres hay restando el (foro menos las localidades 5cupadas.
La clase SalaCine% a1adiendo los m+todos set% #uedar!a de la siguiente forma/
F d i Cdi Lib D i i
pu$lic class SalaCine >
int "6oro;
int 1cupadas;
String 8el5cula;
dou$le ntrada;
22Constructor
pu$lic SalaCine() >
"6oro = 100;
1cupadas = 0;
8elicula = *,;
ntrada = 7.0;
?
229Atodos set
229Atodo set"6oro
pu$lic <oid set"6oro(int a6o) >
"6oro = a6o;
?
229Atodo setOcupadas
pu$lic <oid set1cupadas(int ocu) >
1cupadas = ocu;
?
229Atodo setPelicula
pu$lic <oid set8elicula(String peli) >
8elicula = peli;
?
229Atodo setntrada
pu$lic <oid setntrada(dou$le entra) >
ntrada = entra;
?
229Atodo set'i$res
pu$lic <oid set'i$res(int li$) >
int ocu;
ocu = "6oro B li$;
1cupadas = ocu;
?
?
1todos del tipo get
(l igual #ue los m+todos set% los m+todos get son muy f,ciles de programar ya #ue suelen tener
siempre la misma forma.
stos m+todos no suelen llevar par,metros y devuelven el valor de la propiedad correspondiente
usando la t!pica instruccin return usada tanto en las funciones. Por tanto% un m+todo get nunca es
void. 0iempre ser, del mismo tipo de datos #ue la propiedad #ue devuelve.
F d i Cdi Lib D i i
?+todos 0et
.eamos la programacin del m+todo getA-oro/
229Atodo get"6oro
pu$lic int get"6oro() >
return "6oro;
?
-omo puedes ver el m+todo simplemente devuelve el valor de la propiedad (foro. -omo esta
propiedad es int% el m+todo es int.
Los m+todos #ue devuelven el resto de las propiedades son igual de sencillos de programar/
229Atodo get1cupadas
pu$lic int get1cupadas() >
return 1cupadas;
?
229Atodo get8elicula
pu$lic String get8elicula() >
return 8el5cula;
?
229Atodo getntrada
pu$lic dou$le getntrada() >
return ntrada;
?
Todos estos m+todos son iguales. 0olo tienes #ue fijarte en el tipo de datos de la propiedad #ue
devuelven.
4isten otros m+todos get #ue devuelven c,lculos reali3ados con las propiedades. stos m+todos
reali3an alg>n c,lculo y luego devuelven el resultado. 5bserva el siguiente m+todo get/
229Atodo get'i$res
pu$lic int get'i$res() >
int li$;
li$ = "6oro B 1cupadas;
return li$;
?
2o e4iste una propiedad !ibres% por lo #ue este valor debe ser calculado a partir del (foro y el n>mero
de localidades 5cupadas. Para ello restamos y almacenamos el valor en una variable a la #ue hemos
llamado lib. Luego devolvemos dicha variable.
Los dos m+todos get #ue #uedan por programar de la clase SalaCine son parecidos/
229Atodo get8orcenta%e
pu$lic dou$le get8orcenta%e() >
dou$le por;
por = (dou$le) 1cupadas 2 (dou$le) "6oro C 100.0;
return por;
?
ste m+todo calcula el porcentaje de ocupacin de la sala $es un valor double'
229Atodo get=ngresos
pu$lic dou$le get=ngresos() >
dou$le ingre;
F d i Cdi Lib D i i
ingre = 1cupadas C ntrada;
return ingre;
?
Los ingresos se calculan multiplicando el n>mero de entradas por lo #ue vale una entrada.
La clase SalaCine una ve3 introducidos los m+todos get #uedar!a de la siguiente forma/
pu$lic class SalaCine >
int "6oro;
int 1cupadas;
String 8el5cula;
dou$le ntrada;
22Constructor
pu$lic SalaCine() >
"6oro = 100;
1cupadas = 0;
8elicula = *,;
ntrada = 7.0;
?
229Atodos set
229Atodo set"6oro
pu$lic <oid set"6oro(int a6o) >
"6oro = a6o;
?
229Atodo setOcupadas
pu$lic <oid set1cupadas(int ocu) >
1cupadas = ocu;
?
229Atodo setPelicula
pu$lic <oid set8elicula(String peli) >
8elicula = peli;
?
229Atodo setntrada
pu$lic <oid setntrada(dou$le entra) >
ntrada = entra;
?
229Atodo set'i$res
pu$lic <oid set'i$res(int li$) >
int ocu;
ocu = "6oro B li$;
1cupadas = ocu;
?
229Atodos get
229Atodo get"6oro
pu$lic int get"6oro() >
return "6oro;
F d i Cdi Lib D i i
?+todos Bet
?
229Atodo get1cupadas
pu$lic int get1cupadas() >
return 1cupadas;
?
229Atodo get8elicula
pu$lic String get8elicula() >
return 8el5cula;
?
229Atodo getntrada
pu$lic dou$le getntrada() >
return ntrada;
?
229Atodo get'i$res
pu$lic int get'i$res() >
int li$;
li$ = "6oro B 1cupadas;
return li$;
?
229Atodo get8orcenta%e
pu$lic dou$le get8orcenta%e() >
dou$le por;
por = (dou$le) 1cupadas 2 (dou$le) "6oro C 100.0;
return por;
?
229Atodo get=ngresos
pu$lic dou$le get=ngresos() >
dou$le ingre;
ingre = 1cupadas C ntrada;
return ingre;
?
?
1todos de orden
Para finali3ar la programacin de la clase SalaCine% se programar,n los dos m+todos de orden #ue
hemos indicado en el planteamiento de la clase. stos m+todos suelen reali3ar alguna tarea #ue
involucra a las propiedades de la clase% modific,ndola internamente. 2o suelen devolver ning>n valor%
aun#ue pueden recibir par,metros.
F d i Cdi Lib D i i
?+todos Bet
.eamos la programacin del m+todo Vaciar% cuyo objetivo es vaciar la sala y #uitar la pel!cula en
proyeccin/
229Atodo 0aciar
pu$lic <oid 0aciar() >
1cupadas = 0;
8el5cula = *,;
?
-omo se puede observar% es un m+todo muy sencillo% ya #ue simplemente cambia algunas
propiedades de la clase.
l m+todo entra"no es tambi+n muy sencillo de programar. ste m+todo le indica al objeto #ue ha
entrado un nuevo espectador. 0abiendo esto% el objeto debe aumentar en uno el n>mero de
localidades ocupadas/
229Atodo entra/no
pu$lic <oid entra/no() >
1cupadasDD;
?
(1adiendo estos dos >ltimos m+todos% la programacin de la clase SalaCine #uedar!a finalmente
como sigue/
pu$lic class SalaCine >
int "6oro;
int 1cupadas;
String 8el5cula;
dou$le ntrada;
22Constructor
pu$lic SalaCine() >
"6oro = 100;
1cupadas = 0;
8elicula = *,;
ntrada = 7.0;
?
229Atodos set
229Atodo set"6oro
pu$lic <oid set"6oro(int a6o) >
"6oro = a6o;
?
229Atodo setOcupadas
pu$lic <oid set1cupadas(int ocu) >
1cupadas = ocu;
?
229Atodo setPelicula
pu$lic <oid set8elicula(String peli) >
8elicula = peli;
?
229Atodo setntrada
pu$lic <oid setntrada(dou$le entra) >
ntrada = entra;
?
F d i Cdi Lib D i i
Propiedades $variables globales'
-onstructor
?+todos 0et
229Atodo set'i$res
pu$lic <oid set'i$res(int li$) >
int ocu;
ocu = "6oro B li$;
1cupadas = ocu;
?
F d i Cdi Lib D i i
229Atodos get
229Atodo get"6oro
pu$lic int get"6oro() >
return "6oro;
?
229Atodo get1cupadas
pu$lic int get1cupadas() >
return 1cupadas;
?
229Atodo get8elicula
pu$lic String get8elicula() >
return 8el5cula;
?
229Atodo getntrada
pu$lic dou$le getntrada() >
return ntrada;
?
229Atodo get'i$res
pu$lic int get'i$res() >
int li$;
li$ = "6oro B 1cupadas;
return li$;
?
229Atodo get8orcenta%e
pu$lic dou$le get8orcenta%e() >
dou$le por;
por = (dou$le) 1cupadas 2 (dou$le) "6oro C 100.0;
return por;
?
229Atodo get=ngresos
pu$lic dou$le get=ngresos() >
dou$le ingre;
ingre = 1cupadas C ntrada;
return ingre;
?
229Atodos de orden
229Atodo 0aciar
pu$lic <oid 0aciar() >
1cupadas = 0;
8el5cula = *,;
?
229Atodo entra/no
pu$lic <oid entra/no() >
1cupadasDD;
?
F d i Cdi Lib D i i
?+todos Bet
?+todos de orden y otros
m+todos.
?
F d i Cdi Lib D i i
EJERCICIO RECO*EN$%$O
0upongamos #ue tenemos una clase llamada %ectangulo #ue nos permitir, generar objetos de tipo
rect,ngulo.
0ea el planteamiento de la clase %ectangulo el #ue sigue/
CL%E REC,%N6ULO
2ombre de la clase/ Cectangulo
Propiedades de los objetos de la clase Cectangulo/
Ease $double'
(ltura $double'
.alores iniciales de las propiedades de los objetos de la clase Cectangulo/
Ease H 9@@
(ltura H A@
?+todos/
?+todos set/
setEase H permite asignar un valor a la propiedad Ease.
set(ltura H permite asignar un valor a la propiedad (ltura.
?+todos get/
getEase H devuelve el valor de la propiedad Ease
get(ltura H devuelve el valor de la propiedad (ltura
get(rea H devuelve el ,rea del rect,ngulo
getPer!metro H devuelve el per!metro del rect,ngulo
5tros m+todos/
-uadrar H este m+todo debe hacer #ue la (ltura tenga el valor de la Ease.
0 PI8/
Ceali3a $en papel' la programacin de la clase Cectangulo a partir del planteamiento anterior.
F d i Cdi Lib D i i
CONCLUI!N
La programacin de una clase se reali<a en un 1ic)ero "ue tiene el mismo nombre
"ue la clase 2 e=tensin &ja-a
La estructura general de una clase es la siguiente.
public class NombreClase >
Propiedades /-ariables globales0
Constructor
*todos set
*todos get
*todos de orden 2 otros mtodos
?
El Constructor es un procedimiento "ue no de-uel-e nada pero "ue no es -oid& El
constructor debe llamarse igual "ue la clase 2 se usa para asignar los -alores
iniciales a las propiedades&
Los mtodos set son -oid 2 reciben como par(metro un -alor "ue se asigna a la
propiedad correspondiente&
Los mtodos get no tienen par(metros 2 de-uel-en el -alor de una propiedad de la
clase' aun"ue tambin pueden reali<ar c(lculos 2 de-ol-er sus resultados&
Los mtodos de orden reali<an alguna tarea espec#1ica 2 a -eces modi1ican las
propiedades de la clase de alguna 1orma&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. CU%$RO $E 7ERI@IC%CI!N
G. Ceali3a un nuevo proyecto.
A. n la ventana principal debes a1adir lo siguiente/
f. "n botn )(ceptar* llamado btn(ceptar.
g. "na eti#ueta con borde llamada etiCesultado.
I. (1ade tambi+n tres cuadros de verificacin. stos cuadros son objetos del
tipo J-hecJEo4.
K. (1ade tres J-hecJEo4 y cambia el te4to de ellos% de forma #ue apare3ca
)Perro*% )Bato* y )Catn*.
9@. 8ebe cambiar el nombre de cada uno de ellos. 0e llamar,n/ chJPerro%
chJBato% chJCaton.
99. La ventana tendr, el siguiente aspecto cuando termine/
F d i Cdi Lib D i i
9:. l programa debe funcionar de la siguiente forma/
-uando el usuario pulse aceptar% en la eti#ueta aparecer, un mensaje
indicando #u+ animales han sido )seleccionados*. Para ello hay #ue
programar el evento action4er-ormed del botn (ceptar. n ese evento a1ada
el siguiente cdigo/
String #ensa%e=E"ni#ales elegidosF E;
i6 (cGk8erro.isSelected()) >
#ensa%e=#ensa%eDE8erro E;
?

i6 (cGk-ato.isSelected()) >
#ensa%e=#ensa%eDE-ato E;
?

i6 (cGkRaton.isSelected()) >
#ensa%e=#ensa%eDERaton E;
?

etiResultado.setText(#ensa%e);
9D. 5bserva el cdigo. n +l se hace lo siguiente/
n. 0e crea una variable de cadena llamada mensa'e.
o. n esa variable se introduce el te4to )(nimales elegidos/ )
p. Luego% compruebo si est, seleccionada la casilla de verificacin
chJPerro. 0i es as! concateno a la cadena mensaje la palabra )Perro*.
#. Luego compruebo si est, seleccionada la casilla de verificacin
chJBato y hago lo mismo.
F d i Cdi Lib D i i
r. Lo mismo con la casilla chJCaton.
s. Linalmente presento la cadena mensaje en la eti#ueta etiCesultado.
:@. 5bserva el m+todo is0elected$' propio de las casillas de verificacin% permiten
saber si una casilla est, activada o no.
:9. jecute el programa. 0eleccione por ejemplo las casillas Bato y Catn. (l
pulsar (ceptar el resultado debe ser el siguiente/
CONCLUI!N
Los cuadros de -eri1icacin /JC)ecABo=0 se usan cuando "uieres seleccionar
-arias opciones&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. BO,ONE $E OPCI!N
::. Ceali3a un nuevo proyecto.
:D. n la ventana principal debes a1adir lo siguiente/
4. "n botn )(ceptar* llamado btn(ceptar.
y. "na eti#ueta con borde llamada etiCesultado.
:M. (1ade un panel. "n panel es una 3ona rectangular #ue puede contener elementos
$botones% eti#uetas% etc' La forma de poner un panel es a trav+s del objeto JPanel.
:N. "na ve3 a1adido el panel en el JLrame% le pondremos un borde para poder locali3arlo
f,cilmente. 8ebes hacer lo siguiente/
bb. 0elecciona el panel #ue has a1adido.
cc. (ctiva la propiedad Eorder $botn con tres puntos'
dd. Eusca el tipo de borde llamado TitledEorder $borde con t!tulo' y pon el t!tulo
colores.
F d i Cdi Lib D i i
D9. Tu ventana debe #uedar m,s o menos as!/
F d i Cdi Lib D i i
D:. (hora debes a1adir tres botones de opcin $botones de radio' dentro del panel. stos
botones son objetos del tipo JCadioEutton.
DD. (1ade tres JCadioEutton y cambia el te4to de ellos% de forma #ue apare3ca )Cojo*%
).erde* y )(3ul*.
DG. 8ebe cambiar el nombre de cada uno de ellos. 0e llamar,n/ optCojo% opt.erde%
opt(3ul.
DA. La ventana tendr, el siguiente aspecto cuando termine/
DM. 0i ejecuta el programa% observar, #ue pueden seleccionarse varios colores a la ve3.
sto no es interesante% ya #ue los botones de opcin se usan para activar solo una
opcin entre varias.
F d i Cdi Lib D i i
DN. Hay #ue hacer #ue solo un botn de opcin pueda estar seleccionado a la ve3. Para
ello% debe a1adir un nuevo objeto. Cealice los siguientes pasos/
ll. (1ada un objeto del tipo EuttonBroup al formulario. O(tencinP ste objeto es
invisible% y no se ver, en el formulario% sin embargo% lo podr+is ver en el
Inspector% en la parte de )5tros -omponentes*/
mm. Tienes #ue darle un nombre al EuttonBroup. l nombre ser,
)grupo-olores*.
nn. (hora% hay #ue conseguir #ue los tres botones pertene3can al mismo grupo.
s decir% #ue pertene3can al grupo grupo-olores.
oo. 0elecciona el botn de opcin optCojo y cambia su propiedad buttonBroup%
indicando #ue pertenece al grupo colores $observa la imagen'/
F d i Cdi Lib D i i
pp. Ha3 lo mismo con los botones opt.erde y opt(3ul.
GD. (cabas de asociar los tres botones de opcin a un mismo grupo. sto produce #ue
solo una de las tres opciones pueda estar activada. Pru+belo ejecutando el
programa.
GG. (hora interesa #ue la opcin )Cojo* salga activada desde el principio. "na forma de
hacer esto es programando en el )-onstructor* lo siguiente/
optRo%o.setSelected(true);
l m+todo set0elected hace #ue se pueda activar o desactivar un botn de opcin.
Prueba el programa. 5bserva como la opcin Cojo est, activada inicialmente.
$%. l programa no est, terminado a>n. Interesa #ue cuando el usuario pulse el botn
(ceptar% en la eti#ueta apare3ca el color elegido. Para ello% en el action4er-ormed del
botn (ceptar programe lo siguiente/
String #ensa%e=EColor elegidoF E;

i6 (optRo%o.isSelected()) >
#ensa%e=#ensa%eDERo%oE;
? else i6 (opt0erde.isSelected()) >
#ensa%e=#ensa%eDE0erdeE;
? else i6 (opt"Hul.isSelected()) >
#ensa%e=#ensa%eDE"HulE;
?

F d i Cdi Lib D i i
etiResultado.setText(#ensa%e);

GM. 5bserva el cdigo. n +l se hace lo siguiente/
uu. 0e crea una variable de cadena llamada mensa'e.
vv. n esa variable se introduce el te4to )-olor elegido/ )
QQ. Luego se comprueba #ue opcin est, seleccionada% usando el m+todo
is0elected de los botones de opcin. ste m+todo te dice si un botn est,
seleccionado o no.
&&. 0eg>n la opcin #ue est+ seleccionada% se a1ade un te4to u otro a la cadena
mensa'e.
''. Linalmente se muestra la cadena mensa'e en la eti#ueta etiCesultado.
A:. jecute el programa. 0eleccione por ejemplo la .erde. (l pulsar (ceptar el resultado
debe ser el siguiente/
CONCLUI!N
Los botones de opcin' tambin llamados botones de radio /JRadioButton0 se usan
cuando "uieres "ue el usuario pueda elegir una opcin de entre -arias&
Es interesante "ue los botones de radio apare<can dentro de un panel JPanel& e
recomienda colocar un borde al panel&
Es totalmente necesario aCadir un objeto del tipo Button6roup' 2 )acer "ue los
botones de radio pertene<can a dic)o grupo& En caso contrario' ser( posible acti-ar
-arios botones de opcin a la -e<&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. CU%$RO $E LI,%
AD. Ceali3a un nuevo proyecto.
AG. n la ventana principal debes a1adir lo siguiente/
ccc. "n botn )(ceptar* llamado btn(ceptar.
ddd. "na eti#ueta con borde llamada etiCesultado.
AN. (1ade un cuadro de lista. Los cuadros de listas son objetos JList.
AI. -,mbiale el nombre al JList. Ten cuidado% ya #ue en los JList aparecen siempre
dentro de otro objeto llamado j0crollPane. 0i miras en el Inspector% ver,s #ue al
pulsar en el botn R del j0crollPane aparecer, tu JList/
F d i Cdi Lib D i i
AK. (provecha para cambiarle el nombre al JList. l nuevo nombre ser, lst-olores.
M@. 0i te fijas en el JList% consiste en un cuadro #ue contiene una serie de Items. stos
elementos pueden ser cambiados a trav+s de la propiedad ?odel del JList.
M9. Eusca la propiedad ?odel y ha3 clic en el botn de los tres puntos. (parecer, un
cuadro de di,logo parecido al siguiente. 0olo tienes #ue seleccionar los elementos
#ue #uieras y pulsar el botn )Eorrar* $Cemove' para eliminarlos de la lista.
M:. Puedes a1adir elementos escribi+ndolos en el cuadro (rt!culo y luego pulsando el
botn )(1adir* $(dd'.
F d i Cdi Lib D i i
MD. 8ebes hacer #ue la lista sea la siguiente/
Cojo
.erde
(3ul
($. (hora programaremos el action4er-ormed del botn (ceptar. 8ebes introducir el
siguiente cdigo/
String #ensa%e;

#ensa%e=El color seleccionado esF EDlstColores.getSelected0alue().toString();
etiResultado.setText(#ensa%e);
MA. 5bserva el cdigo/
nnn. 0e crea una variable de cadena llamada mensa'e.
ooo. ; dentro de esta variable se introduce una concatenacin de cadenas.
))). 5bserva la parte/ lstColores.getSelected0alue()% esta parte
devuelve el valor seleccionado de la lista.
***. Hay #ue tener en cuenta #ue este valor no es una cadena% por eso hay
#ue convertirla a cadena a1adiendo .toString().
F d i Cdi Lib D i i
rrr. 8e esta manera puedes e4traer el elemento seleccionado de un cuadro de
lista.
sss. Luego simplemente ponemos la cadena mensaje dentro de la eti#ueta.
N:. jecuta el programa y observa su funcionamiento. Por ejemplo% si seleccionas el
color verde y pulsas aceptar el resultado ser, el siguiente/
ND. .amos a mejorar el programa. Puede suceder #ue el usuario no seleccione ning>n
valor del cuadro de lista% y ser!a interesante en este caso #ue el programa avisara de
ello. -ambie el cdigo del botn (ceptar por este otro cdigo/
String #ensa%e;

i6 (lstColores.getSelected=ndex()==I1) >
#ensa%e=E.o Ga4 un color seleccionado.E;
? else >
#ensa%e=El color seleccionado esF EDlstColores.getSelected0alue().toString();
?
etiResultado.setText(#ensa%e);
NG. 5bserva el cdigo/
QQQ. l m+todo get0electedInde4 me dice el !ndice del elemento #ue est,
seleccionado.
444. Por ejemplo% si est, seleccionado el primero el !ndice es @% si est,
seleccionado el segundo el !ndice es 9% etc.
yyy. 0i este m+todo devuelve 69% entonces es se1al de #ue no hay ning>n
elemento seleccionado.
333. (provecho esto para mostrar un mensaje indicando lo sucedido.
F d i Cdi Lib D i i
NK. 0i ejecuta el programa y pulsa el botn (ceptar sin seleccionar nada el resultado
deber!a ser el siguiente/
+,. 0e podr!a haber prescindido del botn aceptar si el cdigo anterior se hubiera puesto
en el evento mouse-licJed del cuadro de lista en ve3 de en el action4er-ormed del
botn (ceptar. n este caso% cada ve3 #ue se seleccionara un elemento de la lista%
autom,ticamente aparecer!a el mensaje en la eti#ueta.
0e anima a #ue realice esta modificacin.
CONCLUI!N
El objeto JList permite crear cuadros de lista& Estos objetos contienen una serie de
elementos "ue pueden ser seleccionados&
% tra-s del mtodo getelected7alue se puede obtener el elemento "ue est(
seleccionado& /Recuerda con-ertirlo a cadena con totring0
% tra-s del mtodo getelectedInde= se puede saber la posicin del elemento
seleccionado& i este #ndice es D9' entonces sabremos "ue no )a2 ningEn elemento
seleccionado&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. CU%$RO CO*BIN%$O
I9. Ceali3a un nuevo proyecto.
I:. n la ventana principal debes a1adir lo siguiente/
eeee. "na eti#ueta con borde llamada etiCesultado.
IG. (1ade un cuadro combinado $combo'. Los cuadros combinados son objetos del tipo
J-omboEo4. E,sicamente% un combo es una lista desplegable.
IA. -,mbiale el nombre al J-omboEo4. l nombre ser, cbo-olores. Tu programa debe
tener m,s o menos este aspecto.
IM. Los elementos del cbo-olores pueden ser cambiados a trav+s de la propiedad
?odel. 0elecciona el combo y activa la propiedad ?odel $el botoncito con los tres
puntos' (parecer, lo siguiente/
F d i Cdi Lib D i i
IN. (l igual #ue pasaba con los cuadros de lista% se pueden eliminar los elementos #ue
contiene el combo y a1adir elementos propios. "se los botones (1adir y liminar
para a1adir la siguiente lista de elementos/
Cojo
.erde
(3ul
II. jecuta el programa y observa el funcionamiento del desplegable...
F d i Cdi Lib D i i
IK. .amos a hacer #ue cuando se elija un elemento del desplegable% en la eti#ueta
apare3ca un mensaje indicando el color elegido.
Para ello% debes programar el evento action4er-ormed del combo y a1adir el siguiente
cdigo/
String #ensa%e=El color elegido es E;

#ensa%e=#ensa%eDc$oColores.getSelected=te#().toString();
etiResultado.setText(#ensa%e);
K@. ste cdigo hace lo siguiente/
mmmm. -rea una variable de cadena.
nnnn. -oncatena dentro de ella el mensaje )l color elegido es* con el color
seleccionado.
oooo. 5bserva el m+todo get0electedItem% se usa para saber el elemento
seleccionado del combo. s necesario convertirlo a te4to con to0tring.
pppp. Linalmente se coloca el mensaje en la eti#ueta.
KA. jecuta el programa y comprueba su funcionamiento. Por ejemplo% si elegimos el
color verde% el aspecto del programa ser, el siguiente/
KM. Los cuadros combinados pueden funcionar tambi+n como cuadros de te4to. s decir%
pueden permitir #ue se escriba te4to dentro de ellos. Para hacer esto% basta con
cambiar su propiedad )editable* y activarla.
F d i Cdi Lib D i i
KN. jecuta el programa y observa como se puede escribir dentro del combo. (l pulsar
nter% el programa funciona igualmente con el te4to escrito.
CONCLUI!N
Los combos son listas desplegables donde se puede elegir una de las opciones
propuestas&
Los combos pueden 1uncionar tambin como cuadros de te=tos' si se acti-a la
opcin editable&
% tra-s del mtodo getelectedItem se puede e=traer la opcin seleccionada o el
te=to escrito en el combo&
F d i Cdi Lib D i i
0e escribe a#u! y
se pulsa enter
EJERCICIO 6UI%$O& J%7%. ,O66LEBU,,ON
KI. Ceali3a un nuevo proyecto.
KK. -rear,s una ventana como la #ue sigue teniendo en cuenta lo siguiente/
vvvv. 0e a1adir, una eti#ueta con el te4to
)Precio Ease*. 2o hace falta cambiarle su
nombre.
QQQQ. 0e a1adir, un cuadro de te4to llamado
t4tPrecioEase.
4444. 0e crear, un botn )-alcular*% llamado
btn-alcular.
''''. 0e crear, una eti#ueta vac!a y con borde
llamada etiTotal. "se la propiedad -ont de esta
eti#ueta para hacer #ue el te4to tenga un
mayor tama1o.
3333. 8ebes a1adir tambi+n tres botones%
con el te4to )Instalacin*% )Lormacin* y
)(limentacin E8* respectivamente.
stos botones no son botones normales% son
botones del tipo JToggleEutton. "sa este tipo
de objeto para crearlos.
stos botones% se diferencian de los botones
normales en #ue se #uedan pulsados cuando
se hace un clic sobre ellos% y no vuelven a su
estado normal hasta #ue no se vuelve a hacer
clic sobre ellos.
Los tres botones se llamar,n respectivamente/ tbtnInstalacion% tbtnLormacion%
tbtn(limentacionE8.
aaaaa. (1ade finalmente tres eti#uetas conteniendo los n>meros G@% :@@% :@@.
La primera se llamar, etiPrecioInstalacion% la segunda etiPrecioLormacion y la
tercera etiPrecio(limentacionE8.
9@M. Prueba el programa y comprueba el funcionamiento de los botones
JToggleEutton/
F d i Cdi Lib D i i
9@N. 0e pretende #ue el programa funcione de la siguiente forma/
ddddd. l usuario introducir, un precio base para el servicio #ue se vende.
eeeee. ( continuacin% si el cliente #uiere la instalacin% activar, el botn
Instalacin.
fffff. 0i el cliente #uiere la formacin% activar, el botn Lormacin.
ggggg. 0i el cliente #uiere la (limentacin de Ease de 8atos% activar, el botn
(limentacin E8.
hhhhh. Ten en cuenta #ue el cliente puede #uerer una o varias de las
opciones indicadas.
iiiii. Linalmente se pulsar, el botn calcular y se calcular, el precio total. ste
precio se calcula de la siguiente forma/
Precio Total S Precio Ease R Precio 4tras.
l precio de los 4tras depender, de las opciones elegidas por el usuario. Por
ejemplo% si el usuario #uiere Instalacin y Lormacin% los e4tras costar,n :G@
euros.
""$. (s! pues% se programar, el action4er-ormed del botn -alcular de la siguiente
forma/
F d i Cdi Lib D i i
5bserva como al pulsar los
JToggledEutton estos se #uedan
pulsados.
0i se vuelven a activar se )despulsan*.
dou$le precioJ$ase;
dou$le precioJinstal; 22precio instalaci3n
dou$le precioJ6or; 22precio 6or#acion
dou$le precioJali; 22precio ali#entacion

22Reco%o datos desde la <entanaF

precioJ$ase = !ou$le.parse!ou$le(txt8recioBase.getText());
precioJinstal = !ou$le.parse!ou$le(eti8recio=nstalacion.getText());
precioJ6or = !ou$le.parse!ou$le(eti8recio(or#acion.getText());
precioJali = !ou$le.parse!ou$le(eti8recio"li#entacionB!.getText());

22"Gora :ue tengo los datos, puedo Gacer cKlculos.

22"l precio $ase se le <an aLadiendo precio de extras
22segMn estAn o no acti<ados los &ToggleButtons

dou$le precioJtotal;

precioJtotal = precioJ$ase;

i6 (t$tn=nstalacion.isSelected()) > 22Si se seleccion3 instalaci3n
precioJtotal = precioJtotalDprecioJinstal;
?

i6 (t$tn(or#acion.isSelected()) > 22Si se seleccion3 6or#aci3n
precioJtotal = precioJtotalDprecioJ6or;
?

i6 (t$tn"li#entacionB!.isSelected()) > 22Si se seleccion3 "li#entaci3n B!
precioJtotal = precioJtotalDprecioJali;
?


22(inal#ente pongo el resultado en la eti:ueta
etiTotal.setText(precioJtotalDE NE);
99A. .eamos una e4plicacin del cdigo/
lllll. Primero se crean variables doubles $ya #ue se admitir,n decimales' para
poder hacer los c,lculos.
mmmmm. 0e e4traer,n los datos de la ventana y se almacenar,n en dichas
variables. Para ello% hay #ue convertir desde cadena a double/
precioJ$ase = !ou$le.parse!ou$le(txt8recioBase.getText());
precioJinstal = !ou$le.parse!ou$le(eti8recio=nstalacion.getText());
precioJ6or = !ou$le.parse!ou$le(eti8recio(or#acion.getText());
precioJali = !ou$le.parse!ou$le(eti8recio"li#entacionB!.getText());
nnnnn. "na ve3 obtenidos los datos en forma num+rica% ya se pueden hacer
c,lculos con ellos. l programa declara una nueva variable precio7total donde
se introducir, el resultado. n primer lugar se introduce en esta variable el
precio base.
dou$le precioJtotal;

precioJtotal = precioJ$ase;
F d i Cdi Lib D i i
ooooo. ( continuacin se le suma al precioTtotal los precios de los e4tras si el
botn correspondiente est, seleccionado. sto se hace a trav+s de if. Por
ejemplo% para sumar el e4tra por instalacin/
i6 (t$tn=nstalacion.isSelected()) > 22Si se seleccion3 instalaci3n
precioJtotal = precioJtotalDprecioJinstal;
?
sto significa/ )0i el botn instalacin est, seleccionado% a1ade al precio total
el precio por instalacin*
5bserva el uso del m+todo isSelected para saber si el botn tbtnInstalacion ha
sido seleccionado.
ppppp. Linalmente el resultado se muestra en la eti#ueta de total.
9:9. -omprueba el funcionamiento del programa&
"##. 0upongamos #ue normalmente $en el K@ por ciento de los casos' la
instalacin es solicitada por el usuario. Podr!a ser interesante #ue el botn Instalacin
ya saliera activado al ejecutarse el programa. Para ello% a1ade en el Constructor la
siguiente l!nea.
t$tn=nstalacion.setSelected(true);
sta l!nea usa el m+todo setSelected para activar al botn tbtnInstalacin.
F d i Cdi Lib D i i
Introduce una cantidad $usa el punto
para los decimales'
0elecciona los e4tras #ue desees.
Pulsa -alcular y obtendr,s el resultado.
-omprueba esto ejecutando el programa.
CONCLUI!N
Los J,oggleButton son botones "ue pueden "uedarse pulsados&
% tra-s del mtodo iselected podemos saber si un J,oggleButton est(
seleccionado&
,ambin puedes usar el mtodo setelected para seleccionar o no un botn de este
tipo&
Realmente' estos botones no suelen ser mu2 usados' 2a "ue pueden ser sustituidos
por Cuadros de 7eri1icacin /JC)ecABo=0 "ue son m(s conocidos&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. LI$ER
Introduccin a los Jliders
La clase J0lider permite crear objetos como el siguiente/
stos elementos tienen un pe#ue1o recuadro #ue se puede arrastrar a derecha o i3#uierda.
0eg>n la posicin del recuadro% el J0lider tendr, un valor concreto.
l J0lider se puede configurar para #ue muestre los distintos valores #ue puede tomar/
Tambi+n se puede configurar de forma #ue los valores m!nimo y m,4imo sean distintos/
l valor #ue tiene un J0lider es el valor al #ue apunta el recuadro del J0lider. n la imagen
anterior% el J0lider tiene un valor de IA.
0e ver, a continuacin las caracter!sticas m,s interesantes de los J0lider y como
programarlos.
Ejercicio guiado
6 -rea un nuevo proyecto.
6 (1ade en +l un J0Lider. 0u nombre ser, slDeslizador.
F d i Cdi Lib D i i
6 (1ade una eti#ueta con borde. 0u nombre ser, etiValor.
6 La ventana tendr, el siguiente aspecto/
6 "n J0lider tiene un valor m!nimo y un valor m,4imo. l valor m!nimo es el valor #ue
tiene cuando el recuadro est, pegado a la parte i3#uierda% mientras #ue el valor
m,4imo es el valor #ue tiene cuando el recuadro est, pegado a la parte derecha.
l valor m!nimo y m,4imo del J0lider se puede cambiar. Eusca las propiedades
maximum y minimum del J0lider y asigna los siguientes valores/
?,4imo/ A@@
?!nimo/ 9@@
F d i Cdi Lib D i i
6 0e puede asignar un valor inicial al J0lider a trav+s de su propiedad ,alue. Eus#ue
esta propiedad y asigne un valor de G@@. 5bserve donde se sit>a el recuadro del
J0lider.
6 0e puede mejorar el J0lider definiendo unas divisiones $medidas' Por ejemplo%
haremos #ue cada A@ unidades apare3ca una divisin. Para ello use la propiedad
ma'orTickSpacing y asigne un A@.
6 sto% en realidad% no produce ning>n cambio en el J0lider. Para #ue las divisiones se
vean% es necesario #ue active tambi+n la propiedad paintTicks. sta propiedad
pintar, divisiones en el J0lider/
6 (>n se puede mejorar la presentacin del J0lider% si hacemos #ue apare3ca el valor
de cada divisin. Para ello debes activar la propiedad paint!abel.
F d i Cdi Lib D i i
?edidas cada A@
unidades
6 jecuta el programa para ver el funcionamiento del 8esli3ador y su aspecto. 8ebe
ser parecido al siguiente/
6 Eien. (hora se pretende #ue cuando el usuario arrastre el desli3ador% en la eti#ueta
apare3ca el valor correspondiente. Para ello tendr, #ue programar el evento
stateChanged del J0lider.
l evento stateChanged sucede cuando el usuario arrastra el recuadro del desli3ador.
n este evento programe lo siguiente/
eti0alor.setText(El <alor esF EDsl!esliHador.get0alue());
6 jecute el programa y observe lo #ue sucede cuando arrastra el desli3ador.
6 La e4plicacin del cdigo es la siguiente/
o l m+todo getValue del desli3ador nos devuelve el valor #ue tiene
actualmente el desli3ador.
o ste valor es concatenado a la cadena )l valor es/* y es mostrado en la
eti#ueta a trav+s del conocido setText.
F d i Cdi Lib D i i
?ovemos a#u!.
; aparece el valor
correspondiente a#u!.
6 ( continuacin se mencionan otras propiedades interesantes de los J0lider #ue
puedes probar por tu cuenta/
orientation
Permite cambiar la orientacin del J0lider. Podr!as por ejemplo hacer #ue el J0lider
estuviera en vertical.
minorTickSpacing
Permite asignar subdivisiones a las divisiones ya asignadas. Prueba por ejemplo a
asignar un 9@ a esta propiedad y ejecuta el programa. 5bserva las divisiones del
J0lider.
snapToTicks
-uando esta propiedad est, activada% no podr,s colocar el desli3ador entre dos
divisiones. s decir% el desli3ador siempre estar, situado sobre una de las divisiones.
Prueba a activarla.
paintTrack
sta propiedad permite pintar o no la l!nea sobre la #ue se desli3a el J0lider. Prueba
a desactivarla.
CONCLUI!N
Los Jliders son objetos Fdesli<adoresG& Permiten elegir un -alor arrastrando un
pe"ueCo recuadro de derec)a a i<"uierda o -ice-ersa&
El -alor de un Jliders puede ser obtenido a tra-s de su mtodo getValue&
i "uieres programar el cambio /el arrastre0 en el desli<ador' tienes "ue programar el
e-ento llamado stateChanged&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. PINNER
Introduccin a los Jpinner
La clase J0pinner permite crear cuadros como el siguiente/
0on elementos muy comunes en los programas. ( trav+s de los dos botones triangulares se
puede hacer #ue el valor del cuadro aumente o disminuya. Tambi+n se puede escribir
directamente un valor dentro del cuadro.
Ejercicio guiado
6 -rea un nuevo proyecto.
6 (1ade en +l un J0pinner. 0u nombre ser, spiValor.
6 (1ade una eti#ueta con borde. 0u nombre ser, etiValor.
6 La ventana tendr, el siguiente aspecto/
6 Interesa #ue cuando cambie el J0pinner $ya sea por#ue se pulsaron los botones
triangulares o por#ue se escribi dentro' apare3ca el valor correspondiente dentro de
la eti#ueta. Para ello% tendr, #ue programar el evento stateChanged del J0pinner.
n el evento stateChanged introdu3ca el siguiente cdigo/
F d i Cdi Lib D i i
eti0alor.setText(El <alor esF EDspi0alor.get0alue().toString());
6 -omo puedes observar% lo #ue hace el programa es recoger el valor #ue tiene el
J0pinner a trav+s del m+todo getValue y luego se lo asigna a la eti#ueta con el
cl,sico setText. $s muy parecido a los desli3adores'
8ebes tener en cuenta #ue el valor devuelto no es un n>mero ni una cadena% as! #ue
en el ejemplo se ha usado el m+todo toString*+ para convertirlo a una cadena.
6 Prueba el programa y observa su funcionamiento/
6 5bserva como los valores del J0pinner aumentan o disminuyen en 9. Por otro lado%
no parece haber un l!mite para los valores del J0pinner.
La pregunta ahora es/ <0e puede modificar el contenido del J0pinner de forma #ue
tenga unos valores concretos= La respuesta es s!. .eamos como hacerlo.
6 ntra dentro del cdigo del programa y% dentro del constructor% a1ade este cdigo
debajo de initComponents/
Spinner.u#$er9odel n# = ne) Spinner.u#$er9odel();
n#.set9axi#u#(10);
n#.set9ini#u#(0);
spi0alor.set9odel(n#);
6 ste cdigo hace lo siguiente/
o l J0pinner% al igual #ue los JList y los J-omboEo4% es un objeto #ue contiene
otro objeto )modelo*% y es el objeto )modelo* el #ue contiene los n>meros
visuali3ados en el J0pinner.
o n el cdigo anterior se crea un )modelo* para el J0pinner% se definen los
valores #ue contendr,% y luego se asigna al J0pinner. studiemos las l!neas
del cdigo.
F d i Cdi Lib D i i
l usuario modifica el
valor del J0pinner...
; a#u! aparece el valor
seleccionado.
o La primera l!nea crea un )modelo* llamado nm. Los modelos de los J0pinner
son del tipo Spinner8umber1odel. 2ecesitar,s incluir el import
correspondiente $atento a la bombilla'
o n la segunda l!nea se define como valor m,4imo del modelo el 9@% a trav+s
de un m+todo llamado set1aximum.
o n la tercera l!nea se define como valor m!nimo del modelo el @% a trav+s de
un m+todo llamado set1inimum.
o Linalmente se asigna el modelo creado al J0pinner.
o ste cdigo% en definitiva% har, #ue el J0pinner muestre los valores
comprendidos entre @ y 9@.
6 Prueba el programa y observa los valores #ue puede tomar el J0pinner.
6 .amos a a1adir otra mejora. -ambie el cdigo del constructor por este otro. $5bserva
#ue solo se ha a1adido una l!nea'/
Spinner.u#$er9odel n# = ne) Spinner.u#$er9odel();
n#.set9axi#u#(10);
n#.set9ini#u#(0);
n#.setStepSiHe(2);
spi0alor.set9odel(n#);
6 La l!nea a1adida es/
n#.setStepSiHe(2);
sta l!nea usa un m+todo del modelo del J0pinner #ue permite definir el valor de
cambio del J0Pinner. 8icho de otra forma% esta l!nea hace #ue los valores del
J0pinner salten de : en :.
6 jecuta el programa de nuevo y observa como cambian los valores del J0pinner.
6 l modelo del J0pinner tiene tambi+n un m+todo llamado setValue #ue permite
asignar un valor inicial al modelo. Pruebe a usar este m+todo para hacer #ue el
J0pinner muestre desde el principio el valor G.
F d i Cdi Lib D i i
(hora los valores est,n
comprendidos entre @ y
9@
CONCLUI!N
Los Jpinners son objetos "ue permiten seleccionar un nEmero' 2a sea
escribindolo en el recuadro' o bien a tra-s de dos botones triangulares "ue
permiten aumentar o disminuir el -alor actual&
Los Jpinners son objetos con FmodeloG& Es decir' este objeto contiene a su -e<
otro objeto FmodeloG "ue es el "ue realmente contiene los datos&
$atos *odelo Jpinner
Para de1inir el contenido del Jpinner es necesario crear un modelo del tipo
pinnerNumber*odel& e le asigna al modelo los nEmeros deseados' 2 1inalmente
se une el modelo con el Jpinner&
El objeto modelo del Jpinner permite de1inir el -alor m#nimo 2 el -alor m(=imo' as#
como el inter-alo de aumento de los -alores&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. CROLLB%R
Introduccin a las JscrollBars /Barras de despla<amiento0
La clase J0crollEar permite crear barras de despla3amiento independientes% como la #ue se
muestra a continuacin/
La barra tiene un valor m!nimo% #ue se consigue haciendo #ue el recuadro de la barra de
despla3amiento est+ pegado a la parte i3#uierda.
-uando se pulsa algunos de los botones de la barra de despla3amiento% el valor de la barra
se incrementa 7 decrementa poco a poco. ( este incremento 7 decremento lo llamaremos
incremento unitario.
-uando se pulsa directamente sobre la barra% el valor de la barra se incrementa 7
decrementa en mayor cantidad. ( este incremento 7 decremento lo llamaremos incremento
en blo)ue.
F d i Cdi Lib D i i
.alor m!nimo
8ecrementa el valor poco a
poco $incremento unitario'
Incrementa el valor poco a poco
$incremento unitario'
(l pulsar directamente sobre la barra
se decrementa en mayor cantidad
$incremento en blo)ue'
(l pulsar directamente sobre la
barra se incremente en mayor
cantidad $incremento en blo)ue'
jercicio guiado
9. Para comprender mejor el funcionamiento de las barras de despla3amiento se crear,
un proyecto nuevo.
#. (1ade en el proyecto una barra de despla3amiento $J0crollEar' y ll,mala desValor.
-. La barra de despla3amiento aparecer, en vertical. "se la propiedad de la barra
llamada 5rientation para hacer #ue la barra apare3ca en posicin hori3ontal.
G. (1ade tambi+n una eti#ueta con borde y ll,mala eti.alor.
A. La ventana debe #uedar m,s o menos as!/
M. Interesa #ue cuando el usuario cambie de alguna manera la barra de
despla3amiento% en la eti#ueta apare3ca el valor de la barra.
Para ello% se debe programar el evento Ad'ustmentValueChanged de la barra de
despla3amiento.
n este evento programa lo siguiente/
eti0alor.setText(El <alor esF EDdes0alor.get0alue());
F d i Cdi Lib D i i
.. -omo ves% se coloca en la eti#ueta el valor de la barra. l valor de la barra se obtiene
con el m+todo getValue. jecuta el programa para ver su funcionamiento.
I. 0igamos estudiando el programa. 0e pide #ue cambies las siguientes propiedades de
tu barra/
?inimum H Permite asignar el valor m!nimo de la barra. scribe un A@
?a4imum H Permite asignar el valor m,4imo de la barra. scribe un 9A@
"nitIncrement H Permite cambiar el incremento unitario. scribe un :.
ElocJIncrement H Permite cambiar el incremento en blo)ue. scribe un :@.
.isible(mount H Permite cambiar el ancho del recuadro de la barra. scribe un A.
F d i Cdi Lib D i i
Pulsa a#u! y observa
como el valor cambia
poco a poco&
Pero si pulsas a#u! el
valor cambia en mayor
cantidad&
F d i Cdi Lib D i i
A
K. jecuta ahora el programa y comprueba su funcionamiento/
F d i Cdi Lib D i i
0i pulsas a#u!% el valor
se incrementa de : en
:% ya #ue el
incremento unitario se
configur en :.
0i pulsas a#u!% el valor
se incrementa de :@
en :@% ya #ue el
incremento en blo)ue
es de :@.
0i llevas la barra de
despla3amiento al m!nimo% su
valor ser, de A@% ya #ue se
configur as! con la propiedad
minimum
5bserva lo #ue sucede cuando llevas
la barra de despla3amiento al m,4imo/
aparece un valor de 9GA% cuando el
valor m,4imo #ue asignamos fue de
9A@ <por #u+=
9@. Tal como se ha indicado anteriormente% pasa algo raro con la barra de
despla3amiento cuando esta est, al m,4imo. 0e esperaba #ue alcan3ara el valor
9A@% y sin embargo% el valor m,4imo alcan3ado fue de 9GA. La e4plicacin es la
siguiente/
U 2uestra barra tiene un valor m,4imo de 9A@.
UU 0in embargo% el valor de la barra viene indicado por el lado i3#uierdo del recuadro
interno.
UUU -omo el recuadro interno tiene un ancho definido a trav+s de la propiedad
VisibleAmount% el valor m,4imo #ue la barra puede alcan3ar es de/
.alor S .alor?,4imo H (ncho del recuadro.
s decir%
.alor alcan3able S 9A@ H A S 9GA
"". ( trav+s del m+todo setValue de la barra de despla3amiento se puede asignar un
valor inicial a la barra. Programe en el constructor de su programa lo necesario para
#ue la barra de despla3amiento tenga un valor de N@ al empe3ar el programa.
CONCLUI!N
Las JcrollBars son barras de despla<amiento independientes& %l igual "ue los
Jliders' las JcrollBars tienen un -alor concreto' "ue puede ser obtenido a tra-s
del mtodo getValue&
Entre las caracter#sticas programables de una barra de despla<amiento' tenemos las
siguientes.
D 7alor m#nimo /propiedad *inimum0
D 7alor m(=imo /propiedad *a=imum0
F d i Cdi Lib D i i
.alor m,4imo $9A@' U
.alor de la barra $9GA' UU
A UUU
D Incremento unitario /propiedad UnitIncrement0
D Incremento en blo"ue /propiedad BlocAIncrement0
D ,amaCo del recuadro de la barra /propiedad 7isible%mount0
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. B%RR% $E *ENU
Barras de *enEs
La barra de men>s nos permitir, acceder a las opciones m,s importantes del programa.
Todo programa de gran envergadura suele tener una barra de men>s.
Ejercicio guiado
9:. .eamos como a1adir una barra de men>s a nuestras aplicaciones. n primer lugar%
crea un proyecto con el 2etEeans.
9D. (1ade a tu ventana un objeto J?enuEar
9G. n la parte superior de tu ventana aparecer, esto/
9A. n el inspector $parte inferior i3#uierda' observar,s como aparece un objeto
J?enuEar% y% dentro de +l% un objeto del tipo J?enu. Los objetos J?enu representan
las opciones principales contenidas dentro de la barra de men>s.
"(. (provecha el 0nspector para cambiar el nombre al objeto J?enuEar. Ll,malo
barra1enus.
".. -ambia tambi+n el nombre al objeto J?enu. (s!gnale el nombre menuArchi,o. l
0nspector tendr, el siguiente aspecto/
F d i Cdi Lib D i i
"+. (hora% la >nica opcin de la barra de men>s muestra el te4to )?enu*. sto se puede
cambiar seleccion,ndola y cambiando su propiedad text. (s!gnale el te4to )(rchivo* a
la opcin del men>/
9K. (hora el aspecto de la barra de men>s ser, el siguiente/
:@. Puedes a1adir m,s opciones principales a la barra de men>s haciendo clic con el
derecho sobre el objeto de la barra de men>s y activando la opcin )(1adir J?enu*.
:9. (1ada dos opciones m,s a la barra de men>s. l inspector debe tener ahora el
siguiente aspecto/
F d i Cdi Lib D i i
::. ; la barra de men>s presentar, este otro aspecto/
:D. -ambia los nombres de las dos nuevas opciones. 0us nombres ser,n/ menudicion
y menuInsertar.
:G. -ambia los te4tos de ambas opciones. 0us te4tos ser,n/ )dicin* e )Insertar*.
:A. ;a tenemos creada la barra de men>s $J?enuEar' con sus opciones principales
$J?enu'. (hora se tendr,n #ue definir las opciones contenidas en cada opcin
principal. Por ejemplo% crearemos las opciones contenidas en el men> (rchivo.
:M. Ha3 clic con el botn derecho sobre el objeto menu(rchivo y activa la opcin )(1adir
H J?enuItem*.
F d i Cdi Lib D i i
Los J?enuItem son objetos #ue representan las opciones contenidas en los men>s
desplegables de la barra de men>s.
#.. (1ade un J?enuItem m,s al menu(rchivo y luego cambia el nombre a ambos. 0us
nombres ser,n menu0temAbrir y menu0tem9uardar. l aspecto del 0nspector ser, el
siguiente/
#+. "sa ahora la propiedad Text de ambos J?enuItem para asignarles un te4to. l
primero tendr, el te4to )(brir* y el segundo el te4to )Buardar*.
:K. ;a podemos ejecutar el programa para ver #ue es lo #ue se ha conseguido. "se el
men>/
5bserva como la opcin (rchivo se despliega mostrando dos submen>s/ (brir y
Buardar.
-,. 0eguiremos a1adiendo elementos al men>. (hora haga clic con el derecho sobre el
elemento menuArchi,o y a1ada un J0eparator.
F d i Cdi Lib D i i
Los J0eparator son objetos #ue definen una separacin entre las opciones de un men>.
-,mbiele el nombre y ll,melo )separador9*/
-". (1ada un nuevo J?enuItem al men> (rchivo y ponle el nombre menu0alir. l te4to
de esta opcin ser, )0alir* $use su propiedad text' l aspecto del 0nspector ser, el
siguiente/
D:. jecuta el programa y observa el contenido de la opcin (rchivo del men>/
5bserva el efecto #ue produce el separador.
DD. "n J?enu representa las opciones principales de la barra de men>s. ( su ve3% un
J?enu contiene J?enuItem% #ue son las opciones contenidas en cada opcin
principal% y #ue se ven cuando se despliega el men>.
F d i Cdi Lib D i i
0in embargo% un J?enu puede contener a otros J?enu% #ue a su ve3 contendr,n
varios J?enuItem. "sando el botn derecho del ratn y la opcin )(1adir*% a1ade un
J?enu dentro de menudicion/
-$. Llama al nuevo J?enu menuColores y asignale el te4to )-olores*.
-%. (hora a1ade dentro del menuColores tres J?enuItem llamados respectivamente/
menu0tem%o'o% menu0temVerde% menu0temA:ul. 0us te4tos ser,n )Cojo*% ).erde* y
)(3ul*.
F d i Cdi Lib D i i
DM. jecuta el programa y observa como ha #uedado el men> dicin/
La opcin dicin $J?enu' contiene una opcin -olores $J?enu' #ue a su ve3
contiene las opciones Cojo% .erde y (3ul $J?enuItems'
DN. 8e nada sirve crear un men> si luego este no reacciona a las pulsaciones del ratn.
-ada objeto del men> tiene un evento (ctionPerformed #ue permite programar lo #ue
debe suceder cuando se active dicha opcin del men>.
DI. ?ar#ue en el inspector el objeto menuItemCojo y acceda a su evento
(ctionPerformed. 8entro de +l programe este sencillo cdigo/
tGis.getContent8ane().setBackground(Color.R!);
ste cdigo cambia el color de fondo de la ventana a rojo.
DK. -ompruebe el funcionamiento de la opcin )Cojo* del men> ejecutando el programa.
G@. Programa tu mismo las opciones ).erde* y )(3ul*.
F d i Cdi Lib D i i
CONCLUI!N
Las barras de menEs son un conjunto de objetos de distinto tipo "ue se contienen
unos a los otros.
La barra en s# est( representada por un objeto del tipo J*enuBar&
La barra contiene opciones principales' representadas por objetos J*enu&
Las opciones principales contienen opciones "ue aparecen al desplegarse el menE&
Esta opciones son objetos del tipo J*enuItem&
Un J*enu tambin puede contener otros J*enu' "ue a su -e< contendr(n
J*enuItems&
,ambin puede aCadir separadores /Jeparator0 "ue permiten -isuali<ar mejor las
opciones dentro de un menE&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. B%RR% $E HERR%*IEN,%
Barras de )erramientas
"na barra de herramientas es b,sicamente un contenedor de botones y otros elementos
propios de la ventana.
( trav+s de estos botones se pueden activar de forma r,pida las opciones del programa% las
cuales suelen estar tambi+n incluidas dentro de la barra de men>s.
Ejercicio guiado
G9. .eamos como a1adir una barra de herramientas a nuestras aplicaciones. n primer
lugar% crea un proyecto con el 2etEeans.
G:. (1ade a tu ventana un objeto JmenuEar $una barra de men>s'
GD. n la parte superior de tu ventana aparecer, esto/
GG. 8ebajo de la barra de men>s colocaremos una barra de herramientas% as! #ue a1ade
un objeto del tipo JToolEar. Ha3 #ue la barra se colo#ue debajo de la barra de men>s
y #ue alcance desde la parte i3#uierda de la ventana a la parte derecha.
La ventana #uedar, as!/
F d i Cdi Lib D i i
GA. Las barras de herramientas son simples contenedoras de objetos. 8entro de ellas se
pueden colocar botones% combos% eti#uetas% etc.
2ormalmente% las barras de herramientas contienen botones. (s! #ue a1ade cuatro
botones $JEutton' dentro de la barra. 0olo tienes #ue colocarlos dentro de ella.
$(. Puedes ver si los botones est,n bien colocados observando el 0nspector/ 5bserva
como los botones colocados se encuentran dentro de la barra.
F d i Cdi Lib D i i
$.. (provecharemos el inspector para cambiar el nombre a la barra y a cada botn. ( la
barra la llamaremos barraHerramientas% y a los botones los llamaremos btn;no#
btn&os# btnTres y btnCuatro/
GI. -ambia el te4to de los botones. stos contendr,n el te4to/ )"no*% )8os*% )Tres* y
)-uatro*.
GK. jecuta el programa y observa el resultado.
%,. La forma de programar cada botn no var!a% aun#ue estos se encuentren dentro de
la barra herramientas. 0olo hay #ue seleccionar el botn y acceder a su evento
action4er-ormed.
%". 0olo como demostracin de esto >ltimo% entra en el action4er-ormed del primer botn
y programa esto/
&1ption8ane.sGo)9essage!ialog(null,E"cti<aste el $ot3n unoE);
Luego ejecuta el programa y comprueba el funcionamiento del botn.
F d i Cdi Lib D i i
%#. Los botones de la barra de herramientas normalmente no contienen te4to% sino #ue
contienen un icono #ue representa la funcin #ue reali3a. La forma de colocar un
icono dentro de un botn es a trav+s de su propiedad icon.
%-. ( trav+s de la propiedad icon de un botn podr, seleccionar un fichero de imagen
#ue contenga la imagen a mostrar en el botn.
%$. (ctiva la propiedad icon del primer botn. Luego elige la opcin "ichero y pulsa el
botn Seleccionar "ichero para buscar un fichero con imagen.
2ota/ Eusca un fichero de imagen #ue sea del tipo .gif o .jpg.
2ota/ Procura #ue la imagen sea pe#ue1a.
2ota/ 0e recomienda buscar im,genes .gif en Internet para practicar.
AA. "na ve3 colocadas las im,genes a los botones% se puede #uitar el te4to de estos. "n
ejemplo de cmo podr!a #uedar la barra de herramientas es este/
F d i Cdi Lib D i i
CONCLUI!N
Las barras de )erramientas son simplemente contenedores de objetos&
Normalmente botones&
Los elementos de la barra de )erramientas se manejan de la misma 1orma "ue si no
estu-ieran dentro de la barra&
Lo normal es )acer "ue los botones de la barra no tengan te=to 2 tengan iconos
asociados&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. *ENU E*ER6EN,E
El e-ento mouseClicAed
l evento mouse-licJed es capa3 de capturar un clic del ratn sobre un determinado
elemento de la ventana.
ste evento recibe como par,metro un objeto del tipo ?ousevent% y gracias a +l se puede
conseguir informacin como la siguiente/
9. Fu+ botn del ratn fue pulsado.
:. -uantas veces $clic% doble clic% etc'
D. n #u+ coordenadas fue pulsado el botn.
G. tc.
0e puede usar esta informacin para saber por ejemplo si se puls el botn derecho del
ratn% y sacar en este caso un men> conte4tual en pantalla.
n este ejercicio guiado se estudiar,n las posibilidades del evento mouse-licJed y se
aplicar,n a la creacin y visuali3acin de men>s conte4tuales $o emergentes'
Ejercicio guiado
AM. -rea un nuevo proyecto.
AN. 2o hace falta #ue a1ada nada a la ventana.
%+. Programaremos la pulsacin del ratn sobre el formulario% as! #ue haga clic sobre el
formulario y active el evento mouseClicked.
AK. 5bserve el cdigo del evento/
pri<ate <oid 6or#9ouseClicked(%a<a.a)t.e<ent.9ouse<ent e<t) >
22 T1!1 add 4our Gandling code GereF

?
ste evento recibe como par,metro un objeto llamado e,t del tipo ?ousevent $en
rojo en el cdigo' #ue nos permite saber en #u+ condiciones se hi3o clic.
M@. 8entro del evento programe lo siguiente/
i6 (e<t.getButton()==1) >
&1ption8ane.sGo)9essage!ialog(null,E8ulso el iH:uierdoE);
? else i6 (e<t.getButton()==2) >
&1ption8ane.sGo)9essage!ialog(null,E8ulso el centralE);
? else i6 (e<t.getButton()==;) >
&1ption8ane.sGo)9essage!ialog(null,E8ulso el derecGoE);
?
F d i Cdi Lib D i i
M9. jecuta el programa y ha3 clic sobre el formulario con el botn derecho% con el
i3#uierdo y con el central. 5bserva el resultado.
(#. (hora #ui3,s puedas comprender el cdigo anterior. n +l% se usa el m+todo
getButton del objeto e,t para saber #u+ botn se puls. l m+todo getButton
devuelve un entero #ue puede ser 9% : o D seg>n el botn pulsado.
(-. 0e puede aprovechar el m+todo getButton para controlar la pulsacin del botn
derecho del ratn y as! sacar un men> conte4tual. Pero antes% es necesario crear el
men>.
($. (grega a tu formulario un objeto del tipo 4opup1enu. stos objetos definen men>s
emergentes.
(%. Los objetos JPopup?enu no se muestran en el formulario% pero puedes verlo en el
0nspector dentro de la rama de 5tros Componentes/
((. (provecharemos el inspector para cambiar el nombre al men>. Ll,malo
menuEmergente.
MN. Los men>s emergentes se crean igual #ue las opciones de men>s normales%
a1adiendo con el botn derecho del ratn objetos J?enuItem.
(+. (1ada al men> emergente tres J?enuItem% y as!gneles los siguientes nombres a
cada uno/ menu%o'o# menuVerde# menuA:ul. l inspector deber6a tener el siguiente
aspecto(
(/. Tienes #ue cambiar la propiedad text de cada opcin del men>. Cecuerda #ue esta
propiedad define lo #ue aparece en el men>. (signar,s los siguientes te4tos/ )Cojo*%
).erde* y )(3ul*.
.,. l men> emergente ya est, construido. (hora tenemos #ue hacer #ue apare3ca
cuando el usuario pulse el botn derecho del ratn sobre el formulario. Para ello%
F d i Cdi Lib D i i
entraremos de nuevo en el evento mouseClicked del formulario y cambiaremos su
cdigo por el siguiente/
#enu#ergente.sGo)(tGis,e<t.getO(),e<t.getP());
N9. ste cdigo significa lo siguiente/
A. l m+todo shoQ le da la orden al menumergente para #ue se muestre.
M. l m+todo shoQ recibe tres elementos/ por un lado la ventana donde act>a $this'
.. Por otro lado la posicin 4 donde debe mostrarse el men>. sta posicin es a#uella
donde se puls el ratn% y se puede conseguir gracias al m+todo get< del objeto evt.
+. Por >ltimo se necesita la posicin y. sta posicin se puede conseguir gracias al
m+todo get= del objeto evt.
s decir% decidimos mostrar el men> emergente justo en las coordenadas donde se
hi3o clic.
N:. jecuta el programa y observa el resultado.
(l hacer clic con el derecho se mostrar, el men> conte4tual.
.-. Para hacer #ue al pulsarse una opcin suceda algo% solo hay #ue activar el m+todo
action4er-ormed del J?enuItem correspondiente. Por ejemplo% active el
action4er-ormed del menuCojo y dentro programe lo siguiente/
F d i Cdi Lib D i i
tGis.getContent8ane().setBackground(Color.R!);
NG. jecuta el programa y comprueba lo #ue sucede al pulsar la opcin Cojo del men>
conte4tual.
CONCLUI!N
Los menEs conte=tuales son objetos del tipo JPopup*enu& Estos objetos contienen
J*enuItem al igual "ue las opciones de menE normales&
Cuando se asigna un JPopup*enu a un 1ormulario' no aparece sobre la -entana'
pero s# en el inspector&
Para )acer "ue apare<ca el menE emergente' es necesario programar el e-ento
mouseClicked del objeto sobre el "ue "uiera "ue apare<ca el meE&
,endr( "ue usar el mtodo sho del menE emergente para mostrar dic)o menE&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. @ILECHOOER
Cuadros de di(logo %brir 2 6uardar
Las opciones (brir y Buardar son opciones muy comunes en las aplicaciones. stas
opciones permiten buscar en el ,rbol de carpetas del sistema un fichero en concreto y
abrirlo% o bien guardar una informacin dentro de un fichero en alguna carpeta.
Java proporciona una clase llamada JLile-hooser $elegir -ichero' #ue permite mostrar la
ventana t!pica de (brir o Buardar/
Ventana Abrir -ichero(
$La ventana de guardar es la misma% solo #ue muestra en su barra de t!tulo la palabra
9uardar'
l objeto JLile-hooser nos facilita la labor de elegir el fichero% pero no reali3a la apertura o la
accin de guardar la informacin en +l. sto tendr, #ue ser programado.
F d i Cdi Lib D i i
Ejercicio guiado
6 .amos a practicar con el JLile-hooser. Para ello% crea un nuevo proyecto.
6 (1ade en el proyecto los siguientes elementos/
o "na barra de men>s. Ll,mala barra1enus.
o 8entro de ella una opcin )(rchivo* llamada menuArchi,o.
o 8entro de la opcin )(rchivo*% introduce los siguientes elementos/
"na opcin )(brir*% llamada menuAbrir.
"n separador $ll,malo como #uieras'
"na opcin )0alir*% llamada menuSalir.
6 "na ve3 hecho esto tu formulario tendr, la siguiente forma/
6 0i ejecutas el programa el men> se ver, as!/
6 0i observas el 0nspector% tendr, un aspecto parecido al siguiente/
6 Para #ue al pulsar la opcin )(brir* de nuestro programa apare3ca el di,logo de
apertura de ficheros% es necesario a1adir a nuestro programa un objeto del tipo
JLile-hooser.
F d i Cdi Lib D i i
Los objetos JLile-hooser se a1adir,n el la 3ona de >5tros Componentes? del
inspector.
6 Ha3 clic con el derecho sobre la 3ona de )otros componentes* y activa la opcin
Agregar desde 4aleta @ SAing @ "ileChooser/
6 (parecer, entonces un objeto JLile-hooser dentro de 5tros Componentes.
(provecha para cambiarle el nombre a este objeto. 0u nombre ser, elegir"ichero.
l inspector #uedar, as!/
F d i Cdi Lib D i i
6 "na ve3 hecho esto% ya podemos programar la opcin (brir del men>. (ctiva el
evento action4er-ormed de la opcin )(brir* y programa dentro de +l lo siguiente/
int resp;

resp=elegir(icGero.sGo)1pen!ialog(tGis);

i6 (resp==&(ileCGooser."88R10J18T=1.) >
&1ption8ane.sGo)9essage!ialog(null,elegir(icGero.getSelected(ile(
).toString());
? else i6 (resp==&(ileCGooser.C".C'J18T=1.) >
&1ption8ane.sGo)9essage!ialog(null,ESe puls3 la opci3n CancelarE);
?
6 jecuta el cdigo y prueba la opcin )(brir* del men>. Prueba a elegir alg>n fichero y
abrirlo. Prueba a cancelar la ventana de apertura. tc
6 (nalicemos el cdigo anterior/
int resp;

resp=elegir(icGero.sGo)1pen!ialog(tGis);
.%. stas dos l!neas crean una variable entera resp $respuesta' y a continuacin hacen
#ue se muestre la ventana )(brir Lichero*. 5bserva #ue para conseguirlo hay #ue
usar el m+todo shoA5pen&ialog del objeto elegirLichero. ste m+todo lleva como
par,metro la ventana actual $this'
NM. l m+todo shoQ5pen8ialog no solo muestra la ventana )(brir Lichero* sino #ue
tambi+n devuelve un valor entero seg>n el botn pulsado por el usuario en esta
ventana. sto es/ botn )(brir* o botn )-alcelar*.
NN. 0e pueden usar dos if para controlar lo #ue sucede si el usuario puls el botn )(brir*
o el botn )-alcelar* de la ventana )(brir Lichero*/
i6 (resp==&(ileCGooser."88R10J18T=1.) >
&1ption8ane.sGo)9essage!ialog(null,elegir(icGero.getSelected(ile(
).toString());
? else i6 (resp==&(ileCGooser.C".C'J18T=1.) >
&1ption8ane.sGo)9essage!ialog(null,ESe puls3 la opci3n CancelarE);
?
.+. n el primer if se compara la variable resp con la constante
"ileChooser2A44%5VE754T058% para saber si el usuario puls )(brir*.
./. n el segundo if se compara la variable resp con la constante
"ileChooser2CA8CE!754T058% para saber si el usuario puls )-alcelar*.
F d i Cdi Lib D i i
+,. n el caso de #ue el usuario pulsara )(brir*% el programa usa el m+todo
getSelected"ile del objeto elegir"ichero para recoger el camino del fichero elegido.
ste camino debe ser convertido a cadena con el m+todo toString.
I9. l programa aprovecha esto para mostrar dicho camino en pantalla gracias al t!pico
J5ptionPane.
I:. n el caso del #ue el usuario pulsara el botn )-ancelar* el programa muestra un
mensaje indic,ndolo.
6 Hay #ue volver a dejar claro #ue el cuadro de di,logo )(brir* realmente no abre
ning>n fichero% sino #ue devuelve el camino del fichero elegido usando el cdigo/
elegir(icGero.getSelected(ile().toString()
Luego #ueda en manos del programador el trabajar con el fichero correspondiente de
la forma #ue desee.
CONCLUI!N
Los objetos J@ileC)ooser permiten mostrar el cuadro de di(logo F%brir @ic)eroG o
F6uardar @ic)eroG&
Estos objetos no abren ni guardan 1ic)eros' solo permiten al usuario elegir el 1ic)ero
a abrir o guardar de 1orma sencilla&
El J@ileC)ooser de-uel-e el camino del 1ic)ero elegido' 2 luego el programador
trabajar( con dic)o 1ic)ero como mejor le interese&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. P%NELE $E $EPL%I%*IEN,O
Paneles de $espla<amiento
Llamaremos paneles de despla3amiento a paneles #ue contienen elementos tan grandes
#ue no pueden ser mostrados en su totalidad. stos paneles contienen entonces dos barras
de despla3amiento #ue permiten visuali3ar el interior del panel de despla3amiento
correctamente.
Por ejemplo% un panel de despla3amiento podr!a contener una imagen tan grande #ue no se
viera entera/
Los paneles de despla3amiento son objetos del tipo J0crollPane.
Ejercicio guiado 9
6 .amos a practicar con los J0crollPane. Para ello% crea un nuevo proyecto.
6 (1ade en el proyecto un J0crollPane.
6 "n J0crollPane% por s! mismo% no contiene nada. s necesario a1adir dentro de +l el
objeto #ue contendr,. Para nuestro ejemplo a1adiremos dentro de +l una eti#ueta
$JLabel'
6 l formulario debe tener ahora este aspecto/
6 0i observas el 0nspector ver,s claramente la distribucin de los objetos/
F d i Cdi Lib D i i
5bserva como tienes un J0crollPane #ue contiene una eti#ueta.
6 (provechemos el 0nspector para cambiar el nombre a cada objeto. (l J0crollPane le
llamaremos scp0magen y a la eti#ueta eti0magen.
6 limina el te4to contenido en la eti#ueta eti0magen. 0olo tienes #ue borrar el
contenido de la propiedad text.
6 Luego introduciremos una imagen dentro de la eti#ueta% a trav+s de la propiedad
icon. La imagen la introduciremos desde fichero% y elegiremos la siguiente imagen de
tu disco duro/
?is 8ocumentos 7 ?is Im,genes 7 Im,genes de ?uestra 7 2en>fares.jpg
6 sta imagen es tan grande #ue no se podr, ver entera dentro del panel de
despla3amiento. jecuta el programa y observar,s el uso de las barras de
despla3amiento dentro del panel.
F d i Cdi Lib D i i
6 Puedes mejorar el programa si agrandas el panel de despla3amiento de forma #ue
ocupe todo el formulario/
8e esta forma% cuando ejecutes el programa% al agrandar la ventana% se agrandar, el
panel de despla3amiento% vi+ndose mejor la imagen contenida.
6 jecuta el programa y compru+balo.
Ejercicio guiado 2
Los J0crollPane no solo est,n dise1ados para contener im,genes. Pueden contener
cual#uier otro elemento. .amos a ver% con otro proyecto de ejemplo% otro uso de los
J0crollPane.
9. -rea un nuevo proyecto.
:. (1ade a la ventana una eti#ueta con el te4to )jemplo : de J0crollPane* y un
J0crollPane de forma #ue est+ asociado a los l!mites de la ventana. 5bserva la
imagen/
F d i Cdi Lib D i i
-. (hora a1ade dentro del J0crollPane un panel normal $JPanel'. n la ventana no
notar,s ninguna diferencia% pero en el 0nspector deber!a aparecer esto/
G. -omo ves% el J0crollPane contiene a un objeto JPanel.
%. (provechemos para cambiar el nombre a ambos objetos. (l J0crollPane lo
llamaremos scp&atos y al JPanel lo llamaremos panel&atos.
M. Los JPanel son objetos contenedores. s decir% pueden contener otros objetos como
por ejemplo botones% eti#uetas% cuadros de te4to% etc.
(dem,s% los JPanel pueden ser dise1ados independientemente de la ventana. Ha3
doble clic sobre el panel&atos en el 0nspector y observa lo #ue ocurre/
N. n la pantalla aparecer, >nicamente el JPanel% para #ue puede ser dise1ado aparte
de la ventana completa/
F d i Cdi Lib D i i
I. Para distinguirlo de lo #ue es en s! la ventana% haremos las siguientes cosas con el
panel/
9:D. -ambia el color de fondo y as!gnale un color verde.
9:G. (1ade en +l una eti#ueta con el te4to )Panel de 8atos*.
9:A. (1ade varias eti#uetas y cuadros de te4tos correspondientes a los d!as de la
semana.
9:M. (granda el panel.
l panel deber!a #uedar as!. Toma como referencia esta imagen/
F d i Cdi Lib D i i
s muy interesante #ue observes el 0nspector. n +l podr,s observar la distribucin
de los objetos en la ventana. Podr,s ver como el JLrame contiene un J0crollPane
$scp8atos' #ue a su ve3 contiene un JPanel $panel8atos' #ue a su ve3 contiene una
serie de eti#uetas y cuadros de te4tos a los #ue a>n no les hemos asignado un
nombre/
F d i Cdi Lib D i i
/. Ha3 doble clic sobre el JLrame $en el 0nspector' para poder ver globalmente la
ventana. n la pantalla deber!a aparecer esto/
-omo ves% el JPanel contenido en el J0crollPane es m,s grande #ue +l% por lo #ue no
se podr, visuali3ar completamente. 0er, necesario usar las barras de
despla3amiento del J0crollPane.
9@. jecuta el programa para entender esto >ltimo.
F d i Cdi Lib D i i
CONCLUI!N
Los objetos JcrollPane son paneles de despla<amiento& Estos paneles pueden
contener objetos ma2ores "ue el propio panel de despla<amiento& Cuando esto
sucede' el panel muestra barras de despla<amiento para poder -isuali<ar todo el
contenido del panel&
Los JcrollPane son ideales para mostrar im(genes' paneles 2 otros elementos cu2o
tamaCo pueda ser ma2or "ue la propia -entana&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. 7%RI%BLE 6LOB%LE
7ariables 6lobales J Propiedades de la Clase
Las propiedades de la clase en java es el e#uivalente a las variables globales en lenguajes
estructurados como el -.
"na propiedad es una variable #ue puede ser accedida desde cual#uier evento programado.
sta variable se iniciali3a a un valor cuando se ejecuta el programa y los distintos eventos
pueden ir cambiando su valor seg>n se necesite.
.eamos un ejemplo para entender el funcionamiento de las propiedades de la clase 7
variables globales.
Ejercicio guiado 9
6 -rea un nuevo proyecto llamado 4royecto4arking. 8entro de +l a1ade un pa#uete
llamado pa)uete4arking2 ; finalmente a1ade un JLrame llamado 4arking. l aspecto
de tu proyecto ser, el siguiente/
6 Tu clase principal es la clase 4arking.
6 0e pretende hacer un pe#ue1o programa #ue controle los coches #ue van entrando y
van saliendo de un parJing. n todo momento el programa debe decir cuantos
coches hay dentro del parJing. Para ello debes crear una ventana como la #ue sigue/
F d i Cdi Lib D i i
-lase Principal
6 sta ventana contiene lo siguiente/
"n botn )ntr un coche* llamado btnntro.
"n botn )0ali un coche* llamado btn0alio.
"n botn )Ceiniciar* llamado btnCeiniciar.
"na eti#ueta con el te4to )-oches en el ParJing*.
"na eti#ueta con borde llamada eti-oches #ue contenga un )@*.
6 0e pretende #ue el programa funcione de la siguiente forma/
o -uando el usuario pulse el botn )ntr un coche*% el n>mero de coches del
parJing aumenta en 9% mostr,ndose en la eti#ueta eti-oches.
o 0i el usuario pulsa el botn )0ali un coche*% el n>mero de coches del parJing
disminuye en 9% mostr,ndose en la eti#ueta eti-oches.
o l botn Ceiniciar coloca el n>mero de coches del parJing a @.
6 Para poder controlar el n>mero de coches en el ParJing% es necesario #ue nuestra
clase principal 4arking tenga una propiedad $variable global' a la #ue llamaremos
coches. sta variable ser, entera $int'.
sta variable contendr, en todo momento los coches #ue hay actualmente en el
4arking. sta variable podr, ser usada desde cual#uier evento.
6 Para crear una variable global ha3 clic en el botn )5rigen* para acceder al cdigo/
6 Luego busca% al comien3o del cdigo una l!nea #ue comen3ar, por
pu$lic class
F d i Cdi Lib D i i
0eguida del nombre de tu clase principal )4arking?.
8ebajo de dicha l!nea es donde se programar,n las propiedades de la clase $las
variables globales'
6 n dicho lugar declarar,s la variable coches de tipo int/
6 -uando el programa arran#ue% ser, necesario #ue la variable global coches tenga un
valor inicial. 5 dicho de otra forma% ser, necesario iniciali3ar la variable. Para
iniciali3ar la variable iremos al constructor. (1ade lo siguiente al cdigo/
F d i Cdi Lib D i i
(#u! se declaran las variables
globales% tambi+n llamadas
propiedades de la clase.
Iniciali3acin de la propiedad
coches.
8eclaracin de una variable
global int llamada coches.
Iniciali3amos a cero ya #ue se supone #ue cuando arranca el programa no hay
ning>n coche dentro del parJing.
6 (hora #ue ya tenemos declarada e iniciali3ada la variable global coches% esta puede
ser usada sin problemas desde cual#uier evento #ue programemos.
Por ejemplo% empe3aremos programando la pulsacin del botn )ntr un coche*.
(cceda a su evento action4er-ormed y programe esto/
cocGes=cocGesD1;
etiCocGes.setText(*,DcocGes);
-omo ves% se le a1ade a la variable coches uno m,s y luego se coloca su valor
actual en la eti#ueta.
6 jecuta el programa y prueba este botn varias veces.
6 (hora programaremos el botn )0ali un coche* de la siguiente forma/
i6 (cocGesQ0) >
cocGes=cocGesI1;
etiCocGes.setText(*,DcocGes);
?
-omo ves% se accede igualmente a la propiedad coches pero esta ve3 para restarle
una unidad. Luego se muestra el valor actual de coches en la eti#ueta
correspondiente.
F d i Cdi Lib D i i
Pulsas% y aparece a#u! el valor de
la propiedad coches.
0e usa un if para controlar #ue no pueda restarse un coche cuando el parJing est+
vac!o. $0i hay cero coches en el parJing no se puede restar uno'
6 jecuta el programa y prueba los dos botones. 5bserva como la cantidad de coches
del parJing aumenta o disminuye.
Lo realmente interesante de esto es #ue desde dos eventos distintos $desde dos
botones' se puede usar la variable coches. sto es as! gracias a #ue ha sido creada
como variable global% o dicho de otro modo% ha sido creada como propiedad de la clase
4arking.
6 Linalmente se programar, el botn %einiciar. ste botn% al ser pulsado% debe
colocar la propiedad coches a cero. Programa dentro de su action4er-ormed lo
siguiente/
cocGes=0;
etiCocGes.setText(*0,);
0implemente introdu3co el valor cero en la variable global y actuali3o la eti#ueta.
6 jecuta el programa y comprueba el funcionamiento de este botn.
F d i Cdi Lib D i i
(l pulsar a#u! aumentas en uno la
propiedad coches.
(l pulsar a#u! disminuyes en uno
la propiedad coches.
CONCLUI!N
Las -ariables globales' tambin llamadas propiedades de la clase' son -ariables "ue
pueden ser usadas desde cual"uier e-ento del programa& Estas -ariables mantienen
su -alor )asta "ue otro e-ento lo modi1i"ue&
Las -ariables globales se declaran justo despus de la l#nea public class&
La iniciali<acin de estas -ariables se reali<a en el constructor&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. CEN,R%LII%R C!$I6O
El problema de la repeticin de cdigo
s muy habitual en Java #ue varios eventos tengan #ue ejecutar el mismo cdigo. n este
caso se plantea la necesidad de )copiar y pegar* ese cdigo en los distintos eventos a
programar/
sta es una mala forma de programacin% ya #ue se necesitara modificar el cdigo% ser!a
necesario reali3ar la modificacin en cada copia del cdigo. s muy f,cil #ue haya olvidos y
apare3can errores en el programa #ue luego son muy dif!ciles de locali3ar.
Lo mejor es #ue el cdigo #ue tenga #ue ser ejecutado desde distintos eventos apare3ca
solo una ve3% y sea llamado desde cada evento/
.eamos algunos ejemplos en los #ue el cdigo se puede repetir y como evitar esta
repeticin.
Ejercicio guiado 9
6 -rea un nuevo proyecto en java #ue se llame 4royectoCalculos. ste proyecto tendr,
un pa#uete llamado 4a)ueteCalculos. ; dentro de +l crear, un JLrame llamado
VentanaCalculos. l proyecto tendr, el siguiente aspecto/
F d i Cdi Lib D i i
vento 9
vento :
vento D
-digo (
-digo (
-digo (
vento 9
vento :
vento D
-digo (
6 La VentanaCalculos debe estar dise1ada de la siguiente forma/
sta ventana contiene los siguientes elementos/
0 "na barra de men>s a la #ue puede llamar menuBarra.
0 La barra de men>s contiene un J?enu con el te4to )-alcular* y #ue se puede llamar
menuCalcular
0 l menuCalcular contendr, tres J?enuItem% llamados respectivamente/ menuSumar#
menu%estar# menuBorrar y con los te4tos >Sumar?# >%estar? y >Borrar?.
0 "na eti#ueta con el te4to )2>mero 9*. $no importa su nombre'
0 "na eti#ueta con el te4to )2>mero :*. $no importa su nombre'
0 "n cuadro de te4to con un @ y con el nombre txt8umeroB.
0 "n cuadro de te4to con un @ y con el nombre txt8umeroC.
0 "na eti#ueta con el nombre eti%esultado.
0 "n botn )0umar* con el nombre btnSumar.
0 "n botn )Cestar* con el nombre btn%estar.
0 "n botn )Eorrar* con el nombre btnBorrar.
6 (#u! puedes ver la ventana en ejecucin con el men> )-alcular* desplegado/
F d i Cdi Lib D i i
6 l objetivo de programa es el siguiente/
o l usuario introducir, dos n>meros en los cuadros de te4to.
o 0i pulsa el botn 0umar% se calcular, la suma.
o 0i pulsa el botn Cestar% se calcular, la resta.
o 0i pulsa el botn Eorrar% se borrar,n ambos cuadros de te4to.
o 0i elige la opcin del men> -alcular60umar entonces se calcular, la suma.
o 0i elige la opcin del men> -alcular6Cestar entonces se calcular, la resta.
o 0i elige la opcin del men> -alcular6Eorrar entonces se borrar,n ambos
cuadros de te4to.
o 0i se pulsa enter en alguno de los dos cuadros de te4to se deber!a calcular la
suma.
6 ste es un ejemplo en el #ue al activarse uno de varios eventos distintos se tiene #ue
ejecutar el mismo cdigo. 5bserva el caso de la suma/
F d i Cdi Lib D i i
Pulsar Eotn 0umar
(ctivar -alcular H 0umar en el men>
Pulsar enter en el primer cuadro de te4to
-alcular la suma y
mostrarla en la eti#ueta
de resultado
Pulsar enter en el segundo cuadro de te4to
6 Para #ue el cdigo est+ )centrali3ado*% es decir% #ue apare3ca solo una ve3% ser,
necesario construir en la clase un mtodo. "n mtodo en java es el e#uivalente de
una funcin o procedimiento en -. .eamos como hacerlo/
6 (ccede al cdigo de tu programa a trav+s del botn 5rigen.
6 "n buen sitio para programar tus procedimientos puede ser debajo del constructor.
Puedes distinguir f,cilmente al constructor por#ue tiene el mismo nombre #ue la
clase #ue est,s programando% o dicho de otro modo% tiene el mismo nombre #ue la
ventana #ue est,s programando/ VentanaCalculos.
6 0e va a programar un procedimiento #ue se encargue de recoger los valores de los
cuadros de te4to. -alcular, la suma de dichos valores% y luego mostrar, la suma en
la eti#ueta de resultados.
Los procedimientos en java tienen pr,cticamente la misma estructura #ue en -.
Programe lo siguiente/
F d i Cdi Lib D i i
ste es el constructor
ste es un buen sitio para crear
tus propios procedimientos
6 0i observas el cdigo% es el t!pico procedimiento de -% cuya cabecera comien3a con
,oid y el nombre #ue le hayas asignado $en nuestro caso Sumar'
<oid Su#ar() >
....
?
0i estudias las l!neas del cdigo% ver,s #ue lo #ue hace es recoger el contenido de
los dos cuadros de te4to en dos variables de cadena llamadas cadB y cadC.
Luego convierte dichas cadenas en n>meros #ue almacena en dos variables enteras
llamadas a y b.
Linalmente calcula la suma en una variable s y presenta el resultado en la eti#ueta
etiCesultado.
6 Hay #ue destacar #ue este cdigo no pertenece ahora mismo a ning>n evento en
concreto% por lo #ue no tiene efecto ninguno sobre el programa. 0er, necesario pues
asociar los eventos correspondientes con este procedimiento.
6 Interesa #ue al pulsar el botn )0umar* se ejecute la suma% as! pues entre en el
evento action4er-ormed del botn )0umar* y a1ada la siguiente l!nea/
Su#ar();
6 -omo tambi+n interesa #ue al pulsar la opcin del men> )-alcular60umar* se ejecute
la suma% entre en el evento action4er-ormed de la opcin del men> )0umar* y a1ade
de nuevo la siguiente l!nea/
F d i Cdi Lib D i i
ste es el procedimiento
#ue tienes #ue introducir en
el programa.
Su#ar();
6 Tambi+n se #uiere #ue al pulsar la tecla enter en el cuadro de te4to del n>mero 9 se
ejecute la suma. Por lo tanto% en el evento action4er-ormed del cuadro de te4to
t4t2umero9 hay #ue a1adir la siguiente l!nea/
Su#ar();
6 ; como tambi+n se #uiere #ue al pulsar la tecla enter en el cuadro de te4to del
n>mero : se ejecute la suma% tambi+n habr, #ue introducir en su action4er-ormed la
siguiente l!nea/
Su#ar();
6 (ntes de continuar% ejecute el programa% introdu3ca dos n>meros% y compruebe como
se calcula la suma al pulsar el botn 0umar% o al activar la opcin del men> -alcularH
0umar% o al pulsar nter en el primer cuadro de te4to% o al pulsar nter en el segundo
cuadro de te4to.
n cada uno de los eventos hay una llamada al procedimiento Sumar% #ue es el #ue
se encarga de reali3ar la suma.
6 n el caso de la resta sucede igual. Tenemos #ue varios eventos distintos deben
provocar #ue se realice una misma operacin. n este caso tenemos lo siguiente/
6 Para centrali3ar el cdigo% crearemos un m+todo %estar #ue se encargar, de hacer la
resta de los n>meros introducidos en los cuadros de te4to. ste m+todo se puede
colocar debajo del anterior m+todo Sumar/
F d i Cdi Lib D i i
action4er-ormed btn0umar
action4er-ormed menu0umar
action4er-ormed t4t2umero9
Procedimiento
0umar$'
action4er-ormed t4t2umero:
Pulsar Eotn Cestar
(ctivar -alcular H Cestar en el men>
-alcular la resta y
mostrar el resultado.
6 l cdigo de este procedimiento es pr,cticamente id+ntico al del procedimiento
0umar% as! #ue no se comentar,.
6 (hora% es necesario #ue cuando se activen los eventos indicados antes% estos hagan
una llamada al procedimiento Cestar para #ue se efect>e la resta. (s! pues% entre en
el evento action4er-ormed del botn )Cestar* y a1ada esta l!nea de cdigo/
Restar();
6 Igualmente% entre en el evento action4er-ormed de la opcin del men> )-alcular H
Cestar* y a1ada la misma llamada/
Restar();
6 jecute el programa y compruebe como funciona el c,lculo de la resta% da igual #ue
lo haga pulsando el botn )Cestar* o la opcin del men> )Cestar*. (mbos eventos
llaman al mismo m+todo/
F d i Cdi Lib D i i
Programa este
procedimiento.
action4er-ormed btnCestar
action4er-ormed menuCestar
Procedimiento
Cestar$'
6 Linalmente se programar, el borrado de los cuadros de te4to a trav+s del botn
)Eorrar* y de la opcin del men> )Eorrar*. n primer lugar% programa el siguiente
m+todo $puedes hacerlo debajo del m+todo )Cestar*'/
6 (hora programa las llamadas al procedimiento borrar desde los distintos eventos. n
el evento action4er-ormed del botn )Eorrar* y en el evento action4er-ormed de la
opcin del men> )Eorrar* programa la siguiente llamada/
Borrar();
6 jecuta el programa y prueba su funcionamiento.
CONCLUI!N
En ja-a se pueden programar procedimientos al igual "ue en C& Normalmente' estos
procedimientos se programar(n debajo del constructor' 2 tienen la misma estructura
"ue en C&
e puede llamar a un mismo procedimiento desde distintos e-entos' e-itando as# la
repeticin de cdigo&
F d i Cdi Lib D i i
Programa el
procedimiento Eorrar...
EJERCICIO 6UI%$O& J%7%. L%KOU,
El problema de la distribucin de elementos en las -entanas
"no de los problemas #ue m,s #uebraderos de cabe3a da al programador es el dise1o de
las ventanas y la situacin de los distintos componentes en ellas.
Para dise1ar m,s cmodamente las ventanas% Java proporciona una serie de objetos
denominados Layouts% #ue definen la forma #ue tendr,n los elementos de situarse en las
ventanas.
(s! pues% un Layout define de #u+ forma se colocar,n las eti#uetas% botones% cuadros de
te4tos y dem,s componentes en la ventana #ue dise1amos.
Ejercicio guiado
F$iseCo LibreG
6 -rea un nuevo proyecto en java.
6 (1ade una eti#ueta y un botn. ?u+velos a la posicin #ue se indica en la imagen.
8eben aparecer las l!neas )gu!a* de color a3ul #ue se muestran/
6 Las l!neas a3ules #ue aparecen indican con #u+ otro elemento est, relacionado un
componente de la ventana. La situacin de un elemento depender, siempre de la
situacin del otro.
8icho de otra forma% las l!neas a3ules indican las distancias #ue siempre se
respetar,n. 5bserva la siguiente imagen/
F d i Cdi Lib D i i
6 jecuta el programa y prueba a ensanchar $o achicar' la ventana por el lado derecho
y por el lado inferior. 8ebes observar como la eti#ueta y el botn mantienen sus
distancias relativas entre s! y con los bordes derecho e inferior de la ventana.
6 ste comportamiento de los elementos en la ventana viene dado por una opcin del
2etEeans llamada &ise3o !ibre $Lree 8esign'
l 8ise1o Libre permite #ue los elementos de una ventana mantengan una
distribucin relativa da igual el tama1o #ue tenga la ventana. 8icho de otra forma% los
elementos se redistribuyen al cambiar el tama1o de la ventana.
l problema del 8ise1o Libre es el poco control #ue se tiene sobre los elementos #ue
se a1aden a la ventana.
0e puede observar como a veces los elementos no se colocan en la posicin #ue
deseamos o como cambian de tama1o de forma inesperada. Todo esto es debido a
la necesidad de dichos elementos de mantener unas distancias relativas con otros
F d i Cdi Lib D i i
Tanto el botn como la
eti#ueta estar,n siempre
a esta distancia del borde
derecho de la ventana&
l botn siempre estar, a
esta distancia de la
eti#ueta&
l botn siempre estar, a
esta distancia del borde
inferior de la ventana&
0iempre se mantienen las
distancias relativas
definidas en el dise1o
aun#ue el tama1o de la
ventana cambie.
elementos de la ventana. -uantos m,s elementos tengamos en una ventana% m,s
dif!cil ser, el colocarlos usando el 8ise1o Libre.
F%boluteLa2out& Posiciones %bsolutasG
6 l 8ise1o Libre es la opcin #ue est, activada por defecto cuando se crea un
proyecto en 2etEeans. 0in embargo% esta opcin se puede cambiar por distintos
)Layouts* o )8istribuciones*.
6 n el 0nspector de tu proyecto pulsa el botn derecho del ratn sobre el objeto
JLrame y activa la opcin Establecer &isposici.n @ Absolute!ayout.
6 l 0nspector tendr, la siguiente forma ahora/
-omo ves% aparece un objeto dentro del JLrame llamado (bsoluteLayout. ste objeto
define otra forma de situar los elementos en la ventana. -oncretamente% la
distribucin (bsoluteLayout permite al programador colocar cada elemento donde +l
#uiera% sin restricciones% sin tener en cuenta distancias relativas.
F d i Cdi Lib D i i
6 0it>a la eti#ueta y el botn donde #uieras. 5bserva #ue no aparece ninguna l!nea
gu!a #ue defina distancias relativas/
6 La ventana de definir una distribucin (bsoluteLayout es la facilidad para colocar
cada elemento en la ventana $no tendr,s los problemas del 8ise1o Libre'. 0in
embargo% la desventaja es #ue los elementos no mantienen una distribucin relativa
respecto al tama1o de la ventana.
6 jecuta el programa y reduce su ancho. 5bserva lo #ue ocurre/
.er,s #ue los elementos de la ventana son inamovibles aun#ue la ventana cambie
de tama1o. n cambio% en el 8ise1o Libre los elementos intentaban siempre estar
dentro de la ventana.
F$istribucin en l#nea& @lo5La2outG
F d i Cdi Lib D i i
6 Practi#uemos ahora con otro tipo de distribucin. (ccede al 0nspector y pulsa el botn
derecho del ratn sobre el objeto JLrame. (ctiva la opcin Establecer &isposici.n @
"loA!ayout2
6 5bserva como el layout )(bsoluteLayout* es sustituido por la distribucin
)LloQLayout*. "na elemento solo puede tener un tipo de distribucin a la ve3.
6 5bserva la ventana. Los elementos se han colocado uno detr,s de otro. 0e han
colocado )en l!nea*. sto es lo #ue hace el )LloQLayout*. Luer3a a los distintos
elementos a #ue se colo#uen en fila.
6 0i seleccionas el LloQLayout en el 0nspector% podr,s acceder a sus propiedades $los
layout son objetos como los dem,s' "na de las propiedades del LloQLayout se llama
F d i Cdi Lib D i i
alineaci.n y permite #ue los elementos est+n alineados a la i3#uierda% derecha o
centro. l LloQLayout tiene una alineacin centro por defecto.
6 l LloQLayout no permite controlar la posicin de los elementos en la ventana% pero
s! procura #ue los elementos est+n siempre visibles aun#ue la ventana se cambie de
tama1o. jecuta el programa y observa el comportamiento del LloQLayout al
agrandar o achicar la ventana/
F$istribucin en rejilla& 6ridLa2outG
6 5tra distribucin #ue se puede usar es la distribucin BridLayout. sta distribucin
coloca a los elementos en filas y columnas% como si formaran parte de una tabla. (l
a1adir esta distribucin es necesario indicar cuantas filas y columnas tendr, la rejilla.
6 -ambia el layout del JLrame por un BridLayout/
F d i Cdi Lib D i i
n el LloQLayout% los elementos
intentan siempre estar dentro de
la ventana% aun#ue esta se
cambie de tama1o&
6 ?arca el BridLayout y cambia sus propiedades Lilas y -olumnas. (signa a la
propiedad Lilas un : y a la propiedad -olumnas un D.

6 (l asignar : filas y D columnas al BridLayout% conseguiremos #ue los elementos de la
ventana se distribuyan en una tabla como la siguiente/
Los distintos elementos se adaptar,n al espacio #ue tienen asignado% y cambiar,n de
tama1o.
F d i Cdi Lib D i i
6 ;a #ue solo tienes dos elementos en la ventana $una eti#ueta y un botn'% a1ade
otros cuatro elementos m,s $cuatro botones' para observar como se distribuyen en la
cuadr!cula.
6 n un BridLayout% los elementos estar,n situados siempre en una casilla de la rejilla%
ocupando todo su espacio. l programador no tiene mucho control sobre la
disposicin de los elementos.
6 jecuta el programa y agranda y achica la ventana. 5bserva como los elementos
siempre mantienen su disposicin en rejilla y siempre aparecen dentro de la ventana
aun#ue el tama1o de esta var!e.
FBorderLa2outG
6 5tra de las distribuciones posibles es la llamada EorderLayout. sta distribucin
coloca los elementos de la ventana en cinco 3onas/
Vona norte $parte superior de la ventana'
Vona sur $parte inferior de la ventana'
Vona este $parte derecha de la ventana'
F d i Cdi Lib D i i
-on un BridLayout los
elementos aparecen en
filas y columnas.
0iempre aparecen dentro
de la ventana aun#ue el
tama1o de esta cambie.
Vona oeste $parte i3#uierda de la ventana'
Vona centro.
6 Ha3 clic con el derecho sobre el JLrame y asigna una distribucin )EorderLayout*.
6 Para poder entender el funcionamiento del EorderLayout% se recomienda #ue el
JLrame contenga >nicamente A botones $elimine los elementos #ue tiene ahora y
a1ada cinco botones'
La ventana tendr, un aspecto parecido al siguiente/
F d i Cdi Lib D i i
6 -omo se puede observar% cada botn se ha colocado en una 3ona% y su tama1o ha
variado hasta ocupar la 3ona entera. Tenemos un botn en el norte% otro al sur% uno
al este% otro al oeste y uno en el centro.
l programador no tiene mucho control sobre la disposicin de los elementos en la
ventana al usar esta distribucin.
6 jecuta el programa y observa como los elementos siempre se mantienen dentro de
la ventana aun#ue esta cambie de tama1o.
F d i Cdi Lib D i i
-on un BridLayout los
elementos aparecen
3onas.
0iempre aparecen dentro
de la ventana aun#ue el
tama1o de esta cambie.
CONCLUI!N
El diseCo de la -entana -iene de1inido por los La2outs o distribuciones&
$iseCo Libre L Esta distribucin -iene acti-ada por de1ecto en el NetBeans' 2 de1ine
una distribucin de componentes en la "ue se respetan las distancias entre ellos
cuando la -entana cambia de tamaCo&
%bsoluteLa2out L En esta distribucin el programador puede colocar cada elemento
en la posicin "ue desee de la -entana& Los distintos elementos mantienen su
posicin aun"ue la -entana cambie de tamaCo' lo "ue puede )acer "ue si la -entana
se reduce de tamaCo algunos elementos no se -ean&
@lo5La2out L En esta distribucin los elementos se colocan uno detr(s de otro& Los
elementos intentar(n estar dentro de la -entana aun"ue esta se redu<ca de tamaCo&
6ridLa2out L Esta distribucin coloca a los elementos en 1ilas 2 columnas& Los
elementos siempre estar(n dentro de la -entana aun"ue esta se redu<ca de tamaCo&
BorderLa2out L Esta distribucin coloca a los elementos en <onas& Los elementos
siempre estar(n dentro de la -entana aun"ue esta se redu<ca de tamaCo&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. L%KOU, K P%NELE
,cnicas de distribucin de elementos en las -entanas
( la hora de dise1ar una ventana se tienen en cuenta dos cosas/
6 La facilidad a la hora de colocar muchos componentes en la ventana.
6 Fue dichos componentes est+n siempre visibles independientemente del tama1o de
la ventana.
La distribucin (bsoluteLayout por ejemplo nos da mucha facilidad a la hora de colocar los
elementos en la ventana% pero sin embargo los componentes no se adaptan a los cambios
de tama1o.
l 8ise1o Libre en cambio permite crear ventanas en las #ue sus componentes se
)recolocan* seg>n el tama1o de estas pero a cambio crece la dificultad del dise1o.
Para aprovechar las ventajas de los distintos layouts y minimi3ar sus inconvenientes% es
habitual en java crear una estructura de paneles cada uno de ellos con un layout distinto%
seg>n nuestras necesidades.
2ormalmente% al JLrame se le asigna un layout #ue lo divida en 3onas% como puede ser el
EorderLayout o el BridLayout. Luego% dentro de cada una de estas 3onas se introduce un
panel $objeto JPanel'. ; a cada uno de estos paneles se le asigna el layout #ue m,s le
convenga al programador $LloQLayout% 8ise1o Libre% (bsoluteLayout% etc&' Linalmente%
dentro de cada panel se a1aden los componentes de la ventana.
F d i Cdi Lib D i i
J@rame
$EorderLayout o BridLayout'
JPanel 9
$8ise1o Libre% (bsoluteLayout o
LloQLayout'
JPanel 2
$8ise1o Libre% (bsoluteLayout o
LloQLayout'
Componentes Componentes
e1c2
Ejercicio guiado
6 -rea un nuevo proyecto en java.
0e pretende crear un proyecto con una ventana de dise1o complejo. Para ello sigue
los siguiente pasos/
6 n primer lugar% asigna un EorderLayout al JLrame/
6 l EorderLayout divide la ventana principal en 3onas. (hora a1ade un panel $JPanel'
a la 3ona norte de la ventana.
6 -ambia el nombre a este panel y ll,malo panelTitulo% ya #ue contendr, el nombre del
programa.
F d i Cdi Lib D i i
Panel en la 3ona norte.
6 (1ade otro panel% esta ve3 a la parte central. l panel se llamar, panel&atos/
6 (1ade un nuevo panel en la parte sur de la ventana. 0u nombre ser, panelEstado.
25T(. ( veces resulta complicado agregar un panel en una 3ona de la ventana cuando
tenemos un EorderLayout. Puedes entonces hacer clic con el derecho sobre JLrame en
el 0nspector y activar la opcin Agregar desde paleta @ SAing @ 4anel.
F d i Cdi Lib D i i
6 0i el panel no se coloca en el sitio deseado% se puede seleccionar en el 0nspector y
activar su propiedad &irecci.n% e indicar la 3ona donde se #uiere colocar/
l panel deber!a estar situado finalmente en el sur de la ventana/
F d i Cdi Lib D i i
6 l 0nspector tendr, la siguiente forma ahora/
6 (1ade ahora tu solo un panel en la 3ona oeste llamado panelBotonera y otro en la
3ona esta llamado panelVeri-icacion. l 0nspector deber!a tener la siguiente forma al
finali3ar/
F d i Cdi Lib D i i
6 -ada panel puede ser dise1ado de forma individual% simplemente haciendo doble clic
sobre +l. (s! pues% empe3aremos dise1ando el panel panelBotonera. Ha3 doble clic
sobre +l.
6 n la parte i3#uierda del 2etEeans aparecer, >nicamente el panelBotonera.
(gr,ndalo para #ue tenga la siguiente forma/
6 ( cada panel se le puede asignar un Layout distinto. ( este panel le asignaremos un
(bsoluteLayout para poder colocar cada elemento donde #uiera. (signa un
(bsoluteLayout al panel haciendo clic con el derecho sobre +l en el 0nspector. l
0nspector deber!a #uedar as!/
6 (hora a1ade cuatro botones al panel. 5bserva como tienes libertad total para colocar
cada botn donde #uieras. Procura #ue el panel #uede as!/
F d i Cdi Lib D i i

$2o nos vamos a preocupar en este ejercicio de los nombres de los componentes'
6 (hora dise1a el panel panelVeri-icaci.n haciendo doble clic sobre +l.
6 (s!gnale tambi+n un layout (bsoluteLayout.
6 -oloca en +l cuatro casillas de verificacin. l aspecto del panel al terminar debe ser
parecido al siguiente/
; el 0nspector debe tener un estado similar a este/
F d i Cdi Lib D i i
6 (hora se dise1ar, el panelTitulo. Ha3 doble clic sobre +l.
6 n este caso se le a1adir, un LloQLayout. Cecuerda #ue este layout hace #ue cada
elemento se colo#ue uno detr,s de otro.
6 (1ade al panel dos eti#uetas como las #ue siguen. Ponle un borde a cada una/
l 0nspector tendr, este aspecto en lo #ue se refiere al panelTitulo...
6 l panelEstado lo dise1aremos sin asignar ning>n layout% es decir% usando el &ise3o
!ibre. n +l a1adiremos tres eti#uetas de forma #ue estas mantengan una distancia
relativa con respecto al l!mite derecho del panel. 8icho de otra forma% #ue siempre
est+n pegadas a la parte derecha del panel/
5bserva las l!neas )gu!a*. Indican #ue las eti#uetas dependen de la parte derecha del
panel. ( su ve3 cada una depende de la otra. s como si estuvieran )enganchadas*%
como los vagones de un tren.
F d i Cdi Lib D i i
6 l panel&atos lo vamos a complicar un poco. Ha3 doble clic sobre +l para dise1arlo y
as!gnale un BridLayout.
6 ?arca el BridLayout y as!gnale : filas y : columnas% para #ue interiormente tenga
forma de una rejilla como esta/
6 ( cada una de las divisiones del BridLayout del panel&atos le asignaremos un nuevo
panel. (1ade al panel&atos cuatro paneles. sto lo puedes hacer f,cilmente
haciendo clic con el botn derecho del ratn sobre el panel&atos en el 0nspector y
eligiendo la opcin A3adir desde paleta @ SAing @ 4anel.
l aspecto del inspector deber!a ser como el #ue sigue% en lo #ue se refiere al
panel&atos/
6 (signaremos a cada uno de los cuatro paneles los siguientes nombres/
panelEti)uetaB# panelCuadroB# panelEti)uetaC# panelCuadroC. l panel #uedar, as!
en el 0nspector.
(s! pues% el panel panel&atos tiene forma de rejilla con cuatro celdas% y en cada
celda hay un panel. Puede imaginarse el panel8atos as!/
panel&atos
F d i Cdi Lib D i i
Panelti#ueta9 Panel-uadro9
Panelti#ueta: Panel-uadro:
6 (hora a1ada al panelti#ueta9 y al panelti#ueta: sendas eti#uetas. ; al
panel-uadro9 y panel-uadro: sendos cuadros de te4tos. l panel panel&atos debe
#uedar as!/
6 Linalmente ejecuta el programa y comprueba como se comportan los elementos
seg>n el panel donde se encuentre y el layout asignado a cada uno.

CONCLUI!N
Para el diseCo de -entanas mu2 complejas' ser suelen de1inir la2outs "ue di-idan en
<onas el J@rame' como por ejemplo el BorderLa2out o el 6ridLa2out&
$entro de cada una de dic)as <onas se aCade un JPanel' al "ue se le asigna un
%bsoluteLa2out' un @lo5La2out o se mantiene el $iseCo Libre&
Es posible asignar a un panel un la2out de <onas' como el 6ridLa2out' 2' a su -e<'
introducir en l nue-os paneles' 2 as# sucesi-amente&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. $I8LO6O
Cuadros de $i(logo
"n cuadro de di,logo es un cuadro con opciones #ue aparece normalmente cuando se
activa una opcin del men> principal del programa.
Los cuadros de di,logo tienen forma de ventana aun#ue no poseen algunas caracter!sticas
de estas. Por ejemplo% no pueden ser minimi3ados ni ma4imi3ados.
Los cuadros de di,logo% aparte de las opciones #ue muestran% suelen contener dos botones
t!picos/ el botn (ceptar y el botn -ancelar. l primero de ellos da por v,lidas las opciones
elegidas y cierra el cuadro de di,logo. l segundo simplemente cierra el cuadro de di,logo
sin hacer ninguna modificacin.
He a#u! algunos ejemplos de cuadros de di,logo del programa Word/
Para crear cuadros de di,logo en Java% se usa un tipo de objetos llamado J8ialog. stos
objetos pueden ser dise1ados como si fueran ventanas% aun#ue representan realmente
cuadros de di,logo.
F d i Cdi Lib D i i
jercicio guiado
6 -rea un nuevo proyecto en java.
6 8ise1a el JLrame de forma #ue la ventana tenga el siguiente aspecto/
Los elementos de la ventana tendr,n los siguientes nombres/
6 -uadro de te4to de unidades/ t4t"nidades.
6 -uadro de te4to de precio/ t4tPrecio.
6 ti#ueta con borde del total/ etiTotal.
6 Eotn -alcular/ btn-alcular.
6 Eotn -onfiguracin/ btn-onfiguracion.
6 0e pretende #ue cuando se pulse el botn -alcular se calcule el total de la venta
$esto se har, luego' Para hacer el c,lculo se tendr,n en cuenta el I.( y el 8escuento
a aplicar. stos dos valores ser,n variables globales% ya #ue se usar,n en distintos
lugares del programa.
6 (s! pues entra en el cdigo y declara una variable global i,a y otra descuento tal
como se indica a continuacin $recuerda #ue las variables globales se colocan justo
despu+s de la l!nea donde se define la clase principal public class'/
F d i Cdi Lib D i i
6 -uando el programa arran#ue% interesar, #ue el i,a por defecto sea @% y #ue el
descuento por defecto sea @ tambi+n% as! #ue en el constructor% iniciali3aremos las
variables globales i,a y descuento a @/
6 stamos ya preparados para programar el botn btn-alcular. ntra en su
actionPerformed y all! se programar, la reali3acin del c,lculo de la siguiente forma/
dou$le unidades;
dou$le precio;
dou$le total; 22total
dou$le canti<a; 22cantidad i<a
dou$le cantdes; 22cantidad descuento
dou$le totalsini<a; 22total sin i<a

22Reco%o los datos de los cuadros de textos (con<irtiendolos a nM#eros)
unidades = !ou$le.parse!ou$le(txt/nidades.getText());
precio = !ou$le.parse!ou$le(txt8recio.getText());

22Calculo el total sin i<a, la cantidad de i<a 4 la cantidad de descuento
totalsini<a=precioCunidades;
canti<a=totalsini<aCi<a2100;
cantdes=totalsini<aCdescuento2100;

F d i Cdi Lib D i i
.ariables globales
Iniciali3acin de
variables globales
22"Gora calculo el precio totalF
total = totalsini<aDcanti<aIcantdes;

22Coloco el total en la eti:uetaF
etiTotal.setText(EEDtotal);
6 Puedes ya ejecutar el programa y comprobar #ue el botn -alcular funciona% aun#ue
el c,lculo #ue reali3a lo hace con un iva @ y un descuento @.
6 ( continuacin se programar, el botn -onfiguracin de forma #ue nos permita
decidir #u+ iva y #u+ descuento #ueremos aplicar. ste botn mostrar, un -"(8C5
8 8IXL5B5 #ue permita al usuario configurar estos datos.
6 Para a1adir un cuadro de di,logo al proyecto% se tiene #ue a1adir un objeto del tipo
J8ialog sobre el JLrame.
6 Los J8ialog son objetos ocultos% es decir% objetos #ue se colocan en la parte del
0nspector llamada 5tros Componentes% al igual #ue sucede con los men>s
conte4tuales o los JLile-hooser. 5bserva tu inspector% all! ver,s el J8ialog #ue has
a1adido/
6 -,mbiale el nombre. Lo llamaremos dialogoCon-iguracion.
6 Los di,logos normalmente traen por defecto el layout EorderLayout. Para nuestro
ejemplo cambiaremos el layout del J8ialog por el 8ise1o Libre/
F d i Cdi Lib D i i
6 Los J8ialog se pueden dise1ar independientemente% al igual #ue los JPanel. 0olo
tienes #ue hacer doble clic sobre el dialogoCon-iguracion $en el inspector' y este
aparecer, en el centro de la ventana.
6 (s! pues debes dise1ar el dialogoCon-iguracion para #ue #uede de la siguiente
forma/
Los elementos del cuadro de di,logo tienen los siguientes nombres/
6 l cuadro de te4to del Iva/ t4tIva.
6 l cuadro de te4to del 8escuento/ t4t8escuento.
6 l botn (ceptar/ btn(ceptar.
6 l botn -ancelar/ btn-ancelar.
0i observas el 0nspector debe tener el siguiente aspecto/
F d i Cdi Lib D i i
F d i Cdi Lib D i i
6 0e ha dicho #ue cuando se pulse el botn -onfiguracin en la ventana principal%
debe aparecer el cuadro de di,logo dialogoCon-iguracion% #ue acabas de dise1ar/
6 Para conseguir esto% debes programar el action4er-ormed del botn
btnCon-iguracion de la siguiente forma/
dialogoCon6iguracion.setSiHe(270,200);
dialogoCon6iguracion.set'ocation(100,100);
dialogoCon6iguracion.set0isi$le(true);
6 l cdigo anterior hace lo siguiente/
( trav+s del m+todo setSi:e se asigna un tama1o de :A@ 4 :@@ al
cuadro de di,logo.
( trav+s del m+todo set!ocation se determina #ue el cuadro de
di,logo aparecer, en la posicin $9@@% 9@@' de la pantalla.
( trav+s del m+todo setVisible hacemos #ue el cuadro de di,logo se
muestre.
F d i Cdi Lib D i i
Haces clic sobre -onfiguracin
y aparece el di,logo
6 jecuta el programa y observa lo #ue sucede cuando pulsas el botn -onfigurar.
8eber!a aparecer el cuadro de di,logo en la posicin programada y con el tama1o
programado/
6 Los botones (ceptar y -ancelar del cuadro de di,logo a>n no hacen nada. (s! #ue
los programaremos. mpe3aremos por el m,s sencillo% el botn -ancelar.
6 l botn -ancelar de un cuadro de di,logo simplemente cierra dicho cuadro de
di,logo. Para ello% debes a1adir el siguiente cdigo en el action4er-ormed del botn
-ancelar del di,logo/
dialogoCon6iguracion.dispose();
l m+todo dispose se usa para cerrar un cuadro de di,logo. Tambi+n se puede usar
con un JLrame para cerrarlo.
6 jecuta el programa de nuevo y comprueba el funcionamiento del botn -ancelar del
cuadro de di,logo.
6 (hora se programar, el botn (ceptar. -uando el usuario pulse este botn% se
confirmar, el valor del i,a y del descuento #ue haya introducido. s decir% se
traspasar,n los valores introducidos en los cuadros de te4to t4tIva y t4t8escuento a
las variables globales i,a y descuento.
"na ve3 #ue se haya hecho esto% el cuadro de di,logo se debe cerrar.
6 ste es el cdigo #ue hace lo anterior. 8ebe programarlo en el action4er-ormed del
botn (ceptar/
F d i Cdi Lib D i i
i<a = !ou$le.parse!ou$le(txt=<a.getText());
descuento=!ou$le.parse!ou$le(txt!escuento.getText());
dialogoCon6iguracion.dispose();
6 5bserve el cdigo. Primero se traspasa los valores de los cuadros de te4to a las
variables globales y luego se cierra el cuadro de di,logo.
6 -ompruebe el funcionamiento del programa de la siguiente forma/
o jecute el programa.
o Introdu3ca A unidades y :@ de precio.
o 0i pulsa calcular% el total ser, 9@@. $2o hay ni iva ni descuento al empe3ar el
programa'
o (hora pulse el botn -onfiguracin% e introdu3ca un iva del 9M. l descuento
d+jelo a @. (cepte.
o (hora vuelva a calcular. 5bserve como ahora el total es 99M% ya #ue se tiene
en cuenta el iva configurado.
o Pruebe a configurar un descuento y vuelva a calcular.
6 0e pretende ahora mejorar un poco el cuadro de di,logo% a1adi+ndole un t!tulo.
0eleccione el cuadro de di,logo en el 0nspector y luego bus#ue su propiedad title. n
ella escriba )Con-iguraci.n de i,a y descuento*.
6 .uelva a ejecutar el programa. 5bserve la barra de t!tulo del cuadro de di,logo/
6 (hora se estudiar, el concepto de cuadro de di/logo modal y cuadro de di/logo no
modal .
". "n cuadro de di,logo no modal. s a#uel #ue permite activar la ventana desde la
#ue apareci. Los cuadros de di,logo a1adidos a un proyecto son por defecto no
modales.
6 jecuta el programa y prueba a hacer lo siguiente/
o Pulsa el botn -onfigurar. (parecer, el cuadro de di,logo.
F d i Cdi Lib D i i
o Pulsa sobre la ventana.
o 5bservar,s #ue la ventana se activa% coloc,ndose sobre el cuadro de di,logo.
o sto es posible gracias a #ue el cuadro de di,logo es no modal.
o ( veces% puede ser interesante #ue se active la ventana pero #ue el cuadro
de di,logo siga delante de ella. Para conseguir esto% es necesario activar la
propiedad del cuadro de di,logo llamada alAays5nTop. (ctiva esta
propiedad/
F d i Cdi Lib D i i
Pulsa sobre la
ventana.
La ventana se activa
coloc,ndose por encima
del cuadro de di,logo.
o (hora ejecuta el programa de nuevo y ha3 #ue se visualice el cuadro de
di,logo de configuracin. Podr,s comprobar #ue se puede activar la ventana
e incluso escribir en sus cuadros de te4tos% y #ue el cuadro de di,logo sigue
visible/
o s muy com>n% cuando tenemos un cuadro de di,logo no modal% usar la
propiedad alAays5nTop% para #ue siempre apare3ca delante de la ventana.
6 (hora se estudiar, el concepto de cuadro de di,logo modal.
#. "n cuadro de di,logo modal es a#uel #ue no permite #ue se active otra ventana
hasta #ue este no se haya cerrado.
6 Para convertir nuestro cuadro de di,logo en modal% ser, necesario #ue lo selecciones
en el inspector y bus#ues la propiedad modal. 8ebes activar esta propiedad.
F d i Cdi Lib D i i
0e puede activar la
ventana trasera% e
incluso escribir en ella.
sto es gracias a #ue el
cuadro de di,logo es no
modal2
Por otro lado% el cuadro
de di,logo sigue
mostr,ndose delante de
la ventana. sto es
gracias a la propiedad
alAays5nTop
6 (hora ejecuta el programa comprueba lo siguiente/
o Ha3 #ue se visualice el cuadro de di,logo de configuracin.
o ( continuacin intenta activar la ventana haciendo clic sobre ella. .er,s como
no es posible activarla. s m,s% intenta escribir en sus cuadros de te4to. 2o
ser, posible hacerlo. $Incluso observar,s un parpadeo en el cuadro de di,logo
avis,ndote de ello'. sto es debido a #ue ahora nuestro cuadro de di,logo es
modal.
o 0olo cuando pulses% (ceptar% o -ancelar% o cierres el cuadro de di,logo%
podr,s seguir trabajando con tu ventana.
CONCLUI!N
Los Cuadros de $i(logo son -entanas simpli1icadas "ue muestran distintas
opciones al usuario&
Los objetos J$ialog son los "ue permiten la creacin 2 uso de cuadros de di(logo
en un pro2ecto ja-a&
Para -isuali<ar un J$ialog ser( necesario llamar a su mtodo setVisible& ,ambin
son interesantes los mtodos setSi"e para asignarles un tamaCo 2 setLocation para
situar el cuadro de di(logo en la pantalla&
Para cerrar un J$ialog ser( necesario in-ocar a su mtodo dispose&
F d i Cdi Lib D i i
(un#ue intentes activar la
ventana o escribir en ella% no
podr,s% ya #ue el cuadro de
di,logo es modal.
Incluso ver,s un parpadeo en
el cuadro de di,logo cuando
intentas activar la otra
ventana.
0e podr!a decir #ue un cuadro
de di,logo modal es un
acaparador% y #ue no te deja
usar otro elemento hasta #ue
no acabes con +l.
0olo cuando cierres el cuadro
de di,logo podr,s seguir
trabajando con la ventana.
E=isten dos tipos de cuadros de di(logo. los modales 2 no modales&
Los cuadros de di(logo modales no permiten "ue se acti-e otra -entana )asta "ue el
cuadro de di(logo no se )a2a cerrado&
Los cuadros de di(logo no modales permiten trabajar con otra -entana a pesar de
"ue el propio cuadro de di(logo no )a2a sido cerrado&
F d i Cdi Lib D i i
EJERCICIO 6UI%$O& J%7%. *O$ELO $E CU%$RO $E LI,%
9:N. Ceali3a un nuevo proyecto.
9:I. n la ventana principal debes a1adir lo siguiente/
yyyyy. "na eti#ueta con borde llamada etiCesultado.
9D@. (1ade un cuadro de lista al formulario $JList'.
"-". Eorra todo el contenido de la lista $propiedad model' y c,mbiale el nombre a la
lista. La lista se llamar, lst8ombres. Cecuerda #ue las listas aparecen dentro de un
objeto del tipo J0crollPane.
F d i Cdi Lib D i i
9D:. (1ade dos botones al formulario. "no de ellos tendr, el te4to )-urso 9* y se
llamar, btn-urso9 y el otro tendr, el te4to )-urso :* y se llamar, btn-urso:.
"--. n el evento action4er-ormed del botn )-urso 9* programa lo siguiente/
!e6ault'ist9odel #odelo = ne) !e6ault'ist9odel();
#odelo.addle#ent(E&uanE);
#odelo.addle#ent(E9ar5aE);
#odelo.addle#ent(E'uisE);
lst.o#$res.set9odel(#odelo);
"-$. n el evento action4er-ormed del botn )-urso :* programa lo siguiente/
!e6ault'ist9odel #odelo = ne) !e6ault'ist9odel();
#odelo.addle#ent(E"naE);
#odelo.addle#ent(E9artaE);
#odelo.addle#ent(E&oseE);
lst.o#$res.set9odel(#odelo);
9DA. 4plicacin de los cdigos anteriores/
ffffff. Lo #ue hace cada botn es rellenar el cuadro de lista con una serie de
nombres. n el caso del botn )-urso 9*% la lista se rellena con los nombres
Juan% ?ar!a y Luis% mientras #ue en el caso del botn )-urso :*% la lista se
rellena con los nombres (na% ?arta y Jose.
gggggg. l contenido de un cuadro de lista es lo #ue se denomina un )modelo*.
l )modelo* es un objeto #ue contiene el listado de elementos de la lista.
333333. Los modelos de las listas son objetos del tipo &e-ault!ist1odel.
F d i Cdi Lib D i i
iiiiii.Lo #ue hace el programa es crear un )modelo*. Luego rellena el )modelo* con
datos% y finalmente asocia el )modelo* al cuadro de lista. .eamos como se
hace todo esto.
444444. Primero se crea el )modelo*% a trav+s de la siguiente instruccin $ser,
necesario a1adir el import correspondiente% atento a la bombillita'/
!e6ault'ist9odel #odelo = ne) !e6ault'ist9odel();
555555. l )modelo* tiene un m+todo llamado addElement #ue permite
introducir datos dentro de +l. (s! pues usamos este m+todo para a1adir los
datos al modelo.
#odelo.addle#ent(E"naE);
#odelo.addle#ent(E9artaE);
#odelo.addle#ent(E&oseE);
llllll.Linalmente asociamos el )modelo* creado al cuadro de lista de la siguiente
forma/
lst.o#$res.set9odel(#odelo);
mmmmmm. (s! pues% a#u! tienes una forma de cambiar el contenido de un
cuadro de lista desde el propio programa.
9GG. Prueba a ejecutar el programa. 5bserva como cuando pulsas cada botn
cambia el contenido de la lista/
"$%. (hora a1ade el siguiente cdigo al evento mouseClicked del cuadro de lista/
F d i Cdi Lib D i i
-licJ y cambia el
listado.
etiResultado.setText(lst.o#$res.getSelected0alue().toString());
sta instruccin hace #ue al seleccionar un elemento del cuadro de lista +ste
apare3ca en la eti#ueta etiCesultado. Cecuerda #ue el m+todo get0elected.alue
permite recoger el elemento seleccionado $hay #ue convertirlo a cadena con to0tring'
9GM. jecuta el programa/
"$.. "na propuesta. (1ada un botn ).aciar* llamado btn.aciar. ste botn
vaciar, el contenido de la lista. Para esto lo >nico #ue tiene #ue hacer es crear un
modelo y% sin introducir ningDn ,alor en l% asociarlo al cuadro de lista.
CONCLUI!N
Un cuadro de lista es un objeto "ue contiene a su -e< otro objeto denominado
FmodeloG&
El objeto FmodeloG es el "ue realmente contiene los datos de la lista&
Cuadro de lista *odelo $atos
e puede crear un FmodeloG 2 luego introducir datos en l& Luego se puede asociar
ese FmodeloG a la lista& $e esta manera se puede cambiar el contenido de la lista en
cual"uier momento&
F d i Cdi Lib D i i
-licJ y aparece el
elemento
seleccionado en la
eti#ueta.
EJERCICIO 6UI%$O& J%7%. *O$ELO $E CU%$RO $E LI,%
9GI. Ceali3a un nuevo proyecto.
9GK. n la ventana principal debes a1adir lo siguiente/
tttttt. "n combo llamado cbo2umeros.
uuuuuu. "n botn )Pares* llamado btnPares.
vvvvvv. "n botn )Impares* llamado btnImpares.
QQQQQQ. "na eti#ueta con borde llamada etiCesultado.
9AG. limina todos los elementos #ue contenga el combo. Cecuerda% debes usar la
propiedad )model* del combo para cambiar sus elementos.
9AA. 8espu+s de haber hecho todo esto% tu ventana debe #uedar m,s o menos as!/
"%(. n el evento action4er-ormed del botn Pares% programa lo siguiente/
int i;

!e6aultCo#$oBox9odel #odelo = ne) !e6aultCo#$oBox9odel();

6or (i=0;iR10;iD=2) >
#odelo.addle#ent(E.S EDi);
?

c$o.u#eros.set9odel(#odelo);
9AN. 5bserva lo #ue hace este cdigo/
bbbbbbb. -rea un objeto )modelo* para el combo.
(l igual #ue pasa con los cuadros de lista% los combos tienen un objeto
)modelo* #ue es el #ue realmente contiene los datos. n el caso de los
combos% para crear un objeto )modelo* se usar, esta instruccin/
F d i Cdi Lib D i i
!e6aultCo#$oBox9odel #odelo = ne) !e6aultCo#$oBox9odel();
ccccccc. ( continuacin% se usa el objeto )modelo* creado y se rellena de datos.
-oncretamente% se rellena con los n>meros pares comprendidos entre @ y 9@.
ddddddd. 5bserva el uso de la propiedad addlement para a1adir un elemento al
modelo del combo.
eeeeeee. 0e ha usado un bucle for para hacer la introduccin de datos en el
modelo m,s f,cil.
fffffff. Linalmente% se asocia el modelo al combo a trav+s de la siguiente
l!nea% con lo #ue el combo aparece relleno con los elementos del modelo/
c$o.u#eros.set9odel(#odelo);
9MD. jecuta el programa y observa el funcionamiento del botn Pares.
"($. l botn Impares es similar. Programa su action4er-ormed como sigue/
int i;
!e6aultCo#$oBox9odel #odelo = ne) !e6aultCo#$oBox9odel();

6or (i=1;iR10;iD=2) >
#odelo.addle#ent(E.S EDi);
?

c$o.u#eros.set9odel(#odelo);
9MA. La >nica diferencia de este cdigo es el for% #ue est, dise1ado para #ue se
introdu3can los n>meros impares comprendidos entre @ y 9@ dentro del modelo.
F d i Cdi Lib D i i
0e pulsa y se rellena
autom,ticamente
"((. Linalmente se programar, el action4er-ormed del combo para #ue al
seleccionar un elemento este apare3ca en la eti#ueta. sto se hace con una simple
instruccin/
etiResultado.setText(c$o.u#eros.getSelected=te#().toString());
Cecuerda el uso de get0electedItem$' para recoger el elemento seleccionado% y el
uso de to0tring$' para convertirlo a te4to.
9MN. Prueba el programa. Prueba los botones Pares e Impares y prueba el combo.
9MI. 0er!a interesante a1adir un botn ).aciar* llamado btn.aciar #ue vaciara el
contenido del combo. sto se har!a simplemente creando un modelo vac!o y
asignarlo al combo. 0e anima al alumno a #ue realice esta mejora.
CONCLUI!N
Un combo' al igual "ue los cuadros de lista' es un objeto "ue contiene a su -e< otro
objeto denominado FmodeloG&
El objeto FmodeloG es el "ue realmente contiene los datos del combo&
Combo *odelo $atos
F d i Cdi Lib D i i
e puede crear un FmodeloG 2 luego introducir datos en l& Luego se puede asociar
ese FmodeloG al combo& $e esta manera se puede cambiar el contenido del combo
en cual"uier momento&
F d i Cdi Lib D i i

Fundacin Cdigo Libre Dominicano
Lic. Henry Terrero.
hterrero@codigolibre.org
Ing. Jose Paredes.
jparedes@codigolibre.org
Desarrollo
De aplicaciones
Java Con Netbeans
Ejercicios

METODOLOGA DE LA PROGRAMACIN
JAVA
PRIMEROS PROGRAMAS
Ejercicio 1
Realice un programa en java con las siguientes caractersticas
La ventana principal tendr! los siguientes elementos
- "na eti#ueta #ue contenga su nombre.
Nombre de la etiqueta: etiNombre
- "na eti#ueta #ue contenga su ciudad.
Nombre de la etiqueta: etiCiudad
- "n bot$n con el te%to &'cultar (ombre).
Nombre del botn: btnOcultarNombre
- "n bot$n con el te%to &*isuali+ar (ombre).
Nombre del botn: btnVisuNombre
- "n bot$n con el te%to &'cultar ,iudad).
Nombre del botn: btnOcultarNombre
- "n bot$n con el te%to &*isuali+ar ,iudad).
Nombre del botn: btnVisuCiudad
-l .uncionamiento del programa ser! el siguiente
- ,uando se pulse el bot$n btnOcultarNombre/ se debe ocultar la eti#ueta etiNombre.
- ,uando se pulse el bot$n btnVisuNombre/ se debe visuali+ar la eti#ueta etiNombre.
- ,uando se pulse el bot$n btnOcultarCiudad/ se debe ocultar la eti#ueta etiCiudad.
- ,uando se pulse el bot$n btnVisuCiudad/ se debe visuali+ar la eti#ueta etiCiudad.
Para hacer esto debe programar el evento actionPerformed de cada bot$n.
"sar! el m0todo setVisible de cada eti#ueta para visuali+arlas u ocultarlas.
Ejercicio 2
,rear! un programa java cuya ventana principal contenga los siguientes componentes
- "n cuadro de te%to. -l nombre ser! txtTexto.
- "na eti#ueta vaca 1sin te%to dentro2. -l nombre ser! etiTexto1.
- 'tra eti#ueta vaca 1sin te%to dentro2. -l nombre ser! etiTexto2.
- "n bot$n con el te%to &Traspasa 3). -l nombre ser! btnTraspasa1.
- "n bot$n con el te%to &Traspasa 4). -l nombre ser! btnTraspasa2.
-l programa .uncionar! de la siguiente .orma
- ,uando el usuario pulse el bot$n &Traspasa 3)/ lo #ue se haya escrito dentro del cuadro
de te%to se copiar! dentro de la eti#ueta 3.
- ,uando el usuario pulse el bot$n &Traspasa 4)/ lo #ue se haya escrito dentro del cuadro
de te%to se copiar! dentro de la eti#ueta 4.
Para hacer esto programar! el evento actionPerformed de cada bot$n.
F d i Cdi Lib D i i
"sar! el m0todo setText para situar el te%to en la eti#ueta/ y getText para recoger el te%to del
cuadro de te%to.
Ejercicio 3
5e pide #ue realice un programa en java cuya ventana principal incluya los siguientes
componentes
- "n cuadro de te%to llamado txtTexto.
- "na eti#ueta vaca llamada etiTexto.
- "n bot$n con el te%to &*aciar) llamado btnVaciar.
-l programa .uncionar! de la siguiente .orma
- ,uando el usuario escriba en el cuadro de te%to txtTexto/ lo #ue escriba pasar!
inmediatamente a la eti#ueta etiTexto. 1Tendr! #ue programar el evento kePressed
del cuadro de te%to2
- ,uando el usuario pulse el bot$n &*aciar) el te%to contenido en el cuadro de te%to y en
la eti#ueta se borrar!. 1Tendr! #ue programar el evento actionPerformed2
Tendr! #ue usar el m0todo setText para colocar te%to en la eti#ueta y usar el m0todo getText
para recoger el te%to escrito en el cuadro de te%to.
Ejercicio 4
5e pide #ue realice un programa en java cuya ventana principal contenga los siguientes
elementos
- "n cuadro de te%to llamado txtNombre.
- "n cuadro de te%to llamado txtCiudad.
- "na eti#ueta llamada txt!rase.
- "n bot$n con el te%to &6ceptar) llamado btn"ceptar.
- "n bot$n con el te%to &7esactivar) llamado btn#esacti$ar.
- "n bot$n con el te%to &6ctivar) llamado btn"cti$ar.
-l programa .uncionar! de la siguiente .orma
- -l usuario introducir! un nombre en el cuadro de te%to txtNombre. Por ejemplo &Juan).
- -l usuario introducir! una ciudad en el cuadro de te%to txtCiudad. Por ejemplo &Jere+).
- ,uando el usuario pulse el bot$n &6ceptar)/ entonces aparecer! un mensaje en la
eti#ueta llamada txt!rase indicando como se llama y donde vive. Por ejemplo
%sted se llama &uan $i$e en &ere'.
- ,uando el usuario pulse el bot$n &7esactivar)/ entonces los dos cuadros de te%to se
desactivar!n. ,uando el usuario pulse el bot$n &6ctivar)/ los dos cuadros de te%to se
volver!n a activar.
Tendr! #ue programar el evento actionPerformed de los botones.
F d i Cdi Lib D i i
Tendr! #ue usar la concatenaci$n de cadenas. Recuerde #ue se pueden concatenar cadenas a
trav0s del operador 8.
Tendr! #ue usar el m0todo setText para colocar el te%to en la eti#ueta y el m0todo getText para
recoger el te%to de cada cuadro de te%to.
Tendr! #ue usar el m0todo set(nabled para activar o desactivar cada cuadro de te%to.
F d i Cdi Lib D i i
Ejercicio 5
7ebe reali+ar un programa java cuya ventana principal contenga los siguientes elementos
- ,uatro eti#uetas/ conteniendo distintas palabras cada una. Puede llamarlas etiPal1)
etiPal2) etiPal* y etiPal+.
- 'tra eti#ueta #ue contenga el te%to &'cultar). -sta eti#ueta se llamar! etiOcultar y
tendr! un tama9o m!s grande #ue las otras y un color de .ondo.
-l programa debe .uncionar de la siguiente .orma
- ,uando el puntero del rat$n &sobrevuele) la eti#ueta etiOcultar/ las eti#uetas con las
palabras deben desaparecer.
- ,uando el puntero del rat$n salga de la super.icie de la eti#ueta etiOcultar/ entonces
las eti#uetas con las palabras volver!n a aparecer.
Tendr! #ue programar los eventos mouse(ntered y mouse(xited para #ue el programa detecte
cuando el rat$n entra o sale de la eti#ueta etiOcultar.
7ebe usar el m0todo setVisible de las eti#uetas para ocultarlas o visuali+arlas.
Ejercicio 6
7ebe reali+ar un programa java cuya ventana principal contenga los siguientes elementos
- "na eti#ueta #ue contenga su nombre. -sta eti#ueta se llamar! etiNombre. -sta
eti#ueta debe tener un color de .ondo.
- "n bot$n con el te%to &-s#uina). -ste bot$n se llamar! btn(squina.
- "n bot$n con el te%to &,entro). -ste bot$n se llamar! btnCentro.
- "n bot$n con el te%to &6grandar). -ste bot$n se llamar! btn"grandar.
- "n bot$n con el te%to &6chicar). -ste bot$n se llamar! btn"c,icar.
-l programa debe .uncionar de la siguiente .orma
- ,uando el usuario pulse el bot$n &-s#uina)/ la eti#ueta etiNombre se colocar! en la
es#uina de la ventana.
- ,uando el usuario pulse el bot$n &,entro)/ la eti#ueta etiNombre se colocar! en el
centro de la ventana.
- ,uando el usuario pulse el bot$n &6grandar)/ la eti#ueta etiNombre cambiar! de
tama9o/ agrand!ndose.
- ,uando el usuario pulse el bot$n &6chicar)/ la eti#ueta etiNombre cambiar! de tama9o/
empe#ue9eci0ndose.
- ,uando el usuario lleve el puntero sobre uno de los botones/ el bot$n cambiar! de
tama9o agrand!ndose. ,uando el puntero salga del bot$n/ el bot$n volver! a su
tama9o normal.
7ebe programar los eventos actionPerformed) mouse(ntered y mouse(xited para los botones.
Tendr! #ue usar el m0todo set-ocation para cambiar la posici$n de la eti#ueta. -ste m0todo
recibe como par!metro la posici$n % e y donde situar! el componente.
F d i Cdi Lib D i i
Tendr! #ue usar el m0todo set.i'e para cambiar el tama9o de la eti#ueta y de los botones.
-ste m0todo recibe como par!metro el ancho y alto del componente.
La propiedad preferred.i'e permite de.inir un tama9o inicial a cada componente de la ventana.
Ejercicio 7
5e pide reali+ar un programa java #ue tenga los siguientes elementos en la ventana principal
- "na eti#ueta con el te%to #ue #uiera. -sta eti#ueta se llamar! etiTexto.
- "n bot$n con el te%to &6+ul). -ste bot$n se llamar! btn"'ul.
- "n bot$n con el te%to &Rojo). -ste bot$n se llamar! btn/o0o.
- "n bot$n con el te%to &*erde). -ste bot$n se llamar! btnVerde.
- "n bot$n con el te%to &:ondo 6+ul). -ste bot$n se llamar! btn!ondo"'ul.
- "n bot$n con el te%to &:ondo Rojo). -ste bot$n se llamar! btn!ondo/o0o.
- "n bot$n con el te%to &:ondo *erde). -ste bot$n se llamar! btn!ondoVerde.
- "n bot$n con el te%to &Transparente). -ste bot$n se llamar! btnTransparente.
- "n bot$n con el te%to &'paca). -ste bot$n se llamar! btnOpaca.
-l programa debe .uncionar de la siguiente .orma
- ,uando se pulse el bot$n &6+ul)/ el te%to de la eti#ueta se pondr! de color a+ul.
- ,uando se pulse el bot$n &Rojo)/ el te%to de la eti#ueta se pondr! de color rojo.
- ,uando se pulse el bot$n &*erde)/ el te%to de la eti#ueta se pondr! de color verde.
- ,uando se pulse el bot$n &:ondo 6+ul)/ el .ondo de la eti#ueta se pondr! de color a+ul.
- ,uando se pulse el bot$n &:ondo Rojo)/ el .ondo de la eti#ueta se pondr! de color rojo.
- ,uando se pulse el bot$n &:ondo *erde)/ el .ondo de la eti#ueta se pondr! de color
verde.
- ,uando se pulse el bot$n &Transparente)/ la eti#ueta dejar! de ser opaca.
- ,uando se pulse el bot$n &'paca)/ se activar! la propiedad opaca de la eti#ueta.
7ebe programar los eventos actionPerformed de cada bot$n.
Para cambiar el color de .ondo de una eti#ueta/ usar! el m0todo set1ackground.
Para cambiar el color del te%to de una eti#ueta/ usar! el m0todo set!oreground.
Para indicar el color a+ul usar! ,olor.;L"-. Para indicar el color rojo/ usar! ,olor.R-7. < para
indicar el color verde usar! ,olor.=R--(.
Para hacer #ue una eti#ueta sea opaca o no/ usar! el m0todo setOpaque.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
PROGRAMAS CON CLCULOS
Ejercicio 1
Realice un programa para calcular el total de una venta.
-l programa tendr! una ventana con al menos los siguientes elementos
132 "n cuadro de te%to llamado t%t"nidades donde el usuario introducir! las unidades
vendidas.
142 "n cuadro de te%to llamado t%tPrecio donde el usuario introducir! el precio unidad.
1>2 "na eti#ueta llamada etiTotal5inIva.
1?2 "na eti#ueta llamda etiIva.
1@2 "na eti#ueta llamada etiTotalAasIva.
1B2 "n bot$n llamado btn,alcular.
-l programa .uncionar! de la siguiente .orma
1C2 -l usuario introducir! las unidades y el precio y luego pulsar! el bot$n ,alcular.
1D2 -l programa entonces calcular! el total de la venta/ el iva y el total m!s iva y presentar!
dichos resultados en cada eti#ueta.
Ejercicio 2
Realice un programa para calcular la nota .inal de un alumno.
-l programa tendr! una ventana con al menos los siguientes elementos
1E2 "n cuadro de te%to llamado t%tPrimerTrimestre.
13F2"n cuadro de te%to llamado t%t5egundoTrimestre.
1332"n cuadro de te%to llamado t%tTercerTrimestre.
1342"na eti#ueta llamada eti(ota:inal.
13>2"na eti#ueta llamada etiResultado.
13?2"n bot$n llamado btn,alcular.
-l programa .uncionar! de la siguiente .orma
13@2-l usuario introducir! las notas de los tres trimestres en los cuadros de te%to
correspondientes.
13B2,uando se pulse el bot$n ,alcular/ el programa calcular! la nota media y la mostrar!
en la eti#ueta llamada eti(ota:inal.
13C25i la nota .inal es menor de @/ entonces en la eti#ueta etiResultado aparecer! la
palabra 5"5P-(5'.
13D25i la nota .inal es @ o m!s/ entonces en la eti#ueta etiResultado aparecer! la palabra
6PR';67'.
13E25i la nota .inal .uera un suspenso/ entonces las eti#uetas eti(ota:inal y etiResultado
deben aparecer de color rojo. -n caso contrario aparecer!n de color negro.
F d i Cdi Lib D i i
Ejercicio 3
Reali+ar un programa para calcular el !rea y el permetro de un crculo.
-l programa debe tener una ventana con al menos los siguientes elementos
14F2"n cuadro de te%to llamado t%tRadio/ donde el usuario introducir! el radio.
1432"na eti#ueta llamada eti6rea/ donde se mostrar! el !rea del crculo.
1442"na eti#ueta llamada etiPerimetro/ donde se mostrar! el permetro del crculo.
-l programa .uncionar! de la siguiente .orma
14>2-l usuario introducir! un radio dentro del cuadro de te%to llamado radio. 6l pulsar la
tecla -nter sobre dicho cuadro de te%to/ el programa calcular! el !rea y el permetro y
los mostrar! en las eti#uetas correspondientes.
14?25i el usuario introduce un radio negativo/ en las eti#uetas debe aparecer la palabra
&-rror) en color rojo.
14@2"se el elemento PI de la clase Aath para hacer este ejercicio.
Ejercicio 4
Reali+ar un programa para calcular potencias de un nGmero.
-l programa le permitir! al usuario introducir una base y un e%ponente. Luego el programa
podr! calcular la potencia de la base elevada al e%ponente.
-l programa deber! usar la clase Aath.
-l dise9o de la ventana #ueda a su elecci$n.
Ejercicio 5
Reali+ar un programa #ue calcule la ra+ cuadrada de un nGmero. -l programa tendr! los
siguientes elementos en la ventana Gnicamente
14B2"n cuadro de te%to llamado t%t(umero.
14C2"na eti#ueta llamada etiRai+.
-l programa .uncionar! de la siguiente .orma cuando el usuario escriba un nGmero en el
cuadro de te%to t%t(umero/ inmediatamente aparecer! su ra+ cuadrada en la eti#ueta. Para
ello/ tendr! #ue programar el evento HeyReleased del cuadro de te%to.
"se la clase Aath para reali+ar el c!lculo de la ra+ cuadrada.
Ejercicio 6
Realice un programa #ue contenga dos cuadros de te%to t%tPalabra3/ y t%tPalabra4. La
ventana tendr! tambi0n un bot$n llamado btn,oncatena y una eti#ueta llamada etiTe%to.
-l usuario introducir! las dos palabras dentro de los cuadros de te%to y luego pulsar! el bot$n
,oncatena. -l resultado ser! #ue en la eti#ueta etiTe%to aparecer!n las dos palabras escritas
concatenadas.
F d i Cdi Lib D i i
Por ejemplo/ si el usuario escribe en el primer cuadro de te%to &Lunes) y en el segundo
&Aartes)/ en la eti#ueta aparecer! &LunesAartes).
Ejercicio 7
Reali+ar un programa #ue muestre 3F eti#uetas llamadas respectivamente eti"na/ eti7os/
etiTres/ etc...
-stas eti#uetas contendr!n los nGmeros del F al E.
6parte/ la ventana tendr! un cuadro de te%to llamado t%t(umero.
5e pide #ue cuando el usuario lleve el rat$n sobre una de las eti#uetas/ apare+ca en el cuadro
de te%to el nGmero correspondiente.
Los nGmeros se van a9adiendo al cuadro de te%to. Por ejemplo/ si el usuario lleva el puntero
sobre la eti#ueta "no/ luego sobre la eti#ueta Tres y luego sobre la eti#ueta "no/ en el cuadro
de te%to debera haber aparecido lo siguiente 3>3.
69ada un bot$n llamado btn;orrar/ #ue al ser pulsado borre el contenido del cuadro de te%to.
Ejercicio
5e pide reali+ar un programa para resolver las ecuaciones de segundo grado.
Las ecuaciones de segundo grado tienen la siguiente .orma
ax
2
+bx+c=0
7ados unos valores para a/ b y c/ se debe calcular cuanto vale %.
"na ecuaci$n de segundo grado puede tener F/ 3 o 4 soluciones.
Para saber el nGmero de soluciones de una ecuaci$n de segundo grado se debe reali+ar el
siguiente c!lculo
R = b
2
4ac
5i R es menor de cero/ la ecuaci$n no tiene soluci$n.
5i R da F/ la ecuaci$n tiene una soluci$n.
5i R es mayor de cero/ la ecuaci$n tiene dos soluciones.
,uando e%iste una soluci$n/ esta se calcula de la siguiente .orma
x = -b / (2a)
,uando e%isten dos soluciones/ estas se calculan de la siguiente .orma
x = (-b + raiz(R) ) / (2a)
x = (-b raiz(R) ) / (2a)
1ra2' es la ra+ cuadrada2
Realice el programa para resolver las ecuaciones de segundo grado. -l dise9o de la ventana
#ueda a su elecci$n. Procure #ue el programa indi#ue cuando hay o no soluciones/ y #ue las
muestre de .orma adecuada.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
CUA!ROS !E MENSAJE" CON#IRMACIN E IN$RO!UCCIN !E !A$OS
Ejercicio 1
Realice un programa para calcular la divisi$n de un nGmero 6 entre un nGmero ;. -l programa
tendr! los siguientes elementos en la ventana
I 7os cuadros de te%to llamados t%t6 y t%t; donde se introducir!n los dos nGmeros.
I "n bot$n &,alcular 7ivisi$n) llamado btn7ivision.
I "na eti#ueta llamada etiResultado donde aparecer! el resultado.
-l programa debe .uncionar de la siguiente .orma
I ,uando se pulse el bot$n &,alcular 7ivisi$n) se calcular! la divisi$n del nGmero 6 entre
el ; y el resultado aparecer! en la eti#ueta etiResultado.
I 5i el usuario introduce un valor F dentro del cuadro de te%to del nGmero ;/ entonces el
programa mostrar! un mensaje de error 1"se un J'ptionPane.shoJAessage2
I 5i el usuario introduce un valor menor #ue cero en cual#uiera de los dos cuadros de
te%to/ entonces tambi0n se mostrar! un error.
Ejercicio 2
Realice un programa #ue permita calcular el sueldo total de un empleado. Para ello/ el
programa tendr! los siguientes elementos en la ventana
I "n cuadro de te%to llamado t%t5ueldo;ase.
I "n cuadro de te%to llamado t%tAeses.
I "n bot$n llamado btn,alcular.
I "na eti#ueta llamada etiResultado.
-l programa .uncionar! de la siguiente .orma
I -l usuario introducir! en el cuadro de te%to t%t5ueldo;ase la cantidad bruta #ue cobra
el trabajador al mes.
I -n el cuadro de te%to t%tAeses introducir! el nGmero de meses trabajados.
I 6l pulsar el bot$n calcular se calcular! el sueldo a percibir por el empleado. 5e
calcular! as
Total a percibir K 15ueldo;ase L 3FM del 5ueldo;ase2 N Aeses
I ,uando se pulse el bot$n calcular/ antes de #ue apare+ca el sueldo en la eti#ueta de
resultado/ el programa debe pedirle al usuario #ue introdu+ca una contrase9a. 5olo si
la contrase9a es correcta el programa mostrar! el sueldo total.
I Para introducir la contrase9a use un J'ptionPane.shoJInput7ialog.
I 5i el usuario introduce una contrase9a incorrecta/ el programa mostrar! un aviso
1J'ptionPane.shoJAessage2 y el resultado no se mostrar!.
F d i Cdi Lib D i i
Ejercicico 3
Reali+ar un programa para calcular el ndice de masa corporal de una persona.
Para ello/ crear! una ventana con los siguientes elementos
I "n cuadro de te%to llamado t%tPeso/ donde se introducir! el peso de la persona.
I "n cuadro de te%to llamado t%tTalla/ donde se introducir! la talla.
I "na eti#ueta llamada etiIA, donde aparecer! el Indice de masa corporal calculado.
I "n bot$n llamado btn,alcular y otro llamado btnLimpiar.
-l programa .uncionar! de la siguiente .orma
I -l usuario introducir! un peso y una talla en los cuadros de te%to. Luego pulsar! el
bot$n calcular para calcular el ndice de masa corporal/ el cual se calcula as
IA, K Peso O Talla
4
I -l IA, calculado aparecer! en la eti#ueta/ y adem!s/ aparecer! un mensaje indicando
la conclusi$n a la #ue se llega/ la cual puede ser una de las siguientes segGn el IA,
IA, ,'(,L"5IP(
Q3D 6nore%ia
RK3D y Q4F 7elgade+
RK4F y Q4C (ormalidad
RK4C y Q>F 'besidad 1grado 32
RK>F y Q>@ 'besidad 1grado 42
RK>@ y Q?F 'besidad 1grado >2
RK?F y 'besidad m$rbida
-l mensaje puede ser algo as &5u IA, indica #ue tiene anore%ia)/ por ejemplo. -ste
mensaje aparecer! en un J'ptionPane.shoJAessage.
I ,uando pulse el bot$n Limpiar/ se borrar!n los cuadros de te%to Peso y Talla. 6ntes de
#ue esto ocurra/ el programa debe pedir con.irmaci$n/ con un cuadro de di!logo de
con.irmaci$n 1J'ptionPane.shoJ,on.irm7ialog2. -l cuadro de con.irmaci$n tendr! el
siguiente aspecto
S7esea borrar los datosT
5I ('
5egGn lo elegido por el usuario se borrar!n los cuadros de te%to o no.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
CA!ENAS
Ejercicio 1
Realice un programa cuya ventana tenga los siguientes elementos
132 "n cuadro de te%to llamado t%t:rase.
142 *arias eti#uetas. 1Ll!melas como #uiera2
1>2 "n bot$n &6nali+ar) llamado btn6nali+ar.
-l programa .uncionar! de la siguiente .orma
1?2 -l usuario introducir! una .rase en el cuadro de te%to/ y luego pulsar! el bot$n 6nali+ar.
1@2 6l pulsar 6nali+ar/ el programa mostrar! la siguiente in.ormaci$n en las eti#uetas
.. La .rase en mayGsculas.
g. La .rase en minGsculas.
h. (Gmero de caracteres de la .rase.
i. (Gmero de caracteres de la .rase sin contar los espacios.
13F25i el usuario pulsa 6nali+ar cuando no hay ninguna .rase introducida en el cuadro de
te%to/ el programa debe mostrar un error emergente 1J'ptionPane2
Ejercicio 2
Realice un programa cuya ventana tenga los siguientes elementos
I "n cuadro de te%to llamado t%t:rase y otro llamado t%t5ubcadena.
I *arias eti#uetas.
I "n bot$n &6nali+ar) llamado btn6nali+ar.
-l programa .uncionar! de la siguiente .orma
I -l usuario introducir! una .rase en el cuadro de te%to t%t:rase/ y luego introducir! una
palabra en el cuadro de te%to t%t5ubcadena/ y luego pulsar! el bot$n 6nali+ar.
I 6l pulsar el bot$n/ el programa debe mostrar la siguiente in.ormaci$n
o La posici$n en la #ue se encuentra la primera aparici$n de la palabra en la
.rase.
o La posici$n en la #ue se encuentra la Gltima aparici$n de la palabra en la .rase.
o Aostrar! el te%to #ue hay en la .rase antes de la primera palabra.
o Aostrar! el te%to #ue hay en la .rase despu0s de la Gltima palabra.
I Por ejemplo/ si la .rase .uera
%n globo) dos globos) tres globos3 -a luna es un globo que se me escap3
< la palabra .uera globo/ entonces la in.ormaci$n a mostrar sera
Posici$n inicial >
Posici$n .inal ?E
Te%to anterior "n
Te%to posterior #ue se me escap$
F d i Cdi Lib D i i
I 5i la palabra no se encuentra en la .rase/ el programa mostrar! un error emergente y
no se presentar! nada en las eti#uetas.
Ejercicio 3
Realice un programa #ue tenga los siguientes elementos
I "n cuadro de te%to llamado t%t:rase.
I "n cuadro de te%to llamado t%tPalabra3.
I "n cuadro de te%to llamado t%tPalabra4.
I "n cuadro de te%to llamado t%tPalabra>.
I "n cuadro de te%to llamado t%tPalabra?.
I *arias eti#uetas.
I "n bot$n &6nali+ar) llamado btn6nali+ar.
-l programa .uncionar! de la siguiente .orma
I -l usuario introducir! una .rase en el cuadro de te%to t%t:rase/ y tres palabras en los
cuadros de te%to de las palabras.
I 6l pulsar el bot$n 6nali+ar/ el programa debe indicar la siguiente in.ormaci$n en las
eti#uetas
o Indicar! si la .rase es igual a la palabra 3.
o Indicar! si la .rase empie+a por la palabra 4.
o Indicar! si la .rase termina por la palabra >.
o Indicar! si la palabra ? est! contenida en la .rase/ y en el caso de #ue est0
contenida/ se indicar! la posici$n inicial en la #ue se encuentra.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
CA!ENAS %CON$INUACIN&
Ejercicio 1
Reali+ar un programa cuya ventana tenga los siguientes elementos
132 "n cuadro de te%to llamado t%t:rase.
142 *arias eti#uetas.
1>2 "n bot$n &6nali+ar) llamado btn6nali+ar.
-l programa debe contar cuantas vocales tiene la .rase. -l .uncionamiento ser! el siguiente
1?2 -l usuario escribir! una .rase en el cuadro de te%to t%t:rase. Luego se pulsar! el bot$n
6nali+ar.
1@2 -l programa mostrar! en las eti#uetas el nGmero de a/ de e/ de i de o y de u #ue se
encuentran en la .rase.
1B2 Tenga en cuenta #ue puede haber vocales en mayGsculas y en minGsculas.
1C2 5i el usuario no introduce nada en el cuadro de te%to t%t:rase/ entonces el programa
debera mostrar un error.
Ejercicio 2
Reali+ar un programa cuya ventana tenga los siguientes elementos
1D2 "n cuadro de te%to llamado t%t7(I.
1E2 "na eti#ueta llamada eti7(I.
13F2"n bot$n &Preparar 7(I) llamado btnPreparar7(I.
-l programa .uncionar! de la siguiente .orma
1332-l usuario introducir! un 7(I en el cuadro de te%to llamado t%t7(I y luego pulsar! el
bot$n Preparar 7(I. -l resultado ser! #ue el 7(I introducido aparecer! &preparado) en
la eti#ueta eti7(I.
13426 continuaci$n se e%plica como preparar el 7(I
-l usuario puede introducir un 7(I con uno de estos .ormatos
>3.@?>.4>?I6
>3.@?>.4>? 6
>3.@?>.4>?6
>3 @?> 4>? 6
etc.
5in embargo/ cuando el usuario pulse el bot$n Preparar 7(I/ en la eti#ueta eti7(I debe
aparecer el 7(I con el siguiente .ormato
>3@?>4>?6
-s decir/ sin ningGn espacio y sin puntos ni guiones.
F d i Cdi Lib D i i
13>25i el usuario no introduce nada en el cuadro de te%to del 7(I y pulsa el bot$n/ entonces
debe aparecer un error emergente 1J'ptionPane2.
Ejercicio 3
5e pide hacer un programa #ue le permita al usuario introducir una palabra en latn de la
primera declinaci$n/ y a continuaci$n generar sus &casos) en plural y singular.
Las palabras de la primera declinaci$n en latn son sustantivos .emeninos 1la mayora2/ #ue
terminan en a/ como por ejemplo R'56 o 6(IA6.
-stas palabras tienen las siguientes variantes o &casos)
Por ejemplo/ para la palabra R'56/ sus casos son los siguientes
CASO SINGULAR PLURAL
('AI(6TI*' Rosa Rosae
*',6TI*' Rosa Rosae
6,"56TI*' Rosam Rosas
=-(ITI*' Rosae Rosarum
76TI*' Rosae Rosis
6;L6TI*' Rosa Rosis
Por ejemplo/ para la palabra 6(IA6/ sus casos son los siguientes
CASO SINGULAR PLURAL
('AI(6TI*' 6nima 6nimae
*',6TI*' 6nima 6nimae
6,"56TI*' 6nimam 6nimas
=-(ITI*' 6nimae 6nimarum
76TI*' 6nimae 6nimis
6;L6TI*' 6nima 6nimis
7ebes observar #ue algunos casos son e%actamente iguales a la palabra inicial/ como por
ejemplo el (ominativo 5ingular.
'tros casos/ en cambio/ se construyen a9adiendo algunas letras al .inal de la palabra inicial.
Por ejemplo/ el 6cusativo singular se construye a9adiendo una &m) a la palabra inicial.
Para construir el 7ativo y 6blativo plural/ es necesario concatenar la palabra inicial 1sin la a
.inal2 con &is). Por ejemplo/ en el caso de la palabra Rosa/ se concatenara Ros 8 is.
T-(I-(7' -( ,"-(T6 L' 6(T-RI'R/ 5- PI7- R-6LIU6R -L 5I="I-(T- PR'=R6A6
Realice un programa cuya ventana tenga los siguientes elementos
13?2"n cuadro de te%to t%tPalabra.
13@27oce eti#uetas al menos correspondientes a los B casos en singular y plural.
13B2"n bot$n &7eclinar) llamado btn7eclinar.
-l programa .uncionar! de la siguiente .orma
13C2-l usuario introducir! una palabra en latn de la primera declinaci$n en el cuadro de
te%to/ y luego pulsar! el bot$n &7eclinar). -ntonces en las eti#uetas aparecer!n los
casos declinados de la palabra.
F d i Cdi Lib D i i
13D25i el usuario introduce una palabra #ue no termine en &a)/ entonces el programa dar!
un error/ ya #ue dicha palabra no es de la primera declinaci$n.
13E2Tenga en cuenta #ue la palabra introducida puede estar en mayGsculas o minGsculas.
PROGRAMACIN
JAVA
E'CEPCIONES
Ejercicio 1
Reali+ar un programa #ue le permita al usuario introducir una .rase/ una posici$n inicial y una
posici$n .inal. 1Tres cuadros de te%to llamados txt!rase) txtPos4ni y txtPos!in.
-l programa debe mostrar la subcadena contenida entre la posici$n inicial y la posici$n .inal
1use una eti#ueta eti.ubcadena2
-sto suceder! cuando se pulse un bot$n &6nali+ar) llamado btn"nali'ar.
-l c$digo de este programa puede generar errores de ejecuci$n 1e%cepciones2/ en el caso de
#ue el usuario no introdu+ca nada en el cuadro de te%to de la .rase/ o en el caso de #ue el
usuario introdu+ca un valor incorrecto de los cuadros de te%to de las posiciones.
-l programa debe ser capa+ de capturar las e%cepciones producidas y mostrar un mensaje de
error.
Ejercicio 2
Reali+ar un programa #ue pida las coordenadas de una recta/ es decir/ las coordenadas del
punto p3 1%3/ y32 y las coordenadas del punto p4 1%4/y42.
6s pues el programa tendr! cuatro cuadros de te%to txt51/ txt61/ txt52 y txt62 donde el
usuario introducir! las coordenadas.
-l programa debe calcular la distancia de la recta/ usando la siguiente .$rmula
Raz( (x2-x1)
2
+ (y2-y1)
2
)
69ada un bot$n &,alcular) llamado btnCalcular #ue realice el c!lculo. -l c$digo #ue introdu+ca
en este bot$n debe ser capa+ de capturar cual#uier tipo de e%cepci$n producida. Interesa #ue
apare+ca un mensaje indicando el tipo de error producido/ y el tipo de e%cepci$n.
Ejercicio 3
Realice un programa #ue le pida dos nGmeros al usuario. 6mbos nGmeros deben estar
comprendidos entre F y 3FF.
-l programa debe calcular la divisi$n y el resto del mayor entre el menor.
-l programa debe capturar todo tipo de e%cepciones producidas en el c$digo.
6dem!s/ debe hacer #ue si el usuario introduce un nGmero no comprendido entre F y 3FF/ el
c$digo genere una e%cepci$n propia
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
LA CLASE J#RAME
Ejercicio 1
Reali+ar un programa cuya ventana contanga los siguientes elementos
1332"n cuadro de te%to llamado t%tTitulo.
1342"n bot$n &,ambiar Ttulo) llamado btn,ambiarTitulo.
13>2"n bot$n &Aa%imi+ar) llamado btnAa%imi+ar.
13?2"n bot$n &Ainimi+ar) llamado btnAinimi+ar.
13@2"n bot$n &Restaurar) llamado btnRestaurar.
13B2"n cuadro de te%to llamado t%tPosicionV.
13C2"n cuadro de te%to llamado t%tPosicion<.
13D2"n bot$n &Aover) llamado btnAover.
13E2"n bot$n &,entrar) llamado btn,entrar.
14F2"n bot$n &-stilo Java) llamado btn-stiloJava.
1432"n bot$n &-stilo WindoJs) llamado btn-stiloWindoJs.
1442"n bot$n &Rojo) llamado btnRojo.
14>2"n bot$n &*erde) llamado btn*erde.
14?2"n bot$n &6+ul) llamado btn6+ul.
-l .uncionamiento del programa ser! el siguiente
14@25i el usuario pulsa el bot$n &,ambiar Titulo)/ el ttulo de la ventana cambiar!/
coloc!ndose como ttulo lo #ue el usuario haya escrito en el cuadro de te%to t%tTitulo.
14B25i el usuario pulsa el bot$n &Aa%imi+ar)/ la ventana se ma%imi+ar!.
14C25i el usuario pulsa el bot$n &Ainimi+ar)/ la ventana se minimi+ar!.
14D25i el usuario pulsa el bot$n &Restaurar)/ la ventana se restaurar!.
14E25i el usuario pulsa el bot$n &Aover)/ la ventana se colocar! en la posici$n de la pantalla
#ue venga indicada por los valores %/ y/ introducidos respectivamente en los cuadros
de te%to t%tPosicionV y t%tPosicion<.
1>F25i el usuario pulsa el bot$n &,entrar)/ la ventana se colocar! en el centro de la pantalla.
1>325i el usuario pulsa el bot$n &-stilo Java)/ entonces toda la ventana cambiar! a la
visuali+aci$n Java.
1>425i el usuario pulsa el bot$n &-stilo WindoJs)/ entonces toda la ventana cambiar! a la
visuali+aci$n WindoJs.
1>>25i el usuario pulsa uno de los botones de color/ entonces el .ondo de la ventana se
cambiar! al color indicado.
F d i Cdi Lib D i i
6dem!s/ el programa contar! con las siguientes caractersticas
1>?26l iniciarse el programa/ este debe pedir una contrase9a al usuario. 5i el usuario
introduce la contrase9a correcta/ entonces el usuario entrar! en el programa. -n caso
contrario el programa se cerrar!.
1>@26l .inali+ar el programa/ este debe pedir una con.irmaci$n al usuario
S7esea salir del programaT
5i el usuario responde 5/ entonces el programa .inali+ar!. -n caso contrario/ el programa
seguir! .uncionando.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
CUA!ROS !E VERI#ICACIN" (O$ONES !E OPCIN
Ejercicio 1
5e pide reali+ar un programa #ue tenga los siguientes elementos en la ventana principal
132 "n panel con el ttulo &Ingredientes). (o hace .alta #ue le de un nombre.
142 "n panel con el ttulo &Tama9o). (o hace .alta #ue le de un nombre.
1>2 ,uatro J,hecH;o% con los te%tos
d. &;acon) L nombre chH;acon
e. &6nchoas) L nombre chH6nchoas
.. &,ebolla) L nombre chH,ebolla
g. &Pimiento) L nombre chHPimiento
1D2 Tres JRadio;uttons con los te%tos
i. &Pe#ue9a) L nombre optPe#uenia
j. &Aediana) L nombre optAediana
H. &:amiliar) L nombre opt:amiliar
1342"n bot$n &Total) llamado btnTotal.
13>2"na eti#ueta con borde llamada etiResultado.
-l programa .uncionar! de la siguiente .orma
13?2-l usuario elegir! un tama9o para la pi++a #ue #uiere pedir. -ste tama9o puede ser
uno solo de los siguientes pe#ue9a/ mediana o .amiliar.
13@2-l usuario elegir! tambi0n los ingredientes #ue desee. Puede seleccionar uno o varios
ingredientes.
13B26l pulsar el bot$n Total/ el programa calcular! y mostrar! en la eti#ueta etiResultado el
precio de la pi++a/ teniendo en cuenta lo siguiente
"na pi++a pe#ue9a cuesta C euros.
F d i Cdi Lib D i i
"na pi++a mediana cuesta E euros.
"na pi++a .amiliar cuesta 33 euros.
5i se le a9ade como ingrediente ;acon/ hay #ue aumentar el precio de la pi++a en 3/@F
euros.
5i se le a9ade como ingrediente 6nchoas/ hay #ue aumentar el precio de la pi++a en
3/DF euros.
5i se le a9ade como ingrediente ,ebolla/ hay #ue aumentar el precio de la pi++a en
3/FF euros.
5i se le a9ade como ingrediente Pimiento/ hay #ue aumentar el precio de la pi++a en
3/4F euros.
Tenga en cuenta esto otro
13C26l ejecutar el programa/ debe estar seleccionada la opci$n pi++a .amiliar por de.ecto/ y
no debe estar seleccionada ninguno de los ingredientes.
13D26l iniciarse el programa/ debe aparecer un cuadro indicando el nombre del programa.
Por ejemplo PIUU-RX6 J6*6/ y el nombre del programador.
13E26l intentar cerrar el programa/ este debe pedir con.irmaci$n para salir. 5olo si el
usuario acepta salir del programa este se cerrar!.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
LIS$AS ) COM(OS
Ejercicio 1
5e pide reali+ar un programa #ue tenga el siguiente aspecto
-sta ventana contiene lo siguiente
14F2"n cuadro de lista con los siguientes productos 1y sus precios2
5istema de Locali+aci$n L 34F
,entro de ,ontrol L BF
Aodem =5A L ?@
-ste cuadro de lista se llamar! lstProductos.
1432"n cuadro de te%to donde se introducir!n las unidades #ue se envan/ llamado
t%t"nidades.
1442"n combo llamado cbo7estino donde tendremos los siguientes elementos
Pennsula
,anarias
-%tranjero
14>2"n combo llamado cboTipo-nvio donde tendremos los siguientes elementos
(ormal
"rgente
F d i Cdi Lib D i i
14?2"n bot$n &,alcular) llamado btn,alcular.
14@2"na eti#ueta con un borde llamada etiResultado.
14B2'tras eti#uetas in.ormativas.
-l programa .uncionar! de la siguiente .orma
14C2-l usuario marcar! un producto de los tres #ue aparecen en la lista.
14D2-l usuario indicar! el nGmero de unidades #ue se enviar!n del producto.
14E2-l usuario indicar! el tipo de destino.
1>F2-l usuario indicar! el tipo de envo.
1>326l pulsar ,alcular/ el programa mostrar! en la eti#ueta etiResultado el total del envo/
teniendo en cuenta lo siguiente
-l total del envo se calcula as
Total K 1"nidades N Precio del producto2 8 coste destino 8 coste tipo
-l ,oste de 7estino puede ser uno de los siguientes
Pennsula L 4F
,anarias L 4@
-%tranjero L >F
-l ,oste del Tipo de -nvo puede ser uno de los siguientes
(ormal L >
"rgente L 3F
Tenga en cuenta esto otro
1>425i se pulsa calcular cuando no hay seleccionado ningGn producto/ el programa
mostrar! un mensaje de error emergente indic!ndolo.
1>>25i las unidades son incorrectas/ debera mostrarse tambi0n un error.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
LIS$AS" COM(OS" MO!ELOS
Ejercicio 1
5e pide reali+ar un programa #ue tenga el siguiente aspecto
-sta ventana contiene lo siguiente
14D2"n cuadro de lista llamado lstAeses.
14E2*arios botones de opci$n con los siguientes nombres
dd. "n bot$n &Trimestre 3) llamado optTri3.
ee. "n bot$n &Trimestre 4) llamado optTri4.
... "n bot$n &Trimestre >) llamado optTri>.
gg. "n bot$n &Trimestre ?) llamado optTri?.
hh. Todos estos botones deben estar agrupados a trav0s de un objeto
;utton=roup al #ue llamaremos grupoTrimestres.
ii. Interesar! #ue estos botones est0n dentro de un panel.
1>B2"n bot$n &Rellenar) llamado btnRellenar.
1>C2"n bot$n &*aciar) llamado btn*aciar.
1>D2"na eti#ueta etiAes con un borde.
-l programa .uncionar! de la siguiente .orma
1>E2-l usuario elegir! una de las opciones Trimestre 3/ Trimestre 4/ Trimestre >/ Trimestre
?.
1?F26 continuaci$n el usuario pulsar! el bot$n Rellenar/ y entonces el cuadro de lista se
rellenar! con los meses correspondientes al trimestre elegido.
1?32Por ejemplo/ si el usuario elige el Trimestre 4 y pulsa el bot$n/ entonces el cuadro de
lista contendr! 6bril/ Aayo/ Junio.
1?42,uando el usuario pulse el bot$n *aciar/ el cuadro de lista se vaciar!.
F d i Cdi Lib D i i
1?>2,uando el usuario haga clic sobre un elemento de la lista/ este debe aparecer en la
eti#ueta etiAes.
Ejercicio 2
5e pide reali+ar un programa #ue tenga el siguiente aspecto
-sta ventana contiene lo siguiente
1??2"n combo llamado cboProgresion.
1?@2"n cuadro de te%to llamado t%tInicio.
1?B2"n cuadro de te%to llamado t%t:in.
1?C2"n cuadro de te%to llamado t%tIntervalo.
1?D2"n bot$n &Rellenar) llamado btnRellenar.
1?E2"na eti#ueta llamada etiResultado.
1@F2"n bot$n &*aciar) llamado btn*aciar.
-l programa .uncionar! de la siguiente .orma
1@32-l usuario introducir! un nGmero en t%tInicio.
1@42Luego introducir! otro nGmero en t%t:in.
1@>2Tambi0n introducir! un nGmero en t%tIntervalo.
1@?26l pulsar el bot$n Rellenar/ el combo se rellenar! con el listado de nGmeros
comprendidos entre el nGmero inicial y el nGmero .inal con intervalo el indicado.
1@@2"n ejemplo
ddd. -l usuario introduce en t%tInicio un 4
eee. -l usuario introduce en t%t:in un 34
.... -l usuario introduce en t%tIntervalo un >
ggg. 6l pulsar el bot$n Rellenar/ el combo debe rellenarse con los siguientes
nGmeros 4/ @/ D/ 33
hhh. 'bserva/ del 4 al 34 saltando de > en >.
1B326l elegir cual#uiera de los nGmeros en el combo/ este debe mostrarse en la eti#ueta
etiResultado.
1B426l pulsarse el bot$n &*aciar) el combo se vacia.
6 tener en cuenta.
1B>25i el usuario introduce algo #ue no sea un nGmero en los cuadros de te%to/ el programa
debera mostrar un error.
1B?2-l nGmero inicial debe ser menor #ue el nGmero .inal. -n caso contrario el programa
debe mostrar un error.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
J$OGGLE(U$$ONS
Ejercicio 1
Realice un programa cuya ventana tenga el siguiente aspecto
I Los botones numerados desde el 3 al B son JToggle;uttons. 5us nombres son
respectivamente boton"no/ boton7os/ etcY
I Tres botones normales
o 7esactivar Todos. (ombre btn7esactivarTodos
o 6ctivar Todos. (ombre btn6ctivarTodos
o Total. (ombre btnTotal
I < una eti#ueta con borde llamada etiResultado.
-l programa .uncionar! de la siguiente .orma
I ,uando el usuario pulse Total/ en la eti#ueta debe aparecer la suma de los nGmeros de
los botones seleccionados. Por ejemplo/ si est!n seleccionados el 4 y el ?/ aparecer!
un B.
I 5i se pulsa el bot$n 7esactivar Todos/ todos los botones activados se desactivar!n.
I 5i se pulsa el bot$n 6ctivar Todos/ se activar!n todos los botones.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
JSLI!ER
Ejercicio 1
"na empresa de productos #umicos necesita calcular la cantidad de agua y sales #ue necesita
me+clar para .abricar un detergente. Para ello hay #ue tener en cuenta tres .actores
- Litros #ue se #uieren .abricar. 1-s un valor entre 3 y 3FF2
- ,alidad del detergente. 1-s un valor entre F y 3F2
- 7ensidad deseada. 1-s un valor entre @F y 4FF2
La cantidad de agua necesaria viene dada por la siguiente .$rmula
Litros de agua K 4 N Litros a :abricar 8 ,alidad O 7ensidad
La cantidad de sales necesaria viene dada por la siguiente .$rmula
5ales K 1,alidad N Litros a :abricar2 O 13FF N 7ensidad2

5e pide reali+ar un programa cuya ventana contenga lo siguiente
- "n J5lider llamado desli'ador-itros #ue represente los litros a .abricar. 5us valores
estar!n comprendidos entre 3 y 3FF. -l valor inicial del desli+ador ser! @F.
- "n J5lider llamado desli'adorCalidad #ue represente la calidad del detergente. 5us
valores estar!n comprendidos entre F y 3F. -l valor inicial ser! @.
- "n J5lider llamado desli'ador#ensidad #ue represente la densidad deseada. 5us
valores estar!n comprendidos entre @F y 4FF. -l valor inicial ser! 3FF.
- "na eti#ueta con borde llamada eti-itros donde aparecer! la cantidad de litros elegida
en el desli+ador de litros.
- "na eti#ueta con borde llamada etiCalidad donde aparecer! la cantidad de calidad
elegida en el desli+ador de calidad.
- "na eti#ueta con borde llamada eti#ensidad donde aparecer! la cantidad de densidad
elegida en el desli+ador de calidad.
- "na eti#ueta con borde eti-itros"gua/ #ue contenga el total de litros de agua
calculados.
- "na eti#ueta con borde eti.ales/ #ue contenga el total de sales calculados.
- *arias eti#uetas in.ormativas O algGn panel.
La ventana puede tener el siguiente aspecto
F d i Cdi Lib D i i
-l programa .uncionar! de la siguiente .orma
- -l usuario arrastrar! los desli+adores y autom!ticamente aparecer! en las eti#uetas los
valores de cada desli+ador y la cantidad total de aguas y sales calculada.
F d i Cdi Lib D i i
-l usuario arrastra los
desli+adores...
...Los valores de las eti#uetas
cambian...
...5e calcula autom!ticamente
los totales...
PROGRAMACIN
JAVA
JSPINNER
Ejercicio 1
5e propone hacer un juego sencillo/ #ue simule la apertura de una caja a trav0s de una
combinaci$n.
Para ello/ debes crear una ventana como la #ue sigue
-sta ventana contiene los siguientes elementos
132 Tres J5pinner a los #ue se les llamar! spi,entenas/ spi7ecenas y spi"nidades. -stos
J5pinner solo admitir!n los valores entre F y E.
142 "n bot$n btn6brir.
1>2 "na eti#ueta con borde llamada etiResultado.
:uncionamiento del programa
1?2 La clave de apertura ser! la siguiente 4?B 1-sto no lo sabe el usuario2
1@2 -l usuario modi.icar! los valores de los J5pinner y luego pulsar! el bot$n 6brir.
1B2 5i los valores de los J5pinner coinciden con la clave/ 4?B/ entonces en la eti#ueta debe
aparecer el mensaje &,aja 6bierta).
1C2 5i los valores de los J5pinner .orman un nGmero menor #ue 4?B/ entonces en la
eti#ueta debe aparecer el mensaje &-l nGmero secreto es mayor).
1D2 5i los valores de los J5pinner .orman un nGmero mayor #ue 4?B/ entonces en la
eti#ueta debe aparecer el mensaje &-l nGmero secreto es menor).
(ota
1E2 Ten en cuenta #ue el valor obtenido de un J5pinner no es un nGmero. 5i #uieres
obtener el nGmero entero del J5pinner tienes #ue usar un c$digo como este
int x;
F d i Cdi Lib D i i
x = Integer.pareInt(pi!a"or.get!a"#e().to$tring()) ;
13F25ea el nGmero 6 las centenas/ el ; las decenas y el , las unidades. Para calcular el
nGmero correspondiente hay #ue hacer el siguiente c!lculo
( K 6 N 3FF 8 ; N 3F 8 ,
-jemplo de .uncionamiento
F d i Cdi Lib D i i
5eleccionas los nGmeros...
Pulsas 6brir...
-n la eti#ueta aparece un mensaje
indicando si acertaste o el nGmero es
menor o mayor #ue la clave.
PROGRAMACIN
JAVA
JSROLL(AR
Ejercicio 1
Imagine #ue le encargan reali+ar un programa #ue contenga un ecuali+ador. Para permitir al
usuario el control de las distintas .recuencias se usar!n varias barras de despla+amiento.
La ventana del programa #ue debe construir debe ser similar a la siguiente
-sta ventana contiene lo siguiente
132 ,inco eti#uetas con borde #ue puede llamar eti:recuencia3/ eti:recuencia4/ etcY
142 ,inco barras de despla+amiento #ue tienen de nombre des:recuencia3/
des:recuencia4/ etcY
1>2 ,inco cuadros de veri.icaci$n #ue puede llamar chH:recuencia3/ chH:recuencia4/ etcY
1?2 "n panel con ttulo y dentro de 0l tres botones de opci$n a los #ue puede llamar
optPelcula/ opt,oncierto y optPlano. 1Para estos tres botones de radio necesitar! un
objeto del tipo ;utton=roup al #ue puede llamar grupo-cuali+aci$n2
-l programa .uncionar! de la siguiente .orma
1@2 Las cinco barras de despla+amiento deben tener valores comprendidos entre un
mnimo de F y un m!%imo de 3F. -l incremento unitario debe ser de 3 y el incremento
en blo#ue de 4.
1B2 ,ada ve+ #ue se mueva una barra/ en su eti#ueta correspondiente aparecer! el valor
de dicha barra 1un valor #ue estar! entre F y 3F2 ,omprueba #ue cuando el usuario
active al m!%imo una barra en la eti#ueta apare+ca un 3F.
1C2 Las casillas de veri.icaci$n indican el blo#ueo o no de cada barra. 5i el usuario activa
una casilla de veri.icaci$n/ entonces su barra correspondiente #uedar! blo#ueada de
.orma #ue no pueda ser modi.icada. ,uando se vuelva a desactivar la casilla la barra
se volver! a activar 1"se el m0todo set(nabled2
1D2 Las opciones de ecuali+aci$n prede.inidas permitir!n colocar las barras de
despla+amiento en unos valores prede.inidos. ,oncretamente
F d i Cdi Lib D i i
a. 5i el usuario activa la opci$n Pel2cula/ las barras #uedar!n con los siguientes
valores respectivamente 4/ @/ D/ @/ 4
b. 5i el usuario activa la opci$n Concierto/ las barras #uedar!n con los siguientes
valores respectivamente E/ @/ 3/ @/ E
c. 5i el usuario activa la opci$n Plano/ todas las barras se colocar!n a @.
1E2 ,uando el programa se inicie/ todas las barras deben estar a @ y la opci$n Plano debe
estar activada.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
(ARRA !E MEN*S
Ejercicio 1
Le encargan un programa #ue controle las luces de las o.icinas de un edi.icio. ,oncretamente/
se tienen #ue controlar tres o.icinas/ y cada una de ellas tiene dos luces principales y una de
seguridad.
La ventana principal del programa debe mostrar tres paneles como el #ue sigue
5e supondr! #ue las distintas luces de cada o.icina se pueden encender o apagar activando o
desactivando los cuadros de veri.icaci$n.
-l programa adem!s debe de contar con un menG con una opci$n llamada &6ctivaci$n) y otra
llamada &In.o)
La opci$n 6ctivaci$n contendr! las siguientes opciones
14F2La opci$n &6pagar Todas) desactivar! todos los cuadros de veri.icaci$n de las luces.
1432La opci$n &-ncender Todas) activar! todos los cuadros de veri.icaci$n de las luces.
1442La opci$n &7ia) contiene las siguientes subopciones
F d i Cdi Lib D i i
14>25i se activa la opci$n &7ia L '.icina 3)/ entonces se encender!n 1activar!n2 las luces
principal y secundaria de la o.icina 3/ y se apagar! 1desactivar!2 la lu+ de seguridad de
dicha o.icina.
14?25i se activa la opci$n &7ia L '.icina 4)/ entonces se encender!n 1activar!n2 las luces
principal y secundaria de la o.icina 4/ y se apagar! 1desactivar!2 la lu+ de seguridad de
dicha o.icina.
14@25i se activa la opci$n &7ia L '.icina >)/ entonces se encender!n 1activar!n2 las luces
principal y secundaria de la o.icina >/ y se apagar! 1desactivar!2 la lu+ de seguridad de
dicha o.icina.
14B25i se activa la opci$n &7ia L Todas)/ entonces todas las o.icinas tendr!n las luces
principal y secundarias encendidas/ y apagadas las luces de seguridad.
La opci$n (oche contiene las siguientes opciones
14C25i se activa la opci$n &(oche L '.icina 3)/ entonces se apagar!n las luces principal y
secundaria de la o.icina 3 y se encender! la lu+ de seguridad.
14D25i se activa la opci$n &(oche L '.icina 4)/ entonces se apagar!n las luces principal y
secundaria de la o.icina 4 y se encender! la lu+ de seguridad.
14E25i se activa la opci$n &(oche L '.icina >)/ entonces se apagar!n las luces principal y
secundaria de la o.icina > y se encender! la lu+ de seguridad.
1>F25i se activa la opci$n &(oche L Todas)/ entonces se apagar!n todas las luces
principales y secundarias de todas las o.icinas y se encender!n todas las luces de
seguridad.
La opci$n 5alir permitir! .inali+ar el programa.
F d i Cdi Lib D i i
La opci$n In.o del menG contendr! lo siguiente
1>32La opci$n Principales mostrar! un J'ptionPane donde se indi#ue cuantas luces
principales hay encendidas ahora mismo y cuantas apagadas.
1>42La opci$n 5ecundarias mostrar! un J'ptionPane donde se indi#ue cuantas luces
secundarias hay encendidas ahora mismo y cuantas apagadas.
1>>2La opci$n 5eguridad mostrar! un J'ptionPane donde se indi#ue cuantas luces de
seguridad hay encendidas y cuantas apagadas.
1>?2La opci$n 6cerca de... mostrar! un J'ptionPane #ue contendr! el nombre del
programa y del programador.
MEJORA OPCIONAL
5era interesante #ue cada cuadro de veri.icaci$n estuviera acompa9ado de una pe#ue9a
imagen #ue representara una bombilla encendida o apagada segGn el estado de la lu+.
"se eti#uetas para contener las im!genes. -n el EJERCICIO !E INVES$IGACIN 2 puede
encontrar m!s in.ormaci$n sobre esto.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
(ARRA !E +ERRAMIEN$AS
Ejercicio 1
5e va a mejorar el programa de control de luces de la hoja anterior/ a9adi0ndole una barra de
herramientas.
-l programa anterior tena un menG con las siguientes opciones
F d i Cdi Lib D i i
-l objetivo del ejercicio es crear una barra de herramientas #ue contenga un bot$n para
algunas de las opciones principales del menG. ,oncretamente/ la barra de herramientas
contendr! los siguientes botones
132 "n bot$n para la opci$n 6pagar Todas.
142 "n bot$n para la opci$n -ncender Todas.
1>2 "n bot$n para activar todas las o.icinas en modo &da) 1es e#uivalente a la opci$n
"cti$acin 7 #2a 7 Todas2
1?2 "n bot$n para activar todas las o.icinas en modo &noche) 1es e#uivalente a la opci$n
"cti$acin 7 Noc,e 7 Todas2
1@2 "n bot$n para conseguir in.ormaci$n sobre las luces principales 14nfo 7 Principales2
1B2 "n bot$n para conseguir in.ormaci$n sobre las luces secundarias 14nfo 7 .ecundarias2
1C2 "n bot$n para conseguir in.ormaci$n sobre las luces de seguridad 14nfo 7 .eguridad2
-n cada actionPerformed de cada bot$n de la barra de herramientas se tiene #ue programar el
mismo c$digo #ue el de la opci$n del menG correspondiente.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
MEN*S CON$E'$UALES
Ejercicio 1
5e va a a9adir una mejora m!s en el programa de luces reali+ado en las hojas anteriores.
,oncretamente se a9adir! un menG conte%tual #ue contenga las siguientes opciones
6pagar Todas
-ncender Todas
IIIIIIIIIIIIIIIIIII 15eparador2
Aodo 7a
Aodo (oche
IIIIIIIIIIIIIIIIIII 15eparador2
Principales
5ecundarias
5eguridad
-ste menG aparecer! cuando el usuario haga clic con el bot$n derecho del rat$n sobre el .ondo
de la ventana de su programa. -s decir/ tendr! #ue programar el clic del rat$n sobre el
.ormulario.
Las opciones del menG conte%tual coinciden con las opciones de la barra de menGs de la
siguiente .orma
6pagar Todas L 6ctivaci$n O 6pagar Todas
-ncender Todas L 6ctivaci$n O -ncender Todas
Aodo 7a L 6ctivaci$n O 7a O Todas
Aodo (oche L 6ctivaci$n O 7a O (oche
Principales L In.o O Principales
5ecundarias L In.o O 5ecundarias
5eguridad L In.o O 5eguridad
Programe dichas opciones de .orma #ue se realice la operaci$n correspondiente a su opci$n
del menG hermana.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
!IALOGO A(RIR,GUAR!AR #IC+ERO
No-./ I0ici.1e/
5upongamos #ue tiene en su proyecto un objeto del tipo J:ile,hooser llamado elegir!ic,ero.
6 trav0s del m0todo get.elected!ile obtiene el .ichero #ue ha elegido el usuario. -l m0todo
get.elected!ile devuelve en realidad un objeto del tipo :ile.
6s pues/ puede hacer lo siguiente
int rep; //#na rep#eta
%i"e &; //#n &ic'ero
rep=e"egir%ic'ero.'o()pen*ia"og(t'i);
i& (rep==+%i"e,'ooer.-..R)!/0).1I)2) 3
& = e"egir%ic'ero.get$e"ecte4%i"e();
5
5i observa este c$digo/ ver! #ue se crea una variable . de tipo :ile. < . es el .ichero elegido por
el usuario en el cuadro de di!logo 6brir.
Los objetos del tipo :ile poseen diversos m0todos #ue permiten obtener in.ormaci$n sobre el
.ichero y reali+ar algunas operaciones con ellos. He a#u algunos m0todos #ue se pueden usar
2e-N.3e%& 4 !e56e15e e1 0o37re 8e1 9ic:ero;
Por ejemplo
$tring no6bre = &.get2a6e();
//7a 8ariab"e no6bre conten4ra e" no6bre 4e" &ic'ero &
2e-P.-:%& 4 !e56e15e e1 c.3i0o co3<1e-o 8e1 9ic:ero;
Por ejemplo
$tring ca6ino = &.get.at'();
//7a 8ariab"e ca6ino conten4ra e" ca6ino 4e" &ic'ero &
e=i/-/%& 4 !e56e15e 5er8.8ero o 9.1/o /e2>0 e=i/-. o 0o;
Por ejemplo
i& (&.exit() == tr#e ) 3
+)ption.ane.'o(9eage*ia"og(n#"": ;/" &ic'ero & exite<);
5 e"e 3
+)ption.ane.'o(9eage*ia"og(n#"": ;/" &ic'ero & no exite<);
5
8e1e-e%& 4 (orr. e1 9ic:ero
Por ejemplo
&.4e"ete(); //=orra e" &ic'ero &
F d i Cdi Lib D i i
Ejercicio
Teniendo en cuenta las ideas e%puestas/ reali+ar un programa cuya ventana tenga el siguiente
aspecto
-l programa .uncionar! de la siguiente .orma
13325i el usuario pulsa el bot$n &In.o :ichero)/ aparecer! el cuadro de di!logo
1J:ile,hooser2 6brir/ donde el usuario podr! elegir un .ichero. "na ve+ #ue el usuario
elija un .ichero y pulse el bot$n &6brir)/ aparecer!n los datos del .ichero en las distintas
eti#uetas.
1342-n la eti#ueta nombre del .ichero aparecer! el nombre del .ichero 1use getName892
13>2-n la eti#ueta camino del .ichero aparecer! el camino completo del .ichero 1use
getPat,892
13?2-n la eti#ueta e%isteT aparecer! un mensaje indicando si el .ichero e%iste o no 1use
exists892 Zueda claro #ue si el .ichero no e%iste no se puede visuali+ar ni su nombre ni
su camino.
13@25i el usuario/ en cambio/ pulsa el bot$n &-liminar :ichero)/ entonces el programa
mostrar! el cuadro de di!logo &6brir) y una ve+ #ue el usuario elija un .ichero/ el
programa lo borrar! 1use delete892
Pida una con.irmaci$n antes de eliminar el .ichero. Tenga cuidado al comprobar esta
opci$n.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
VARIA(LES GLO(ALES
Ejercicio 1
Reali+ar un programa cuya ventana contenga los siguientes elementos
I "n cuadro de te%to llamado t%t(umero.
I "n bot$n &6cumular) llamado btn6cumular.
I "n bot$n &Resultados) llamado btnResultados.
I "n bot$n &Reiniciar) llamado btnReiniciar.
I "na eti#ueta con borde llamada etiAayor.
I "na eti#ueta con borde llamada eti5uma.
I "na eti#ueta con borde llamada etiAedia.
I "na eti#ueta con borde llamada eti,uenta.
-l programa .uncionar! de la siguiente .orma
I -l usuario introducir! un nGmero en el cuadro de te%to t%t(umero y luego pulsar! el
bot$n &6cumular). -n ese momento se borrar! el nGmero introducido en el cuadro de
te%to.
I -ste proceso lo repetir! el usuario varias veces.
I ,uando el usuario pulse el bot$n &Resultados)/ deben aparecer en las eti#uetas los
siguientes datos
o -l nGmero mayor introducido hasta el momento.
o La suma de los nGmeros introducidos hasta el momento.
o La media de los nGmeros introducidos hasta el momento.
o ,uantos nGmeros ha introducido el usuario hasta el momento.
I -l bot$n &Reiniciar) reinicia el proceso borrando todo lo #ue hubiera en las eti#uetas de
resultados y reiniciando las variables globales.
*ariables globales a usar
Para #ue sirva de ayuda/ se recomienda #ue use las siguientes variables globales
I "na variable double llamada maor. ,ontendr! en todo momento el nGmero mayor
introducido.
I "na variable double llamada suma. ,ontendr! en todo momento la suma de los
nGmeros introducidos.
I "na variable int llamada cuenta. ,ontendr! en todo momento la cuenta de todos los
nGmeros introducidos hasta ahora.
6l comen+ar el programa/ y al pulsar el bot$n &Reiniciar)/ ser! necesario #ue estas tres
variables se inicien a F.
(ota. 5e supondr! #ue todos los nGmero introducidos ser!n mayores o iguales a F.
F d i Cdi Lib D i i
Ejercicio 2
Reali+ar un programa #ue contenga los siguientes elementos en su ventana
I "n cuadro de te%to llamado t%t(umero.
I "n cuadro de te%to llamado t%t6puesta
I "n bot$n &Jugar) llamado btnJugar.
I "na eti#ueta llamada eti(umero.
I "na eti#ueta llamada etiResultado #ue contendr! inicialmente un &3FF).
-l programa .uncionar! de la siguiente .orma
I 5e trata de un juego de adivinaci$n. -l usuario introducir! un nGmero entre 3 y 3F en el
cuadro de te%to t%t(umero.
I Luego introducir! una apuesta en el cuadro de te%to t%t6puesta.
I < a continuaci$n pulsar! el bot$n &Jugar).
I -l programa calcular! entonces un nGmero al a+ar entre 3 y 3F y lo mostrar! en la
eti#ueta eti(umero.
I 5i el nGmero introducido por el usuario coincide con el nGmero elegido al a+ar por la
m!#uina/ entonces el usuario gana y se le debe sumar lo apostado a la cantidad #ue
tena en dicho momento. 5i el usuario pierde entonces se le debe restar lo apostado a
la cantidad #ue tena. -l total #ue le #uede debe aparecer en la eti#ueta resultado.
I 6l empe+ar el programa el usuario tiene 3FF euros de bote.
Las variables globales a usar son las siguientes
I 5olo se necesita una variable global de tipo double a la #ue puedes llamar ganancias.
-sta variable estar! iniciali+ada al comien+o del programa a 3FF.
Para hacer #ue el ordenador calcule un nGmero aleatorio entre 3 y 3F debes usar el siguiente
c$digo
int n; //e" n#6ero
4o#b"e a"eatorio;
a"eatorio = 9at'.ran4o6();
a"eatorio = a"eatorio > 10;
a"eatorio = 9at'.&"oor(a"eatorio);
a"eatorio = a"eatorio + 1;
n = (int) a"eatorio;
1A!s in.ormaci$n sobre la generaci$n de nGmeros aleatorios en el -jercicio de Investigaci$n
([>2
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
CEN$RALI?AR C!IGO
Ejercicio 1
Realice un programa cuya ventana tenga el siguiente aspecto
-sta ventana consta de los siguientes elementos
132 "n cuadro de te%to t%tHoras #ue contiene un F.
142 "n cuadro de te%to t%tAinutos #ue contiene un F.
1>2 *arias eti#uetas de in.ormaci$n. "na contiene la palabra &Horas)/ otra contiene la
palabra &Ainutos) y otra contiene el smbolo dos puntos 12.
1?2 "n cuadro de te%to vaco al #ue se le llamar! t%t,antidadAin
1@2 "n bot$n con el signo 8 al #ue se le llamar! btn5umar.
1B2 "n bot$n con el signo L al #ue se le llamar! btnRestar.
6dem!s
1C2 "na barra de herramientas con el nombre barra:erramientas/ #ue contenga tres
botones
h. "n bot$n herramientas5umar.
i. "n bot$n herramientasRestar.
j. "n bot$n herramientasReiniciar.
13326signe a estos botones el icono #ue #uiera. Por ejemplo/ iconos de relojes.
6dem!s
F d i Cdi Lib D i i
1342La ventana contendr! una barra de menGs a la #ue puede llamar barra;enus. -sta
barra contiene una opci$n &6cci$n) a la #ue puede llamar menu"ccion.
13>27entro de la opci$n 6cci$n/ tendr! estas otras opciones
13?2"na opci$n &5umar) a la #ue llamar! menu.umar.
13@2"na opci$n &Restar) a la #ue llamar! menu/estar.
13B2"na opci$n &Reiniciar) a la #ue llamar! menu/einiciar.
13C2< una opci$n &5alir) a la #ue llamar! menu.alir.
13D26dem!s tendr! una serie de separadores para mejorar la presentaci$n del menG.
-l programa .uncionar! de la siguiente .orma
13E2-l usuario introducir! en el cuadro de te%to t%t,antidadAin una cantidad de minutos.
14F25i luego/ pulsa el bot$n sumar/ o bien activa el bot$n sumar de la barra de
herramientas/ o bien activa la opci$n sumar del menG/ entonces los minutos escritos se
suman a la hora #ue se muestra.
1432-n cambio/ si el usuario pulsa el bot$n restar/ o bien activa el bot$n restar de la barra
de herramientas/ o bien activa la opci$n restar de la barra de menGs/ entonces los
minutos escritos se restan a la hora #ue se muestra.
14425i el usuario pulsa el bot$n reiniciar de la barra de menGs o pulsa la opci$n reiniciar del
menG/ entonces la hora #ue se muestra se reinicia a las FFFF horas.
F d i Cdi Lib D i i
"n ejemplo
F d i Cdi Lib D i i
-l usuario introduce EF
minutos y luego pulsa
&5umar)
-ntonces aparece la nueva
hora 1en .ormato
horaminutos2
A $ENER EN CUEN$A
14>25e aconseja #ue realice un procedimiento 5umar #ue se encargue de hacer la suma de
minutos.
14?2Realice tambi0n un procedimiento Restar #ue se encargue de hacer la resta de
minutos.
14@2Realice un procedimiento Reiniciar #ue se encargue de reiniciar la hora.
F d i Cdi Lib D i i
5upongamos ahora #ue el
usuario introduce un ?F y
luego pulsa &Restar)
La hora actual se actuali+a
despu0s de restar los ?F
minutosY
14B2Llame desde los distintos eventos al procedimiento #ue corresponda.
14C25e aconseja tener una variable global ,ora #ue contenga en todo momento la hora
actual.
14D25e aconseja tener una variable global minutos #ue contenga en todo momento los
minutos actuales.
14E2Para calcular la nueva hora use estos algoritmos
5umar minutosY
5upongamos #ue la hora actual sea las 3?4@
< #ue se #uiera sumar CF minutos
Primero se hace el c!lculo total de minutos 3? N BF 8 4@ K DB@
Luego se suman los minutos DB@ 8 CF K E>@
-l resultado se divide entre BF y ya tenemos la nueva hora E>@ O BF K 15
-l resto de la divisi$n son los minutos E>@ M BF K 35
La nueva hora por tanto es las 15 @ 35
Restar minutosY
5upongamos #ue la hora actual sea las 3?4@
< #ue se #uiera restar CF minutos
Primero se hace el c!lculo total de minutos 3? N BF 8 4@ K DB@
Luego se le restan los minutos DB@ L CF K CE@
-l resultado se divide entre BF y ya tenemos la nueva hora CE@ O BF K 13
-l resto de la divisi$n son los minutos CE@ M BF K 15
La nueva hora por tanto es las 13 @ 15
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
CUA!ROS !E !ILOGO
Ejercicio 1
5e pide reali+ar un programa #ue .acilite el c!lculo del precio de implantaci$n de un
determinado so.tJare en una empresa.
5e pretende calcular el coste de instalaci$n/ el coste de .ormaci$n y el coste de mantenimiento.
Para ello/ debe reali+ar un proyecto con una ventana como la #ue sigue
-sta ventana tiene tres cuadros de te%tos/ para cada uno de los costes. 5i se desea/ se puede
introducir directamente cada uno de los costes en estos cuadros de te%tos y al pulsar el bot$n
,alcular aparecer! la suma de los tres en la eti#ueta Total.
Por otro lado/ cada cuadro de te%to tiene asignado un bot$n con tres puntos #ue permitir!
.acilitar el c!lculo de cada coste a trav0s de un cuadro de di!logo.
Cuadro de di<logo Coste de 4nstalacin
-n el caso de #ue se pulse el bot$n correspondiente al ,oste de Instalaci$n/ el cuadro de
di!logo #ue debe aparecer tiene #ue ser el siguiente 1ha+ #ue sea modal2
6#u se indicar! el nGmero de copias de la versi$n simpli.icada del programa a instalar/ y el
nGmero de copias de la versi$n completa. 6l pulsar el bot$n 6ceptar/ se mostrar! el coste total
F d i Cdi Lib D i i
por instalacin en el cuadro de te%to correspondiente de la ventana principal y luego se cerrar!
el cuadro de di!logo.
Para calcular el coste de instalaci$n/ ten en cuenta lo siguiente
,ada copia de la versi$n simpli.icada cuesta 34F euros/ y cada copia de la versi$n completa
cuesta 3DF euros. 5i por ejemplo/ el usuario introduce 3 copia simpli.icada y 4 de la versi$n
completa/ el coste total ser!
coste por instalaci$n K 34F N 3 8 3DF N 4 K ?DF
5i se pulsa el bot$n ,ancelar/ el cuadro de di!logo se cierra y no se muestra nada en el cuadro
de te%to del coste de instalaci$n de la ventana principal.
Cuadro de di<logo Coste de !ormacin
-n el caso de #ue se pulse el bot$n correspondiente al ,oste de :ormaci$n/ el cuadro de
di!logo #ue debe aparecer tiene #ue ser el siguiente 1ha+ #ue sea modal2
-l coste de .ormaci$n se calcular! multiplicando el nGmero de alumnos por el nGmero de horas
por 3F euros.
Por ejemplo/ si el usuario introduce > alumnos y 34 horas/ el coste por .ormaci$n ser!
coste por .ormaci$n K 4 N 34 N 3F K 4?F
6l pulsar el bot$n 6ceptar/ se calcular! dicho coste y se introducir! en el cuadro de te%to del
coste de .ormaci$n de la ventana principal 1luego el cuadro de te%to se cerrar!2.
5i se pulsa el bot$n ,ancelar/ el cuadro de di!logo simplemente se cerrar!/ sin #ue ocurra
nada m!s.
Cuadro de di<logo Coste de ;antenimiento
-n el caso de #ue se pulse el bot$n correspondiente al ,oste de Aantenimiento/ el cuadro de
di!logo #ue debe aparecer tiene #ue ser el siguiente 1ha+ #ue sea modal2
F d i Cdi Lib D i i
6l pulsar 6ceptar/ el programa calcular! el coste de mantenimiento y lo presentar! en el cuadro
de te%to correspondiente de la ventana principal 1y luego se cerrar! el cuadro de di!logo2
La .orma de calcular el coste de mantenimiento es la siguiente
132 5i se elige un mantenimiento 6nual/ entonces el coste ser! de BFF euros.
142 5i se elige un mantenimiento 5emestral/ entonces el coste ser! de >@F euros.
1>2 5i se elige un mantenimiento del tipo Puesta en funcionamiento entonces el coste ser!
de 4FF euros.
5i se pulsa el bot$n ,ancelar/ el cuadro de di!logo se cierra sin m!s.
MEJORAS
"uda
69ade un bot$n a la ventana principal con esta .orma
6l pulsar este bot$n/ aparecer! un cuadro de di!logo de ayuda con este aspecto 1ha+ #ue no
sea modal y #ue est0 siempre por encima de la ventana principal
F d i Cdi Lib D i i
6l pulsar el bot$n ,errar/ el cuadro de di!logo simplemente se cerrar!.
Para hacer el te%to/ usa el objeto &TextPane/ y su propiedad text. -ste objeto permite crear
cuadros con gran cantidad de te%to. Ten en cuenta #ue cuando a9adas un &TextPane este
aparecer! dentro de un &.crollPane.
Pantalla de .plas, 8Presentacin9
5e a9adir! un nuevo cuadro de di!logo al proyecto #ue servir! como pantalla de presentaci$n
1a estos cuadros de di!logo se les suele denominar .plas,2
7ise9e este cuadro de di!logo como #uiera. Puede a9adir varias im!genes/ colocar el te%to
donde #uiera/ etc.
7ebe mostrar este cuadro de di!logo al comen+ar el programa 1en el evento =indo=Opened
del .ormulario2
5i #uiere mostrar el cuadro de di!logo de la presentaci$n en el centro de la pantalla/ puede
usar este c$digo 1se supone #ue el cuadro de di!logo se llama dialogoPres2
int x=(int) (1oo"?it.get*e&a#"t1oo"?it().get$creen$ize().get@i4t'()/2 - 4ia"ogo.re.get@i4t'()/2);
int y=(int) (1oo"?it.get*e&a#"t1oo"?it().get$creen$ize().getAeig't()/2 - 4ia"ogo.re.getAeig't()/2);
4ia"ogo.re.et7ocation(x:y);
-l cuadro de di!logo debe tener un bot$n ,errar/ o bien/ debe tener la posibilidad de cerrarse
cuando el usuario haga clic sobre 0l en cual#uier parte.
P.r. 3ejor.r /6 c6.8ro 8e 8iA1o2o 8e <re/e0-.ciB0" /e reco3ie08. C6e .c-i5e 1.
<ro<ie8.8 8e1 c6.8ro 8e 8iA1o2o 11.3.8. undecorated; E/-. <ro<ie8.8 oc61-. 1. 7.rr. 8e
-D-61o 8e1 c6.8ro 8e 8iA1o2o;
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
!ISEEO !E VEN$ANA !ES!E C!IGO
Ejercicio 1
Realice un proyecto cuya ventana tenga el siguiente dise9o. -ste dise9o lo tiene #ue hacer
-o-.13e0-e 8e/8e cB8i2o/ sin usar la ventana de dise9o del (et;eans
Tenga en cuenta lo siguiente
- La ventana debe tener como ttulo &-jercicio 3)
- -l tama9o de la ventana al arrancar el programa debe ser de >@F % ?FF
- Haga #ue la ventana apare+ca en el centro de la pantalla.
- -l recuadro de color verde con el te%to R-5"LT67' es una eti#ueta.
- -l bot$n con el te%to &metrosOseg) es un JToggle;utton y debe estar activado al
arrancar el programa.
- -n la parte in.erior de la ventana hay un J5lider. 5u valor mnimo ser! F y su valor
m!%imo ser! 3FF. -l valor inicial del J5lider tiene #ue ser 4F.
- -l J5lider debe mostrar sus marcas 1m0todo setPaintTicks2 y la separaci$n entre
marcas debe ser de @ 1m0todo set;inorTick.pacing2
Ejercicio 2
Realice un proyecto cuya ventana principal tenga el siguiente dise9o. -ste dise9o lo tiene #ue
hacer 8irec-.3e0-e 8e/8e cB8i2o/ sin usar la ventana de dise9o del (et;eans.
F d i Cdi Lib D i i
Tenga en cuenta lo siguiente
- La ventana debe tener el ttulo &-jercicio 4)
- -l tama9o de la ventana debe ser de >FF%>FF
- La ventana debe aparecer en el centro de la pantalla al arrancar el programa.
- -n la parte derecha la ventana contiene un JList con las ocho provincias andalu+as.
- -n la parte i+#uierda la ventana contiene un J,ombo;o% con unos tipos de artculos.
1-l combo se muestra desplegado para #ue puedas ver la lista de tipos de artculos2
- -n la parte in.erior hay una eti#ueta vaca con color ,<6( de .ondo.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
ASIGNACIN !E EVEN$OS !ES!E C!IGO
Ejercicio 1
Realice un programa para calcular el !rea y el permetro de un crculo.
La ventana del programa debe tener un aspecto parecido al siguiente
-l usuario introducir! un radio yY
I 5i pulsa el bot$n \rea se calcular! el !rea del crculo. 1actionPerformed del bot$n de
\rea2
I 5i pulsa el bot$n Permetro se calcular! el permetro del crculo. 1actionPerformed del
bot$n de Permetro2
I 5i pulsa el bot$n Limpiar en el cuadro de te%to aparecer! un F y la eti#ueta de
resultado 1la de color rojo2 se vaciar!. 1actionPerformed del bot$n Limpiar2
Todo el programa debe ser reali+ado directamente desde c$digo/ sin usar la ventana de
dise9o de (et;eans.
Ejercicio 2
Realice un programa para calcular la velocidad de un vehculo. La ventana del programa tendr!
el siguiente dise9o
F d i Cdi Lib D i i
-l programa .uncionar! de la siguiente .orma
I -l usuario introducir! un -spacio y un Tiempo/ y al pulsar -nter 1actionPerformed2 en
cual#uiera de los dos cuadros de te%tos aparecer! la velocidad en la eti#ueta de
resultados de color amarillo.
La velocidad se calcula as velocidad K espacio O tiempo
I -l usuario tambi0n puede introducir una *elocidad y un Tiempo en los cuadros de
te%tos de la parte derecha. 5i pulsa -nter en cual#uiera de estos cuadros de te%to
1actionPerformed2 entonces se calcular! el -spacio en la eti#ueta roja de resultados.
-l espacio se calcula as espacio K velocidad N tiempo
Tendr! #ue programar por tanto el evento actionPer.ormed de cada cuadro de te%to.
Tanto el dise9o como la programaci$n de eventos debe reali+arla directamente desde c$digo/
sin usar la ventana de dise9o del (et;eans.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
ASIGNACIN !E EVEN$OS !ES!E C!IGO; EVEN$OS !E RA$N
Ejercicio 1
Realice un programa #ue tenga el siguiente aspecto
-n la ventana hay dos eti#uetas. "na de ellas es de color negro y la otra es de color gris. -st!n
situadas de tal .orma #ue la eti#ueta de color negro simula la sombra de la otra eti#ueta.
La eti#ueta de color gris debe tener asociados los siguientes eventos del rat$n
I mouse-ntered. ,uando el rat$n entre en la super.icie de la eti#ueta debe cambiar su
te%to por &Pulsame).
I mouse-%ited. ,uando el rat$n salga de la super.icie de la eti#ueta debe cambiar el
te%to de esta otra ve+ por &-ti#ueta).
I mousePressed. ,uando se pulse un bot$n del rat$n sobre la eti#ueta/ esta debe
moverse de sitio de .orma #ue pare+ca #ue se ha pulsado como si .uera un bot$n
1observa la imagen2
8sin pulsar9 8pulsada9
Para conseguir esto/ debes colocar la eti#ueta gris sobre la eti#ueta negra.
,uando suceda este evento tambi0n debes cambiar el te%to de la eti#ueta por &-st!
pulsado)
F d i Cdi Lib D i i
I 3o6/eRe1e./e8; C6.08o /e /6e1-e e1 7o-B0 8e1 r.-B0" 1. e-iC6e-. 5o15erA . /6
<o/iciB0 0or3.1" F e1 -e=-o c.37i.rA . GP61/.8oH;
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
ASIGNACIN !E EVEN$OS !ES!E C!IGO; GENERALI!A!ES
Ejercicio 1
Realice un programa #ue tenga el siguiente aspecto
-n la ventana hay simplemente un J5lider 1desli+ador2 y una eti#ueta #ue contiene inicialmente
el valor @F.
5e pide lo siguiente
3. Realice el dise9o de la ventana desde c$digo.
4. Interesa #ue cuando se modi.i#ue el valor del J5lider/ dicho valor apare+ca en la
eti#ueta. -sto se tiene #ue reali+ar programando el evento correspondiente desde
c$digo. 6#u tiene la in.ormaci$n necesaria
a. -l evento a programar del J5lider se llama stateC,anged
b. Pertenece al oyente llamado C,ange-istener
c. 6signar!s el oyente al J5lider con el m0todo addC,ange-istener
d. -l evento lleva como par!metro un objeto evt del tipo C,ange($ent
>. Interesa #ue al girar la rueda del rat$n cambie el valor del J5lider. Para controlar el
movimiento de la rueda del rat$n debe asignar un evento al .ormulario 1-:i/2. 6#u tiene
la in.ormaci$n necesaria del evento para la rueda del rat$n
a. -l evento a programar de el .ormulario 1this2 se llamad mouse>,eel;o$ed
b. Pertenece al oyente llamado ;ouse>,eel-istener
c. 5e asigna a la ventana 1this2 con el m0todo add;ouse>,eel-istener
d. -l evento lleva como par!metro un objeto evt del tipo ;ouse>,eel($ent
PI5T6
-l objeto evt pasado como par!metro del evento de la rueda del rat$n contiene
in.ormaci$n sobre como se ha movido la rueda. -ste objeto tiene un m0todo llamado
get%nitsTo.croll #ue devuelve un nGmero entero #ue indica cuanto se ha movido la
rueda. -ste nGmero puede ser positivo o negativo segGn hacia donde se movi$ la
rueda.
6provechando esto/ el evento de la rueda del rat$n se puede programar as
int 8a"or = "i4er.get!a"#e(); //"i4er e e" obBeto +$"i4er
8a"or = 8a"or + e8t.getCnit1o$cro""();
slider.setValue(valor);
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
ASIGNACIN !E EVEN$OS !ES!E C!IGO; EVEN$OS !E VEN$ANA
Ejercicio 1
La ventana sobre la #ue trabajamos tambi0n tiene sus propios eventos. -stos eventos son los
siguientes
1B@2JindoJ'pened L 5ucede cuando la ventana se abre.
1BB2JindoJ,losing L 5ucede cuando la ventana va a cerrarse.
1BC2JindoJ6ctivated L 5ucede cuando la ventana se activa.
1BD2JindoJ7eactivated L 5ucede cuando la ventana se desactiva.
Los eventos de ventana pertenecen al adaptador WindoJ6dapter.
-l adaptador se asigna a la ventana 1this2 a trav0s del m0todo addWindoJListener.
Todos los eventos llevan como par!metro un objeto evt del tipo WindoJ-vent.
Teniendo en cuenta esto/ reali+ar un programa cuya ventana tenga Gnicamente una eti#ueta.
-l programa .uncionar! de la siguiente .orma
1BE2,uando se active la ventana/ aparecer! un mensaje &La ventana se ha activado) en la
eti#ueta central.
1CF2,uando se desactive la ventana/ aparecer! un mensaje &La ventana se ha
desactivado) en la eti#ueta central.
(ota "na .orma de desactivar la ventana es hacer clic sobre la barra de tareas. Luego se
puede volver a activar haciendo clic sobre la ventana.
6dem!s/ el programa debe hacer esto otro
1C32,uando se abra la ventana/ debe aparecer un mensaje de bienvenida 1un
J'ptionPane2
1C427e la misma .orma/ cuando se cierre la ventana/ debe aparecer un mensaje de
despedida.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
VEC$ORES !E COMPONEN$ES
Ejercicio 1
Reali+ar un programa en cuya ventana apare+can C JToggle;utton 1use un vector2
,ada uno de los botones debe contener como te%to un da de la semana.
Los botones deben aparecer en hori+ontal
69ada un bot$n &6ceptar) a la ventana 1un bot$n normal2 y dos eti#uetas.
6l pulsar el bot$n &6ceptar) debe aparecer en una de las eti#uetas el nGmero de botones
activados. Tambi0n debe aparecer en la otra eti#ueta los das de la semana elegidos 1activos2
Ejercicio 2
5e necesita hacer un programa #ue muestre la siguiente ventana
F d i Cdi Lib D i i
7ise9e la ventana totalmente desde c$digo y usando vectores. Tendr! #ue usar los siguientes
vectores
I "n vector de eti#uetas 1JLabel2 para cada eti#ueta. (ecesitar!s tambi0n un vector
au%iliar de 5tring #ue contenga los te%tos de las eti#uetas &7evoluciones)/ &Impagos)/
&,aducidad) y &Robos).
I "n vector de cuadros de te%to 1JTe%t:ield2
I "n vector de botones 1J;utton2
Tendr!s #ue construir cada vector y luego tendr!s #ue construir los elementos de dichos
vectores/ coloc!ndolos en la ventana.
-l programa no tiene #ue hacer nada/ solo limtese a dise9ar la ventana.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
VEC$ORES !E COMPONEN$ES
Ejercicio 1
Reali+ar un programa donde apare+can die+ botones conteniendo los nGmeros entre el F y E.
Todos estos botones pertenecer!n a un vector de J;utton/ y tendr!n asociado un evento
actionPerformed.
,ada ve+ #ue se pulse uno de los botones/ en un cuadro de te%to de la ventana se a9adir! el
dgito correspondiente/ como si estuvieramos usando una calculadora.
69adir tambi0n un bot$n &;orrar) 1no perteneciente al vector2 #ue permita borrar el contenido
del cuadro de te%to.
-l aspecto del programa puede ser similar al siguiente
,'L',6,IP( 7- L'5 ;'T'(-5
Para la colocaci$n de los botones en el J:rame/ se puede usar un vector de posiciones V y un
vector de posiciones < #ue contengan las posiciones 1V/<2 de cada bot$n
int 8ectorxDE=310:40:F0:10:40:F0:10:40:F0:105;
int 8ectoryDE=310:40:F0:10:40:F0:10:40:F0:105;
< luego se puede aplicar los valores de estos vectores en el momento de usar set1ounds
&or (G) 3
G
8=otoneDiE.et=o#n4(8ectorxDiE:8ectoryDiE: 20:20);
G
5
F d i Cdi Lib D i i
5e puls$ el E y luego
el @
Ejercicio 2
5e pide hacer un programa #ue muestre D eti#uetas/ cada una con el nombre de una provincia
andalu+a. -stas eti#uetas estar!n de.inidas al principio con color a+ul de .ondo y te%to negro.
,rear! un vector para hacer el programa #ue contenga las ocho eti#uetas 1vector de JLabel2 y
las situar! en el .ormulario como desee.
-l programa debe .uncionar de la siguiente .orma
I 6l hacer clic sobre una eti#ueta 1mouseClicked2/ el color de .ondo de esta cambiar! a
verde/ mientras #ue el color de .ondo de todas las dem!s se colocar! en a+ul 1para
cambiar el color de .ondo set1ackground y setOpaque2
I 6l sobrevolar el rat$n la eti#ueta 1evento mouse(ntered2 el color del te%to de la eti#ueta
se pondr! en amarillo 1para cambiar el color de te%to set!oreground2.
I 6l abandonar el rat$n la eti#ueta 1evento mouse(xited2 el color del te%to de la eti#ueta
volver! a ser de color negro.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
POO; CREACIN ) USO !E CLASES PROPIAS
Ejercicio 1
,rear un proyecto Java en (et;eans cuya ventana principal tenga el siguiente aspecto
Ten en cuenta lo siguiente
132 6l iniciarse el programa/ debe estar activada por de.ecto la opci$n Pared Norte.
142 -l bot$n "signar asignar! el ancho y alto #ue se haya introducido a la pared #ue est0
seleccionada en ese momento.
1>2 -l bot$n "rea mostrar! en un J'ptionPane el !rea de la pared seleccionada en ese
momento.
1?2 -l bot$n Per2metro mostrar! en un J'ptionPane el permetro de la pared seleccionada
en ese momento.
CLASE REC$ANGULO
PARA +ACER ES$E EJERCICIO USAR UNA CLASE !E CREACIN PROPIA
LLAMA!A REC$NGULO;
La clase Rectangulo debe tener las siguientes caractersticas
F d i Cdi Lib D i i
CLASE REC$ANGULO
(ombre de la clase Rectangulo
Propiedades de los objetos de la clase Rectangulo
;ase 1double2
6ltura 1double2
*alores iniciales de las propiedades de los objetos de la clase Rectangulo
;ase L 3FF
6ltura L @F
A0todos
A0todos set
set;ase L permite asignar un valor a la propiedad ;ase.
set6ltura L permite asignar un valor a la propiedad 6ltura.
A0todos get
get;ase L devuelve el valor de la propiedad ;ase
get6ltura L devuelve el valor de la propiedad 6ltura
get6rea L devuelve el !rea del rect!ngulo
getPermetro L devuelve el permetro del rect!ngulo
'tros m0todos
,uadrar L este m0todo debe hacer #ue la 6ltura tenga el valor de la ;ase.
$EN!R IUE PROGRAMAR ES$A CLASE E INCLUIRLA EN SU PRO)EC$O
UNA VE? INCLUI!A ES$A CLASE" CREAR CUA$RO O(JE$OS !E LA CLASE
REC$NGULO" CA!A UNO !E LOS CUALES +AR RE#ERENCIA A UNA !E LAS
CUA$RO PARE!ES@
'bjetos de la clase Rect!ngulo #ue usar! en el proyecto
1@2 Pared(orte
1B2 Pared5ur
1C2 Pared'este
1D2 Pared-ste
Para programar cada bot$n de la ventana principal/ solo tiene #ue ayudarse dando $rdenes a
las cuatro paredes o pidi0ndoles in.ormaci$n.
F d i Cdi Lib D i i
Ejercicio 2
PRIA-R6 P6RT-
Trabajamos de programador para una empresa de venta por correo. -sta empresa recibe
pedidos de clientes y necesita controlar la situaci$n de cada pedido.
Para .acilitar la reali+aci$n de aplicaciones para esta empresa se decide crear una ,L65- de
objetos llamada P-7I7'.
La ,lase Pedido permitir! crear objetos de tipo pedido. -stos objetos nos proporcionar!n
in.ormaci$n sobre el estado del pedido y nos .acilitar! la programaci$n de los proyectos para la
empresa.
5- PI7- PR'=R6A6R L6 ,L65- PE!I!O T-(I-(7' -( ,"-(T6 5"5
,6R6,T-RI5TI,65/ L65 ,"6L-5 5- A-(,I'(6( 6 ,'(TI("6,IP(
F d i Cdi Lib D i i
CLASE PE!I!O
(ombre de la ,lase Pe8i8o
Propiedades de los objetos de la ,lase Pedido
Ar-ic61o una cadena #ue indica el nombre del artculo #ue se ha pedido.
U0i8.8e/ un entero indicando las unidades pedidas.
Precio un double indicando el precio unidad.
G./-o/E05io un double indicando los gastos de envo.
!e/c6e0-o un double indicando el tanto por ciento de descuento.
*alores iniciales de las propiedades de los objetos de la ,lase Pedido
6rticulo %c.8e0. 5.cD.&
"nidades 1
Precio J
=astos-nvio 3
7escuento J
A0todos set
/e-Ar-ic61o L permite asignar el nombre del artculo al objeto pedido
/e-U0i8.8e/ L permite asignar el nGmero de unidades pedidas
/e-Precio L permite asignar un precio unidad al artculo del pedido
/e-G./-o/E05io L permite asignar la cantidad de gastos de envo del pedido
/e-!e/c6e0-o L permite asignar el tanto por ciento de descuento del pedido
A0todos get
2e-Ar-ic61o L devuelve el nombre del artculo del pedido
2e-U0i8.8e/ L devuelve el nGmero de unidades del artculo
2e-Precio L devuelve el precio del artculo del pedido
2e-G./-o/E05io L devuelve los gastos de envo del pedido
2e-!e/c6e0-o L devuelve el tanto por ciento de descuento del pedido
2e-$o-.1Si0I5. L devuelve el total sin iva del pedido. 5e calcula as
1ota"$inI8a = (Cni4a4e > .recio) + gato 4e en8io
2e-I5. L devuelve la cantidad de Iva del pedido. 5e calcula as
I8a = 1ota"$inI8a > 0:1H
2e-$o-.1M./I5. L devuelve el total del pedido m!s el Iva. 5e calcula as
1ota"9aI8a = 1ota"$inI8a + I8a
2e-$o-.1!e/c6e0-o L devuelve el total del descuento. 5e calcula as
1ota"*ec#ento = 1ota"9aI8a > *ec#ento / 100

2e-$o-.1Pe8i8o L devuelve el total del pedido. 5e calcula as
1ota".e4i4o = 1ota"9aI8a 1ota"*ec#ento
F d i Cdi Lib D i i
5-="(76 P6RT-
Reali+ar un proyecto cuya ventana principal tenga el siguiente aspecto
-l programa .uncionar! de la siguiente .orma
1E2 -n el panel &7atos del Pedido) se introducir!n los siguientes datos del pedido a enviar
a. (ombre del 6rtculo
b. "nidades pedidas
c. Precio unidad del artculo
d. =astos de envo
e. Tanto Por ,iento de descuento.
!"# 6l pulsar el bot$n &6ceptar Pedido)/ todos estos datos deben asignarse a un
objeto llamado ped 8e -i<o Pe8i8o.
13326l pulsar el bot$n &*er 7esglose)/ deben aparecer en las distintas eti#uetas 1de color
verde en la imagen2 los siguientes datos del pedido
a. (ombre del 6rtculo
b. "nidades pedidas
c. Precio unidad
d. =astos de envo
e. Total 5in Iva del pedido
.. Iva del pedido
g. Total A!s iva
h. Total de 7escuento
i. Total del Pedido.
!$# Para hacer esto solo tendr! #ue pedirle in.ormaci$n al objeto ped usando sus
m0todos get y luego colocar esta in.ormaci$n en cada eti#ueta.
P6R6 P'7-R R-6LIU6R -5T- PR'<-,T' 5-R\ (-,-56RI' I(,L"IR L6
PR'=R6A6,IP( 7- L6 ,L65- P-7I7' R-6LIU676 -( -L 6P6RT67' 6(T-RI'R 7-L
-J-R,I,I'.
5I (' 5- 6]67- L6 PR'=R6A6,IP( 7- L6 ,L65-/ 5-R\ IAP'5I;L- ,R-6R -L
';J-T' P(# Z"- ('5 P-RAIT- A6(-J6R L65 ,6R6,T-RX5TI,65 7-L P-7I7'.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
POO; +ERENCIA
EJERCICIO 1
Interesa crear una eti#ueta propia cuya .unci$n sea la de mostrar temperaturas.
-ste tipo de eti#ueta se llamar! E-iC6e-.$e3<er.-6r. y tendr! las siguientes caractersticas
Pro<ie8.8e/
temperatura L double
MK-o8o/
/e-$e3<er.-6r.%&
-ste m0todo recibe como par!metro un double con la temperatura a mostrar. -sta
temperatura se almacena en la propiedad temperatura.
6dem!s/ este m0todo muestra la temperatura en la eti#ueta/ a9adiendo [,. Por
ejemplo/ si la temperatura asignada .uera 3F/ entonces en la eti#ueta aparecera
3F [,
2e-$e3<er.-6r.%&
-ste m0todo devuelve un double con la temperatura actual.
3o/-r.rR.02oCo1or%&
-ste m0todo asignar! un color a la eti#ueta segGn la temperatura #ue contenga. 6#u
est! la escala de colores a usar
Q F 6+ul
RK F y Q 3F ,yan
RK 3F y Q 4@ Aagenta
RK 4@ y Q >@ (aranja
RK >@ Rojo
5i la eti#ueta no contuviera un valor num0rico v!lido/ entonces se mostrar!
transparente 1es decir/ setOpaque8false9 2
c.37i.r$e3<er.-6r.%&
-ste m0todo recibe un valor double como par!metro. 5i este valor es positivo/ entonces
la temperatura aumenta en este valor. 5i el valor es negativo/ la temperatura
disminuye.
F d i Cdi Lib D i i
"n ejemplo de uso de una eti#ueta de este tipo
eti1e6p.et1e6perat#ra(12); //en "a etiI#eta e 6otrarJ 12 K,
eti1e6p.6otrarRango,o"or(); //"a etiI#eta e 6otrarJ con co"or
//4e &on4o 9agenta
eti1e6p.ca6biar1e6perat#ra(20); //"a te6perat#ra #be 20 K,
eti1e6p.6otrarRango,o"or(); //"a etiI#eta e 6#etra naranBa
4o#b"e t = eti1e6p.get1e6perat#ra(); //t conten4rJ #n L2
O7je-i5o 8e1 ejercicio
7ebe programar la clase (tiquetaTemperatura de .orma #ue herede de las eti#uetas normales
de java 1JLabel2
Tendr! #ue a9adir la propiedad temperatura a la clase (tiquetaTemperatura y programar los
m0todos antes comentados.
EJERCICIO 2
Reali+a un proyecto cuya ventana principal tenga el siguiente aspecto
-n la parte superior a9adir! 1a trav0s de c$digo2 una eti#ueta del tipo (tiquetaTemperatura/
#ue estar! iniciali+ada a F [,
-n la parte in.erior a9adir! tres botones y un cuadro de te%to 1esto lo puede hacer desde la
ventana de dise9o2. ,ada ve+ #ue se pulse el bot$n 8/ la temperatura de la eti#ueta aumentar!
en la cantidad de grados indicados en el cuadro de te%to. < cuando se pulse el bot$n I/ la
temperatura disminuir!.
,ada ve+ #ue vare la temperatura de la eti#ueta/ deber! variar su color.
A1 <61/.r e1 7o-B0 G#.:re0:ei-H" .<.recerA e0 60 JO<-io0P.0e 1. -e3<er.-6r. C6e -ie0e
.c-6.13e0-e 1. e-iC6e-. co05er-i8. . 2r.8o/ #.:re0:ei-;
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
POO; !IALOGOS PROPIOS
P1.0-e.3ie0-o I0ici.1
Todos los proyectos #ue hacemos en el trabajo tienen #ue llevar un cuadro de di!logo de
presentaci$n #ue contenga
132 -l nombre del programa.
142 La versi$n.
1>2 -l nombre del programador.
Resulta un rollo tener #ue programar el cuadro de presentaci$n cada ve+ #ue nos encargan un
nuevo proyecto/ as #ue programaremos una ,lase Propia #ue derive de la clase J7ialog/ y
#ue represente un cuadro de di!logo #ue contenga el nombre del programa/ la versi$n y el
programador.
=racias a esta clase #ue vamos a programar/ no tendremos #ue perder tiempo cada ve+ #ue
necesitemos a9adir una presentaci$n a los .uturos proyectos #ue hagamos en la empresa.
C1./e !i.1o2oPre/e0-.cio0
5e programar! una clase propia #ue se llamar! #ialogoPresentacion. -sta clase ser! un
cuadro de di!logo/ o/ dicho de otra .orma/ heredar! de la clase J7ialog.
-l aspecto de un cuadro de di!logo de este tipo en .uncionamiento podra ser el siguiente
Las tres eti#uetas con bordes se llaman respectivamente etiNombrePrograma) etiVersion)
etiNombreProgramador.
-l bot$n se llamar! btn(mpe'ar.
F d i Cdi Lib D i i
Todos estos elementos est!n dentro de un JPanel al #ue se le ha asignado un borde con
relieve.
MK-o8o/ 8e 1. c1./e !i.1o2oPre/e0-.cio0
-sta clase tendr! los siguientes m0todos
setNombrePrograma
1?2 Recibir! una cadena con el nombre del programa/ y esta cadena se introducir! en la
eti#ueta etiNombrePrograma.
setVersion
1@2 Recibir! una cadena con la versi$n del programa/ y esta cadena se introducir! en la
eti#ueta etiVersion.
setNombreProgramador
1B2 Recibir! una cadena con el nombre del programador/ y esta cadena se introducir! en la
eti#ueta etiNombreProgramador.
,uando el usuario pulse el bot$n &-mpe+ar)/ lo Gnico #ue tiene #ue suceder es #ue se cierre el
cuadro de di!logo.
ProFec-o Eje3<1o
7ebes crear un programa simple #ue permita calcular el !rea de un crculo.
-ste proyecto debe incluir una presentaci$n #ue apare+ca al principio. -sta pantalla de
presentaci$n debe contener los siguientes datos
(ombre del programa ,!lculo del \rea del ,rculo
*ersi$n v 3.F
(ombre del programador su nombre.
Tendr! por supuesto/ #ue incluir la clase #ialogoPresentacion en su proyecto/ y crear un objeto
del tipo #ialogoPresentacion. 7ebe asignar a este objeto los tres datos nombre del programa/
versi$n y programador. < hacer #ue apare+ca la presentaci$n cuando se ejecute el programa.
Pista. La aparici$n de la presentaci$n se programar! en el evento =indo=Opened de la
ventana principal.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA
PROGRAMACIN M!I
(1oc 8e No-./ M!I
P1.0-e.3ie0-o I0ici.1
5e pretende reali+ar un programa capa+ de abrir .icheros de te%to 1.t%t2. -ste programa ser!
A7I/ es decir/ ser! capa+ de abrir varios .icheros/ mostrando sus contenidos en distintas
ventanas.
F d i Cdi Lib D i i
Ve0-.0. Pri0ci<.1
La ventana principal del programa constar! de un menG con las siguientes opciones
"rc,i$o
"brir
Cerrar
Cerrar Todos
.alir
Ventana
Cascada
;osaico :ori'ontal
;osaico Vertical
-n el centro de la ventana 1se recomienda un Layout del tipo 1order-aout2 se colocar! un
panel del tipo J7esHtopPane #ue ser! el encargado de contener las ventanas internas. Puede
llamar a este panel panel4nterno.
6specto de la ventana principal
Ve0-.0. I0-er0.
7ebe a9adir a su proyecto una clase JInternal:rame para dise9ar las ventanas internas.
"na ventana interna constar! Gnicamente de un objeto JTe%tPane #ue ocupar! toda la
ventana.
Los objetos JTe%tPane son similares a los cuadros de te%to 1JTe%t:ield2 con la di.erencia de
#ue pueden contener grandes cantidades de te%to en varias lneas. Llame al objeto JTe%tPane
con el nombre txtTexto.
F d i Cdi Lib D i i
panelInterno
1J7esHtopPane2
-stas ventanas internas contendr!n el te%to del .ichero #ue se abra. Para .acilitar la tarea de
abrir un .ichero y colocar su te%to en la ventana interna debe a9adir el siguiente m0todo a la
clase ventana interna
p#b"ic 8oi4 poner1exto($tring ca6ino&ic'ero) 3
try 3
%i"e &i = ne( %i"e(ca6ino&ic'ero);
%i"eRea4er "ect#ra = ne( %i"eRea4er(&i);
=#&&ere4Rea4er entra4a = ne( =#&&ere4Rea4er("ect#ra);
$tring "inea;
$tring texto=MM;
"inea = entra4a.rea47ine();
('i"e("ineaN=n#"") 3
texto = texto+"inea+MOnM;
"inea = entra4a.rea47ine();
5
entra4a.c"oe();
"ect#ra.c"oe();
txt1exto.et1ext(texto);
5 catc'(/xception e) 3
+)ption.ane.'o(9eage*ia"og(n#"":M/rror a" "eer &ic'ero.M);
5
5
-ste m0todo recibe el camino de un .ichero/ y coloca dentro del JTe%tPane 1el panel de te%to2
el te%to contenido en el .ichero. 6un#ue no es necesario entender el c$digo de este m0todo/ en
la parte .inal del enunciado se da una e%plicaci$n de su .uncionamiento.
F d i Cdi Lib D i i
t%tTe%to
1JTe%tPane2
O<cio0e/ <ri0ci<.1e/ 8e1 <ro2r.3.
5e comenta a continuaci$n la .orma en #ue deben .uncionar las distintas opciones del
programa
O<ciB0 Arc:i5o L A7rir
-sta opci$n servir! para abrir un .ichero .t%t y mostrar su contenido en una ventana interna.
Para ello/ tendr! #ue mostrar un J:ile,hooser para abrir un .ichero.
5i el usuario selecciona un .ichero/ entonces tendr! #ue crear una ventana interna llamada por
ejemplo $i/ y mostrarla en el panel Interno.
:inalmente/ usando el m0todo ponerTe%to de la ventana interna $i deber! mostrar el contenido
del .ichero seleccionado en el J:ile,hooser.
8i.poner1exto(ca6ino&ic'eroe"ecciona4o)
6l abrir un .ichero de te%to en una ventana/ deber! aparecer el camino del .ichero en la barra
de ttulo de la ventana interna.
O<ciB0 Arc:i5o L Cerr.r
La opci$n ,errar cerrar! la ventana interna #ue est0 activa 1si es #ue hay alguna2
O<ciB0 Arc:i5o L Cerr.r $o8./
-sta opci$n cerrar! todas las ventanas internas abiertas en el panel interno.
O<ciB0 Arc:i5o L S.1ir
Permitir! salir del programa.
O<ciB0 Ve0-.0. L C./c.8.
-sta opci$n colocar! todas las ventanas internas #ue haya abiertas en cascada. -sto es/ una
encima de otra/ mostrando el ttulo de cada una.
F d i Cdi Lib D i i
O<ciB0 Ve0-.0. L Mo/.ico +oriMo0-.1
-sta opci$n har! visible todas las ventanas mostr!ndolas en hori+ontal/ ocupando todo el panel
interno.
Para ello/ tendr!s #ue obtener el tama9o vertical del panel interno/ y dividirlo por el nGmero de
ventanas abiertas en 0l. -sa cantidad ser! la altura de cada ventana.
-l ancho de cada ventana ser! el ancho del panel interno.
"na ve+ calculado el ancho y alto de cada ventana debes colocar cada ventana una debajo de
otra.
F d i Cdi Lib D i i
F d i Cdi Lib D i i
O<ciB0 Ve0-.0. L Mo/.ico Ver-ic.1
-sta opci$n har! visible todas las ventanas mostr!ndolas en vertical/ ocupando todo el panel
interno.
Para ello/ tendr!s #ue obtener el tama9o hori+ontal del panel interno/ y dividirlo por el nGmero
de ventanas internas abiertas en 0l. -sa cantidad ser! el ancho de cada ventana.
6l alto de cada ventana ser! el alto del panel interno.
"na ve+ calculado el ancho y alto de cada ventana debes colocar cada ventana una al lado de
otra.
F d i Cdi Lib D i i
E'PLICACIN MN$O!O <o0er$e=-o
Para reali+ar este ejercicio es necesario a9adir a la clase de la ventana interna el siguiente
m0todo. (o es necesario entender el c$digo de este procedimiento para hacer el ejercicio/ pero
en cual#uier caso/ a#u hay una e%plicaci$n de este
p#b"ic 8oi4 poner1exto($tring ca6ino&ic'ero) 3
try 3
%i"e &i = ne( %i"e(ca6ino&ic'ero);
%i"eRea4er "ect#ra = ne( %i"eRea4er(&i);
=#&&ere4Rea4er entra4a = ne( =#&&ere4Rea4er("ect#ra);
$tring "inea;
$tring texto=MM;
"inea = entra4a.rea47ine();
('i"e("ineaN=n#"") 3
texto = texto+"inea+MOnM;
"inea = entra4a.rea47ine();
5
entra4a.c"oe();
"ect#ra.c"oe();
txt1exto.et1ext(texto);
5 catc'(/xception e) 3
+)ption.ane.'o(9eage*ia"og(n#"":M/rror a" "eer &ic'ero.M);
5
5
-ste m0todo recibe un camino de .ichero de te%to y muestra dentro de un JTe%tPane el te%to
#ue contiene dicho .ichero.
La .orma de acceder a un .ichero para e%traer su contenido es a trav0s de &canales). Los
canales son objetos #ue se &enganchan) al .ichero uno detr!s de otro. ,ada canal o.rece una
serie de posibilidades al programador.
Para los .icheros de te%to/ la .orma de acceder a ellos es la siguiente
- 5e crea un objeto :ile a partir del camino del .ichero 1-l camino del .ichero es un
5tring2
- 5e engancha al objeto :ile un objeto del tipo :ileReader. 1Los objetos :ileReader son
canales de lectura/ #ue permiten e%traer in.ormaci$n del .ichero2
- 5e engancha al canal :ileReader un objeto ;u..eredReader. 1Los objetos
;u..eredReader dan .acilidad al programador para e%traer el te%to del .ichero2
- :inalmente/ a trav0s del m0todo read-ine del objeto ;u..eredReader se pueden e%traer
una a una las lneas de te%to del .ichero.
- "na ve+ .inali+ado el trabajo con el .ichero se cierra el canal :ileReader y el canal
;u..eredReader.
La creaci$n de un objeto :ile a partir del camino del .ichero se hace con la siguiente
instrucci$n
%i"e &i = ne( %i"e(ca6ino&ic'ero);
La creaci$n de un canal :ileReader y la cone%i$n con el .ichero anterior se hace a trav0s de la
siguiente instrucci$n
F d i Cdi Lib D i i
,amino :ichero
15tring2
'bjeto :ichero
1:ile2
,anal de 6cceso al
:ichero
1:ileReader2
,anal de 6cceso al
:ichero
1;u..eredReader2
%i"eRea4er "ect#ra = ne( %i"eRea4er(&i);
La creaci$n de un canal ;u..eredReader y la cone%i$n con el canal :ileReader anterior se hace
a trav0s de la siguiente instrucci$n
=#&&ere4Rea4er entra4a = ne( =#&&ere4Rea4er("ect#ra);
"na ve+ hecho esto/ tenemos un objeto llamado entrada del tipo ;u..eredReader #ue posee un
m0todo llamado read-ine #ue permite leer una lnea de te%to del .ichero. 6 trav0s de este
m0todo vamos leyendo lneas de te%to del .ichero.
Hay #ue tener en cuenta #ue si al usar read-ine obtenemos el valor null/ es #ue ya no hay m!s
te%to en el .ichero.
Todo esto se aprovecha para crear una cadena larga con el contenido del .ichero
$tring "inea;
$tring texto=MM;
"inea = entra4a.rea47ine();
('i"e("ineaN=n#"") 3
texto = texto+"inea+MOnM;
"inea = entra4a.rea47ine();
5
-l c$digo anterior crea una variable texto #ue contiene el te%to completo del .ichero. -ste
c$digo e%trae una a una las lneas de te%to del .ichero y las va concatenando en la variable
texto.
,omo hemos terminado con la manipulaci$n del .ichero/ es bueno cerrar los canales de
comunicaci$n con el .ichero 1el canal :ileReader y el canal ;u..eredReader creados2
entra4a.c"oe();
"ect#ra.c"oe();
< .inalmente metemos el te%to e%trado en el panel de te%to de la ventana/ el cual se llama
t%tTe%to
txt1exto.et1ext(texto);
Todo esto debe estar dentro de un try ... catch ya #ue es un c$digo susceptible de tener errores
de ejecuci$n 1es decir/ de lan+ar e%cepciones2
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS
MO!ELO E4R
SUPUES$O NO 1; PCON$ROL !E VEN$ASP
"na empresa necesita un programa para controlar las ventas #ue reali+a diariamente.
La empresa tiene una lista de clientes cuyos datos #uiere controlar. Los datos #ue la empresa
#uiere guardar de cada cliente es el ,I:/ el nombre/ la ciudad y un tel0.ono de contacto.
La empresa tiene una serie de comerciales #ue son los #ue reali+an las ventas. La empresa
#uiere controlar la in.ormaci$n de sus comerciales. ,oncretamente necesita almacenar de ellos
sus nombres y apellidos y su m$vil. 6 cada comercial se le asigna un nGmero en la empresa
para distinguirlos.
7iariamente/ los comerciales reali+an ventas de productos a los clientes. Interesa almacenar
in.ormaci$n sobre dichas ventas. 7e cada venta interesa almacenar el nombre del producto
#ue se vende/ las unidades vendidas del artculo/ el precio del producto y la .echa en #ue se
e.ectu$ la venta. Tambi0n interesa saber la .orma de pago.
7ebes tener en cuenta tambi0n la siguiente in.ormaci$n
"n comercial reali+a ventas. "na venta es reali+ada por un solo comercial.
"na venta en concreto se reali+a a un solo cliente. Por otro lado/ un cliente comprar! muchas
cosas a la empresa. -s decir/ se le pueden hacer muchas ventas a un cliente.
5- PI7-
I Identi.i#ue las entidades #ue participan/ teniendo en cuenta el enunciado.
I Identi.i#ue los atributos de cada entidad.
I Indi#ue el atributo clave para cada entidad. 5i .uera necesario/ a9ada un atributo clave
a la entidad.
I Indi#ue las relaciones #ue e%isten entre las entidades.
I Indi#ue el tipo de relaciones e%istentes 1(ota no e%isten relaciones Auchas a Auchas2
I 6verigue las claves .or!neas segGn las relaciones e%istentes.
I Realice el gr!.ico correspondiente al Aodelo -IR.
F d i Cdi Lib D i i
SUPUES$O NO 2; Q $RANSPOR$ES R
"na empresa cuenta con una serie de camiones #ue usa para transportar diversos productos.
La empresa necesita un programa #ue gestione toda la in.ormaci$n producida por esta
actividad.
,oncretamente/ la empresa necesita almacenar in.ormaci$n sobre los camiones #ue posee.
(ecesita almacenar la matrcula de cada cami$n/ la marca y el modelo y el a9o de compra.
Por otro lado/ la empresa tiene una serie de conductores. 7e cada conductor se #uiere
almacenar el nombre/ los apellidos/ el m$vil y el sueldo #ue gana. 6 cada conductor se le
asigna un nGmero en la empresa. (o hay dos conductores con dos nGmeros iguales.
La empresa #uiere controlar la in.ormaci$n correspondiente a cada transporte #ue se e.ectGa.
,oncretamente #uiere saber la ciudad de origen del transporte/ la ciudad de destino/ el material
#ue se transporta/ cuantos Hilos se transporta y la .echa del transporte.
,ada transporte concreto est! encargado por un cliente. 6 la empresa le interesa tener
in.ormaci$n de los clientes #ue encargan transportes. La in.ormaci$n #ue interesa almacenar
de cada cliente es el ,I: del cliente/ el nombre de la empresa/ la direcci$n de la empresa/ el
tel0.ono de la empresa.
Hay #ue tener en cuenta tambi0n la siguiente in.ormaci$n
-n un transporte en concreto solo participa un cami$n. 6hora bien/ un cami$n se usa en
muchos transportes.
-n cada transporte participa un solo conductor/ y/ por supuesto/ un conductor reali+a muchos
transportes mientras trabaja para la empresa.
,ada transporte est! encargado por un solo cliente. Pero ten en cuenta #ue un cliente puede
encargar muchos transportes.
5- PI7-
3. Identi.i#ue las entidades #ue participan/ teniendo en cuenta el enunciado.
4. Identi.i#ue los atributos de cada entidad.
>. Indi#ue el atributo clave para cada entidad. 5i .uera necesario/ a9ada un atributo clave
a la entidad.
?. Indi#ue las relaciones #ue e%isten entre las entidades.
@. Indi#ue el tipo de relaciones e%istentes 1(ota no e%isten relaciones Auchas a Auchas2
B. 6verigue las claves .or!neas segGn las relaciones e%istentes.
C. Realice el gr!.ico correspondiente al Aodelo -IR.
F d i Cdi Lib D i i
SUPUES$O NO 3; Q ME!ICIONES R
"na empresa #umica reali+a mediciones constantemente de los materiales #ue contiene la
tierra de distintas parcelas de cultivo/ y le interesara tener un control de toda la in.ormaci$n
#ue esto genera. Para ello le encargan un programa para gestionar esta in.ormaci$n.
6 esta empresa le interesara guardar in.ormaci$n sobre cada medici$n #ue se hace. Interesa
almacenar lo siguiente .echa en #ue se hace la medici$n/ hora/ temperatura ambiente en el
momento de hacer la medici$n/ humedad del aire y un comentario sobre la medici$n 1en este
comentario se indicar! el resultado de la medici$n2 ,ada medici$n se numera/ de .orma #ue no
puede haber dos mediciones con el mismo nGmero.
Las mediciones las reali+an #umicos especiali+ados contratados por la empresa. -sta
empresa desea almacenar los datos de estos #umicos nombre/ apellidos y tel0.ono de
contacto.
Las mediciones se reali+an en terrenos particulares/ e interesa almacenar in.ormaci$n sobre
dichos terrenos. ,oncretamente interesa almacenar el nGmero de hect!reas del terreno/
nombre del propietario/ 7(I del propietario/ tel0.ono de contacto del propietario/ direcci$n del
terreno. 6 cada terreno se le asignar! un c$digo Gnico para distinguirlo de los dem!s.
Las mediciones se plasman .inalmente en in.ormes recopilatorios #ue se envan a la empresa
#ue ha encargado las medidas. Interesa almacenar de cada in.orme lo siguiente nGmero de
in.orme 1no hay dos in.ormes con el mismo nGmero2/ nombre de la empresa #ue encarga el
in.orme/ .echa en #ue se lan+a el in.orme/ conclusiones del in.orme 1a#u se redactan una serie
de conclusiones .inales deducidas a partir de las distintas mediciones2
7ebe tener en cuenta tambi0n lo siguiente
"n #umico reali+a muchas mediciones/ pero una medici$n la reali+a solo un #umico.
-n un mismo terreno se pueden reali+ar diversas mediciones/ pero tenga en cuenta #ue una
medici$n est! reali+ada en un solo terreno.
"n in.orme de mediciones plasmar! el resultado de muchas mediciones/ pero una medici$n
aparecer! en un solo in.orme.
5- PI7-
3. Identi.i#ue las entidades #ue participan/ teniendo en cuenta el enunciado.
4. Identi.i#ue los atributos de cada entidad.
>. Indi#ue el atributo clave para cada entidad. 5i .uera necesario/ a9ada un atributo clave
a la entidad.
?. Indi#ue las relaciones #ue e%isten entre las entidades.
@. Indi#ue el tipo de relaciones e%istentes 1(ota no e%isten relaciones Auchas a Auchas2
B. 6verigue las claves .or!neas segGn las relaciones e%istentes.
C. Realice el gr!.ico correspondiente al Aodelo -IR.
F d i Cdi Lib D i i
SUPUES$O NO4; GREVISIONES MN!ICASH
-n un hospital se reali+an distintas revisiones m0dicas a los pacientes ingresados/ y les
interesa almacenar in.ormaci$n sobre estas revisiones.
7e cada revisi$n interesa almacenar la .echa y hora en #ue se hi+o/ peso y altura del paciente
y otros resultados de dicha revisi$n. ,ada revisi$n se numera de .orma #ue no haya dos
revisiones con el mismo nGmero.
,ada revisi$n se reali+a a un solo paciente/ aun#ue a un paciente se le pueden hacer varias
revisiones mientras est! ingresado.
Interesa almacenar la in.ormaci$n de cada paciente nombre/ apellidos/ 7(I y .echa de
nacimiento del paciente.
Los m0dicos reali+an revisiones a sus pacientes. Hay #ue tener en cuenta #ue un mismo
m0dico puede reali+ar revisiones a distintos pacientes/ pero un paciente tiene asignado un solo
m0dico para las revisiones.
Interesa almacenar la in.ormaci$n de cada m0dico nombre/ apellidos/ especialidad. 6 cada
m0dico se le asigna un c$digo #ue es Gnico.
5- PI7-
132 Identi.i#ue las entidades #ue participan/ teniendo en cuenta el enunciado.
142 Identi.i#ue los atributos de cada entidad.
1>2 Indi#ue el atributo clave para cada entidad. 5i .uera necesario/ a9ada un atributo clave
a la entidad.
1?2 Indi#ue las relaciones #ue e%isten entre las entidades.
1@2 Indi#ue el tipo de relaciones e%istentes 1(ota no e%isten relaciones Auchas a Auchas2
1B2 6verigue las claves .or!neas segGn las relaciones e%istentes.
1C2 Realice el gr!.ico correspondiente al Aodelo -IR.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS
$RASPASO A $A(LAS
SUPUES$O NO 1; PCON$ROL !E VEN$ASP
6 partir del Aodelo -ntidadIRelaci$n correspondiente a este supuesto de la hoja anterior/
realice el traspaso a tablas de modelo.
Introdu+ca luego algunos datos en las tablas. Inv0ntese los datos/ pero procure #ue tengan
cierto sentido. Tenga en cuenta #ue los datos correspondientes a las claves y claves .or!neas
tendr!n #ue coincidir para #ue la base de datos tenga coherencia.
SUPUES$O NO 2; Q $RANSPOR$ES R
6 partir del Aodelo -ntidadIRelaci$n correspondiente a este supuesto de la hoja anterior/
realice el traspaso a tablas de modelo.
Introdu+ca luego algunos datos en las tablas. Inv0ntese los datos/ pero procure #ue tengan
cierto sentido. Tenga en cuenta #ue los datos correspondientes a las claves y claves .or!neas
tendr!n #ue coincidir para #ue la base de datos tenga coherencia.
SUPUES$O NO 3; Q ME!ICIONES R
6 partir del Aodelo -ntidadIRelaci$n correspondiente a este supuesto de la hoja anterior/
realice el traspaso a tablas de modelo.
Introdu+ca luego algunos datos en las tablas. Inv0ntese los datos/ pero procure #ue tengan
cierto sentido. Tenga en cuenta #ue los datos correspondientes a las claves y claves .or!neas
tendr!n #ue coincidir para #ue la base de datos tenga coherencia.
SUPUES$O NO4; GREVISIONES MN!ICASH
6 partir del Aodelo -ntidadIRelaci$n correspondiente a este supuesto de la hoja anterior/
realice el traspaso a tablas de modelo.
Introdu+ca luego algunos datos en las tablas. Inv0ntese los datos/ pero procure #ue tengan
cierto sentido. Tenga en cuenta #ue los datos correspondientes a las claves y claves .or!neas
tendr!n #ue coincidir para #ue la base de datos tenga coherencia.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS
RELACIONES MUC+AS A MUC+AS
SUPUES$O NO 1 Q LIMUSINAS R
"na empresa de al#uiler de limusinas #uiere gestionar la siguiente in.ormaci$n
Por un lado se #uiere almacenar la in.ormaci$n de los clientes #ue solicitan el uso de una
limusina. 5e almacenar! el nombre/ apellidos/ 7(I y tel0.ono del cliente.
Por otro lado se #uiere almacenar la in.ormaci$n de las distinas limusinas propiedad de la
empresa. 5e almacenar! la matrcula/ la marca y el modelo.
"na limusina es al#uilada por muchos clientes 1en momentos distintos claro est!/ un da la
al#uila un cliente y otro da la al#uila otro2
Por otro lado/ un cliente al#uila muchas limusinas 1en momentos distintos tambi0n/ un da
al#uila una limusina/ y a la semana siguiente puede al#uilar otra/ etc2
Interesa saber la .echa en #ue un cliente al#uila una limusina/ y el nombre del ch$.er #ue
condujo en el viaje.
5- PI7-
1D2 -ste supuesto produce una relaci$n Auchas a Auchas entre las entidades limusinas y
clientes. Represente dicha relaci$n.
1E2 6 continuaci$n identi.i#ue la entidad intermedia #ue elimina la relaci$n Auchas a
Auchas.
13F269ada los atributos #ue considere necesarios a la entidad intermedia.
1332Realice el Aodelo -ntidad Relaci$n completo del supuesto teniendo en cuenta la nueva
entidad introducida y sus atributos.
1342Realice el traspaso a tabla de dicho modelo.
F d i Cdi Lib D i i
SUPUES$O NO 2 Q RESERVAS +O$EL R
"n hotel #uiere guardar un hist$rico con todas las reservas reali+adas en el hotel por sus
clientes. ,oncretamente se #uiere guardar lo siguiente
In.ormaci$n sobre sus clientes nombre del cliente/ apellidos/ 7(I y pas.
In.ormaci$n sobre sus habitaciones nGmero de la habitaci$n/ nGmero de camas/ precio de la
habitaci$n por noche.
"n cliente puede haber reservado varias habitaciones 1no tiene por #u0 ser a la ve+ un verano
puede alojarse en la habitaci$n n[ 34?/ pero al verano siguiente puede alojarse en la habitaci$n
n[ @>@ del mismo hotel2
-n una habitaci$n se alojan muchos clientes 1no a la ve+/ claro est! una semana est! alojado
el cliente &uan ?on'<le' y a la semana siguiente est! alojado el cliente "na P@re'2
Interesara almacenar tambi0n como se ha pagado la reserva de la habitaci$n/ y la .echa de
entrada y de salida del cliente en la habitaci$n.
5- PI7-
13>2-ste supuesto produce una relaci$n Auchas a Auchas entre las entidades
habitaciones y clientes. Represente dicha relaci$n.
13?26 continuaci$n identi.i#ue la entidad intermedia #ue elimina la relaci$n Auchas a
Auchas.
13@269ada los atributos #ue considere necesarios a la entidad intermedia.
13B2Realice el Aodelo -ntidad Relaci$n completo del supuesto teniendo en cuenta la nueva
entidad introducida y sus atributos.
13C2Realice el traspaso a tabla de dicho modelo.
F d i Cdi Lib D i i
SUPUES$O NO 3 Q $ALLER MECNICO R
"n taller mec!nico #uiere guardar in.ormaci$n sobre todas las reparaciones #ue se reali+an en
0l. Para ello se #uiere guardar in.ormaci$n sobre lo siguiente
Aec!nicos Interesa almacenar la in.ormaci$n del mec!nico #ue reali+a la reparaci$n. 5e
almacenar! el nombre del mec!nico/ apellidos/ m$vil y un c$digo #ue identi.ica a cada
mec!nico.
,oches Interesa almacenar la in.ormaci$n de los coches #ue han sido reparados en el taller.
5e almacenar! la matrcula/ marca y modelo del coche.
7ebes tener en cuenta #ue un mec!nico repara muchos coches 1no a la ve+/ se supone/
primero uno y luego otro2
Por otro lado/ un coche puede ser reparado por varios mec!nicos 1es de suponer #ue un coche
puede su.rir varias averas a lo largo de su vida/ y cada una de estas avera puede ser
reparada por un mec!nico distinto2
Interesa almacenar tambi0n el coste de cada reparaci$n/ as como el nGmero de horas #ue se
usaron para hacer la reparaci$n.
5- PI7-
13B2-ste supuesto produce una relaci$n Auchas a Auchas. Represente dicha relaci$n.
13C26 continuaci$n identi.i#ue la entidad intermedia #ue elimina la relaci$n Auchas a
Auchas.
13D269ada los atributos #ue considere necesarios a la entidad intermedia.
13E2Realice el Aodelo -ntidad Relaci$n completo del supuesto teniendo en cuenta la nueva
entidad introducida y sus atributos.
14F2Realice el traspaso a tabla de dicho modelo.
F d i Cdi Lib D i i
SUPUES$O NO 4 Q VI!EOCLU( R
"n videoclub #uiere almacenar in.ormaci$n sobre los al#uileres de pelculas #ue se hicieron. Le
interesa almacenar in.ormaci$n sobre las pelculas y sobre sus socios
Pelculas se almacenar! el nGmero del 7*7 1no hay dos 7*7 con el mismo nGmero2/ el ttulo
de la pelcula #ue contiene/ el nombre del director y el tipo de pelcula.
5ocios se almacenar! el nGmero de socio 1no hay dos socios con el mismo nGmero2/ el
nombre y apellidos del socio/ su tel0.ono y direcci$n.
Hay #ue tener en cuenta #ue una pelcula se al#uila a muchos socios 1(o a la ve+/ claro est!
el 7*7 es al#uilado a un socio/ y cuando este lo devuelve/ se vuelve a al#uilar a otro/ y as
sucesivamente2
Por otro lado/ un socio al#uila muchas pelculas 1(o a la ve+/ claro est! primero al#uila una/ y
al da siguiente al#uila otra/ y as sucesivamente2
Interesara almacenar tambi0n la .echa en #ue produce cada al#uiler y lo #ue pag$ el socio por
el al#uiler.
5- PI7-
1>B2-ste supuesto produce una relaci$n Auchas a Auchas. Represente dicha relaci$n.
1>C26 continuaci$n identi.i#ue la entidad intermedia #ue elimina la relaci$n Auchas a
Auchas.
1>D269ada los atributos #ue considere necesarios a la entidad intermedia.
1>E2Realice el Aodelo -ntidad Relaci$n completo del supuesto teniendo en cuenta la nueva
entidad introducida y sus atributos.
1?F2Realice el traspaso a tabla de dicho modelo.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS 4 ACCESS
CREACIN !E (ASES !E !A$OS EN ACCESS
-n las hojas de ejercicios anteriores ha dise9ado las bases de datos para distintos supuestos.
Ha reali+ado el Aodelo -ntidad L Relaci$n y luego ha reali+ado el traspaso a Tablas.
6hora se pide #ue cree las bases de datos correspondientes a dichos traspasos a Tablas en
6ccess para los siguientes supuestos de hojas anteriores
SUPUES$O PCON$ROL !E VEN$ASP
,rear un .ichero de base de datos llamado ,'(TR'L*-( usando el programa 6ccess.
Introducir en 0l las tablas dise9adas para este supuesto. Introducir algunos datos en las tablas
1Intente #ue los datos sean coherentes2
SUPUES$O Q $RANSPOR$ES R
,rear un .ichero de base de datos llamado TR6(5P'RT-5 usando el programa 6ccess.
Introducir en 0l las tablas dise9adas para este supuesto. Introducir algunos datos en las tablas
1Intente #ue los datos sean coherentes2
SUPUES$O Q ME!ICIONES R
,rear un .ichero de base de datos llamado A-7I,I'(-5 usando el programa 6ccess.
Introducir en 0l las tablas dise9adas para este supuesto. Introducir algunos datos en las tablas
1Intente #ue los datos sean coherentes2
SUPUES$O Q RESERVAS +O$EL R
,rear un .ichero de base de datos llamado H'T-L usando el programa 6ccess. Introducir en 0l
las tablas dise9adas para este supuesto. Introducir algunos datos en las tablas 1Intente #ue los
datos sean coherentes2
SUPUES$O Q $ALLER MECNICO R
,rear un .ichero de base de datos llamado T6LL-R usando el programa 6ccess. Introducir en
0l las tablas dise9adas para este supuesto. Introducir algunos datos en las tablas 1Intente #ue
los datos sean coherentes2
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS L ACCESS L CONSUL$AS
CREACIN !E CONSUL$AS EN ACCESS
-ntre en la base de datos A6(-AP56 1usada en las hojas de ejercicios guiados2 y a9ada
registros a las tablas hasta #ue estas #ueden as
$.71. $r.7.j.8ore/
$.71. Coc:e/
$.71. C1ie0-e/
$.71. Ser5icio/
F d i Cdi Lib D i i
6hora/ realice las siguientes consultas en la base de datos. =uarde cada una con el nombre
#ue se indica. 5e recomienda #ue compruebe cada consulta antes de guardarla.
1432,rear una consulta llamada .er$icios de -impie'a.
-n ella deben aparecer los campos fec,a del ser$icio) tipo) cantidad comentario de
a#uellos servicios cuyo tipo sea -impie'a.
1442,rear una consulta llamada .er$icios 1aratos.
-n ella deben aparecer los campos nAmero del ser$icio) fec,a) tipo cantidad de
a#uellos servicios #ue hayan costado menos de 3DF euros.
14>2,rear una consulta llamada .er$icios anteriores 2BBC.
-n ella deben aparecer los campos nAmero del ser$icio) fec,a) tipo cantidad de
a#uellos servicios #ue .ueron reali+ados antes del 3 L 3 L 4FFB
14?2,rear una consulta llamada .er$icios de !ontaner2a
-n ella deben aparecer los campos nAmero de ser$icio) cantidad) tipo comentario de
todos a#uellos servicios #ue .ueron de .ontanera y costaron 4@F o m!s euros.
14@2,rear una consulta llamada -istado de .er$icios No -impie'a
-n ella deben aparecer los campos nAmero de ser$icio) cantidad) tipo comentario de
los servicios de :ontanera y los servicios de -lectricidad.
14B2,rear una consulta llamada -istado de .er$icios de (lectricidad
-n ella deben aparecer los campos fec,a del ser$icio) cantidad) tipo) comentario)
nombre apellidos del traba0ador nombre del cliente de a#uellos servicios #ue sean
del tipo (lectricidad.
7ebes tener en cuenta #ue los campos nombre apellidos del trabajador pertenecen a
la tabla Traba0adores/ mientras #ue el nombre del cliente pertenece a la tabla Clientes.
Los dem!s campos pertenecen a la tabla .er$icios.
F d i Cdi Lib D i i
14C2,rear una consulta llamada .er$icios reali'ados por &uan
-n ella deben aparecer los campos fec,a del ser$icio) cantidad) tipo) comentario)
nombre del cliente nombre apellidos del traba0ador de todos a#uellos servicios
reali+ados por el trabajador con 7(I 34.>43.@BCI;
Ten en cuenta #ue tendr!s #ue usar varias tablas para hacer la consulta.
14D2,rear una consulta llamada .er$icios a "cademias
-n ella deben aparecer los campos fec,a del ser$icio) tipo) cantidad) nombre del
cliente nombre apellidos del traba0ador de todos a#uellos servicios #ue se hayan
reali+ado a una 6cademia 1es decir/ el nombre del cliente debe contener la palabra
&academia)2
14E2,rear una consulta llamada .er$icios del aDo 2BBC
-n ella aparecer!n los campos fec,a del ser$icio) tipo) cantidad) apellidos del
traba0ador) nombre del cliente) C4! del cliente de todos a#uellos servicios #ue se hayan
reali+ado entre el 3 del 3 de 4FFB y el >3 del 34 del 4FFB
1>F2,rear una consulta llamada .er$icios en la calle -arga
-n ella aparecer!n los campos fec,a del ser$icio) tipo) cantidad) nombre del cliente)
direccin del cliente) #N4 del traba0ador para todos a#uellos servicios reali+ados en la
calle -arga.
1>32,rear una consulta llamada .er$icios traba0adores 2BBC
-n ella deben aparecer los campos fec,a del ser$icio) tipo cantidad) nombre apellidos
del traba0ador fec,a de entrada del traba0ador de todos a#uellos servicios reali+ados
por los trabajadores #ue entraron en la empresa a partir del 3 L 3 L 4FFB.
Para crear esta consulta tienes #ue usar las tablas Trabajadores y 5ervicios.
1>42,rear una consulta llamada Clientes de .eguros
-n ella deben aparecer los campos C4!) nombre del cliente) direccin del cliente de
todos a#uellos clientes #ue gestionen seguros 1deben contener en el nombre la palabra
&seguros)2
1>>2,rear una consulta llamada -istado de "cademias Papeler2as
-n ella deben aparecer los campos C4!) nombre del cliente) direccin del cliente
tel@fono fi0o de todos a#uellos clientes #ue sean academias o papeleras.
1>?2,rear una consulta llamada -istado de .("T traba0adores
-n ella deben aparecer los campos matr2cula) marca modelo de los seat de la
empresa. Tambi0n interesa #ue apare+ca el nombre apellido del conductor de cada
coche.
F d i Cdi Lib D i i
1>@2,rear una consulta llamada .er$icios reali'ados con C4T/O(N
-n ella debe aparecer el listado de servicios #ue han sido reali+ados usando alguno de
los citroen de la empresa.
-n esta consulta deben aparecer los siguientes campos matr2cula del $e,2culo) marca
modelo. Nombre apellidos del traba0ador que ,i'o el ser$icio. Nombre direccin
del cliente al que se le ,i'o el ser$icio. Tipo de ser$icio cantidad.
-n esta consulta participan todas las tablas de la base de datos.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS L SIL L CONSUL$AS
CREACIN !E CONSUL$AS USAN!O SIL
EJERCICIO 1
Las siguientes consultas son las reali+adas en la hoja anterior. 5e le pide al alumno #ue vuelva
a hacer dichas consultas pero esta ve+ usando el lenguaje 5ZL 1se le ha a9adido a los
nombres la palabra 5ZL para distinguirlas de las consultas de la hoja anterior2
1>B2,rear una consulta llamada .er$icios de -impie'a .E-.
-n ella deben aparecer los campos fec,a del ser$icio) tipo) cantidad comentario de
a#uellos servicios cuyo tipo sea -impie'a.
1>C2,rear una consulta llamada .er$icios 1aratos .E-.
-n ella deben aparecer los campos nAmero del ser$icio) fec,a) tipo cantidad de
a#uellos servicios #ue hayan costado menos de 3DF euros.
1>D2,rear una consulta llamada .er$icios anteriores 2BBC .E-.
-n ella deben aparecer los campos nAmero del ser$icio) fec,a) tipo cantidad de
a#uellos servicios #ue .ueron reali+ados antes del 3 L 3 L 4FFB
1>E2,rear una consulta llamada .er$icios de !ontaner2a .E-
-n ella deben aparecer los campos nAmero de ser$icio) cantidad) tipo comentario de
todos a#uellos servicios #ue .ueron de .ontanera y costaron 4@F o m!s euros.
1?F2,rear una consulta llamada -istado de .er$icios No -impie'a .E-
-n ella deben aparecer los campos nAmero de ser$icio) cantidad) tipo comentario de
los servicios de :ontanera y los servicios de -lectricidad.
1?32,rear una consulta llamada -istado de .er$icios de (lectricidad .E-
-n ella deben aparecer los campos fec,a del ser$icio) cantidad) tipo) comentario)
nombre apellidos del traba0ador nombre del cliente de a#uellos servicios #ue sean
del tipo (lectricidad.
7ebes tener en cuenta #ue los campos nombre apellidos del trabajador pertenecen a
la tabla Traba0adores/ mientras #ue el nombre del cliente pertenece a la tabla Clientes.
Los dem!s campos pertenecen a la tabla .er$icios.
1?42,rear una consulta llamada .er$icios reali'ados por &uan .E-
-n ella deben aparecer los campos fec,a del ser$icio) cantidad) tipo) comentario)
nombre del cliente nombre apellidos del traba0ador de todos a#uellos servicios
reali+ados por el trabajador con 7(I 34.>43.@BCI;
F d i Cdi Lib D i i
Ten en cuenta #ue tendr!s #ue usar varias tablas para hacer la consulta.
1?>2,rear una consulta llamada .er$icios a "cademias .E-
-n ella deben aparecer los campos fec,a del ser$icio) tipo) cantidad) nombre del
cliente nombre apellidos del traba0ador de todos a#uellos servicios #ue se hayan
reali+ado a una 6cademia 1es decir/ el nombre del cliente debe contener la palabra
&academia)2
1??2,rear una consulta llamada .er$icios del aDo 2BBC .E-
-n ella aparecer!n los campos fec,a del ser$icio) tipo) cantidad) apellidos del
traba0ador) nombre del cliente) C4! del cliente de todos a#uellos servicios #ue se hayan
reali+ado entre el 3 del 3 de 4FFB y el >3 del 34 del 4FFB
1?@2,rear una consulta llamada .er$icios en la calle -arga .E-
-n ella aparecer!n los campos fec,a del ser$icio) tipo) cantidad) nombre del cliente)
direccin del cliente) #N4 del traba0ador para todos a#uellos servicios reali+ados en la
calle -arga.
1?B2,rear una consulta llamada .er$icios traba0adores 2BBC .E-
-n ella deben aparecer los campos fec,a del ser$icio) tipo cantidad) nombre apellidos
del traba0ador fec,a de entrada del traba0ador de todos a#uellos servicios reali+ados
por los trabajadores #ue entraron en la empresa a partir del 3 L 3 L 4FFB.
Para crear esta consulta tienes #ue usar las tablas Trabajadores y 5ervicios.
1?C2,rear una consulta llamada Clientes de .eguros .E-
-n ella deben aparecer los campos C4!) nombre del cliente) direccin del cliente de
todos a#uellos clientes #ue gestionen seguros 1deben contener en el nombre la palabra
&seguros)2
1?D2,rear una consulta llamada -istado de "cademias Papeler2as .E-
-n ella deben aparecer los campos C4!) nombre del cliente) direccin del cliente
tel@fono fi0o de todos a#uellos clientes #ue sean academias o papeleras.
1?E2,rear una consulta llamada -istado de .("T traba0adores .E-
-n ella deben aparecer los campos matr2cula) marca modelo de los seat de la
empresa. Tambi0n interesa #ue apare+ca el nombre apellido del conductor de cada
coche.
1@F2,rear una consulta llamada .er$icios reali'ados con C4T/O(N .E-
-n ella debe aparecer el listado de servicios #ue han sido reali+ados usando alguno de
los citroen de la empresa.
F d i Cdi Lib D i i
-n esta consulta deben aparecer los siguientes campos matr2cula del $e,2culo) marca
modelo. Nombre apellidos del traba0ador que ,i'o el ser$icio. Nombre direccin
del cliente al que se le ,i'o el ser$icio. Tipo de ser$icio cantidad.
-n esta consulta participan todas las tablas de la base de datos.
EJERCICIO 2
Realice tambi0n estas otras consultas usando el lenguaje 5ZL 1asgneles el nombre #ue
#uiera2
132 5e pide mostrar un listado de clientes con las siguientes caractersticas
,ampos a mostrar nombre del cliente/ direcci$n/ tel0.ono 3.
La condici$n es #ue no tengan tel0.ono 4 1dicho de otra .orma/ #ue el campo tel0.ono 4
sea nulo2
142 5e pide mostrar un listado de clientes con las siguientes caractersticas
,ampos a mostrar nombre/ direcci$n/ tel0.ono 3.
La condici$n es #ue vivan en una calle/ es decir/ #ue su direcci$n comience por &,O)
1>2 5e pide mostrar un listado de trabajadores con las siguientes caractersticas
,ampos a mostrar nombre/ sueldo/ .echa de entrada.
La condici$n es #ue hayan entrado en la empresa en el a9o 4FF4. -s decir/ entre el
3O3O4FF4 y el >3O34O4FF4.
1?2 5e pide mostrar un listado de trabajadores con las siguientes caractersticas
,ampos a mostrar nombre/ apellidos/ sueldo.
,ondici$n ninguna.
5e pide #ue el listado salga ordenado por sueldo de mayor a menor
1@2 5e pide mostrar un listado de trabajadores con las siguientes caractersticas
,ampos a mostrar todos
,ondici$n Zue no se llamen &6na)
'rdenados por nombre ascendentemente.
1B2 5e pide mostrar un listado de coches con las siguientes caractersticas
Aostrar todos los campos.
'rdenado por a9o de compra/ de m!s antiguo a m!s moderno.
1C2 Aejore la consulta anterior de .orma #ue tambi0n se muestre el nombre del trabajador
#ue conduce cada coche.
F d i Cdi Lib D i i
1D2 5e pide mostrar un listado de servicios con las siguientes caractersticas
,ampos a mostrar tipo de servicio/ .echa/ cantidad/ comentario.
,ondici$n mostrar los servicios de limpie+a #ue hayan costado menos de 4@F euros.
'rdenado por cantidad de menor a mayor
1E2 Aejore la consulta anterior de .orma #ue tambi0n se muestre la direcci$n donde se hi+o
el servicio.
13F25e pide mostrar un listado de servicios con las siguientes caractersticas
,ampos a mostrar tipo de servicio/ .echa/ cantidad/ comentario.
,ondici$n se pide mostrar los servicios de limpie+a y los de .ontanera todos en la
misma consulta.
'rdenado por .echa de m!s reciente a m!s antigua.
13325e pide mostrar un listado de servicios con las siguientes caractersticas
,ampos a mostrar el nombre del trabajador/ la .echa en #ue se hi+o el servicio/ la
cantidad #ue cost$ el servicio/ el tipo de servicio/ el nombre del cliente/ la direcci$n del
cliente.
,ondici$n se pide mostrar a#uellos servicios de .ontanera reali+ados por el trabajador
con nombre Juan #ue hayan costado menos de 4?F euros.
-l listado debe aparecer ordenado por cantidad de mayor a menor.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA 4 (ASES !E !A$OS L SIL L AL$AS,(AJAS,MO!I#ICACIONES
CREACIN !E CONSUL$AS !E ACCIN USAN!O SIL
PREPARACIN
Los ejercicios #ue vienen a continuaci$n modi.icar!n el contenido de las tablas. -n el caso de
e#uivocaci$n es posible perder todos los datos contenidos en la tabla con la #ue se est!
trabajando. Para evitar problemas/ se har!n copias de las tablas y se trabajar! con las copias.
-n este ejercicio de preparaci$n se e%plica brevemente como reali+ar una copia de una tabla.
5iga los pasos #ue se indican a continuaci$n
13>2-ntre en la base de datos A6(-AP56 #ue tiene guardada en AI5 7',"A-(T'5.
13?2-n la +ona de tablas/ haga clic con el bot$n derecho sobre la tabla Traba0adores y
active la opci$n Copiar.
13@2-n una +ona en blanco haga clic con el bot$n derecho y active la opci$n Pegar.
13B26parecer! un cuadro de di!logo indicando #ue va a copiar una tabla. Tiene #ue indicar
el nombre #ue tendr! la copia. -n nuestro ejemplo/ el nombre ser! Traba0adores2.
Pulse aceptar.
13C25i todo ha ido bien/ ver!s #ue ha aparecido una nueva tabla llamada Traba0adores2. 5i
la abres/ observar!s #ue su contenido es el mismo #ue Traba0adores.
EJERCICIO@
,rear una copia de las dem!s tablas
,lientes ,lientes4
,oches ,oches4
5ervicios 5ervicios4
1(ota para los siguientes ejercicios usaremos las copias de las tablas/ para as mantener
intacto el contenido de las tablas originales2
F d i Cdi Lib D i i
INSERCIN !E REGIS$ROS
NO$A@ COMPRO(AR IUE LOS EJERCICIOS SE +AN REALI?A!O CORREC$AMEN$E
EN$RAN!O EN LAS $A(LAS ) O(SERVAN!O SU CON$ENI!O
-J-R,I,I'5
1D2 -n la tabla Traba0adores2 a9ada los siguientes trabajadores
Rosa =on+!le+/ con 7(I 33.@BC.CDEI7/ cobra 33FF/BF euros y entr$ en la empresa el 4
de mar+o del 4FFB. (o tiene asignado un coche.
;enito Rodrgue+/ con 7(I @B.?@B.>?@IW/ cobra @FF euros y entr$ en la empresa el 3F
de 7iciembre de 4FF@. -l coche #ue tiene asignado tiene de matrcula ??@?I---
-va Ramos/ con 7(I >>.EDC.EDCI:. -ntr$ en la empresa el 4F de enero de 4FFC. (o
tiene asignado de momento un sueldo y tampoco tiene asignado coche.
1E2 -n la tabla Coc,es2 a9ada el siguiente coche
5-6T ,$rdoba con matrcula ??@?I---. 69o 4FF?. -st! asignado al trabajador con
7(I @B.?@B.>?@IW
MO!I#ICACIN !E REGIS$ROS
NO$A@ COMPRO(AR IUE LOS EJERCICIOS SE +AN REALI?A!O CORREC$AMEN$E
EN$RAN!O EN LAS $A(LAS ) O(SERVAN!O SU CON$ENI!O
-J-R,I,I'5
1@325e pide asignar a los trabajadores de la tabla Traba0adores2 #ue hayan entrado antes
del a9o 4FF@ un sueldo de 3?FF euros.
1@42-n la tabla Traba0adores2 asigne al trabajador con 7(I >>.EDC.EDCI: el coche con
matrcula ??@?I---.
1@>2La trabajadora llamada "na ha sido suspendida de empleo. 6signe un valor F al sueldo
de esta trabajadora en la tabla Traba0adores2.
1@?25e ha averiguado el tel0.ono m$vil del gerente de la empresa "cademia -a Plata. -l
m$vil es el B>> ?@ @? ?@. 5e pide #ue en la tabla Clientes2 asigne ese tel0.ono m$vil a
dicho cliente.
1@@25e han detectado algunos errores de datos en el cliente con ,I: ;??@@BBBB.
,oncretamente/ el nombre del cliente es .eguros -a Cru'/ su direcci$n es CF-ealas 1B/
y su tel0.ono .ijo es el GHC *B GB GB. 5e pide #ue en la tabla Clientes2 haga dichos
cambios a dicho cliente.
F d i Cdi Lib D i i
ELIMINACIN !E REGIS$ROS
NO$A@ COMPRO(AR IUE LOS EJERCICIOS SE +AN REALI?A!O CORREC$AMEN$E
EN$RAN!O EN LAS $A(LAS ) O(SERVAN!O SU CON$ENI!O
1?32-liminar de la tabla .er$icios2 a todos los servicios del a9o 4FF? 1es decir/ cuya .echa
est0 comprendida entre 3I3I4FF? y >3I34I4FF?2
,omprueba el resultado observando el contenido de la tabla .er$icios2
1?42-liminar de la tabla .er$icios2 a todos los servicios de .ontanera de m!s de 4@F
euros.
,omprueba el resultado observando el contenido de la tabla .er$icios2
1?>2-liminar de la tabla .er$icios2 a#uellos servicios en los #ue se haya instalado algGn
recambio 1es decir/ #ue el campo comentario contenga la palabra &recambio)2
,omprueba el resultado observando el contenido de la tabla .er$icios2
1??2:inalmente/ elimina todos los registros de la tabla .er$icios2.
,omprueba el resultado observando el contenido de la tabla .er$icios2
1?@2-n la tabla Clientes2/ eliminar a todos los clientes #ue no tengan m$vil 1es decir/ #ue
el campo m$vil sea nulo2
,omprueba el resultado observando el contenido de la tabla .er$icios2
1?B2-n la tabla Clientes2/ eliminar a todos los clientes #ue tengan una empresa de seguros
1es decir/ #ue contengan la palabra &seguros) en el nombre del cliente2
,omprueba el resultado observando el contenido de la tabla .er$icios2
1?C2:inalmente/ eliminar de la tabla Clientes2 el resto de registros.
,omprueba el resultado observando el contenido de la tabla .er$icios2
EJERCICIO #INAL
Para la reali+aci$n de los ejercicios anteriores se han hecho copias de las tablas de la base de
datos. "na ve+ reali+ados dichos ejercicios estas tablas no son necesarias. Puede borrarlas
simplemente haciendo clic con el bot$n derecho sobre ellas y activar la opci$n eliminar.
6s pues/ elimine las tablas Traba0adores2) Clientes2) .er$icios2) Coc,es2.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L APLICACIONES !E (ASES !E !A$OS
CREACIN !E APLICACIONES JAVA USAN!O (ASE !E !A$OS
-J-R,I,I' 3
,rear un programa en Java #ue manipular! la base de datos A6(-AP56.
La ventana principal de este proyecto contendr! los siguientes botones
132 &,oches de la -mpresa) L btnCoc,es
,uando se pulse este bot$n/ deber! aparecer en un J'ptionPane el listado de coches
de la empresa.
7ebe aparecer la marca/ modelo y a9o de cada coche/ y adem!s deben aparecer
ordenados por a9o ascendentemente.
142 &Listado de ,lientes) L btnClientes
,uando se pulse este bot$n/ deber! aparecer en un J'ptionPane el listado de clientes
de la empresa.
7ebe aparecer el ,I: del cliente/ el nombre y la direcci$n. Los clientes deben aparecer
ordenados por nombre.
1>2 &Listado de 5ervicios) L btn.er$icios
,uando se pulse este bot$n aparecer! en un J'ptionPane el listado de servicios
reali+ados.
7ebe aparecer el tipo de servicio/ la cantidad del servicio y el ,I: del cliente. 7eben
aparecer ordenados por cantidad de mayor a menor.
1?2 &Ail -uristas) L btn;il
,uando se pulse este bot$n/ deber! aparecer en un J'ptionPane el listado de
trabajadores de la empresa #ue cobren 3FFF o menos euros.
7ebe aparecer el 7(I del trabajador/ nombre/ apellidos y sueldo.
1@2 &Limpie+as) L btn-impie'as
,uando se pulse este bot$n/ deber! aparecer en un J'ptionPane el listado de servicios
de limpie+a reali+ados.
7ebe aparecer el nGmero del servicio/ el 7(I del trabajador #ue reali+$ el servicio/ el
tipo de servicio y el coste. 7ebe aparecer ordenado por nGmero de servicio de menor a
mayor.
1B2 &-lectricidad) L btn(lectricidad
F d i Cdi Lib D i i
-ste bot$n es igual #ue el anterior/ solo #ue en ve+ de mostrar los servicios de limpie+a
se tienen #ue mostrar los servicios de electricidad.
1C2 &Ingresos -mpresa) L btn4ngresos
,uando se pulse este bot$n/ interesa #ue apare+ca en un J'ptionPane la suma de las
cantidades de todos los servicios reali+ados.
1D2 &,itroen) L btnCitroen
,uando se pulse este bot$n/ interesa #ue apare+ca en un J'ptionPane el nGmero de
coches citroen #ue tiene la empresa.
1E2 &-stadisticas Limpie+a) L btn(st-im
,uando se pulse este bot$n/ interesa #ue apare+ca en un J'ptionPane lo siguiente
j. -l nGmero de servicios de limpie+a #ue se han reali+ado.
H. La suma de los costes de todos los servicios de limpie+a.
l. -l coste medio de un servicio de limpie+a.
13>2&-l #uinto servicio) L btnEuinto
,uando se pulse este bot$n interesa #ue apare+ca en un J'ptionPane los datos del
#uinto servicio reali+ado.
Interesa #ue apare+ca el nGmero del servicio/ el tipo de servicio y el coste de dicho
servicio.
13?2&Listado de servicios de .ontanera) L btn!ont
,uando se pulse este bot$n interesa #ue apare+ca en un J'ptionPane un listado con
los servicios de .ontanera.
Interesa #ue apare+ca el nombre y apellidos del trabajador #ue hi+o el servicio/ el tipo
de servicio y el coste del servicio.
13@2&Listado de servicios de menos de 4FF euros) L btn;enos#os
,uando se pulse este bot$n interesa #ue apare+ca en un J'ptionPane un listado con
los servicios con una cantidad menor de 4FF euros.
Interesa #ue apare+ca el nombre del trabajador #ue hi+o el servicio/ el tipo de servicio/
el coste y el nombre del cliente al #ue se le hi+o el servicio. Ha+ #ue el listado salga
ordenado por coste de mayor a menor.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L APLICACIONES !E (ASES !E !A$OS
#EC+AS" N*MEROS REALES" VALORES NULOS
-J-R,I,I' 3
,rear un programa en Java #ue manipular! la base de datos A6(-AP56.
La ventana principal de esta aplicaci$n tendr! dos botones y un JTe%tPane
;ot$n 7atos Trabajadores
6l pulsar este bot$n debe aparecer el listado de trabajadores en el JTe%tPane.
,oncretamente deben aparecer el nombre/ apellidos/ sueldo/ .echa de entrada y matrcula del
coche #ue conduce.
-l listado debe aparecer ordenado por .echas ascendentemente 1es decir/ primero los
trabajadores con m!s antig^edad/ y luego los m!s recientes2
Las .echas deben aparecer en el siguiente .ormato
7a O Aes O 69o
Los sueldos deben aparecer con la coma decimal.
F d i Cdi Lib D i i
5i el trabajador no tuviera asignada un coche/ en el campo matrcula debera aparecer la
cadena &sin coc,e).
;ot$n 7atos 5ervicios
6l pulsar este bot$n aparecer! el listado de servicios en el JTe%tPane.
-l listado aparecer! ordenado por .echas de m!s reciente a m!s antiguo.
7ebe aparecer la .echa del servicio/ el coste/ el tipo y el comentario.
La .echa debe aparecer en .ormato #ia del ;es del "Do. Por ejemplo * del H del 2BB1
-l coste aparecer! con coma decimal.
5i no hay comentario para el servicio/ debe aparecer la cadena &sin comentarios).
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L APLICACIONES !E (ASES !E !A$OS
CONSUL$AS !EL USUARIO
Reali+ar una pe#ue9a aplicaci$n de base de datos #ue maneje la base de datos A6(-AP56.
La ventana principal del programa contendr! un JTe%tPane y los siguientes elementos
1otn Ver .er$icios
6l pulsar este bot$n aparecer! en el JTe%tPane el listado con todos los servicios reali+ados por
la empresa ordenados por .echa de .orma ascendente.
7eben aparecer en el listado los siguientes campos .echa del servicio/ tipo/ coste y
comentario.
La .echa aparecer! en .ormato diaImesIa9o.
-l coste aparecer! con coma decimal.
(o interesa #ue apare+can los valores null. ,uando esto suceda/ sustituirlos por un simple
gui$n &I&.
.eleccin por costes:
5e deben a9adir a la ventana los siguientes elementos
1>?2"n cuadro de te%to.
1>@2"n bot$n &Aayor #ue)
1>B2"n bot$n &Aenor #ue)
1>C2"n bot$n &Igual a)
1>D2"n bot$n &7istinto de)
-n el cuadro de te%to el usuario introducir! una cantidad.
6l pulsar el bot$n &Aayor #ue) aparecer! el listado de servicios cuyo coste sea mayor a dicha
cantidad.
6l pulsar el bot$n &Aenor #ue) aparecer! el listado de servicios cuyo coste sea menor a dicha
cantidad.
6l pulsar el bot$n &Igual a) aparecer! el listado de servicios cuyo coste sea igual a dicha
cantidad.
6l pulsar el bot$n &7istinto de) aparecer! el listado de servicios cuyo coste sea distinto a dicha
cantidad.
.eleccin por tipo
5e deben a9adir a la ventana los siguientes elementos
1>E2"n cuadro de te%to.
1?F2"n bot$n &Igual a).
1?32"n bot$n &,ontiene a).
-l usuario introducir! un te%to en el cuadro de te%to.
F d i Cdi Lib D i i
6l pulsar el bot$n &Igual a)/ el programa mostrar! el listado de servicios cuyo tipo sea igual al
te%to introducido.
Por ejemplo/ si el usuario introduce el te%to &Limpie+a)/ el programa mostrar! los servicios cuyo
tipo sea igual a &Limpie+a).
6l pulsar el bot$n &,ontiene a)/ el programa mostrar! el listado de servicios cuyo tipo contenga
el te%to del cuadro de te%to.
Por ejemplo/ si el usuario introduce el te%to &a)/ el programa mostrar! el listado de servicios de
:ontanerD./ ,arpinterD./ etc. -s decir/ todos los servicios #ue contengan &a) en el tipo.
.eleccin por fec,a:
5e deben a9adir a la ventana los siguientes elementos
1?42"n cuadro de te%to para el da/ otro para el mes y otro para el a9o.
1?>2"n bot$n &6nterior a)
1??2"n bot$n &Posterior a)
1?@2"n bot$n &-n el a9o)
-l usuario introducir! una .echa en los cuadros daImesIa9o.
Luego/ si el usuario pulsa el bot$n "nterior a el programa mostrar! el listado de servicios #ue
hayan sido anteriores a la .echa indicada.
5i el usuario pulsa Posterior a el programa mostrar! el listado de servicios #ue hayan sido
posteriores a la .echa indicada.
5i el usuario pulsa el bot$n (n el aDo/ el programa mostrar! el listado de servicios #ue hayan
sido reali+ados en el a9o indicado en el cuadro a9o. 1-n este caso no se tienen en cuenta los
cuadros da y mes2
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L APLICACIONES !E (ASES !E !A$OS
AL$AS !E REGIS$ROS
Reali+ar una pe#ue9a aplicaci$n de base de datos #ue maneje la base de datos A6(-AP56.
La ventana principal de dicha aplicaci$n contendr! los siguientes elementos
1otn -istado de coc,es
6l pulsar este bot$n/ aparecer! en un panel de te%to el listado de coches de la empresa. 7eben
aparecer todos los campos de los coches.
Panel de "lta de coc,es
-ste panel contendr! una serie de cuadros de te%to #ue permitir!n introducir los datos de un
nuevo coche #ue se #uiera a9adir.
7entro del panel tambi0n tendremos un bot$n "lta #ue al ser pulsado e.ectuar! la introducci$n
del nuevo coche en la tabla.
6l pulsarse el bot$n "lta) deber! mostrarse el contenido de la tabla coc,es en el panel/ y all
deber! aparecer el listado incluyendo el nuevo coche introducido.
1-l c$digo del bot$n "lta deber! construir una consulta 5ZL v!lida del tipo I(5-RT I(T' #ue
permita introducir los datos del nuevo coche2
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L APLICACIONES !E (ASES !E !A$OS
(AJA !E REGIS$ROS
Aejorar la aplicaci$n reali+ada en la hoja de ejercicios anterior de .orma #ue posibilite la
eliminaci$n de coches de la tabla coches de la base de datos A6(-AP56.
Para ello/ debe a9adir a la ventana principal lo siguiente
13B2"n cuadro de te%to donde el usuario introducir! una matrcula.
13C2"n bot$n (liminar coc,e.
6l pulsar el bot$n (liminar coc,e/ se borrar! de la tabla el coche cuya matrcula se haya escrito
en el cuadro de te%to.
"na ve+ reali+ado el borrado/ aparecer! en el panel de la ventana el contenido de la tabla
coches para #ue el usuario pueda con.irmar #ue el coche ha sido realmente borrado.
Hay #ue tener en cuenta varias cosas
13D2-l programa avisar! si la matrcula introducida en el cuadro de te%to no se corresponde
con ningGn coche de la base de datos. 1-n este caso no se har! el borrado/ claro est!2
13E2-n el caso de #ue la matrcula e%ista/ el programa pedir! con.irmaci$n antes de
e.ectuar el borrado.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L APLICACIONES !E (ASES !E !A$OS
MO!I#ICACIN !E REGIS$ROS
Aejorar la aplicaci$n reali+ada en la hoja de ejercicios anterior de .orma #ue posibilite la
modi.icaci$n de coches de la tabla coches de la base de datos A6(-AP56.
Para ello/ debe a9adir a la ventana principal lo siguiente
14F2"n panel de modi.icaci$n #ue contenga un cuadro de te%to por campo de la tabla
coches 1-ste panel ser! muy parecido al panel de introducci$n de coches2
1432"n bot$n 1uscar al lado del cuadro de te%to de la matrcula.
1442"n bot$n (fectuar ;odificacin.
-l usuario tendr! #ue introducir una matrcula y luego pulsar! el bot$n 1uscar. 6l pulsar este
bot$n/ el programa rellenar! los cuadros de te%to con los datos del coche #ue tenga dicha
matrcula. 5i no e%iste un coche con dicha matrcula entonces el programa mostrar! un
mensaje de error.
"na ve+ rellenos los cuadros de te%to con los datos del coche/ el usuario reali+ar!
modi.icaciones en dichos datos y luego pulsar! el bot$n (fectuar ;odificacin.
6l pulsar este bot$n se e.ectuar! la modi.icaci$n de los datos de este coche en la tabla coches
y se presentar! el listado completo de la tabla coches en el panel del programa.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L J$A(LE
EJERCICIO NO1
5e pide #ue realice una aplicaci$n #ue muestre una tabla con las siguientes columnas
(ombre -%amen 3 -%amen 4 -%amen >
6l comen+ar el programa la tabla estar! vaca y solo se mostrar! la cabecera.
-l programa constar! adem!s de la tabla de los siguientes elementos
14>2"n bot$n &69adir ;lanco).
-ste bot$n a9adir! una nueva .ila en blanco a la tabla.
14?2"n bot$n &69adir 6lumno).
-ste bot$n a9adir! una nueva .ila a la tabla con los siguientes valores
(ombre &(o de.inido)
-%amen 3 @
-%amen 4 @
-%amen > @
14@2"n bot$n &-liminar)
-ste bot$n eliminar! la .ila donde #ue est0 seleccionada en ese momento.
-n el caso de #ue no hubiera ninguna .ila seleccionada al pulsar este bot$n/ el
programa debe mostrar un mensaje de error.
14B2"n bot$n &Resultados)
-ste bot$n mostrar! en un J'ptionPane la nota media del alumno de la .ila #ue est0
seleccionada. Tambi0n debe indicar en ese J'ptionPane si el alumno ha aprobado o
no.
-n el caso de #ue no hubiera ninguna .ila seleccionada al pulsar este bot$n/ el
programa debe mostrar un mensaje de error.
14C2"n bot$n &Resultados Trimestre 3)
-ste bot$n mostrar! en un J'ptionPane el nGmero de alumnos #ue aprobaron el
e%amen 3 y el nGmero de alumnos #ue suspendieron dicho e%amen.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L J$A(LE
EJERCICIO NO1
Reali+a un programa #ue contenga un JTable y un bot$n. -l bot$n tendr! el te%to &,lientes) y al
pulsarse se mostrar! en la tabla el contenido de la tabla clientes de la base de datos
A6(-AP56.
EJERCICIO NO2
Reali+a un programa igual al anterior pero #ue permita mostrar el contenido de la tabla
ser$icios de la base de datos A6(-AP56.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L J$A(LE
EJERCICIO NO1
Reali+a un programa #ue permita reali+ar 6ltas/ ;ajas y Aodi.icaciones en la tabla clientes de
la base de datos A6(-AP56.
-ste programa debe mostrar en todo momento un JTable con el contenido actuali+ado de la
tabla clientes.
-l programa debe tener tres botones. "n bot$n (liminar/ otro bot$n Nue$o Cliente y un bot$n
;odificar Cliente.
6l pulsar (liminar se eliminar! el cliente seleccionado en el JTable.
6l pulsar Nue$o Cliente aparecer! un cuadro de di!logo donde el usuario introducir! los datos
de un nuevo cliente.
6l pulsar ;odificar Cliente aparecer! un cuadro de di!logo donde el usuario podr! cambiar los
datos del cliente #ue haya seleccionado en el JTable.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L J$A(LE
EJERCICIO NO1
-l programa reali+ado en la hoja de ejercicios anterior permita el alta/ baja y modi.icaci$n de
los clientes de la base de datos A6(-AP56.
5e pide ahora #ue a9ada un cuadro de di!logo de .iltrado al ejercicio de la hoja anterior #ue
permita .iltrar por los distintos campos de la tabla de clientes.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L J$A(LE
EJERCICIO NO1
-l programa de la hoja de ejercicios anterior permita la gesti$n de la tabla clientes de la base
de datos A6(-AP56.
5e pide #ue mejore el programa de la hoja anterior de .orma #ue el cuadro de di!logo de
.iltrado permita al usuario decidir la ordenaci$n del listado.
Por otro lado/ se pide #ue junto al JTable donde aparece el listado de clientes apare+ca el
nGmero de clientes #ue se est! mostrando en todo momento en el JTable.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L iREPOR$
EJERCICIO NO1
,rear una 75( llamada (0ercicio#.N #ue haga re.erencia a la base de datos A6(-AP56 #ue
tiene almacenada en Ais 7ocumentos.
EJERCICIO NO2
-n el programa iReport/ crear una cone%i$n llamada Conexin (0ercicio #ue est0 creada a
partir de la 75( del ejercicio anterior.
EJERCICIO NO3
,rear un in.orme usando la cone%i$n Conexin (0ercicio del ejercicio anterior donde apare+ca
el listado de clientes de la base de datos A6(-AP56 ordenado por nombre de cliente.
-l ttulo de este listado debe ser -istado de Clientes y luego guarde el in.orme con el nombre
clientes.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L iREPOR$
EJERCICIO NO1
,rea un listado de clientes usando la opci$n mago de informes de iReport. -ste listado debe
mostrar los siguientes campos nombre/ direcci$n y los dos tel0.onos. -l listado debe salir
ordenado por nombre.
"na ve+ creado el listado/ debe reali+ar las siguientes modi.icaciones en 0l
1?D2-l ttulo del listado debe ser IClientes de ;"N(;P."J. < debe tener las siguientes
caractersticas
JJ.,olor de .ondo 6+ul.
%%. Tama9o de la letra 3D.
yy. ,olor de letra ;lanco.
++. -n cursiva.
132 La cabecera del listado debe tener las siguientes caractersticas
a. Tama9o de letra 3F
b. ,ada campo de la cabecera debe tener una alineaci$n ,entro.
c. Los campos deben estar en negrita y subrayados
d. 7eben ser de color 6+ul.
142 Los datos del listado deben tener las siguientes caractersticas
a. 7eben tener alineaci$n centro.
b. 7eben tener un tama9o de letra de 3F y el tipo de letra debe ser Comic .ans.
c. Los nombres deben aparecer en color verde/ al igual #ue las direcciones.
d. Los tel0.onos deben aparecer en color rojo y en negrita.
"na ve+ hecho esto/ si #uiere e%perimentar reali+ando algGn cambio m!s/ h!galo.
F d i Cdi Lib D i i
PROGRAMACIN
JAVA L iREPOR$
EJERCICIO NO1
5e pide reali+ar un in.orme en el #ue apare+can los servicios reali+ados al cliente &5eguros
5egasa)/ cuyo ,I: es _;3344>434`.
Interesa #ue el in.orme tenga el siguiente dise9o
1>F2-l ttulo ser! ('T6 7- 5-R*I,I'5 5-=656
1>32-n el encabe+ado de p!gina debe aparecer una .icha como la #ue sigue
:icha de ,liente.
,I: IIIel ci. del clienteIII
('A;R- IIIel nombre del clienteIII
7IR-,,IP( IIIdirecci$n del clienteIII
T-L-:'(' 3 IIItel0.ono 3 del clienteIII
T-L-:'(' 4 IIItel0.ono 4 del clienteIII
1>42Incluya tambi0n en el encabe+ado de p!gina un logotipo 1b!jese una imagen de
internet2
%%# -l listado de servicios debe mostrar los datos !ec,a del ser$icio) tipo
cantidad ordenado ascendentemente por .echas. Por supuesto/ este listado debe
aparecer con su encabe+ado. 5era interesante #ue destacara el encabe+ado
coloc!ndolo en negrita y separ!ndolo del listado de datos a trav0s de una lnea.
1>?2-n la +ona del pie de columna/ a9ada simplemente una lnea hori+ontal.
1>@2-n la +ona del pie de p!gina y del pie de Gltima p!gina debe aparecer el siguiente te%to
centrado
A6(-AP56
Aantenimiento Integral a -mpresas
Polgono Industrial (orte/ ,O ;onan+a >
33?F? Jere+ 1,!di+2
F d i Cdi Lib D i i

You might also like