Julio César Lopez Davila
CURSO DE
¥
training & consulting
Desde cero hasta conexiones con bases de datos MySQL
op igsado2010179,,
401075
100 01
inten a Pais
oe Nore P2110
Qo? 10109) L0001
08
Le cotoorenanns UlinCURSO DE JAVA
Desde cero hasta conexiones con
bases de datos MySQL
Este curso de Java trata de ser una guia paso a paso, desde cero, para
crear una aplicacién de escritorio que se conecte al servidor de MySQL;
esti dirigido @ quienes dominan los fundamentos de programacién en
algin otro lenguaje, que ademis tienen los rudimentos de las consultas
a las bases de datos relacionales. A lo largo del curso se usan diversas
librerias de la Java Estandar Edition tales como java.lang, java.awt,
Javax.swing y java.sql de las que se estudian, ejemplifican y aplican las
clases esenciales.
La estructura del texto sigue el modelo de ensefianza de los tres
primeros médulos de Java impartidos por el Ing. Jorge Sanchez
Barrueta, profesor de 3CT.
Julio César Lopez Davila pertenece a la plantilla de profesores de Java
SE y EE en 3CT: ademés, imparte alli mismo los cursos de
Fundamentos de programacién y XHTML, de los servidores de bases
de datos MySQL y SQL Server, asi como de los lenguajes de
programacién PHP y NET.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/Presentacion
Qué y para qué es Java?
Al hablar de Java, nos estamos refiriendo a tres cosas asociadas con la programacién de
software: un lenguaje, una plataforma y un fenémeno. La eficacia y la flexibilidad del
Ienguaje permitieron crear una plataforma tan extensa que tiene aleance Io mismo para
aplicaciones de propésito general en computadoras personales, para el funcionamiento
de dispositivos méviles y aparatos electrénicos, y hasta para sitios web; este aleance ha
creado un verdadero fendmeno tecnologico; tanto, que hoy por hoy hay mas de 4 500
millones de equipos que tienen instalado Java. Entonces, en estricto sentido, esta
tecnologia sirve para hacer aplicaciones, virtualmente, para cualquier componente que
tenga un procesador de software.
La plataforma para el desarrollo de Java esti dividida en tres ediciones: la estindar
(JSE), la empresarial (IEE) y la de dispositivos méviles (JME). La primera contiene,
entre muchas otras cosas, los elementos del lenguaje, los objetos para las interfaces
grificas y los mecai
mos de conexidn a base de datos, que son lo primero que debe
saberse para desarrollar aplicaciones Java basicas.
Objetivos y metodologia del curso
Antes de seguir, es necesario dar noticia de que el éxito de la plataforma de Java se debe
‘a que cumple plenamente con las exigencias de la programacién orientada a objetos
(POO); esto obliga a que todo curso de Java tenga una introduecién a los fundamentos
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/de este modelo de disefio de software o a que se asuma su conocimiento. Sin embargo,
hay una ambigiiedad en la iniciacién en Java porque sus aplicaciones deben orientarse a
objetos pero para explicar lo esencial no es necesario. De tal manera que se pueden
crear programas sencillos sin seguir ningin patrén, pero esto impide la compresién de la
parte no trivial del lenguaje. Por eso, en este curso, presentaremos una introduccién a la
POO y los programas de la aplicacién de ejemplo se apegarin a ella, incluso los de la
introduccién a los elementos, aunque, para facilitar el aprendizaje, a menudo haremos
demostraciones sencillas sin orientacién alguna.
Ahora bien, es del conocimiento general que la curva de aprendizaje de Java es ardua.
Esto se debe principalmente a que los desarrolladores no trabajan con el lenguaje en si
sino con la plataforma. En el momento que iniciamos una aplicacién debemos usar
algunos objetos preexistentes que son parte de la edicién estindar y que realizan las
labores comunes; ademas, es necesario elegir de entre varios cientos de otros objetos
aquéllos que son itiles para alcanzar las metas del sistema. Asi que en la edicién
estindar hay un amplio nimero de librerias que contienen una multitud de objetos que
se deben conocer suficientemente para comenzar a programar.
Asi que hay que aprender mucho antes de lograr una aplicacién robusta; la tarea puede
ser agotara y confuusa, y los resultados, muy pobres. Ante esto, la metodologia de este
curso sera explicar los elementos y Ia sintaxis bisica con un grado suficiente de
profundidad; y, después, crear una aplicacién de muestra, un “paso a paso” con lo
minimo necesario para hacer un programa Java funcional. Entonces, los objetivos serin
dos: 1) Explicar lo esencial del lenguaje, y 2) Hacer una aplicacién de ejemplo que sea
una interfaz. grafica que haga consultas a una base de datos de MySQL y muestre los
resultados en tablas.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/Primera parte. Iniciacién al
lenguaje Java
Instalacién
Java funciona mediante un sofware conocido como la maquina virtual (JVM por sus
siglas en inglés), que es el corazén del entorno de ejecucién y que debe estar instalado
en el sistema operativo para que las aplicaciones Java se ejecuten. En Windows est en
luna ruta semejante a esta
CAProgram Files\Java\jre[versién]
En la que la version es una sucesién de nimeros como 1.4.5.6 , 1.6.0_07, ete
Para que los programas puedan ejecutarse hay que asegurarse que el JRE (java run
enviroment) esté instalado (que es lo més probable); si no, se descarga de
www,java.com que es un sitio dedicado exclusivamente a la disponibilidad de la
maquina virtual de Java.
Para programar es necesario el kit de desarrollo (JDK) que sirve para crear y probar las
aplicaciones y que ya incluye el JRE. En el momento de la escritura de este curso la
URL de descarga es:
ht
onvjavase/downloads/index.
En la que debe elegirse la presentacién sencilla que dice:
Java SE Development Kit JDK)
JDK Update [versién]
En la que, de la misma manera, versién es un niimero como 12, 14, 15, ete.
bttp:/www.cursodejava.com.mx © 2009 bttp:/www bienprogramado,conv,
butp:/www treset.comHay otras descargas que tienen JFX, JEE o NetBeans pero son mas grandes y los
complementos que ofrecen no son necesarios para los objetivos de este curso, aunque
cualquiera de ellas sirve igual.
Una vez instalado el JDK estar en un subdirectorio semejante a este al que se le conoce
como [JAVA-HOME]
CProgram Files\Java\jdk{ version]
En cuanto al desarrollo de aplicaciones, aunque es posible trabajar los archivos de Java
con cualquier editor de texto plano, aqui lo haremos con la versién LE de JCreator cuya
pagina de descarga es:
ICreator no debe instalarse antes del JDK porque no funcionard.
Para probar que todo est como se espera debemos ejecutar JCreator y crear un archivo
nuevo vacio:
File Type
Ses te dcamert tete
bttp:/www.cursodejava.com.mx bitp:/wwwbienprogramado.com/Oprimimos
y en el Name escribimos HolaMundo, asi, todo junto y respetando
las mayiisculas. Ademas, elegimos el subdirectorio donde se debe guardar el archivo y
oprimimos :
File Path
‘Spey tenane an path
En seguida, copiamos y pegamos el siguiente programa:
public class HolaMundo{
public state void main(String[] args){
System.out.println("Hola mundo");
Obsérvese que el nombre de la clase y el del archivo son el mismo, Ejecutamos y
compilamos con los botones que indica la figura siguiente y debe aparecer el mensaje
“Hola mundo” en la ventana General Output:
hitp://www.cursodejava.com.mx © 2009 htp://www.bienprogramado.com/
bup/www.treset.com/Be Est Find Mew Bot Bald Tene Conga Minden Hp
ia 9+ ca wt -&|p wa
ass Holakandol Paso?
Static void main(string(} args) (Enews Eat
ss.out-printin(*Hola mundo");
Si no se obtiene este resultado, es initil seguir adelante. Los errores los marcaré
JCreator y pueden deberse a que no esta instalado el JDK 0 a que el programa se
escribié. a mano y tiene errores. El compilador crea un archivo llamado
HolaMundo.class que es el que contiene el programa y el que la maquina virtual puede
interpreta.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/Definici6n breve de la Programacién Orientada a Objetos (POO)
Antes de establecer los elementos del lenguaje, es necesario tener presentes los
conceptos bisicos de la programacién orientada a objetos porque la sintaxis y el formato
de Java estén plenamente apegados a ellos.
Para empezar, todo parte del hecho de que el desarrollo de la programacién de
computadoras entr6 en crisis en los aiios 60 y 70 del s. XX porque las aplicaciones a
menudo hacian cosas raras. Un caso es el del Centro de Cémputo Noruego en Oslo en el
que desarrollaban simuladores de vuelo; sucedia, cuando los ejecutaban, que las naves
colisionaban. Un anilisis del problema probé que Ia aplicacién confundia las
caracteristicas entre uno y otro objeto simulado; es decir, que la cantidad de
combustible, la posicién en el espacio o la velocidad de una nave eran atribuidas a otra.
Se concluyé que esto se debia al modo como programaban y que los lenguajes de
entonces eran incapaces de resolver el problema. Ante esto, los expertos del Centro
Noruego desarrollaron Simula 67 que fue el primer lenguaje orientado a objetos.
Asi que la POO es una manera de disefiar y desarrollar software que trata de imitar la
realidad tomando algunos conceptos esenciales de ella; el primero de éstos es,
precisamente, el de objeto, cuyos rasgos son la identidad, el estado y el
comportamiento, No debemos dejamos intimidar por estas expresiones, son muy
simples:
La identidad es el nombre que distingue a un objeto de otro.
El estado son las caracteristicas que lo describen.
El comportamiento es lo que puede hacer.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
hutp://www-treset.com/Se debe tener presente que los objetos, sean reales o su proyeccién en software, se
abstraen en clases. Por ejemplo: de la clase perro pueden existir dos objetos Fido y
Firulais (esta es su identidad). Fido es un san bernardo enorme, pinto, de 5 afios de
edad; mientras que Firuldis es un labrador, negro, de 3 aos (este es su estado). Ambos
perros ladran, merodean, juguetean, comen y duermen (este es su comportamiento).
Si nos pidieran que hiciéramos un programa orientado a objetos que simulara lo anterior
hariamos la clase Perro que tendria las variables raza, color y edad, y los métodos
ladrar(), merodear(), juguetear(), comer() y dormir(). Fivulsis y Fido son los
identificadores que podriamos usar en una aplicacién que pretenda mostrar dos objetos
de la clase Perro.
El programa Hola Mundo y los conceptos de abstraccién y
encapsulamiento
Otros conceptos de la POO son el de abstraccién y el de encapsulamiento, que estin
muy ligados y tienen que ver con el disefio de programas. Ambos se refieren a que los
objetos deben hacer tareas que les son propias y no de otros. Por lo comin, los objetos
de la realidad no dan problemas porque ya existen. No fue dificil abstraer Ia clase Perro
ni encapsular su comportamiento porque existe en la realidad, Para llevar esto al ambito
del software analicemos el caso del programa Hola Mundo. Hagamos el proceso de
abstraccién para encapsular sus caracteristicas y su comportamiento.
El primer Hola Mundo lo popularizé Brian Kernighan en los aftos 70 del siglo XX, en
un libro que causé mucho interés en su tiempo y que escribié junto a Dennis Ritchie:
The C Programming Language. Hoy en dia, es una tradicién presentar los lenguajes con
un programa de este tipo, que lo que debe hacer es mostrar la frase “Hola mundo” en la
pantalla, y sirve para probar que el lenguaje est debidamente instalado y funcionando.
Inpuiww: cursodejva.com mmx © 2009 bp: bienprogramado,com!
haps. eset. com/Entonces, abstrayendo esto, podemos decir que el comportamiento de los objetos del
tipo Hola Mundo es mostrar un mensaje y su caracteristica, el mensaje mismo.
Lo que sigue es mostrar cémo los elementos de lenguaje Java nos permiten apegarnos a
la orientacién a objetos; para eso es necesario conocer dichos elementos, pero antes,
para finalizar, un breve resumen.
Hemos introducido cinco conceptos de la POO:
1. La identidad, que es el nombre que distingue a los objetos
2. Elestado, que se refiere a sus caracteristicas o atributos
3. El comportamiento, que indica los _métodos que se deben programar para que
los objetos realicen acciones,
4, La abstraccién, que es el mecanismo mental para aislar su naturaleza
5. El encapsulamiento, que exige que sus caracteristicas y métodos estén bien
definidos y no se confundan con los de otros
Faltan dos conceptos muy importantes: la herencia y el polimorfismo, que veremos
mis adelante, cuando el conocimiento del Lenguaje facilite su comprensién.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/Elementos del lenguaje Java
El siguiente programa presenta la primera versién del Hola Mundo orientado a objetos:
HolaMundoOO.java
‘Aunque el eompilador importa la librera java lang completa
‘es convenient importarlaexplicitamente por razones ddticas*/
import javalang.*;
public class HolaMundoOO
String saludo; La clase Sring Ia importamos de java lang
public void mostarSaludo(){
saludo="Hola mundo”;
System.out println(saludo)y/La clase System la importamos de java.lang
Y est conformado por los siguientes elementos:
+ Identificadores
+ Sentencias
+ Bloques de eédigo
+ Comentarios
+ Expresiones
+ Operadores
+ Metacaracteres
+ Palabras reservadas
Explicaremos cual es el uso de cada uno de ellos y, después, como funcionan en el
HolaMundo java.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Identificadores
Son los nombres que pueden tener las clases, los métodos y las variables y no pueden
contener espacios ni caracteres especiales.
convenciones segiin la siguiente tabla:
Estos nombres deben respetar ciertas
Tipo de identificador | Convencién Ejemplo
Clase Comienza con maytiscula | HolaMundoOO
Método Comienza con miniscula | mostrarSaludo ()
Variable Comienza con miniscula | saludo
Si el identificador esta formado por mas de un vocablo, a partir del segundo las iniciales
deben ser maytisculas. Ademis, se recomienda que los nombres de las clases sean
sustantivos, los de los métodos verbos y que las variables expresen con claridad su
contenido.
Sentencias
Son las drdenes que se deben ejecutar en el programa y terminan siempre con un punto
ycoma;
Por ejemplo:
String saludo;
bttp:/www.cursodejava.com.mx
© 2009
hutp://www-treset.com/
bitp:/wwwbienprogramado.com/Bloques de cédigo
Son el principal mecanismo de encapsulamiento y se forman con un grupo de sentencias
y de otros bloques de cédigo delimitados por una Have de apertura y una de cierre
(considerados metacaracteres en java, como veremos mas adelante):
if)
Por ejemplo:
{
saludo~’Hola mundo”;
System.out printin(saludo)://La clase System la importamos de java.lang.
}
Comentarios
Son lineas de texto insertas en el programa para documentarlo y facilitar su lectura. Los
tipos de comentarios mas usados son:
Tipo Caracteres que | Ejemplo
los identifican
De una | // //La clase Sring la importamos de java.lang
sola linea
De varias | */ /*Aunque el compilador importa la librerfa java.lang
lineas completa es conveniente importarla explicitamente por
razones didécticas*/
Intpv/wwww.cursodejava.commx © 2009 hittov/wwww.bienprogramado.com/
bup/www.treset.com/Expresiones
Las expresiones son entidades formadas por dos o mis miembros separados entre si por
operadores que los evalian y los relacionan.
Por ejemplo;
saludo="Hola Mundo”;
Operadores
Los operadores son signos especiales para hacer acciones especificas y son el
mecanismo con el cual los objetos interactiian relacionando los datos y devolviendo
nuevos valores; los mostraremos conforme los necesitemos. Se clasifican asi
© Aritméticos
© De comparacién y logicos
© Deasignacion
Metacaracteres
Existen otro tipo de caracteres particulares que sirven para el control y la significacién
puntual en las sentencias y los bloques de cédigo:
(LES-S]]} 2+
Palabras reservadas
Hay un grupo de palabras en Java con las cuales, entre otras cosas, se realizan las tareas
principales, se delimitan los alcances de los objetos, sus datos y sus métodos, ete. Se
pueden clasificar asi y las mostraremos también conforme avancemos:
+ Tipos de datos
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/+ Sentencias condicionales
7 Sentencias iterativas
+ Tratamiento de las excepeiones
+ Estructura de datos
+ Modificadores y control de acceso
A continuacién, una imagen que esquematiza los elementos en la clase HolaMundoOO
(/*Aunque el compilador importa la librerfa java.lang completa
es convenienteimportarla explicitamente por razones didécticas*/
‘importjavalang.*;
public class HolaMundoOO{
Identificadores: Mill
Sentencias: sa
Bloques de cédigo
de la clase:
delmétodo = 9)
Comentarios: gay
Operadores:
Metacarecteres
Palabras reservadas
(Obsérvese que la linea saludo= “Hola mundo”; es, ademés, una expresion porque
utiliza el operador de igual (=))
La imagen anterior muestra que, a pesar de la sencillez del programa, son muchos los
elementos que estin involuerados. Las reglas de organizacién de dichos elementos
conforman la sintaxis cuya comprensién nos obligard a desmenuzar el programa
HolaMundoO0 en el siguiente apartado.
hitp://www.cursodejava.com.mx © 2009 few bi smado.com’
htp:/Awww.treset.com!Sintaxis
Para comprender mejor la sintaxis del programa debemos pensar en términos de émbito
© alcance. Primero hay que saber que los comentarios estan fuera del programa, no
estin dentro de su ambito, el compilador no los interpreta, son sefiales que el
programador usa para facilitar la comprensién del cédigo.
El ambito mas externo es donde importamos los recursos que se requeriran para el
programa y donde declaramos el programa mismo. Aqui esté el principio de todo. En
Java siempre desarrollaremos clases, y siempre usaremos clases ya hechas que
importaremos. Los recursos minimos para programar estin en el paquete Jang de la
libreria java que el compilador importa por omisién, aunque aqui (ya lo deciamos en un
comentario de la clase HolaMundoQO) lo haremos explicitamente por razones
didécticas,
Asi que al comenzar a desarrollar un programa debemos primero determinar las clases
externas necesarias para ayudar a la clase que crearemos nosotros, y después crear ésta,
Para la primera labor usamos la palabra reservada import y todas las clases invocadas
asi podrin ser utilizadas en cualquier lugar del bloque de cédigo de la clase; para la
segunda, empleamos las palabras reservadas public class seguidas del nombre que
deseemos asignarle; debe ser ‘inico, preferentemente un sustantivo, iniciar con
maytscula y expresar claramente su funcién porque seré el identificador de Ia clase;
después van dos Haves que contendrin el bloque de cédigo, como muestra la figura
siguiente.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/| import java.lang.*;
public class HolaMundo{
El rectangulo representa el ambito © aleance. Los objetos del paquete lang estin
disponibles en todos lados.
Dentro del bloque de la clase esté el lugar donde deben crearse las propiedades 0
atributos y declararse los métodos. Las propiedades deben escribirse primero, fuera de
cualquier método y su alcance sera toda la clase, que es lo que significa el rectangulo
interno en la siguiente figura,
import java.lang.*;
ublic class HolaMundof
String saludo;
Aqui hace falta hablar de la sintaxis de la creacién e inicializacién de las variables. En
Java, toda variable se crea estableciendo su tipo seguido de un nombre, que deberd ser
‘inico en el mbito donde se le declara; se inicializan siempre con una expresién. Crear
significa asignarles un espacio en memoria, mientas que inicializar es darles un valor:
String saludo; > Crea una variable llamada saludo.
saludo= “Hola mundo”; > La inicializa
Cuando las variables son atributos deben crearse tinicamente y debe hacerse fuera de los
métodos; por otto lado, serin inicializadas dentro de alguno de ellos en el que
convenga. Es posible hacer ambas labores en una sola linea pero sera sélo aquéllas que
sirven a las tareas de los métodos:
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/String muestra= “Esto es una muestra”;
Los métodos, por su parte, se declaran estableciendo primero el nivel de acceso. En este
caso mostrarSaludo() tiene acceso piiblico (para eso usamos la palabra reservada
public), que significa que cualquier objeto externo puede invocar la tarea encapsulada
en el método. Hay otras posibilidades, por ejemplo private, que es también una palabra
reservada, y que significa que el método sélo puede ser usado al interior de la clase en
la que es declarado. Después del nivel de acceso, esté el tipo de datos que el método
devuelve; mostrarSaludo() no regresa ningin valor; para indicar esto se usa otra palabra
reservada: void, que, como veremos después, podri ser sustituida por cualquier tipo de
datos. Todos los métodos deben tener su propio bloque de cédigo, en el que, como ya
dijimos, est encapsulada su tarca. El método en cuesti6n inicializa saludo, ¢ invoca la
clase 5
ystem (que importamos del paquete /ang al principio) cuyo atributo out es un
objeto que tiene el método printin(cadena) cuya tara es imprimir una linea con el texto
que recibe como parimetro en la salida estindar del sistema. El método
mostrarSaludo() y su aleance estan representados en el rectingulo més interno de la
siguiente figura.
import java.lang.*;
ic class HolaMun
ublic void mostrarSaludo(){
saludo="Hola mundo”;
‘System.out.printin(saludo);
En cuanto a la sintaxis, falta decir que otra de las responsabilidades de cualquier clase
es autoconstruirse por lo que tendré un método que se lamar igual que la clase misma,
deberi ser piblico, no tiene modificador del tipo que devuelve y lo Hamamos el
constructor, con lo anterior la clase queda como sigue (obsérvese que en este método
se inicializa el atributo):
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/import java.lang.*;
public class HolaMundoO0{
String saludo; /La clase Sring a importamos de java.lang
{WCreamos el método constructor con el mismo nombre dela ease
public HolaMundoOO0{
saludo="Hola mundo";/En el constructor se inicializan las propicdades
)
public void mostrarSaludo(){
System.out println(saludo)y/La clase System la importamos de java.lang
Finalmente, otro mecanismo de encapsulamiento es crear paquetes para guardar en ellos
las clases que hacen labores afines. Esto se logra con la palabra reservada package
seguida del nombre que identificara al paquete; éstos se escriben s6lo con miniisculas.
La versién final de la clase HolaMundoOO que queda encapsulada en el paquete
holamundo, que importa de java.lang las clases String y System, que tiene el atributo
saludo de tipo String, que se autoconstruye ¢ inicializa la propiedad, que tiene un
método que muestra saludo usando la clase System queda asi (Atiéndanse los
comentarios):
package holamundo;/Los paquetes son subdirectorios,
import java.lang.String;
import java.lang. System;
public class HolaMundoOO{
String saludo;
{#Creamos el método constructor con el mismo nombre de la clase
public HolaMundoOOOt
saludo="Hola mundo",/el constructor inicializa las propiedades
)
public void mostrarSaludo(){
System.out println(saludo);
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Si aplicamos al programa anterior los mismos pasos del apartado de instalacién para
probar JCreator, excepto el de ejecucién; es decir, crear un nuevo documento vacfo con
€l mismo nombre de la clase, copiar el cédigo anterior y oprimir el botén de
compilacién debemos obtener algo parecido a esto:
Despues de
‘rear el archive
y eserbir el
{6digo opr
60 ‘compl
Dentro del paquete queda el archivo .class, que es el que la maquina virtual puede
interpretar:
bttp:/www.cursodejava.com.mx © 2009 bntps/www.bienprogramado.com/
bup/www.treset.com/hitp://www.cursodejava.com.mx © 2009 few bi smado.com’
htp:/Awww.treset.com!Ejecucién y flujo de datos
Ejecucion
Falta decir que en toda aplicacién Java debe haber una clase que tenga un método main
que es el primero que se ejecuta. La clase que hemos creado no lo tiene porque no es su
responsabilidad, si nos apegamos al proceso de abstraccién segiin el cual la disefiamos.
Para eso haremos otra clase llamada KjecutorHolaMundoOO cuya responsabilidad sera
correr el programa y que tendra como propiedad un objeto de la clase HolaMundoOO.
Esto nos serviré como practica de sintaxis y para analizar el flujo de datos en Java.
Hagamoslo por pasos, ambito por ambito:
1. Empaquetamos en util, importamos HolaMundoOO y declaramos la clase:
package util;
import holamundo.HolaMundoOO;
public class EjecutorHlolaMundoOO {
2. Creamos una propiedad del tipo o clase HolaMundoOO con el identificador hola:
package utils
import holamundo. HolaMundoOO;
public class EjecutorHolaMundoOO {
HolaMundoOO hola;
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/3. Aiiadimos los métodos:
3.1 Agregamos el constructor en el que inicializamos la propiedad hola e
invocamos el método mostrarSaludo() de dicho objeto, utilizando el punto(.),
que es el metacaracter que nos permite invocar los atributos y los métodos de los
objetos:
package utils
import holamundo.HolaMundoOO;
public class EjecutorHlolaMundoOO {
HolaMundoOO hola;
public EjecutorHolaMundoOO(
hola~new HolaMundoOOQ;
hola.mostrarSaludo();
3.2 Agregamos el método main. Ni la palabra reservada static ni lo escrito en
los paréntesis del método debe inquictarnos. Por el momento, basta con saber
que la sintaxis es rigurosa. El método que ejecuta la aplicacién debe escribirse
asi, lo tinieo que cambia es el contenido del bloque de eédigo:
package wil
{import holamundo.HolaMundoOO;
public class EjecutorHlolaMundoOO {
HolaMundo00 hola;
public EjecutorHolaMundoOO) {
hola=new HolaMundoO0O();
hola.mostrarSaludoQ);
)
public static void main(String] args) {
EjecutorHolaMundoO0 ejecutor=new EjecutorHolaMundeOO();
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/En JCreator, en un archivo vacio llamado igual que la clase (EfecutorHolaMundoOO) y
que debe estar en el mismo subdirectorio que el HolaMundoOO java, escribimos el
cédigo; Compilamos y ejecutamos el programa, con lo que debemos obtener el
siguiente resultado:
Fle Git Find View Prot Bull Toole Cone Window Hap
a 2 a sald
2 | import holamundo.olamundooos
Sopublic class EjecutorHelaMunds0o {
9 | ponateandood hola?
5) public EjecuterHolaMundooo () {
s olasnew HolaMinds0o ()
7 hola.mostrarsaluda ()?
,
public static void main(stringl] args) (
BjecutorHolamundooo ejecutor=new EjecutorlolaMundo0d ()
i
a
ql
i
a
:
3
i
La estructura de directorios debe presentar los archivos ,java y los dos subdirectorios de
los paquetes dentro de los cuales debe estar cada uno de los archivos .class:
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/(FiNeinive: | Fecha medienién | Tpo | Tamato
holamundo
Carpeta de archivos
b a
FjecutorHolaMundoO0 java
Archivo JAVA
339 bytes
HolaMundo0O java
y
Flujo de datos
Lo que sigue es explicar cémo funciona lo anterior. Cuando oprimimos el botén
ejecutar, el compilador de Java busca el método main, si no lo encuentra, mostrar un
error. En nuestro caso, esta es la sucesién de pasos:
1, Comienza a recorrer el bloque de cédigo del método main que contiene un
objeto de la clase HjecutorHolaMundoOO que lamamos ejector y que
inicializamos usando la palabra reservada new y el método constructor de dicha
clase.
2. Esto inicializa el objeto hola con el constructor de la clase HolaMundoOO,
a. Que lena el objeto saludo con la cadena “Hola mundo”
3. Después, en el constructor de a clase EjecutorHolaMundoOO, se invoca al
método muestraSaludo() del objeto hola
a. Que envia, en una linea, la variable saludo a la salida estandar del
sistema, que en JCreator es la ventana General Output.
El siguiente diagrama muestra el proceso anterior:
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Flujo principal EjecutorHolaMundoOO. class
¢ Inicio ) Elementos tomados de HolaMundoOO.class
¥ [>| saludo="Hola mundo”
yv
hola=new HolaM undoOOX) <
v
hola. muestraSaludo()
Tipos de datos
Generalidades
En Java, las variables podran ser de dos tipos: objetos y tipos primitivos. Hay
diferencias entre unos y otros. En realidad las primeras clases que conforman la
plataforma estén hechas s6lo de tipos primitivos. Estos se obtienen con las palabras
reservadas: byte, short, int, long, float, double, char y bolean. En este curso usaremos
solamente int para enteros, double para nimeros con punto decimal, y bolean para los
valores légicos. Por su parte, los objetos siempre son tomados de una clase que lo
mismo puede estar en alguna libreria del JDK 0 en algin archivo creado por nosotros.
Siempre que se necesite una variable debe ser declarada especificando su tipo seguido
de su identificador (ya habiamos mostrado esto):
int valor;-> Declara una variable para nlimeros enteros
valor=12; > Le asigna un valor
String cadena;->Declara una variable que es un objeto de tipo String
Inpuiww: cursodejva.com mmx © 2009 bp: bienprogramado,com!
haps. eset. com/cadena= “palabras” > Le asigna un valor
Ya antes dijimos que ambas tareas se pueden hacer en la misma linea:
int valor=12
La diferencia central entre los tipos primitivos y los objetos es que éstos disponen de los
atributos y los métodos que les confieren las clases a las que pertenecen; como también
ya dijimos, para acceder a ellos se usa el metacaracter (.):
cadena.tength()
Aqui debemos hablar de las Java Fundation Classes (IFC) y de su Application
Programming Interface (API); es decir, de las clases base de Java y su interfaz de
programacién de aplicaciones. La descripciin de los métodos, de los atributos y de las
propias clases base con las que programaremos estin en la API, que esti publicada en:
http://java.sun.com/javase/api
Las JFC en si estin en el JDK y por eso lo descargamos ¢ instalamos. Hemos usado dos
de ellas: String y System; s6lo hemos invocado la propiedad out de ésta; no obstante,
cada una tiene muchos métodos y muchas propiedades que estan descritas en la API; de
cuyo conocimiento dependen las alternativas de programacién de las que disponemos.
Cada _método propiedad mencionados aqui serin explicados sencillamente, La
profundizacién en todas las posibilidades de cada clase es responsabilidad del
destinatario de este curso. Visitar el site de la API no es una eleccién para el
programador de Java, es una exigencia obligatoria. Se puede decir que del mayor
conocimiento de la API depende la capacidad de programacién en el lenguaje.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/Los tipos de datos y los métodos
Ya dijimos que los métodos pueden devolver cualquier tipo de datos; falta agregar que
también pueden recibir parimetros. Esto hace que existan cuatro tipos de métodos:
Sintaxis Devuelve valor | Recibe parimetros
void tarea() No No
Tipo tarea() Si No
void tarea(Tipo parametro) No Si
Tipo metodo(Tipo parametro) Si Si
El primero de ellos lo usamos en la clase HolaMundoO0 y es muestraSaludo(). Veamos
un demo para cada una de los otros casos.
Caso de método que si devuelve un tipo y no recibe pardmetros
Esttidiese el siguiente programa:
DemoMetodoSiTipoNoParametros,java
public class DemoMetodoSiTipoNoParametros {
String saludo;
public DemoMetodoSiTipoNoParametros() {
‘*En la expresién siguiente el atributo
“saludo es llenado con lo que devuelve
método
”
saludo=devuelveHiolaMundo();
bttp:/www.cursodejava.com.mx
© 2009
bup/www.treset.com/
bitp:/wwwbienprogramado.com/muestraSaludo();
}
JObsérvese que el método devuelve un objeto de la clase String
public String devuelveHolaMundo(){
String hola="Hola mundo’
‘return es obligatorio si el método devuelve
“un valor. El modifieador de retum debe ser del mismo
ipo que el valor devuelto
”
return hola;
4
public void muestrsSaludo(){
System out printla(saludo);
)
public static void main(String] args) {
new DemoMetodoSiTipoNoParametros()
)
En este cédigo, la propiedad saludo es inicializada no con una cadena sino con el valor
que regresa el método devuelveHolaMundo() cuyo tipo es String. En dicho método
hemos creado otra variable del mismo tipo, y la hemos inicializado con la cadena “Hola
mundo”. La palabra reservada return sirve para indicar cual es el valor que devolverin
los métodos.
Caso de método que no devuelve un tipo y si recibe parametros
En el programa siguiente, que es una variante del Hola Mundo, en el constructor se
inicializa 1a variable ‘saludo’ y es mandada como pardmetro al _método
muestraSaludo(), que copia el contenido a la variable ‘recibido’
DemoMetodoNoTipoSiParametros.java
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/public class DemoMetodoNoTipoSiParametros {
String saludo;
public DemoMetodoNoTipoSiParametros() {
saludo="Hola mundo";
1/Sec envia la variable ‘saludo’ para que el método la use como parimetto
muestraSaludo(saludo);
)
/*E1 contenido de ‘saludo’ es escrito en la variable
‘recibido’ del parimetro del método muestr
public void muestraSaludo(String reci
System outprintin(recibido);
)
public static void main(String{] args) {
new DemoMetodaNoTipoSiParametros();
)
Caso de método que si devuelve un tipo y si recibe parametros
Es facil deducir de los ejemplos anteriores el iiltimo caso. No obstante, falta decir que
mientras que los métodos pueden devolver s
10 un tipo, el niimero de parimetros puede
ser miltiple. Véase el ejemplo que calcula el érea de un triéngulo con la base y la altura
como argumentos:
DemoMetodoSiTipoSiParametros,java
public class DemoMetodoSiTipoSiParametros {
double resultado;
public DemoMetodoSiTipoSiParametros() {
‘resultado se Ilena con el valor que devuelve
‘el método obtieneAreaTriangulo(), que a su vez
*recibe los dos parimetros que usa en una formula,
”
resultado“obtieneAreaTriangulo(2.5,6.3):/Los parimetros se separan con comas
System.out.println("El resultado es: "+resultado);
)
public double obtiene AreaTriangulo(double base, double altura){
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/double area =(base*altura)/2;
return area;
)
public static void main(String{] args) {
new DemoMetodoSiTipoSiParametros();
)
Falta decir solamente que los parimetros no deben ser necesariamente del mismo tipo y
que cuando son mas de uno se usa el metacaracter coma (,).
Un comentario final sobre la API. Cuando buscamos los atributos y los métodos de una
clase, en la URL en cuestién se mostrari el tipo (aun si es void); y en el caso particular
de los métodos se indicarin, también, los parimetros con su tipo. A partir de ahora,
siempre que citemos una clase nueva de las JFC, ser con un enlace a la API.
Estructuras de control
Introduccién
Para terminar la seccién de iniciacién al lenguaje es necesario explicar cémo se controla
él flujo de datos. Para empezar, es itil decir que en todos los lenguajes de programacién
existen tres tipos de sentencias: las secuenciales, las select
fas y las repetitivas. Hasta
ahora, s6lo hemos usado el primer tipo, en el que las posibilidades del flujo de datos se
reducen a una secuencia de pasos; para hacer que exista mis de una alternativa o que
cierta tarea se repita varias veces, en Java usa un grupo de palabras reservadas para
controlar el flujo y todas ellas usan un bloque de cédigo.
Para ver los ejemplos de como funcionan dichas estructuras usaremos la clase
JOptionPane que sirve para mostrar cuadros de didlogo y tiene los métodos
showlnputDialog( y showMessageDialog() que se usan para pedir y dar informacién al
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/usuario, respectivamente; para ver cémo operan haremos una clase que sera otra
variante de nuestro tan traido HolaMundo, que primero pedira el nombre del usuario y
luego lo saludara.
Antes de seguir, hagamos un poco de abstraccién. Obsérvese que lo que queremos hacer
es una demostracién de cémo la clase JOptionPane sirve como mecanismo de entrada y
salida de datos, por eso la llamaremos DemolOJOptionPane (IO de Input/Ouput); sus
responsabilidades serin pedirle su nombre al usuario, y saludarlo en pantalla; dicho
nombre seri una propiedad. Cabe aclarar que como el sentido de la clase seré dar una
demostracién, el método main si entra dentro de sus capacidades.
DemolOJOptionPane.java
package cursojava.demos; /La encapsulamos en un lugar para todos los demos
import javax.swing,JOptionPane; /Importamos la clase JOptionPane
public class DemolOJOptionPane {
String nombre; //Este ser la informacién para el VO
public DemolOJOptionPane() {
(El constructor lama a sus métodos
pideNombre();
muestraSaludo();
)
/*La palabra reservada null del primer atributo en los dos métodos
*de JOptionPane es porque, por lo comin, esta clase es llamada desde una ventana
* que es su propietario como no tenemos tal ventana, lo indicamos asi
* El segundo parimetro es el mensaje que aparecers en el cuadro de didlogo.
”
private void pideNombre(){
nombre-JOptionPane.showInputDialog(null,"Escribe tu nombre")y/Pide el nombre
)
private void muestraSaludo(){
JOptionPane.showMessageDialog(null,'Hola "4nombre)s/Saluda en pantalla
,
publie state void main(String(] args) {
new Demol0JOptionPane();
,
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Al ejecutar el programa, aparece un cuadro de didlogo con el mensaje que le mandamos
como segundo parimetro al método showInputDialog():
Entrada
Escribe tunombre
[
Aceptar
Dentro del cuadro de texto se debe escribir un nombre y oprimir el botén :
Gs
Luego de lo cual apareceré otro cuadro de didlogo con la cadena “Hola ” concatenada
(usando el operador +) con el nombre escrito por el usuario; el valor obtenido de esta
concatenacién es lo que mandamos como segundo parimetro del método
showMessageDialog():
Con esto podemos empezar a trabajar con el flujo de datos. Si se ejecuta el programa y
en el primer cuadro de diélogo se oprime en lugar de , la cadena
que mostrar después seré Hola null, que no es el resultado esperado, si se quisiera
controlar esto, se tendria que controlar el flujo. Existen varias posibilidades para esto y
las veremos en seguida.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
hutp://www-treset.com/El bloque if.
Analice y ¢jecute el siguiente programa (que es una variante del anterior) oprimiendo el
botén cancelar:
package cursojava.demos; La encapsulamos en un lugar para todos los demos
import javax.swing.JOptionPane;/Importamos la clase JOptionPane
public class DemolfElse {
String nombre; //Este seri la informacién para el LO
public DemolfElse() {
{BI constructor llama a sus métodos
pideNombre():
muestraSaludo();
)
private void pideNombre(
‘nombre-JOptionPane.showlnputDialog(null,"Escribe tu nombre"}/Pide el nombre
)
private void muestraSaludo(){
‘Minicio de la estructura de contro if..clse
iflnombr
JOptionPane.showMessageDialog( null,” Oprimiste cancelar")//Mensaje por la cancelacién
null) _{//Obsérvese que el operador de comparacién es == (doble igual)
Jelse ‘
JOptionPane.showMessageDialog(nul,"Hola "*+nombre)//Saluda en pantalla
)
(fin de a estructura
)
publie state void main(String] args) {
new DemolfElse ();
)
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/En este caso, si el usuario decide no escribir el nombre y cancelar, el programa lo
muestra.
if.. else anidado
Aunque hemos avanzado, el programa sigue teniendo problemas. Si el usuario no
escribe el nombre pero oprime el botén aceptar, la cadena mostrada seri Hola
solamente; si queremos que aparezca otro mensaje para este caso, hay mas de una
solucién; una de ellas es anidar un if...else dentro del que ya hicimos:
DemolfElseAnidado,java
package cursojava.demos; /La encapsulamos en un lugar para todos los demos
import javax.swing.JOptionPane;/Importamos la clase JOptionPane
public class DemolfElseAnidado{
String nombre; //Este ser la informacién para el LO
public DemolfElseAnidado() {
{EI constructor llama asus métods
pideNombre();
muestraSaludo():
)
/*La palabea reservada null del primer atributo en los dos métodos
‘de 1OptionPane es porque, por lo comin, esta clase es llamada desde una ventana
* que es su propietario como no tenemos tal ventana, lo indicamos asi
”
private void pideNombre(){
‘nombre-JOptionPane showInputDialog(nul,"Eseribe tu nombre")/Pide el nombre
)
private void muestraSaludo(){
‘Mnicio de la estructura de control if..else
JOptionPane.showMessageDialog(aull," Opri
te eancelar")//Mensaje por la cancelacién,
Jelse
iffaombre.equals("")) i/Las cadenas no se comparan con — sino con el método equals()
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/JOptionPane.showMessageDialog(null,"Oprimiste aceptar sin escribir tu nombre");
Jelset {
‘JOptionPane.showMessageDialog(aull,"Hola "*nombre);/Saluda en pantalla
)
public static void main(String{] args) {
new DemolfElseAnidado();
)
En este caso, el programa podra enviar tres respuestas distintas:
1. Mandar el saludo
2. Indicar que se oprimié cancelar
3. Indiear que no se escribié el nombre
Operadores légicos
Se puede simplificar el programa anterior utilizando operaciones logicas. Esto se refiere
a que los valores de las variables, al compararse, siguen ciertas normas. En el programa
que hemos estado trabajando ya mostramos que el argument que recibe Ia palabra
reservada ifes un valor boléano. Es decir, una expresién que devuelve verdadero o falso
(para las que se usa las palabras reservadas true y false, respectivamente). En este tipo
de expresiones se usan operadores especiales (ya usamos el de asignacién), que son
binarios, es decir que tienen un operando a cada lado, y que se muestran en la siguiente
tabla:
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/‘Operador
Significado
Es ue cuando:
Es fase euando:
Negacion. Cambia el valor
de verdad del objeto que | falso
modifica
EI objeto que modifica es | El objeto que modifica es
verdadero
Compara si Tos miembros
gue estan a ambos lados son
iguales
“Ambos objetos son iguales
Los objetos son distintos
Compara si Tos miembros
Los objetos son distintos
“Ambos — objetos son
que estén a ambos lados son iguales
distintos
>| Compara si el objeto de la | Si el objeto de Ta wquierda es [Si el objeto dela
izquierda es mayor que el | mayor que el deladerecha | izquierda no es mayor
dela derecha que el de la derecha
= [Compara si ef objeto de la [Si el objeto de Ta izquierda es [Si el objeto de Ia
izquicrda es menor que el de | menor que el de la derecha | izquierda no es menor
la derecha que el de la derecha
‘Compara si el objeto de Ta
izquierda es mayor o igual
que el de la derecha
derecha
mayor o igual
Siel objeto de la izquierda es [Sil objeto de Ta
‘que el de la | izquierda no es mayor ni
igual que el de la derecha
Compara st el objeto de Ta
izquierda es menor o igual
que el de la derecha
derecha
Srel objeto de la iaquierda es |Si_al objeto dela
‘menor o igual que el de la | izquierda no es menor ni
igual que el de la derecha
Junto con estos, existen otros que sirven para hacer operaciones entre objetos boléanos.
Los mas importantes se presentan a continuacién
AND
El operador AND se representa en Java con un doble ampersand (&&) y su
funcionamiento es de acuerdo con la siguiente tabla:
bttp:/www.cursodejava.com.mx
bup/www.treset.com/
Operando I | Operador | Operando 2 | Resultado
Tre && True True
False && True False
True && False False
False && False False
©2009 hnpy//wnww.bienprogramado.comyOR
El operador OR se representa en Java con un doble pipe (||. Este caracter normalmente
esta en la misma tecla del niimero 1. Es esa linea vertical cortada en el centro. Su cédigo
ASCII es 124); funciona de acuerdo con la siguiente tabla:
Operando T | Operador | Operando 2 | Resultado
True T True True
False T True True
True T False True
False T False False
Con lo anterior podemos hacer una nueva versién del programa en el que, en lugar de
anidar las estructuras de control, usaremos el operador OR (\\):
DemolfElscOr,java
package cursojava.demos; /La encapsulamos en un lugar para todos los demos
import javax.swing.JOptionPane; //Importamos la clase JOptionPane
public class DemolfElseOrt
String nombres
public DemolfElseOx() {
pideNombre();
muestraSaludo();
)
private void pideNombre(){
nombre-JOptionPane.showInputDialog(null,"Escribe tu nombre")y/Pide el nombre
,
private void muestraSaludo(){
if{nombre—null || nomibre.equals("")){//Uso del operador OR
JOptionPane.showMessageDialog(null,"No diste tu nombre")//Mensaje de error
Jelsel
JOptionPane.showMessageDialog(null,"Hola "*nombre);//Saluda en pantalla
)
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/,
public static void main(String{] args) {
new DemolfElseOr();
)
La estructura de control while
Si suponemos que en el programa anterior el usuario debe escribir su nombre, podemos
hacer que el flujo de datos repita la operacién de solicitarlo mientras el usuario no
proporcione la informacién. Para eso usamos while:
DemoWhile java
package cursojava.demos; /La encapsulamos en un lugar para todos los demos
{import javax.swing.JOptionPane;/Importamos la clase JOptionPane
public class DemoWhilet
String nombre;
publie DemoWhile() {
pideNombre()
muestaSaludo()
)
private void pideNombre(){
nombreJOptionPane shovlnputDialog(aull,"Escribe tu nombre");/Pide el nombee
4
private void muestraSaludo(){
‘Minicio del bucle while
‘while(nombre=nuljnombre.equals(")){
‘nombre=JOptionPane showlaputDialog(nul,"Debes escribir tu nombre");
)
JOptionPane.showMessageDialog(null,"Hola "+nombre);//Saluda en pantalla
)
publi statie void main(String] args) {
new DemoWhile();
}
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/El programa anterior mostrar reiterativamente el cuadro de dilogo que solicita el
nombre, mientras el usuario no escriba una cadena.
La estructura de control try...catch
El bloque iy...catch es un poco mis complejo que el for y el switch, que veremos
después, pero el uso combinado con try catch facilita su comprensién por lo que
veremos primero éste.
La estructura de control en cuestién se usa para capturar el flujo de datos cuando, por la
intervencién del usuario 0 de algin dispositivo externo, sucede un error. Por ejemplo,
supongamos una aplicacién de formulas matematicas en la que el usuario debe ingresar
valores numéricos, lo que normalmente sucede es que el sistema recibir cadenas que
deberin ser convertidas a un tipo ttil para las operaciones; pero si el usuario ingresa
algo distinto a un digito 0 a un operador, el programa fallaré, Veamos un ejemplo:
DemoErrorNumero.java
import javax.swing.JOptionPane;
public class DemoErrorNumero {
String mensaje;
public DemoBrrorNumero() {
String valorCadena=JOptionPane showlaputDialog(null,"Eseribe un entero
/#E1 metodo parselni() de la clase Integer de la ibreria lang
“converte un Sting en un int
int valorNumero=Integer parseln(valorCadena);
JOptionPane showMessageDialog(nul,"El valor es "+valorCadena);
)
public static void main(Sting[] args) {
new DemoErrorNumero();
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Al ejecutar este programa, si en el primer cuadro de didlogo escribimos un entero,
apareceri un segundo cuadro de didlogo indicando el valor; si, por el contrario,
escribimos otra cosa, el programa se detiene y en la ventana de General Output de
ICreator se mostrar el siguiente mensaje:
Configuration: ~
Exception in thread "main" j01NGRBEEFORRRENGEDIGN: For input string: "Juanito"
at java lang NumberFormatException,forlnputString(NumberFormatException java:48)
at java Jang Integer parselni(Integer java:447)
a java Jang Integer parseln(Integer java:497)
‘at DemoErrorNumero.(DemoErrorNumero.java:6)
at DemoErorNumero.main(DemoErrorNumero java:10)
La linea que esta subrayada indica cul fue el error: la cadena ‘Juanito” (que fue lo que
recibié la variable valorCadena) tiene un formato numérico incorrecto; java.lang es la
libreria en la que esta la clase NumberFormatException que es capaz capturar esos
errores y se usa con el iry...catch como se muestra en el siguiente ejemplo:
DemoTryCatch,java
import javax.swing JOptionPane;
public class DemoTryCatch {
String mensaje;
public DemoTryCateh() {
String valorCadens=!
|OptionPane.showInputDialog(null, "Escribe un entero");
nyt
int valorNumero=Integerparscini(valorCadena)
(8 o escrito no es un entero la linea que sigue no se jecuta,
*el programa busca el blogue catch y gjecuta su contenido
"
mensaje="Gracias";
,
catch (NumberFormatException ex) {/B blogue eatch indica el error que capt
mensaje="No esribiste un Entero";
,
JOptionPane showMessageDialog(nulmensaje)//E] mensaje enviado segin cl caso
Inpuiww: cursodejva.com mmx ©2009 bp: bienprogramado,com!
bup/www.treset.com/,
publi static void main(String[] args) {
new DemoTryCateh();
Se debe saber que existe la clase Exception que captura todos los errores, y que
derivadas de ella hay muchas otras para atender faltas especificas, como el caso que
acabamos de probar. Mas adelante en este curso, veremos algunas otras excepciones.
EI bloque for
El bloque for sirve para hacer ciclos controlados por un contador. La sintaxis que exige
en sus parimetros es mas compleja que las anteriores:
Parametro | Utilidad
Primero | Inicializa el contador y debe ser un entero
‘Segundo | Establece mediante un operador boléano (> , =, <, ete) el limite final del
contador
Tercero | Establece el ritmo de incremento
Encalaccle
iol come ss ncrmentn
om a
for(int
0; i<=10; i++)f
——~
Seejecurari mientras
2 memerogual a 19,
La expresion de i++ significa que al valor de i debe agregarsele 1. ++ es el operador de
incremento; también existe el de decremento (--) que resta en uno al valor que modifica.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Para ver cémo funciona el bucle for hagamos un ejemplo combinado con un try...catch
que nos muestre la tabla de multiplicar solicitada:
import javax.swing.JOptionPane;
public class DemoFor {
String mensaje;
public DemoFor0 {
String valorCadena=JOptionPane.showInputDialog(null,"Qué tabla de multiplicar que desea");
yt
int valorEntero=Integer parseIn(valorCadena)/Si est fla, entra al catch
mensaje= "Tabla del “+valorCadena#"'n\nagrega un fin de linea alas cadenas
for(int i=1sic=10+*){
/*La siguiente linea se repetii diez veces y concatenarit
*cadenas del tipo “Sx:
+
ala cabecera puesta antes del bucle
_mensaje=mensaje+i"x"+valorCadena+"="+(i*valorEntero)+"\n";
)
}eatch(NumberFormatException ex){
mensaje="No es un entero";
}
JOptionPane.showMessageDialog( ull, mensaje);
)
public static void main(Stringf] args) {
new DemoFor();
Este programa muestra la tabla de multiplicar solicitada en un cuadro de dislogo, a
‘menos que el usuario no haya escrito un nimero, ante 1o cual mostraré el mensaje “No
es un entero”
El bloque switch
Esta es una estructura de control selectiva que elige de entre un grupo de alternativas en
virtud de una variable entera. Esta aplicacién solicita un valor entre cero y diez; en
virtud de lo obtenido, elige el case; si se da un mimero distinto a los requeridos, se elige
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/la opcién default; gracias al bloque ry...catch, si el usuario no ingresa un nimero,
aparece un mensaje indicandoselo, Pruébese varias veces el siguiente programa
ingresando diferentes valores para ver su funcionamiento pleno:
DemoSwitch java
import javax.swing.JOptionPane;
public class DemoSwiteh {
String mensaje;
public DemoSwiteh0 {
String califCadena-JOptionPane showInputDialog(aull,"Escriba la ealificacion con niimero");
yt
int califNum=Integer.parseInt(califCadena);//Si esta linea falla entra al catch
String calif
switeh(califNum){
‘Los casos se eligen en virtud del valor
Se la variable
*
case 0: calif="NAMbreak;
case : calif="NAM break;
case 2: ealif"NA" break;
case 3: ealif"NA" break;
case 4: calif"NA" break;
case 5: ealif"NA" break;
case 6: ealif="S"breaks
case 7: ealif"S"break:
case 8: calif"B"sbreak;
case 9: calif" MB" break;
case 10: caif="MB" break;
default: caif="Invilida’ break;
‘*E| default sucede en el easo de que se de un ntimero
"distinto de los casos indicados. Bs decir, un niéimero
entre 0 y 10
”
mensaje-"La califcacién es: "tealif;
}ateh(NumberFormatException ex){
rmensaje="No eseribié un niimero";
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/JOptionPane.showMessageDialog( null, mensaje);
}
public static void main(String[] args) {
new DemoSwitch();
)
Con esto terminamos el tema de las estructuras de control. Téngase en cuenta que en
todos los casos el flujo de datos puede cambiar en virtud de las posibles respuestas del
usuario; y que todas las estructuras vistas aqui son anidables pricticamente sin
restricciones.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Segunda parte. Aplicacioén de
ejemplo
Como hasta ahora, cuando mencionemos una clase de la API, apareceri en una liga que
nos remitira a la pagina web que la describe. No obstante, pondremos en el cédigo una
descripcién de lo que hace cada uno de los métodos usados aun cuando en muchos de
ellos es obvio. Ademés, antes de cada clase haremos una descripcién de su
funcionamiento. Sin embargo, antes de comenzar a mostrar la aplicacién hay ciertos
temas que es necesario agregar para comprender mejor su funcionamiento.
Consideraciones preliminares
Herencia y polimorfismo
Para facilitar el diseito de una aplicacién, se debe usar la herencia de la programacién
orientada a objetos. Para explicar este término, haremos otro Hola Mundo que usar una
ventana, que contendri una etiqueta; esto requiere tres clases de la libreria swing:
JFrame, JPanel y JLabel. Veamos la primera versién, sin orientacién a objetos ni
herencia, en la que las clases colaboran para lograr los objetivos:
DemoClasesColaborando java
import javax.swing JFrame;
import javax.swing JPanel;
import javax.swing.JLabel;
public class DemoClasesColaborando {
public DemoClasesColaborando() {
JFrame ventana new JFrame():
JPanel panel=new JPanel():
ILabel etiqueta= new JLabel();
(/Asigna un texto a la etiqueta
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www treset.comctiqueta setText("Hola Mundo");
11Agrega la etiqueta al pane!
panel add{etiqueta);,
/Agrega el panel ala ventana
ventana.add(panel);
/Ajusta el tamafio de la ventana al minimo necesario
ventana pack();
Asigna el estado de visibilidad de la ventana a verdadero
Ventana setVisible(true);
,
public static void main(String{] args) {
new DemoClasesColaborando();
Después de compilar y ejecutar el cédigo anterior, se presenta la siguiente ventana en la
esquina superior derecha de la pantalla:
Cada una de las clases que estamos usando pertenece a tres mbitos distintos: JFrame
es una ventana que sirve como contenedor principal; JPanel es un contenedor de
propésito general que se usaré para albergar a los componentes como JLabel, 0 los
botones, los campos de texto, ete. Todas estan colaborando con la clase que acabamos
de compilar (de ahi su nombre) para lograr el objetivo de mostrar en la etiqueta la
cadena “Hola mundo”. Es posible continuar en este camino y agregar otros
componentes al panel, mis paneles a la ventana y, por supuesto, més componentes a
cada uno de éstos nuevos contenedores. No obstante, esto es una mala practica. Muy
frecuentemente, es conveniente crear clases que al momento de declararlas obtengan
todos los métodos y las propiedades de otra; a esto se le conoce como “herencia’ en la
POO. De hecho, todas las clases (aun las que creamos nosotros) heredan de la clase
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
butp:/www-treset.com/Object si no se indica otra cosa; dicha clase tiene casi una docena de métodos que estan
disponibles incluso antes. de que escribamos miembros con nuestra propia
programacién. Una de las ventajas de la herencia es que las clases se pueden ir
especializando. Como ejemplo, presentamos enseguida todo el linaje de la clase JFrame:
object
Ucomponent
‘De tal manera que esta clase tiene todos los métodos de las que le anteceden, ademas de
los propios (que, en total, resultan ser cientos). Este beneficio lo tienen todas las
instancias de JFrame (incluida la que colabora en el programa anterior). Pero las
ventajas de la herencia van més lejos. Sucede que si yo quiero tratar al objeto ventana
como Object lo puede hacer, como se muestra en el siguiente eédigo:
DemoVentanaComoObjeto.java
import javax.swing JFrame;
import javax.swing.JPanel;
Jmportjavax.swing.JLabel;
public class DemoVentanaComoObjeto {
public DemoVentanaComoObjeto() {
JFrame ventana= new JFrame()//ventana es un JFrame
IPanel pane!=new JPanel;
ILabel etiqueta= new Label;
{7Tratamos la ventana como Object
Object objetoVentana-ventana/ventana también es un Object
‘#Usamos el método gerClass() de la clase Object
*y el getString Q) de Class para obtener
*el nombre de la clase a la que pertenece ventana
”
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/String laseObjetomabjetoVentana getClass) oString();
cetiqueta setText(claseObjeto):
panel adaletiqueta);
ventana.add(pane});
ventana.pack(;
ventana setVisible(tue);
)
public static void main(String{] args) {
new DemoVentanaComoObjeto();
Este programa usa los métodos de la clase Object para obtener el nombre de la clase a ta
que pertenece el objeto ventana. Lo anterior significa que la herencia vuelve
polimérficas a las clases: se les puede tratar como si fueran cualquiera de aquellas que
estin en su linaje (y de hecho son cada una de ellas)..
Muy frecuentemente seré conveniente hacer clases que hereden de otra. En un buen
disefio, si necesitamos usar una ventana, conviene que la clase sea un JFrame. La
herencia se logra con la palabra reservada extends escrita a reglén seguido después del
nombre de la clase y s6lo se puede heredar de otra, El cédigo siguiente es nuestro tan
traido Hola Mundo pero ahora usando los conceptos que estamos explicando.
DemoHeredaJFrame.java
import javax.swing JFrame;
import javax.swing JPanel;
import javax.swing JLabel;
{vObsérvese la sintaxis de extends
public class DemoHHeredalFrame extends JFrame {
public DemoHleredaJFrame() {
#Obsérvese que a estos tres métodos los usamos igual
“aunque solo organizaComponentes(Jesté escrito en
“el logue de cédigo de a clase.
*Los otros dos los heredamos de alguna de las clases
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/"del linaje de IFrame
"
‘organizaComponentes();
ppack()s
setVisible(true);
)
private void organizaComponentes(){
JPanel panel=new JPanel();
ILabel etiqueta= new JLabel:
ctiquetasetText(*Hola mundo");
add(pane!);
panel add{etiqueta);
public static void main(String] args) {
new DemoHeredaJFrame();
En este caso hemos encapsulado la tarea de agregar los componentes de la ventana en
un método para mostrar que, en términos de sintaxis, los métodos propios de las clases
se portan igual que los heredados. Por otro lado, al haber extendido los alcances de
nuestra clase para heredar los de JFrame, se convierte en parte su linaje; ahora es
polimérfica porque es cada una de las que presentamos a continuacién:
object
LU component
LUcontainer
Lwindow
Lerrane
Larrane
LdemotteredaJFrame
Captura de eventos
Desde el apartado anterior hemos estado tratando conceptos que son del entomo de las
interfaces grificas: ventanas, componentes, efc., que usan privilegiadamente los
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/sistemas operatives comunes de la actualidad. Junto con estos conceptos, que se
relacionan con objetos visuales, esti el tema de los eventos que se desencadenan por las
acciones del usuario sobre éstos con los dispositivos de entrada tales como el teclado y
el Mouse entre otros.
De dichos eventos el mas usado es, precisamente, el clic del Mouse, de cuya
programacién se pueden obtener muchos beneficios; de hecho, en nuestra aplicacién de
ejemplo sélo usaremos este caso. Para hacer que una clase capture los eventos es
necesario usar otra palabra reservada: implements, que sirve para agregar interfaces a las
clases, y que se usa también en la linea de la declaracién de éstas, después de la
sentencia extends (si existe); es itil decir que se puede implementar mas de una interfaz.
Todos los programas que requieran responder al clic del Mouse usarin Ia interfaz
ActionListener que nos obliga a agregar el método actionPerformed() a nuestra clase
(Las interfaces son clases especiales que es initil explicar aqui y que casi siempre
exigen que se agreguen métodos especitficos). Los clies eapturados remitirdn el flujo del
programa al método actionPerformed() que recibe como parametro objetos de la clase
ActionEvent
Para mostrar esto haremos una clase que sea un JFrame, que contenga un JButton y que
al recibir un clic mande un mensaje:
DemoEventoCapturado.java
import javax.swing JFrame;
import javax.swing.JPanel;
{import javax.swing JButton;
{import javax.swing JOptionPane;
/*Las clases ActionListener y ActionE vent
*son de la libreria awt (Abstract Windows Toolki)*/
import java.awt.event. ActionListener,
import java.awt.event.ActionEvent,
/*Las interfaces se implementan
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/“después de In definicién de extends */
public class DemoEventoCapturado extends JFrame implements ActionListener{
‘Button elBotons/Es atrbuto porque se usa en organizaComponentes() y en el actionPerformed()
public DemoEventoCapturado() {
‘organizaComponentes();
pack();
setVisible(true);
)
private void organizaComponentes(){
JPanel panel
.ew JPanel();
elBoton=new JButton("Haz clic’
(A los objetos que pueden recibir el elie
“debe agregirseles un ActionListener
*que lo reciben de la implementacién de
“la clase actual (this)*/
«1Boton.addActionListener this);
ada(panel);
panel.add(elBoton);
)
/*Todos los objetos que tienen un ActionListener de la clase
*remitirin el flujo del programa a este método
*que es obligatorio y su sintaxis es asi como se muestra
”
public void actionPerformedi ActionEvent evt){
JOptionPane.showMessageDialog(this,"Gracias");
,
public static void main(String} args) {
new DemoEventoCapturada();
bttp:/www.cursodejava.com.mx © 2009
bup/www.treset.com/
bitp:/wwwbienprogramado.com/Aplicacion de ejemplo
Abstraccion
Para mostrar una aplicacién funcional haremos un visor de resulsets para el servidor de
bases de datos MySQL y trataremos de que esté orientado a objetos. Visualmente, no es
dificil ver que se necesitaran al menos dos ventanas: aquélla para la autenticacién del
usuario y la que sirve para escribir las consultas y mostrar sus resultados. Desde esta
perspectiva, podemos establecer cuatro ambitos:
© Conexién a datos
© Autenticacién de usuario
© Consultas SQL
© Vista de resultados
Con esto hemos encapsulado lo que podriamos llamar los meta-objetos de nuestra
aplicacién. Esto significa que cada uno de los items anteriores se debe estructurar con al
menos una clase, 0 con algunas en colaboracién. Entonces, atenderemos cada una de
ellos por separado,
Conexién
Para conectarse a cualquier servidor de base de datos hace falta una aplicacién que sirva
como enlace. A ese tipo de clases se les llama conectores. En el caso de MySQL, debe
descargarse de su sitio web. En dicha descarga, se obtiene todo el cédigo fuente de las
clases necesarias pero sélo se requiere el archivo mysgl-connector-java.jar. Este archivo
debe ponerse en la siguiente ruta:
[JAVA-HOME] jre\lib\ext
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
‘hpz//www.treset.com)Hecho lo cual, estamos listos para escribir el siguiente cddigi
Conector,java
package visorconsultas.controlador;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql. SQLException;
public class Conector {
Conneetion conexion;
String error,
/*Creamos un constructor que recibe euatro parimetros:
“El nombre del servidor MySQL, el del usuario, la contrasefia, y
“la base de datos*/
public Coneetor(String host, String usuario, String pw, String base) {
yt
‘*Bsta linea crea una asociacién entre nuestra aplicacién
* y la clase Driver que esti empaquetada en el jar de conexién.*/
(Class forName("com:mysql.jdbe-Driver");
/*La conexén se obtiene con una cadena que usa
*Hos pardmetros que recibe el constructor*/
‘conexion=DriverManager.getConneetion("jdbe:mysql:/" host+"/"4 base,usuario,pw);
)
ccatch(ClassNotFoundException e){//Sucede si no se encuentra el driver
cerror=e.getMessage();
)
catch( SQLException e){//Sucede sila conexién fala
error=egetMessage();
}
{ste método devuelve la conexién
public Connection getConexion0{
return conexion;
}
public void cierraConexion( {
tyt
conexion.close();
}
ceatch (Exception ex) {
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/UIEste método devuelve el error que impide la conexién
public String getMensajeError(){
El cédigo anterior trata de obtener una conexién a MySQL usando las clases Cl
return error;
Connection, DriverManager, ClassNotFoundException y SQLException; el mecanismo
es como sigue:
1
Con el método forname() de Class, se crea una asociacién entre nuestra clase
Conector y el driver de conexién MySQL. Si no lo logra, el error es capturado
con la ClassNotFoundException
La conexién se realiza con el método getConnection() de DriverManager; si el
servidor no est disponible o refuta la solicitud, la conexién no se consuma y se
dispara la SOLException
EI método dameConexion(), es el que se encargara de poner a disposicién la
conexién para las clases que la requieran; mientras que cierraConexién() la
cancela, La ejecucién de los objetos de la libreria sq! exigen ser ejecutados
dentro de un bloque iy...cafch, por eso esta asi la tinica linea que necesaria
para el terminar la conexién.
Por supuesto, se debe tener acceso a una base de datos de un servidor MySQL
mediante un nombre de usuario y una contrasefia. Estos cuatro datos: base,
servidor, usuario y password, los recibe como parimetro el constructor y luego
Ios usa el método getConnetion() de la clase DriverManager.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Consultas SQL
Para hacer consultas a la base de datos hacen falta una serie de clases que colaboran
para hacer acciones sucesivas: Connection, Statement, ResultSet, ResultSetMetaData y
la SQLException.
ConsultasSQLjava
package visorconsultas controlador;
import java.sql.Connection;
import java.sql Statement;
{import java. sql. ResultSet;
{import java. sql.ResultSctMetaData;
{import java.sql. SQLException;
public class ConsultaSQL {
private Connection conexion;
private ResultSet resultadoConsulta;
private ResultSetMetaData metaDatos;
private Sting consulta;
1iCrea dos arreglos
private String{J] datosDevueltos;
private String [] nombresColumnas;
private Sting error:
public ConsullaSQL (Connection conRecibida, String consultaRecibida){
conexion=conRecibida;
consulta-consultaRecibida;
yt
‘vCrea una instancia para mandar sentencis al servidor MySQL
‘Statement sentencia=conexion.createStatement();
‘VEjecuta la consulta y devuelve el ResultSet
resultadoConsultasentencia.executeQuery(consulta);
{vObtiene los metadatos del ResultSet
‘metaDatos-resultadoConsulta.getMetaData(;
error-null;
)
‘catch (SQLException e) {
error=e.getMessage():
)
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/public String] getDatosDevueltos(){
ifferror==null){
wy
‘"Devuelve el nimero de columnas del resultset
{nt columnas=metaDatos.getColumnCount();
‘MLleva el eursor ata iltima fila del resultset
resultadoConsultalast();
/Obtiene el niimero de fila aetual( que agui esta iltima)
int filas=resultadoConsulta.getRow();
Dime
1 el arreglo datosDevueltos con los enteros obtenides
datosDevueltosnew String{filas][eolumnas);
1Ubica el cursor antes del a primera fila
resultadoConsulta.beforeFirst();
for(int iO;i
ccancelar=new JButton("Cancelat”):
ccancelar.setMnemonic(‘e);//Subraya la C para activar el atajo de tecla
,
private void agregaComponentest){
/*Esta linea convierte al panel en una rejilla de cinco filas y dos columnas,
‘que acomoda los componentes, conforme son agregadas, de izquierda a
*derecha y de arriba abajo
setLayout(new GridLayout(5,2));//La manera de acomodar los componentes es una rejilla de $x2
‘1/Agrega los componentes al panel segiin la rejilla de izquierda a derecha y de arriba a abajo
add(new JLabel( "Servidor" JLabel. RIGHT));
add(servidor);
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/add(new JLabel("Usuario" JLabel.RIGHT));,
aadd(usario);
add(new JLabel("Contrasefta" JLabel.RIG!
add(password);
add(new JLabel("Base de datc
add(base);
aadd(acepar);
add(eancear);
[Label RIGHT));
Ditilogo autenticador
Después creamos un cuadro de didlogo que lo jinico que hace es contener y mostrar al
panel anterior:
package visorconsultas.vista;
import javax.swing JDialog:
public class DialogoAutenticador extends JDialog {/Obsérvese que hereda de JDialog
public PanelAutenticador panel;
/*Bste programa s6lo srve para
“mostrar el pan! autenticador
“Yen un cuadro de dilogo*/
public DialogoAutenticador() {
panel-new PanclAutenticador()//Una instancia de nuestro panel autenticador
add(pane!)/agrega el panel autenticador
setSize(300,150); /Dimensiona el dilog
Vista de resultados
Para mostrar los resultados, creamos cuatro clases: un area de texto para que el usuario
escriba las consultas, una tabla para mostrar los resultados, un panel de botones para la
ejecucién de las acciones y una ventana para mostrar a todos los anteriores.
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/Area de texto para las consultas
Como los objetos de tipo JTextArea son multilinea, puede suceder que el contenido
exceda la zona visible; por eso se deben poner dentro de un objeto de la clase
JISerollPane, que es un panel que pone a la disposicién de los componentes con partes
ocultas las barras de desplazamiento horizontal y vertical.
AreaConsulta,java
package visorconsultas. vista;
{import javax.swing JSerolPane;
{import javax.swing.JTextArea;
public class AreaConsulta extends JScrollPane /Esta clase es un panel desplazable
public JTextArea texto;
public AreaConsulta() {
texto-new ITextArea(4,30);
texto setLineWrap(true);//Hace que las lineas corten en cl limite del area
texto,setWrapStyleWord(true)://Hace que corten sélo en palabras completas
set ViewportView(texto)y/Dentro de las barras se vera le rea de texto
Tabla para mostrar los resultados
Las JTable también deben estar dentro de un JScrollPane y su funcién print
mostrar los datos guardados en objetos del tipo Defaul/TableModel; éstos almacenan los
valores de las celdas y dimensionan la tabla. En general, conviene que las tablas estén
separadas de su modelo, por eso haremos dos clases.
Modelo
ModeloTabla,java
package visorconsultas modelo;
import javax swing. table DefaultTableModel;
public class ModeloTabla extends DefaultTableModel {/Hereda de DefaulTubleModel
public ModeloTsbla() {
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/‘/Dimensiona Ia tabla para la presentacién inicial
setColumnCount(
setRowCount(30);
}
Tabla
TablaResultados java
package visorconsultas.vista;
import javax.swing JTable;
import javax.swing.JScrollPane;
{impor visorconsultas modelo. ModeloTabla;
import javax.swing table. TableModel;
public class TablaResultados extends JSerollPane {
public ModeloTabla modelo//Cree una instancia del modelo
public JTable tabla;
public TablaResultados() {
modelo-new ModeloTabla();
tabla-new JTable(modelo);/Se asigna el modelo a la tabla al momento de construsla
‘as columnas se autoajustan
tabla sctAutoResizeMode( JTable. AUTO_RESIZE_ALL_ COLUMNS);
setViewport View abl); //La tabla se ver dentro del panel de baras de desplazamiento
Panel de botones
Esta es una clase que se asemeja en su disefio a PanelAutenticacién; es, sencillamente,
un contenedor con dos JButton. Una diferencia central es que JPanel tiene por omisién
un manejador de disefio que organiza los componentes como un flujo que se reparte en
el espacio disponible desde el centro de la parte superior, y que es de Ia clase
FlowLavout.
PanelBotonesConsulta.java
package visorconsultas.vista;
bttp:/www.cursodejava.com.mx © 2009 bitp:/wwwbienprogramado.com/
bup/www.treset.com/import javax.swing.JPancl;
import javax.swingJButton;
public class PanelBotonesConsulta extends JPanel{
public JButton consultar, salir;
public PanelBotonesConsulta() {
iniciaComponentes();
agregaComponentes();
Componentes()[
sw JButton(*Consultar");
También podría gustarte
Leccion 01
Aún no hay calificaciones
Leccion 01
76 páginas
Hello World
Aún no hay calificaciones
Hello World
13 páginas
Java Mod1
Aún no hay calificaciones
Java Mod1
174 páginas
Libro de JAVA
Aún no hay calificaciones
Libro de JAVA
241 páginas
Curso Java
Aún no hay calificaciones
Curso Java
50 páginas
JAVA
Aún no hay calificaciones
JAVA
234 páginas
Que Es Java
Aún no hay calificaciones
Que Es Java
30 páginas