Fundación Código Libre DominicanoLic. Henry Terrero.
[email protected] Ing. Jose Paredes.
[email protected] Desarrollo De aplicaciones Con Java TEMARIO CURSO DE JAVA. Modulo I. 1. Conceptos Básicos. 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 Básicos. 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 Fundación Código Libre Dominicano Lic. Henry Terrero.
[email protected] Ing. Jose Paredes.
[email protected] Desarrollo De aplicaciones Java Con Netbeans EJERCICIO GUIADO. JAVA: INTRODUCCIN A LA !OO Introducción a la Programación Orientada a Objetos La programación orientada a objetos es una nueva forma de entender la creación de programas. sta filosof!a de programación se basa en el concepto de objeto. Objeto "n objeto se define como un elemento #ue tiene unas propiedades y métodos. "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 métodos. -on los m+todos podemos cambiar las caracter!sticas del objeto% pedirle información% 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 posición #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 métodos. ( trav+s de los m+todos podemos por ejemplo cambiar las caracter!sticas del objeto. Por ejemplo% se puede cambiar el tama1o y posición 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 información. 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 información 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ó Códi 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 posición en la ventana% el estar activado o no% el estar visible o no% etc& ( un objeto se le puede dar órdenes% llamadas métodos. stas órdenes nos permiten cambiar las caracter!sticas del objeto% pedirle información% 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 posición del objeto setToolTipText 6 permite asociar un te4to de ayuda al cuadro de te4to etc… "n objeto nos da información sobre +l. Para pedirle información 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 información 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ó Códi 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 declaración de un objeto es algo similar a la declaración 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 código/ &'a$el etiTexto; Para declarar% en cambio% el cuadro de te4to del ejemplo :% se usar!a el siguiente código/ &Text(ield txtCuadro; -onstruir un 5bjeto n el momento de la )construcción* 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 construcción del objeto se hace a trav+s del siguiente código 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 declaración y la construcción 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ó Códi 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 botón 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 información 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ó Códi 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 métodos se pueden di-idir b(sicamente en tres tipos. Para cambiar las propiedades del objeto /*étodos set0 Para pedir in1ormación 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. $eclaración. CL%E nombreobjeto3 Construcción. nombreobjeto 4 ne5 CL%E/03 $eclaración 2 Construcción en una misma l#nea CL%E nombreobjeto 4 ne5 CL%E/0' En la construcción 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ó Códi 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 ejecución 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 información 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 método repaint# podemos ordenarle a un cuadro de texto )ue co'a el cursor# con el método re)uest"ocus# etc2 Todos estos objetos% con sus propiedades y m+todos% nos facilitan la creación de nuestros programas. Pero a medida #ue nos vamos introduciendo en el mundo de la programación y nos especiali3amos en un tipo de programa en concreto% puede ser necesaria la creación de objetos propios% programados por nosotros mismos% de forma #ue puedan ser usados en nuestros futuros programas. F d ió Códi Lib D i i 5bjetos propios ( la hora de dise1ar un objeto de creación 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. ( continuación se propondr, un caso pr,ctico de creación de objetos propios% con el #ue trabajaremos en las pró4imas hojas. Lo #ue viene a continuación es un planteamiento teórico de dise1o de una -lase de 5bjetos. F d ió Códi 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 información. Para facilitar el control de la información 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 creación propia% tenemos #ue preguntarnos% <#u+ información me interesa almacenar del objeto= Trasladando esta idea a nuestro caso pr,ctico% <#u+ información 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ó Códi 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 código% 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 información 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 )?etrópolis* y #ue la entrada para ver la pel!cula es de D euros. La sala est, vac!a de momento. F d ió Códi Lib D i i Para crear el objeto% se usar!a el siguiente código/ 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/ )?etrópolis* ntrada/ D%@@ ?+todos para pedirle información 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 ocupación 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 información 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 código/ 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ó Códi 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 pró4ima 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 asignación 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 petición de información $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 ocupación 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 ocupación 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ó Códi Lib D i i F d ió Códi 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+ código 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+ código 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 petición de in1ormación /get0 *étodos de orden Una -e< "ue se tenga claro lo anterior' se podr( empe<ar la programación de la Clase de objetos& F d ió Códi Lib D i i EJERCICIO 6UI%$O& J%7%. POO& PRO6R%*%CI!N $E UN% CL%E Programación 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 asignación 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 petición de información $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 ocupación 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 ocupación 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ó Códi Lib D i i PRO6R%*%CI!N $E UN% CL%E "ichero de la Clase La programación 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 e4tensión 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 creación de la clase. 8e momento% solo veremos de forma teórica como hay #ue programar la clase. $2o tiene #ue introducir lo #ue viene a continuación en ning>n sitio' Estructura b/sica de la Clase 8entro del fichero de la clase% comen3ar, la programación de esta de la siguiente forma/ pu$lic class SalaCine > ? La programación de una clase comien3a siempre con una l!nea de código como la #ue sigue/ pu$lic class .o#$re!e'aClase > ? Toda la programación 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ó Códi 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 programación 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. 1étodos 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 función% #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 programación del m+todo setA-oro% de la clase SalaCine/ pu$lic <oid set"6oro(int a6o) > "6oro = a6o; ? F d ió Códi 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 programación 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 misión 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 programación/ 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ó Códi 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; ? ? 1étodos 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 instrucción 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ó Códi Lib D i i ?+todos 0et .eamos la programación 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 ocupación de la sala $es un valor double' 229Atodo get=ngresos pu$lic dou$le get=ngresos() > dou$le ingre; F d ió Códi 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ó Códi 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; ? ? 1étodos de orden Para finali3ar la programación 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ó Códi Lib D i i ?+todos Bet .eamos la programación del m+todo Vaciar% cuyo objetivo es vaciar la sala y #uitar la pel!cula en proyección/ 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 programación 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ó Códi 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ó Códi 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ó Códi Lib D i i ?+todos Bet ?+todos de orden y otros m+todos. ? F d ió Códi 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 programación de la clase Cectangulo a partir del planteamiento anterior. F d ió Códi Lib D i i CONCLUI!N La programación de una clase se reali<a en un 1ic)ero "ue tiene el mismo nombre "ue la clase 2 e=tensión &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 métodos ? 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 métodos set son -oid 2 reciben como par(metro un -alor "ue se asigna a la propiedad correspondiente& Los métodos get no tienen par(metros 2 de-uel-en el -alor de una propiedad de la clase' aun"ue también pueden reali<ar c(lculos 2 de-ol-er sus resultados& Los métodos de orden reali<an alguna tarea espec#1ica 2 a -eces modi1ican las propiedades de la clase de alguna 1orma& F d ió Códi 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 botón )(ceptar* llamado btn(ceptar. g. "na eti#ueta con borde llamada etiCesultado. I. (1ade tambi+n tres cuadros de verificación. 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 )Catón*. 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ó Códi 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 botón (ceptar. n ese evento a1ada el siguiente código/ 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 código. 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 verificación chJPerro. 0i es as! concateno a la cadena mensaje la palabra )Perro*. #. Luego compruebo si est, seleccionada la casilla de verificación chJBato y hago lo mismo. F d ió Códi 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 verificación% permiten saber si una casilla est, activada o no. :9. jecute el programa. 0eleccione por ejemplo las casillas Bato y Catón. (l pulsar (ceptar el resultado debe ser el siguiente/ CONCLUI!N Los cuadros de -eri1icación /JC)ecABo=0 se usan cuando "uieres seleccionar -arias opciones& F d ió Códi 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 botón )(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 $botón con tres puntos' dd. Eusca el tipo de borde llamado TitledEorder $borde con t!tulo' y pon el t!tulo colores. F d ió Códi Lib D i i D9. Tu ventana debe #uedar m,s o menos as!/ F d ió Códi Lib D i i D:. (hora debes a1adir tres botones de opción $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 opción se usan para activar solo una opción entre varias. F d ió Códi Lib D i i DN. Hay #ue hacer #ue solo un botón de opción 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(tenciónP 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 botón de opción optCojo y cambia su propiedad buttonBroup% indicando #ue pertenece al grupo colores $observa la imagen'/ F d ió Códi Lib D i i pp. Ha3 lo mismo con los botones opt.erde y opt(3ul. GD. (cabas de asociar los tres botones de opción 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 opción )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 botón de opción. Prueba el programa. 5bserva como la opción Cojo est, activada inicialmente. $%. l programa no est, terminado a>n. Interesa #ue cuando el usuario pulse el botón (ceptar% en la eti#ueta apare3ca el color elegido. Para ello% en el action4er-ormed del botón (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ó Códi Lib D i i etiResultado.setText(#ensa%e); GM. 5bserva el código. 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 opción est, seleccionada% usando el m+todo is0elected de los botones de opción. ste m+todo te dice si un botón est, seleccionado o no. &&. 0eg>n la opción #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 opción' también llamados botones de radio /JRadioButton0 se usan cuando "uieres "ue el usuario pueda elegir una opción 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 opción a la -e<& F d ió Códi 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 botón )(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 botón R del j0crollPane aparecer, tu JList/ F d ió Códi 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 botón de los tres puntos. (parecer, un cuadro de di,logo parecido al siguiente. 0olo tienes #ue seleccionar los elementos #ue #uieras y pulsar el botón )Eorrar* $Cemove' para eliminarlos de la lista. M:. Puedes a1adir elementos escribi+ndolos en el cuadro (rt!culo y luego pulsando el botón )(1adir* $(dd'. F d ió Códi Lib D i i MD. 8ebes hacer #ue la lista sea la siguiente/ Cojo .erde (3ul ($. (hora programaremos el action4er-ormed del botón (ceptar. 8ebes introducir el siguiente código/ String #ensa%e; #ensa%e=El color seleccionado esF EDlstColores.getSelected0alue().toString(); etiResultado.setText(#ensa%e); MA. 5bserva el código/ nnn. 0e crea una variable de cadena llamada mensa'e. ooo. ; dentro de esta variable se introduce una concatenación 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ó Códi 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 código del botón (ceptar por este otro código/ 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 código/ 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ó Códi Lib D i i NK. 0i ejecuta el programa y pulsa el botón (ceptar sin seleccionar nada el resultado deber!a ser el siguiente/ +,. 0e podr!a haber prescindido del botón aceptar si el código anterior se hubiera puesto en el evento mouse-licJed del cuadro de lista en ve3 de en el action4er-ormed del botón (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 modificación. CONCLUI!N El objeto JList permite crear cuadros de lista& Estos objetos contienen una serie de elementos "ue pueden ser seleccionados& % tra-és del método getelected7alue se puede obtener el elemento "ue est( seleccionado& /Recuerda con-ertirlo a cadena con totring0 % tra-és del método getelectedInde= se puede saber la posición del elemento seleccionado& i este #ndice es D9' entonces sabremos "ue no )a2 ningEn elemento seleccionado& F d ió Códi 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ó Códi 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ó Códi 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 código/ String #ensa%e=El color elegido es E; #ensa%e=#ensa%eDc$oColores.getSelected=te#().toString(); etiResultado.setText(#ensa%e); K@. ste código 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ó Códi 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 también como cuadros de te=tos' si se acti-a la opción editable& % tra-és del método getelectedItem se puede e=traer la opción seleccionada o el te=to escrito en el combo& F d ió Códi 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 botón )-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 )Instalación*% )Lormación* y )(limentación 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ó Códi 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. ( continuación% si el cliente #uiere la instalación% activar, el botón Instalación. fffff. 0i el cliente #uiere la formación% activar, el botón Lormación. ggggg. 0i el cliente #uiere la (limentación de Ease de 8atos% activar, el botón (limentación E8. hhhhh. Ten en cuenta #ue el cliente puede #uerer una o varias de las opciones indicadas. iiiii. Linalmente se pulsar, el botón 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 Instalación y Lormación% los e4tras costar,n :G@ euros. ""$. (s! pues% se programar, el action4er-ormed del botón -alcular de la siguiente forma/ F d ió Códi 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 e4plicación del código/ 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ó Códi Lib D i i ooooo. ( continuación se le suma al precioTtotal los precios de los e4tras si el botón correspondiente est, seleccionado. sto se hace a trav+s de if. Por ejemplo% para sumar el e4tra por instalación/ i6 (t$tn=nstalacion.isSelected()) > 22Si se seleccion3 instalaci3n precioJtotal = precioJtotalDprecioJinstal; ? sto significa/ )0i el botón instalación est, seleccionado% a1ade al precio total el precio por instalación* 5bserva el uso del m+todo isSelected para saber si el botón 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 instalación es solicitada por el usuario. Podr!a ser interesante #ue el botón Instalación 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 botón tbtnInstalación. F d ió Códi 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 método iselected podemos saber si un J,oggleButton est( seleccionado& ,ambién puedes usar el método setelected para seleccionar o no un botón de este tipo& Realmente' estos botones no suelen ser mu2 usados' 2a "ue pueden ser sustituidos por Cuadros de 7eri1icación /JC)ecABo=0 "ue son m(s conocidos& F d ió Códi Lib D i i EJERCICIO 6UI%$O& J%7%. LI$ER Introducción 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 posición 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 continuación 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ó Códi 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ó Códi 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 división. 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 presentación del J0lider% si hacemos #ue apare3ca el valor de cada división. Para ello debes activar la propiedad paint!abel. F d ió Códi 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 e4plicación del código 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ó Códi Lib D i i ?ovemos a#u!. ; aparece el valor correspondiente a#u!. 6 ( continuación se mencionan otras propiedades interesantes de los J0lider #ue puedes probar por tu cuenta/ orientation Permite cambiar la orientación 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 método getValue& i "uieres programar el cambio /el arrastre0 en el desli<ador' tienes "ue programar el e-ento llamado stateChanged& F d ió Códi Lib D i i EJERCICIO 6UI%$O& J%7%. PINNER Introducción 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 código/ F d ió Códi 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 código del programa y% dentro del constructor% a1ade este código debajo de initComponents/ Spinner.u#$er9odel n# = ne) Spinner.u#$er9odel(); n#.set9axi#u#(10); n#.set9ini#u#(0); spi0alor.set9odel(n#); 6 ste código 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 código 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 código. F d ió Códi 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 código% 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 código 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ó Códi 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 escribiéndolo 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ó Códi Lib D i i EJERCICIO 6UI%$O& J%7%. CROLLB%R Introducción a las JscrollBars /Barras de despla<amiento0 La clase J0crollEar permite crear barras de despla3amiento independientes% como la #ue se muestra a continuación/ 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ó Códi 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 posición 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ó Códi 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ó Códi 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ó Códi Lib D i i A K. jecuta ahora el programa y comprueba su funcionamiento/ F d ió Códi 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 e4plicación 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 método 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ó Códi 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ó Códi 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ó Códi Lib D i i "+. (hora% la >nica opción 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 opción 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 opción )(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ó Códi 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/ )dición* 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 opción principal. Por ejemplo% crearemos las opciones contenidas en el men> (rchivo. :M. Ha3 clic con el botón derecho sobre el objeto menu(rchivo y activa la opción )(1adir H J?enuItem*. F d ió Códi 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 opción (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ó Códi Lib D i i Los J0eparator son objetos #ue definen una separación 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 opción ser, )0alir* $use su propiedad text' l aspecto del 0nspector ser, el siguiente/ D:. jecuta el programa y observa el contenido de la opción (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 opción principal% y #ue se ven cuando se despliega el men>. F d ió Códi 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 botón derecho del ratón y la opción )(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ó Códi Lib D i i DM. jecuta el programa y observa como ha #uedado el men> dición/ La opción dición $J?enu' contiene una opción -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 ratón. -ada objeto del men> tiene un evento (ctionPerformed #ue permite programar lo #ue debe suceder cuando se active dicha opción del men>. DI. ?ar#ue en el inspector el objeto menuItemCojo y acceda a su evento (ctionPerformed. 8entro de +l programe este sencillo código/ tGis.getContent8ane().setBackground(Color.R!); ste código cambia el color de fondo de la ventana a rojo. DK. -ompruebe el funcionamiento de la opción )Cojo* del men> ejecutando el programa. G@. Programa tu mismo las opciones ).erde* y )(3ul*. F d ió Códi 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 también puede contener otros J*enu' "ue a su -e< contendr(n J*enuItems& ,ambién puede aCadir separadores /Jeparator0 "ue permiten -isuali<ar mejor las opciones dentro de un menE& F d ió Códi 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ó Códi 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ó Códi Lib D i i $.. (provecharemos el inspector para cambiar el nombre a la barra y a cada botón. ( 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 botón no var!a% aun#ue estos se encuentren dentro de la barra herramientas. 0olo hay #ue seleccionar el botón y acceder a su evento action4er-ormed. %". 0olo como demostración de esto >ltimo% entra en el action4er-ormed del primer botón y programa esto/ &1ption8ane.sGo)9essage!ialog(null,E"cti<aste el $ot3n unoE); Luego ejecuta el programa y comprueba el funcionamiento del botón. F d ió Códi Lib D i i %#. Los botones de la barra de herramientas normalmente no contienen te4to% sino #ue contienen un icono #ue representa la función #ue reali3a. La forma de colocar un icono dentro de un botón es a trav+s de su propiedad icon. %-. ( trav+s de la propiedad icon de un botón podr, seleccionar un fichero de imagen #ue contenga la imagen a mostrar en el botón. %$. (ctiva la propiedad icon del primer botón. Luego elige la opción "ichero y pulsa el botón 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 cómo podr!a #uedar la barra de herramientas es este/ F d ió Códi 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ó Códi 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 ratón 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 información como la siguiente/ 9. Fu+ botón del ratón fue pulsado. :. -uantas veces $clic% doble clic% etc' D. n #u+ coordenadas fue pulsado el botón. G. tc. 0e puede usar esta información para saber por ejemplo si se pulsó el botón derecho del ratón% 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 creación y visuali3ación 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 pulsación del ratón sobre el formulario% as! #ue haga clic sobre el formulario y active el evento mouseClicked. AK. 5bserve el código 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 código' #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ó Códi Lib D i i M9. jecuta el programa y ha3 clic sobre el formulario con el botón derecho% con el i3#uierdo y con el central. 5bserva el resultado. (#. (hora #ui3,s puedas comprender el código anterior. n +l% se usa el m+todo getButton del objeto e,t para saber #u+ botón se pulsó. l m+todo getButton devuelve un entero #ue puede ser 9% : o D seg>n el botón pulsado. (-. 0e puede aprovechar el m+todo getButton para controlar la pulsación del botón derecho del ratón 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 botón derecho del ratón 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 opción 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 botón derecho del ratón sobre el formulario. Para ello% F d ió Códi Lib D i i entraremos de nuevo en el evento mouseClicked del formulario y cambiaremos su código por el siguiente/ #enu#ergente.sGo)(tGis,e<t.getO(),e<t.getP()); N9. ste código 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 posición 4 donde debe mostrarse el men>. sta posición es a#uella donde se pulsó el ratón% y se puede conseguir gracias al m+todo get< del objeto evt. +. Por >ltimo se necesita la posición y. sta posición 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 opción 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ó Códi Lib D i i tGis.getContent8ane().setBackground(Color.R!); NG. jecuta el programa y comprueba lo #ue sucede al pulsar la opción 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 método sho del menE emergente para mostrar dic)o menE& F d ió Códi 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 información 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 acción de guardar la información en +l. sto tendr, #ue ser programado. F d ió Códi 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 opción )(rchivo* llamada menuArchi,o. o 8entro de la opción )(rchivo*% introduce los siguientes elementos/ "na opción )(brir*% llamada menuAbrir. "n separador $ll,malo como #uieras' "na opción )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 opción )(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ó Códi 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 opción 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ó Códi Lib D i i 6 "na ve3 hecho esto% ya podemos programar la opción (brir del men>. (ctiva el evento action4er-ormed de la opción )(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 código y prueba la opción )(brir* del men>. Prueba a elegir alg>n fichero y abrirlo. Prueba a cancelar la ventana de apertura. tc 6 (nalicemos el código anterior/ int resp; resp=elegir(icGero.sGo)1pen!ialog(tGis); .%. stas dos l!neas crean una variable entera resp $respuesta' y a continuación 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 botón pulsado por el usuario en esta ventana. sto es/ botón )(brir* o botón )-alcelar*. NN. 0e pueden usar dos if para controlar lo #ue sucede si el usuario pulsó el botón )(brir* o el botón )-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ó Códi 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 botón )-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 código/ 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ó Códi 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 distribución de los objetos/ F d ió Códi 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ó Códi 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ó Códi 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ó Códi 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ó Códi Lib D i i s muy interesante #ue observes el 0nspector. n +l podr,s observar la distribución 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ó Códi 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ó Códi 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ó Códi 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ó Códi Lib D i i -lase Principal 6 sta ventana contiene lo siguiente/ "n botón )ntró un coche* llamado btnntro. "n botón )0alió un coche* llamado btn0alio. "n botón )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 botón )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 botón )0alió un coche*% el n>mero de coches del parJing disminuye en 9% mostr,ndose en la eti#ueta eti-oches. o l botón 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 botón )5rigen* para acceder al código/ 6 Luego busca% al comien3o del código una l!nea #ue comen3ar, por pu$lic class F d ió Códi 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 código/ F d ió Códi Lib D i i (#u! se declaran las variables globales% tambi+n llamadas propiedades de la clase. Iniciali3ación de la propiedad coches. 8eclaración 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 pulsación del botón )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 botón varias veces. 6 (hora programaremos el botón )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ó Códi 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 botón %einiciar. ste botón% 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 botón. F d ió Códi 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' también 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 después de la l#nea public class& La iniciali<ación de estas -ariables se reali<a en el constructor& F d ió Códi Lib D i i EJERCICIO 6UI%$O& J%7%. CEN,R%LII%R C!$I6O El problema de la repetición de código s muy habitual en Java #ue varios eventos tengan #ue ejecutar el mismo código. n este caso se plantea la necesidad de )copiar y pegar* ese código en los distintos eventos a programar/ sta es una mala forma de programación% ya #ue se necesitara modificar el código% ser!a necesario reali3ar la modificación en cada copia del código. 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 código #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 código se puede repetir y como evitar esta repetición. 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ó Códi 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 botón )0umar* con el nombre btnSumar. 0 "n botón )Cestar* con el nombre btn%estar. 0 "n botón )Eorrar* con el nombre btnBorrar. 6 (#u! puedes ver la ventana en ejecución con el men> )-alcular* desplegado/ F d ió Códi 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 botón 0umar% se calcular, la suma. o 0i pulsa el botón Cestar% se calcular, la resta. o 0i pulsa el botón Eorrar% se borrar,n ambos cuadros de te4to. o 0i elige la opción del men> -alcular60umar entonces se calcular, la suma. o 0i elige la opción del men> -alcular6Cestar entonces se calcular, la resta. o 0i elige la opción 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 código. 5bserva el caso de la suma/ F d ió Códi Lib D i i Pulsar Eotón 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 código est+ )centrali3ado*% es decir% #ue apare3ca solo una ve3% ser, necesario construir en la clase un método. "n método en java es el e#uivalente de una función o procedimiento en -. .eamos como hacerlo/ 6 (ccede al código de tu programa a trav+s del botón 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ó Códi Lib D i i ste es el constructor ste es un buen sitio para crear tus propios procedimientos 6 0i observas el código% 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 código% 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 código 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 botón )0umar* se ejecute la suma% as! pues entre en el evento action4er-ormed del botón )0umar* y a1ada la siguiente l!nea/ Su#ar(); 6 -omo tambi+n interesa #ue al pulsar la opción del men> )-alcular60umar* se ejecute la suma% entre en el evento action4er-ormed de la opción del men> )0umar* y a1ade de nuevo la siguiente l!nea/ F d ió Códi 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 botón 0umar% o al activar la opción 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 operación. n este caso tenemos lo siguiente/ 6 Para centrali3ar el código% 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ó Códi Lib D i i action4er-ormed btn0umar action4er-ormed menu0umar action4er-ormed t4t2umero9 Procedimiento 0umar$' action4er-ormed t4t2umero: Pulsar Eotón Cestar (ctivar -alcular H Cestar en el men> -alcular la resta y mostrar el resultado. 6 l código 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 botón )Cestar* y a1ada esta l!nea de código/ Restar(); 6 Igualmente% entre en el evento action4er-ormed de la opción 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 botón )Cestar* o la opción del men> )Cestar*. (mbos eventos llaman al mismo m+todo/ F d ió Códi 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 botón )Eorrar* y de la opción 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 botón )Eorrar* y en el evento action4er-ormed de la opción 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 repetición de código& F d ió Códi Lib D i i Programa el procedimiento Eorrar... EJERCICIO 6UI%$O& J%7%. L%KOU, El problema de la distribución 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 situación de los distintos componentes en ellas. Para dise1ar m,s cómodamente 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 botón. ?u+velos a la posición #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 situación de un elemento depender, siempre de la situación 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ó Códi 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 botón 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 opción del 2etEeans llamada &ise3o !ibre $Lree 8esign' l 8ise1o Libre permite #ue los elementos de una ventana mantengan una distribución 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 posición #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ó Códi Lib D i i Tanto el botón como la eti#ueta estar,n siempre a esta distancia del borde derecho de la ventana& l botón siempre estar, a esta distancia de la eti#ueta& l botón 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 opción #ue est, activada por defecto cuando se crea un proyecto en 2etEeans. 0in embargo% esta opción se puede cambiar por distintos )Layouts* o )8istribuciones*. 6 n el 0nspector de tu proyecto pulsa el botón derecho del ratón sobre el objeto JLrame y activa la opción 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 distribución (bsoluteLayout permite al programador colocar cada elemento donde +l #uiera% sin restricciones% sin tener en cuenta distancias relativas. F d ió Códi Lib D i i 6 0it>a la eti#ueta y el botón donde #uieras. 5bserva #ue no aparece ninguna l!nea gu!a #ue defina distancias relativas/ 6 La ventana de definir una distribución (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 distribución 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$istribución en l#nea& @lo5La2outG F d ió Códi Lib D i i 6 Practi#uemos ahora con otro tipo de distribución. (ccede al 0nspector y pulsa el botón derecho del ratón sobre el objeto JLrame. (ctiva la opción Establecer &isposici.n @ "loA!ayout2 6 5bserva como el layout )(bsoluteLayout* es sustituido por la distribución )LloQLayout*. "na elemento solo puede tener un tipo de distribución 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ó Códi 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 alineación centro por defecto. 6 l LloQLayout no permite controlar la posición 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$istribución en rejilla& 6ridLa2outG 6 5tra distribución #ue se puede usar es la distribución BridLayout. sta distribución coloca a los elementos en filas y columnas% como si formaran parte de una tabla. (l a1adir esta distribución es necesario indicar cuantas filas y columnas tendr, la rejilla. 6 -ambia el layout del JLrame por un BridLayout/ F d ió Códi 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ó Códi Lib D i i 6 ;a #ue solo tienes dos elementos en la ventana $una eti#ueta y un botón'% 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 disposición de los elementos. 6 jecuta el programa y agranda y achica la ventana. 5bserva como los elementos siempre mantienen su disposición 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 distribución 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ó Códi 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 distribución )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ó Códi Lib D i i 6 -omo se puede observar% cada botón se ha colocado en una 3ona% y su tama1o ha variado hasta ocupar la 3ona entera. Tenemos un botón 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 disposición de los elementos en la ventana al usar esta distribución. 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ó Códi 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 distribución -iene acti-ada por de1ecto en el NetBeans' 2 de1ine una distribución de componentes en la "ue se respetan las distancias entre ellos cuando la -entana cambia de tamaCo& %bsoluteLa2out L En esta distribución el programador puede colocar cada elemento en la posición "ue desee de la -entana& Los distintos elementos mantienen su posición 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 distribución 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 distribución 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 distribución 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ó Códi Lib D i i EJERCICIO 6UI%$O& J%7%. L%KOU, K P%NELE ,écnicas de distribución 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 distribución (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ó Códi 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ó Códi 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 opción Agregar desde paleta @ SAing @ 4anel. F d ió Códi 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ó Códi 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ó Códi 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 botón donde #uieras. Procura #ue el panel #uede as!/ F d ió Códi 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 verificación. l aspecto del panel al terminar debe ser parecido al siguiente/ ; el 0nspector debe tener un estado similar a este/ F d ió Códi 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ó Códi 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 botón derecho del ratón sobre el panel&atos en el 0nspector y eligiendo la opción 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ó Códi 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ó Códi 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 opción 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 botón (ceptar y el botón -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 modificación. 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ó Códi 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 Eotón -alcular/ btn-alcular. 6 Eotón -onfiguración/ btn-onfiguracion. 6 0e pretende #ue cuando se pulse el botón -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 código y declara una variable global i,a y otra descuento tal como se indica a continuación $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ó Códi 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 botón btn-alcular. ntra en su actionPerformed y all! se programar, la reali3ación 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ó Códi Lib D i i .ariables globales Iniciali3ación 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 botón -alcular funciona% aun#ue el c,lculo #ue reali3a lo hace con un iva @ y un descuento @. 6 ( continuación se programar, el botón -onfiguración de forma #ue nos permita decidir #u+ iva y #u+ descuento #ueremos aplicar. ste botón 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ó Códi 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 botón (ceptar/ btn(ceptar. 6 l botón -ancelar/ btn-ancelar. 0i observas el 0nspector debe tener el siguiente aspecto/ F d ió Códi Lib D i i F d ió Códi Lib D i i 6 0e ha dicho #ue cuando se pulse el botón -onfiguración 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 botón btnCon-iguracion de la siguiente forma/ dialogoCon6iguracion.setSiHe(270,200); dialogoCon6iguracion.set'ocation(100,100); dialogoCon6iguracion.set0isi$le(true); 6 l código 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 posición $9@@% 9@@' de la pantalla. ( trav+s del m+todo setVisible hacemos #ue el cuadro de di,logo se muestre. F d ió Códi Lib D i i Haces clic sobre -onfiguración y aparece el di,logo 6 jecuta el programa y observa lo #ue sucede cuando pulsas el botón -onfigurar. 8eber!a aparecer el cuadro de di,logo en la posición 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 botón -ancelar. 6 l botón -ancelar de un cuadro de di,logo simplemente cierra dicho cuadro de di,logo. Para ello% debes a1adir el siguiente código en el action4er-ormed del botón -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 botón -ancelar del cuadro de di,logo. 6 (hora se programar, el botón (ceptar. -uando el usuario pulse este botón% 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 código #ue hace lo anterior. 8ebe programarlo en el action4er-ormed del botón (ceptar/ F d ió Códi 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 código. 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 botón -onfiguración% 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 botón -onfigurar. (parecer, el cuadro de di,logo. F d ió Códi 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ó Códi 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 configuración. 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ó Códi 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 configuración. o ( continuación 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 creación 2 uso de cuadros de di(logo en un pro2ecto ja-a& Para -isuali<ar un J$ialog ser( necesario llamar a su método setVisible& ,ambién son interesantes los métodos 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 método dispose& F d ió Códi 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ó Códi 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ó Códi 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 botón )-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 botón )-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. 4plicación de los códigos anteriores/ ffffff. Lo #ue hace cada botón es rellenar el cuadro de lista con una serie de nombres. n el caso del botón )-urso 9*% la lista se rellena con los nombres Juan% ?ar!a y Luis% mientras #ue en el caso del botón )-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ó Códi 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 instrucción $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 botón cambia el contenido de la lista/ "$%. (hora a1ade el siguiente código al evento mouseClicked del cuadro de lista/ F d ió Códi Lib D i i -licJ y cambia el listado. etiResultado.setText(lst.o#$res.getSelected0alue().toString()); sta instrucción 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 botón ).aciar* llamado btn.aciar. ste botón 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ó Códi 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 botón )Pares* llamado btnPares. vvvvvv. "n botón )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 botón 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 código/ 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 instrucción/ F d ió Códi Lib D i i !e6aultCo#$oBox9odel #odelo = ne) !e6aultCo#$oBox9odel(); ccccccc. ( continuación% 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 introducción 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 botón Pares. "($. l botón 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 código es el for% #ue est, dise1ado para #ue se introdu3can los n>meros impares comprendidos entre @ y 9@ dentro del modelo. F d ió Códi 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 instrucción/ 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 botón ).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ó Códi 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ó Códi Lib D i i Fundación Código Libre Dominicano Lic. Henry Terrero.
[email protected] Ing. Jose Paredes.
[email protected] Desarrollo De aplicaciones Java Con Netbeans Ejercicios METODOLOGÍA DE LA PROGRAMACIÓN JAVA PRIMEROS PROGRAMAS Ejercicio 1 Realice un programa en java con las siguientes características 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 botón: btnOcultarNombre - "n bot$n con el te%to &*isuali+ar (ombre). Nombre del botón: btnVisuNombre - "n bot$n con el te%to &'cultar ,iudad). Nombre del botón: btnOcultarNombre - "n bot$n con el te%to &*isuali+ar ,iudad). Nombre del botón: 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 vacía 1sin te%to dentro2. -l nombre ser! etiTexto1. - 'tra eti#ueta vacía 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ó Códi 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 vacía 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ó Códi 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ó Códi 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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN JAVA PROGRAMAS CON CÁLCULOS 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ó Códi Lib D i i Ejercicio 3 Reali+ar un programa para calcular el !rea y el perímetro de un círculo. -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 círculo. 1442"na eti#ueta llamada etiPerimetro/ donde se mostrar! el perímetro del círculo. -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 perímetro 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ó Códi 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 debería 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ó Códi Lib D i i PROGRAMACIÓN JAVA CUA!ROS !E MENSAJE" CON#IRMACIÓN E IN$RO!UCCIÓN !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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN 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 escapó3 < la palabra .uera globo/ entonces la in.ormaci$n a mostrar sería Posici$n inicial > Posici$n .inal ?E Te%to anterior "n Te%to posterior #ue se me escap$ F d ió Códi 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ó Códi Lib D i i PROGRAMACIÓN JAVA CA!ENAS %CON$INUACIÓN& 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 debería 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ó Códi 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 latín de la primera declinaci$n/ y a continuaci$n generar sus &casos) en plural y singular. Las palabras de la primera declinaci$n en latín son sustantivos .emeninos 1la mayoría2/ #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 concatenaría 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 latín 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ó Códi 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. PROGRAMACIÓN 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 Raíz( (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ó Códi Lib D i i PROGRAMACIÓN 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 Título) 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 título de la ventana cambiar!/ coloc!ndose como título 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ó Códi Lib D i i 6dem!s/ el programa contar! con las siguientes características 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ó Códi Lib D i i PROGRAMACIÓN JAVA CUA!ROS !E VERI#ICACIÓN" (O$ONES !E OPCIÓN Ejercicio 1 5e pide reali+ar un programa #ue tenga los siguientes elementos en la ventana principal 132 "n panel con el título &Ingredientes). (o hace .alta #ue le de un nombre. 142 "n panel con el título &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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN 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 envían/ llamado t%t"nidades. 1442"n combo llamado cbo7estino donde tendremos los siguientes elementos Península ,anarias -%tranjero 14>2"n combo llamado cboTipo-nvio donde tendremos los siguientes elementos (ormal "rgente F d ió Códi 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 envío. 1>326l pulsar ,alcular/ el programa mostrar! en la eti#ueta etiResultado el total del envío/ teniendo en cuenta lo siguiente -l total del envío 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 Península L 4F ,anarias L 4@ -%tranjero L >F -l ,oste del Tipo de -nvío 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/ debería mostrarse tambi0n un error. F d ió Códi Lib D i i PROGRAMACIÓN 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ó Códi 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 debería 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ó Códi Lib D i i PROGRAMACIÓN 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ó Códi Lib D i i PROGRAMACIÓN JAVA JSLI!ER Ejercicio 1 "na empresa de productos #uímicos 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ó Códi 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ó Códi Lib D i i -l usuario arrastra los desli+adores... ...Los valores de las eti#uetas cambian... ...5e calcula autom!ticamente los totales... PROGRAMACIÓN 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ó Códi 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ó Códi 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. PROGRAMACIÓN 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 título y dentro de 0l tres botones de opci$n a los #ue puede llamar optPelícula/ 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 mínimo 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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN 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ó Códi 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ó Códi 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 5ería 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$IGACIÓN 2 puede encontrar m!s in.ormaci$n sobre esto. F d ió Códi Lib D i i PROGRAMACIÓN 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 tenía un menG con las siguientes opciones F d ió Códi 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 &día) 1es e#uivalente a la opci$n "cti$ación 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$ación 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ó Códi Lib D i i PROGRAMACIÓN 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 7ía 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 7ía L 6ctivaci$n O 7ía O Todas Aodo (oche L 6ctivaci$n O 7ía 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ó Códi Lib D i i PROGRAMACIÓN 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 conten4ría 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 conten4ría 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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN 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ó Códi 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 tenía en dicho momento. 5i el usuario pierde entonces se le debe restar lo apostado a la cantidad #ue tenía. -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ó Códi Lib D i i PROGRAMACIÓN 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 símbolo dos puntos 12. 1?2 "n cuadro de te%to vacío 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ó Códi 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ó Códi Lib D i i "n ejemplo F d ió Códi 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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN JAVA CUA!ROS !E !IÁLOGO 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 4nstalación -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ó Códi Lib D i i por instalación 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 !ormación -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ó Códi 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ó Códi 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, 8Presentación9 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ó Códi Lib D i i PROGRAMACIÓN 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 título &-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 mínimo 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ó Códi Lib D i i Tenga en cuenta lo siguiente - La ventana debe tener el título &-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 artículos. 1-l combo se muestra desplegado para #ue puedas ver la lista de tipos de artículos2 - -n la parte in.erior hay una eti#ueta vacía con color ,<6( de .ondo. F d ió Códi Lib D i i PROGRAMACIÓN JAVA ASIGNACIÓN !E EVEN$OS !ES!E CÓ!IGO Ejercicio 1 Realice un programa para calcular el !rea y el perímetro de un círculo. 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 círculo. 1actionPerformed del bot$n de \rea2 I 5i pulsa el bot$n Perímetro se calcular! el perímetro del círculo. 1actionPerformed del bot$n de Perímetro2 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 vehículo. La ventana del programa tendr! el siguiente dise9o F d ió Códi 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ó Códi Lib D i i PROGRAMACIÓN JAVA ASIGNACIÓN !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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN JAVA ASIGNACIÓN !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ó Códi Lib D i i PROGRAMACIÓN JAVA ASIGNACIÓN !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ó Códi Lib D i i PROGRAMACIÓN 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 día 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 días de la semana elegidos 1activos2 Ejercicio 2 5e necesita hacer un programa #ue muestre la siguiente ventana F d ió Códi 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 limítese a dise9ar la ventana. F d ió Códi Lib D i i PROGRAMACIÓN 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 dígito 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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN JAVA POO; CREACIÓN ) 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 perímetro de la pared seleccionada en ese momento. CLASE REC$ANGULO PARA +ACER ES$E EJERCICIO USARÁ UNA CLASE !E CREACIÓN PROPIA LLAMA!A REC$ÁNGULO; La clase Rectangulo debe tener las siguientes características F d ió Códi 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 getPerímetro L devuelve el perímetro 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ó Códi 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ó Códi 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 artículo #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 envío. !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 artículo al objeto pedido /e-U0i8.8e/ L permite asignar el nGmero de unidades pedidas /e-Precio L permite asignar un precio unidad al artículo del pedido /e-G./-o/E05io L permite asignar la cantidad de gastos de envío 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 artículo del pedido 2e-U0i8.8e/ L devuelve el nGmero de unidades del artículo 2e-Precio L devuelve el precio del artículo del pedido 2e-G./-o/E05io L devuelve los gastos de envío 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ó Códi 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 6rtículo b. "nidades pedidas c. Precio unidad del artículo d. =astos de envío 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 6rtículo b. "nidades pedidas c. Precio unidad d. =astos de envío 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ó Códi Lib D i i PROGRAMACIÓN 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 características 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 aparecería 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ó Códi 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 varíe 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ó Códi Lib D i i PROGRAMACIÓN 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 podría 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ó Códi 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 círculo. -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ó Códi Lib D i i PROGRAMACIÓN JAVA PROGRAMACIÓN 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ó Códi 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 líneas. Llame al objeto JTe%tPane con el nombre txtTexto. F d ió Códi 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ó Códi 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 título 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 título de cada una. F d ió Códi 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ó Códi Lib D i i F d ió Códi 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ó Códi Lib D i i E'PLICACIÓN 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 líneas 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ó Códi 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 línea de te%to del .ichero. 6 trav0s de este m0todo vamos leyendo líneas 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 líneas 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%traído 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ó Códi Lib D i i PROGRAMACIÓN 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 artículo/ 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ó Códi 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 matrícula 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ó Códi Lib D i i SUPUES$O NO 3; Q ME!ICIONES R "na empresa #uímica reali+a mediciones constantemente de los materiales #ue contiene la tierra de distintas parcelas de cultivo/ y le interesaría 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 interesaría 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 #uímicos especiali+ados contratados por la empresa. -sta empresa desea almacenar los datos de estos #uímicos 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 envían 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 #uímico reali+a muchas mediciones/ pero una medici$n la reali+a solo un #uímico. -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ó Códi 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ó Códi Lib D i i PROGRAMACIÓN 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ó Códi Lib D i i PROGRAMACIÓN 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 matrícula/ la marca y el modelo. "na limusina es al#uilada por muchos clientes 1en momentos distintos claro est!/ un día la al#uila un cliente y otro día la al#uila otro2 Por otro lado/ un cliente al#uila muchas limusinas 1en momentos distintos tambi0n/ un día 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ó Códi 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 país. 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 Interesaría 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ó Códi Lib D i i SUPUES$O NO 3 Q $ALLER MECÁNICO 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 matrícula/ 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 averías a lo largo de su vida/ y cada una de estas avería 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ó Códi Lib D i i SUPUES$O NO 4 Q VI!EOCLU( R "n videoclub #uiere almacenar in.ormaci$n sobre los al#uileres de películas #ue se hicieron. Le interesa almacenar in.ormaci$n sobre las películas y sobre sus socios Películas se almacenar! el nGmero del 7*7 1no hay dos 7*7 con el mismo nGmero2/ el título de la película #ue contiene/ el nombre del director y el tipo de película. 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 película 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 películas 1(o a la ve+/ claro est! primero al#uila una/ y al día siguiente al#uila otra/ y así sucesivamente2 Interesaría 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ó Códi Lib D i i PROGRAMACIÓN JAVA 4 (ASES !E !A$OS 4 ACCESS CREACIÓN !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 MECÁNICO 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ó Códi Lib D i i PROGRAMACIÓN JAVA 4 (ASES !E !A$OS L ACCESS L CONSUL$AS CREACIÓN !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ó Códi 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 .ontanería 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 :ontanería 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ó Códi 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) dirección 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) dirección 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) dirección del cliente tel@fono fi0o de todos a#uellos clientes #ue sean academias o papelerías. 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ó Códi 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 dirección 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ó Códi Lib D i i PROGRAMACIÓN JAVA 4 (ASES !E !A$OS L SIL L CONSUL$AS CREACIÓN !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 .ontanería 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 :ontanería 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ó Códi 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) dirección 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) dirección 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) dirección del cliente tel@fono fi0o de todos a#uellos clientes #ue sean academias o papelerías. 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ó Códi 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 dirección 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 1asígneles el nombre #ue #uiera2 132 5e pide mostrar un listado de clientes con las siguientes características ,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 características ,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 características ,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 características ,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 características ,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 características 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ó Códi Lib D i i 1D2 5e pide mostrar un listado de servicios con las siguientes características ,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 características ,ampos a mostrar tipo de servicio/ .echa/ cantidad/ comentario. ,ondici$n se pide mostrar los servicios de limpie+a y los de .ontanería 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 características ,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 .ontanería 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ó Códi Lib D i i PROGRAMACIÓN JAVA 4 (ASES !E !A$OS L SIL L AL$AS,(AJAS,MO!I#ICACIONES CREACIÓN !E CONSUL$AS !E ACCIÓN USAN!O SIL PREPARACIÓN 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ó Códi Lib D i i INSERCIÓN !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
[email protected]/ cobra 33FF/BF euros y entr$ en la empresa el 4 de mar+o del 4FFB. (o tiene asignado un coche. ;enito Rodrígue+/ 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 matrícula ??@?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 matrícula ??@?I---. 69o 4FF?. -st! asignado al trabajador con 7(I @B.?@B.>?@IW MO!I#ICACIÓN !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 matrícula ??@?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ó Códi Lib D i i ELIMINACIÓN !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 .ontanería 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ó Códi Lib D i i PROGRAMACIÓN JAVA L APLICACIONES !E (ASES !E !A$OS CREACIÓN !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ó Códi 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 .ontanería) L btn!ont ,uando se pulse este bot$n interesa #ue apare+ca en un J'ptionPane un listado con los servicios de .ontanería. 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ó Códi Lib D i i PROGRAMACIÓN 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 matrícula 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 7ía O Aes O 69o Los sueldos deben aparecer con la coma decimal. F d ió Códi Lib D i i 5i el trabajador no tuviera asignada un coche/ en el campo matrícula debería 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ó Códi Lib D i i PROGRAMACIÓN 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 1otón 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&. .elección 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. .elección 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ó Códi 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. .elección por fec,a: 5e deben a9adir a la ventana los siguientes elementos 1?42"n cuadro de te%to para el día/ 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 díaImesIa9o. 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 día y mes2 F d ió Códi Lib D i i PROGRAMACIÓN 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 1otón -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ó Códi Lib D i i PROGRAMACIÓN 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 matrícula. 13C2"n bot$n (liminar coc,e. 6l pulsar el bot$n (liminar coc,e/ se borrar! de la tabla el coche cuya matrícula 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 matrícula 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 matrícula e%ista/ el programa pedir! con.irmaci$n antes de e.ectuar el borrado. F d ió Códi Lib D i i PROGRAMACIÓN JAVA L APLICACIONES !E (ASES !E !A$OS MO!I#ICACIÓN !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 matrícula. 1442"n bot$n (fectuar ;odificación. -l usuario tendr! #ue introducir una matrícula 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 matrícula. 5i no e%iste un coche con dicha matrícula 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 ;odificación. 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ó Códi Lib D i i PROGRAMACIÓN 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! vacía 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ó Códi Lib D i i PROGRAMACIÓN 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ó Códi Lib D i i PROGRAMACIÓN 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ó Códi Lib D i i PROGRAMACIÓN JAVA L J$A(LE EJERCICIO NO1 -l programa reali+ado en la hoja de ejercicios anterior permitía 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ó Códi Lib D i i PROGRAMACIÓN JAVA L J$A(LE EJERCICIO NO1 -l programa de la hoja de ejercicios anterior permitía 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ó Códi Lib D i i PROGRAMACIÓN 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 Conexión (0ercicio #ue est0 creada a partir de la 75( del ejercicio anterior. EJERCICIO NO3 ,rear un in.orme usando la cone%i$n Conexión (0ercicio del ejercicio anterior donde apare+ca el listado de clientes de la base de datos A6(-AP56 ordenado por nombre de cliente. -l título de este listado debe ser -istado de Clientes y luego guarde el in.orme con el nombre clientes. F d ió Códi Lib D i i PROGRAMACIÓN 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 título del listado debe ser IClientes de ;"N(;P."J. < debe tener las siguientes características 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 características 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 características 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ó Códi Lib D i i PROGRAMACIÓN 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 título 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. 5ería interesante #ue destacara el encabe+ado coloc!ndolo en negrita y separ!ndolo del listado de datos a trav0s de una línea. 1>?2-n la +ona del pie de columna/ a9ada simplemente una línea 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 Polígono Industrial (orte/ ,O ;onan+a > 33?F? Jere+ 1,!di+2 F d ió Códi Lib D i i