Está en la página 1de 148

Tutorial: Como crear y ejecutar un proyecto Java en NetBeans

Dandole seguimiento a la situacin escolar en la que se encuentra nuestra amiga Liz.Quinto, me he


puesto manos a la obra y traigo ante ustedes un breve pero completo tutorial, manual o gua para
crear un proyecto Java en NetBeans. Acontinuacin las capturas de los pasos a seguir y sus
explicaciones:
Ejecutamos el IDE NetBeans.
a saben doble clic sobre el cono en el escritorio o Inicio > Todos los programas > NetBeans >
NetBeans IDE !"!#! esperamos a que cargue completamente.
!on el programa en pantalla vamos al men$ principal y seleccionamos %ile > Ne& 'roject.
"endremos una ventana como en la siguiente #igura dnde seleccionamos el tipo de proyecto: Java >
Java (pplication y damos clic en el botn Ne)t.
Categories: Java
Projects: Java (pplication
$n este paso vamos a escribir el nom*re del proyecto que por convenci+n Java, las primeras
letras de las palabras que contenga sern en maysculas: 'royecto'rue*a.
Project Name: 'royecto'rue*a
"ambi%n deseleccionamos las casillas: Create ,ain Class y -et as ,ain 'royect.
Damos clic en el botn %inis..
"eniendo el proyecto creado, ahora agregaremos/creamos0 un pa1uete di#erente al
prede#inido. Damos clic derecho sobre 2de3ault pac4age>: Ne& > Java 'ac4age.
De#inimos el nom*re del pa1uete, de misma #orma que con los proyectos, por convencin
&ava, el nombre de los paquetes debe estar totalmente en min'sculas: proyectoprue*a.
Package Name: proyectoprue*a
Creamos/agregamos0 una clase a nuestro proyecto dando clic derecho sobre el paquete del
paso anterior: Ne& > Java Class.
De#inimos el nom*re de nuestra clase, que por convencin &ava, las letras iniciales de cada
palabra que contenga el nombre estar(n en may'sculas y sin espacios.
!lass )ame: ,ain.
Ahora vamos a agregar o a*adir codigo a nuestra clase para que tenga alg'n comportamiento en
su e+ecucin.
Mtodo main/0
, public static void main(String[] args)
! S"stem#out#println($Pro"ecto en Net%eans terminado(:$)&
' (
-ara e+ecutar un proyecto &ava en )et.eans tenemos dos opcines:
!lic en el botn 5un 'roject, el c'al e+ecutar( la clase que contenga el m%todo main/0.
/eleccionamos la clase 1ue contenga el m6todo main/0 y deseemos e+ecutar, damos clic derec.o
so*re dic.a clase y seleccionamos 5un %ile.
$speramos que se termine la e+ecucin y veremos el resultado que nos ha mostrado nuestra
clase. $n este caso slo imprimimos un mensaje por consola.
0uente: http:11mi2engel.com1tutorial3como3crear3y3e+ecutar3un3proyecto3+ava3en3netbeans
Java t.e 7utt
8*jetivo
Aprender a utilizar &ava y )et.eans para crear nuestra primera aplicacin.
'roducto a Entregar
4n archivo comprimido con el programa generado en la actividad.
%orma de Tra*ajo
5ndividual
Tiempo estimado
, hora
%orma de Entrega
-or .lac2board
5ecomendaciones
/igue las instrucciones de la actividad y e+ercita la lectura cr6tica.
5ntenta #amiliarizarte con la herramienta ya que te ayudar( a traba+ar menos
)et.eans te permtie traba+ar escribiendo menos cdigo. 7ecuerda utilizar la ayuda y el
autocompletado
7ealiza otros e+ercicios para obtener m(s pr(ctica
Instrucciones
'aso #:
Antes de empezar veamos un poco de contexto sobre el lengau+e de programacin y el 5D$ que vamos
a utilizar.
&ava es un lengua+e de programacin orientado a ob+etos que comaprte gran parte de su sintaxis con ! y
!88. &ava es uno de los lengua+es m(s poderosos que existen actualmente y desde la versin 9 es un
proyecto open source, por lo que tiene el soporte de toda una comunidad de programadores, adem(s de
/un :icrosystems que #ueron los creadores originales. $n ;<<= &ava se utilizaba en uno de cada cuatro
proyectos, casi diez por ciento por encima de su siguiente competidor>!88? y ha seguido creciendo. /e
estima que un noventa porciento de las computadoras cuentan con una m(quina virtual de &ava, adem(s
de que todos los celulares y una gran cantidad de dispositivos mviles tambi%n cuentan con &ava.
)et.eans es un entorno de desarrollo integrado>5D$ por sus siglas en ingl%s?. $sto quiere decir que
integra todas las herramientas que necesitamos para poder desarrollar. @riginalmente la programacin
en &ava era algo complicada porque &ava cuenta con una enorme cantidad de librear6as y #unciones que
era preciso aprenderse de memoria, viendo esto muchas compa*6as construyeron di#erentes entornos de
programacin para #acilitar la tarea del programador. $ntre los m(s populares surgi $clipse que rein
como el 'nico y m(s importante 5D$ de &ava durante varios a*os. /un :icrosystems desarrollo su
propio 5D$, que ten6a la venta+a de que #ue creado por las mismas personas que crearon &ava a*os
antes, este 5D$ #ue )et.eans y despu%s de varios a*os de desarrollo ha llegado a ser tan 'til y poderoso
como $clipse o quiz(s un poco m(s.
'aso 9:
Lo primero que debemos hacer es descargar el 2it de desarrollo de &ava y el entorno de programacin
)et.eans. -odemos conseguir estas dos herramientas en el site o#icial de /un :icrosystems. Dentro de
la p(gina de descargas debemos descargar el &DA con )et.eans.
4na vez que hayamos descargado el paquete debemos correr el instalador. Despu%s de aceptar la
licencia nos pregunta dnde queremos instalar y al #inal instala todos los componentes necesarios. 4na
vez terminado de instalar debemos buscar el 6cono de )et.eans en el escritorio o en el men' inicio.
!orremos el programa haciendo doble clic2 y nos lleva a la pantalla principal que es similar a esta:
$l editor gr(#ico de ventanas en )et.eans es parte de un proyecto llamado :atisse. Desde que sali
)et.eans =.= han habido varias me+oras importantes que hacen que sea mucho m(s #(cil de utilizar y
estas me+oras van a ser implementadas en la versin 9.< de )et.eans. /i est(s utilizando una versin
anterior a la 9.< puedes seguir los siguientes pasos para instalarlo:
,. Descarga el archivo con los mdulos de matisse y extraelos en alguna carpeta.
;. Abre )et.eans
B. /elecciona el men' "ools 3C 4pdate !enter
D. /elecciona 5nstall :anually DoEnloaded :odules
$n la ventana de seleccionar mdulos presiona el botn Add y selecciona los mdulos que se
encontraban dentro del archivo que descargaste en el primer paso.
=. Acepta el contrato de licencia y reinicia el 5D$. 4n 5D$ es una herramienta que nos permite escribir
cdigo y compilar, en este caso se re#iere a )et.eans.
'aso ::
Ahora vamos a continuar con la creacin del proyecto en s6. $n esta pantalla podemos encontrar todas
las herramientas necesarias para crear y mane+ar nuestros proyectos hechos en &ava. -or el momento
presiona el botn de nuevo proyecto. $n la ventana que aparece selecciona un nuevo proyecto de &ava.
$n la segunda ventana ponle como nombre de proyecto FelloGorld. $s importante que en esta ventana
revises el directorio en el que se guarda el proyecto para que m(s adelante puedas acceder a tus
archivos o puedas agregar im(genes y sonidos.
Al terminar aparecer( la ventana de cdigo en la que podemos comenzar a codi#icar nuestra aplicacin.
$sto es lo que se llama una Clase en &ava>esta clase en particular se llama :ain, eso es un dato
importante porque lo vamos a utilizar m(s adelante?. Las clases son el #undamento de la programacin
orientada a ob+etos y podr6amos decir que son el molde con el que hacemos nuevos ob+etos. Las clases
tienen atributos y mtodos. Los atributos son lo que nos dice cmo es esa clase, por e+emplo, los
atributos de una persona son el color de o+os y el alto>entre muchos otros?, los m%todos son las acciones
que puede realizar una clase, por e+emplo correr.
$n el cdigo que se genera automaticamente por )et.eans tenemos dos m%todos, el m%todo :ain>?
que tambi%n se conoce como el constructor de la clase y el m%todo main>? que es el punto de inicio del
programa>por las may'sculas y min'sculas :ain es di#erente de main?.
'aso ;:
Dentro del m%todo main>? escribe el siguiente cdigo:
4na vez que lo hayas escrito presiona el botn de compilar >o 0,,?. $n la ventana de compilacin
deben aparecerte varios mensa+es de compilacin y debe terminar en .45LD /4!!$//04L>total
time: H seconds?. $sto quiere decir que nuestra aplicacin compil de manera adecuada y estamos listos
para correrla. -resiona el botn correr >o presiona 09?. $n la parte in#erior de la pantalla debe
aparecer el letrero IFolaJI.
K0elicidadesJ Fas creado tu primera aplicacin &ava con )et.eans, pero esto no es lo que queremos
que vea un cliente #inal. -ara que un programa sea 'til para cualquier persona es necesario que tenga
una inter#az gr(#ica as6 que vamos a utilizar /Eing para crear una inter#az gr(#ica que nos muestre el
mismo mensa+e.
/Eing es un con+unto de librer6as con las que cuenta &ava para crear y mostrar una inter#az gr(#ica.
Dentro de estas librer6as hay varias clases>recuerda, una clase es como un molde con el que podemos
hacer ob+etos? que nos permiten mostrar ventanas, mensa+es, botnes, ca+as de texto e incluso
im(genes, audio o video. 4na de las clases m(s importantes de /Eing es &0rame. $sta clase es una
ventana que tiene un contenedor en el que podemos poner controles.
!omo podemos ver en la imagen un &0rame es una ventana normal de GindoEs. Dentro de un &0rame
existe algo llamado !ontent-ane. 4n !ontent-ane es un contenedor de controles en el que podemos
agregar los elementos de la inter#az gr(#ica. Ahora veamos otro control importante en la generacin de
inter#aces gr(#icas. $l &Label es una etiqueta con la que podemos motrar texto en nuestras aplicaciones.
4n &Label es una herramienta muy poderosa ya que nos permite agregar texto, cambiar el #ormato, la
posicin, agregar im(genes y muchas cosas m(s. Lamos a crear una clase que sea un &0rame y despu%s
vamos a agregarle un &Label para mostrar nuestro mensa+e.
'aso <:
Luelve al cdigo de la clase :ain. !omo di+imos tenemos que convertir esta clase en un &0rame. $sto
es sencillo, lo 'nico que debemos hacer es agregar la l6nea extends &0rame en la parte de arriba despu%s
de dnde dice public class :ain como se ve en la im(gen.
$s importante notar que de+ar un rengln entre el nombre de la clase y el extends no es necesario,
'nicamente es para darle una me+or presentacin al cdigo, pero ustedes pueden seguir cualquier estilo
que ustedes consideren m(s claro. Despu%s de escribir esta l6nea )et.eans la va a subrayar con una
l6nea ro+a, esto signi#ica que el cdigo tiene un error. -oniendo el mouse sobre el error podemos
obtener m(s in#ormacin sobre %l.
'aso :
$l error que nos marca )et.eans es que no conoce el s6mbolo. $sto quiere decir que no sabe qu% es un
&0rame, para resolver este tipo de errores debemos agregar la librer6a de la que hablaba hace unos
momentos, en estos momentos todav6a no sabemos dnde est(, pero por suerte )et.eans tambi%n nos
muestra un #oquito a la izquierda en el que, al hacer clic2, nos brinda una solucin. )o siempre
podemos con#iar en las soluciones que brinda )et.eans porque despu%s de todo es una herramienta y
no una persona que nos est( haciendo la recomendacin, pero muchas veces su sugerencia es acertada,
como en este caso que dice que debe agregar un import>veremos m(s sobre este tema m(s adelante?.
/elecciona la opcin y debe aparecer una l6nea al principio de nuestra clase en la que resuelve el error.
'aso ":
!omo vimos en la parte de arriba el m%todo :ain>con may'scula? es el constructor de la clase. $ste es
el m%todo con el que vamos a crear nuevos ob+etos de nuestra clase>que es una ventana?. Dentro de este
m%todo debemos escribir algunas l6neas de cdigo para darle un tama*o a la ventana y para que se
muestre. !opia el cdigo que se muestra en la siguiente im(gen:
$n el cdigo estamos utilizando la palabra clave this, que hace re#erencia a la misma clase que lo llama,
es decir, a nuestra ventana. La primera l6nea va a cambiar el tama*o de nuestra ventana a ;<< x ;<<.
$scribe this.set/ y espera unos momentos. Aparecer( una pantalla que te muestra opcines de auto
completar. $sta pantalla es muy 'til al programar ya que cuando no conocemos un m%todo nos brinda
in#ormacin sobre qu% signi#ican los par(metros y cmo utilizar el m%todo.
-or e+emplo, en esta im(gen nos indica que el m%todo set/ize>? debe recibir dos n'meros enteros>int
quiere decir n'mero entero?, y nos dice que el m%todo va a cambiar el tama*o del componente>en este
caso nuestra ventana? para que tenga el ancho y alto especi#icados. "amb6en nos indica que podemos
conseguir m(s in#ormacin viendo los m%todos get/ize>?, set.ounds>? y set:inimum/ize>?. 4tilizando
esta herramienta completa el cdigo para mostrar la ventana.
La segunda l6nea nos permite cambiar el t6tulo de nuestra aplicacin. -odemos utilizar cualquier t6tulo
que nos guste, lo 'nico importante es pasarlo entre comillas porque es texto. La tercera l6nea le dice a
nuestra aplicacin qu% debe hacer cuando el programa termine. $n este caso nuestro constructor es
'nicamente una ventana, por lo que le indicamos que al cerrar la ventana la aplicacin termine con
$M5"N@)N!L@/$. La cuarta l6nea le indica a la ventana que es visible, por lo tanto se dibu+a en
pantalla.
'aso =:
-or 'ltimo debemos crear un nuevo ob+eto de nuestra ventana, esto es muy sencillo y lo logramos
agregando la l6nea que se ve en la im(gen dentro del m%todo main>?>con min'scula?.
$sta l6nea est( creando un nuevo ob+eto de la clase :ain mandando llamar el constructor que acabamos
de crear. !ompila tu programa haciendo clic2 en el botn compilar y luego crrelo haciendo clic2
en el botn correr .
!on esto se muestra una ventana vac6a, ya casi hacemos el programa que quer6amos, pero nos #alta un
mensa+e. -ara eso vamos a utilizar otra clase de /Eing que se llama &Label. $n la parte superior del
constructor escribe el cdigo como se ve en la imagen:
4na vez m(s la primera l6nea va a ser subrayada en ro+o porque nos #alta importar una librer6a. Ahora
vamos a utilizar otra t%cnica para resolver este mismo error. Faz clic2 derecho sobre el cdigo y
selecciona la opcin I0ix 5mportsI. !on esto )et.eans revisar( todo el cdigo y automaticametne va a
agregar todas las librear6as que necesitamos.
$n el cdigo lo que estamos haciendo es crear un nuevo &Label. /u nombre ser( lblFola>por
convencin todos los &Label deben empezar su nombre con lbl? y este &Label va a ser un nuevo &Label
que diga IFolaI. Despu%s agregamos el &Label al contenedor de la ventana.
K0elicidaes, hemos terminado nuestra primera aplicacin en )et.eans utilizando inter#az gr(#icaJ
4na vez que hayas terminado tu programa debes comprimir el directorio de la aplicacin que
seleccionaste en el paso ; y mandarlo por blac2board.
%uente: http:11EEE.maguso#t.net1compuv1<,N)etbeans.html
Cone)i+n a una *ase de datos en ,y->? con Java
-ara poder hacer una conexin a una base de datos, tendr6amos que importar una librer6a, que por lo
generalmente se encuentra en )et.eans y se le conoce por mysql3connector3+ava3=.,.93bin, buena para
el programa voy a utilizar de e+emplo un &0rame como el siguiente:
Lo que est( utilizando son , &-anel, D &Labels, ; &"ext#ields, ,+-assEord0ield>para la contrase*a
claro?.
4tilizaremos el siguiente cdigo:
static String Exe3 = "";
static String Exe4 = "";
static String )*e+ , $$&
-.. Creates ne/ 0orm con* .-
public con*() {
initComponents();
(
public void cone*1() t2ro/s S34)*ception
tr"
)*e' , t2is#j5e*t6ield1#get5e*t()&
)*e7 , t2is#jPass/ord6ield1#get5e*t()&
)*e+ , this.jTextField2.getText();
String serer!"me = Exe#;
int port , ''89&
String data%ase , "ejem";
Cl"ss.$or!"me("%om.m"s:l#jdbc#;river$)&
String &rl = "jd'%(m"s:l:--$ ) serer!"me ) "(" ) port ) "*" ) data%ase&
Connection con , ;riverManager#getConnection(url< )*e'< )*e7)&
Statement stm , con#createStatement(=esultSet#5>P)?SC=@44?S)NSA5AB)<
=esultSet#C@NCC=?CP;D5D%4))&
i0(con E, null)
usu e*, ne/ usu()&
e*#setBisible(true)&
t2is#dispose()&
(
i0(con ,, null) {
this.jTextField+.setText("");
this.j,"ss-ordField+.setText("");
t2is#j4abel7#set5e*t($)rror &ele " intent"rlo");
(
stm#close()&
con#close()&
(%"t%h(Cl"ss!otFo&ndEx%eption ex) {
S"stem#out#println(e*)&
S"stem#out#println($error en la linea Entr"d"");
.
.
!omo se puede observar un /tring para el nombre del servidor, otro para la base de datos, un entero
para el n'mero del puerto>que por de#ault el BB<9 siempre es de :y/QL?.
$ste &0rame sirve como la base de alg'n programa, pues como lleva /trings $st(ticos no hay necesidad
de volverlo a crear solo de exportar, por e+emplo si alguno de ustedes necesita que invocar en otro
0rame el nombre del servidor lo 'nico que debes de hacer es poner lo siguiente:
/tring url O I+dbc:mysql:11I 8 conx.$xe= 8 I:I 8 port 8 I1I 8 data.aseP
%uente: http:11EEE.taringa.net1posts1in#o19D<HQDQ.71!onexion3a3una3base3de3datos3en3:y/QL3con3
&ava.html
TaT Cam*iarIconoJ%rame
!mo cambiar el 6cono de un &0rame en cinco pasos.
'aso #
$l 6cono debe ser una imagen de extensin -)R. $sto se hace m(s #(cil, ya que conseguir una #igura y
convertirlo en #ormato .ico es muy complicado. Los -)R nos ayudan bastante.
'aso 9
La imagen que ser( el 6cono debe estar dentro del paquete de #uentes, como si #uera una clase m(s. /i
estuviera dentro de un paquete, ser6a mucho me+or.
'aso :
$n el cdigo del &0rame que vamos a poner el 6cono, sobreescribimos el m%todo get5con5mage>?
conteniendo el siguiente cdigo: >notar cmo se est( llamando a la imagen .png?
F@verride
public Amage getAconAmage()
Amage retBalue , 5oolkit#get;e0ault5oolkit()#
getAmage(Class4oader#getS"stem=esource($resources-icono#png$))&
return retBalue&
(
'aso ;
$n la vista de dise*o del &0rame, lo seleccionamos y vamos sus propiedades, buscamos la propiedad
Iicon5magenI y hacemos clic en el botn de puntos suspensivos. /e mostrar( una ventana de di(logo
como esta:
De la lista desplegable, seleccionamos ILalor de componente existenteI. $sto har( que cambie la
ventana a la siguiente #orma:
/eleccionamos la opcin I-ropiedadI y hacemos clic en el botn de puntos suspendidos. Aparecer( una
ventana de di(logo m(s peque*a, y seleccionamos la propiedad Iicon5mageI que aparece ah6.
!lic en Aceptar, y se ver( as6:
y nuevamente clic en IAceptarI para cerrar la ventana de seleccin de imagen.
Ahora, veremos que las propiedades del &0rame ya tiene un nuevo valor
'aso <
$+ecutamos la aplicacin con el &0rame, y voilaJ nuestro &0rame con un 6cono di#erente
%uente: http:11Ei2i.netbeans.org1"a"N!ambiar5cono&0rame
J%rame y JDialog
Cundo usar JFrame y cundo JDialog
$n una aplicacin +ava con ventanas deber6a haber un 'nico J%rame, correspondiente a la ventana
principal de la aplicacin. $l resto de ventanas secundarias deber6an ser JDialog.
4n J%rame en una ventana que en GindoEs crea, en la barra de herramientas, donde est( el men' de
IinicioI y las aplicaciones que tenemos abiertas, un nuevo botn de aplicacin abierta. $n una
aplcacin lo normal es que slo haya un botn ah6. /i creamos varios J%rame en nuestra aplicacin,
apareceran varios botnes, uno por cada J%rame.
$l JDialog no muestra este botn. -or ello, el resto de las ventanas de nuestra aplicacin deber6as ser
JDialog.
Fay otro motivo m(s. 4n J%rame no admite a ninguna otra ventana como padre. $l JDialog s6 admite
como padres un J%rame u otros JDialog. $sto es importante porque una ventana hi+a siempre quedar(
por encima de su ventana padre. /i al crear los JDialog les pasamos el J%rame como padre, los
JDialog siempre estar(n visibles por encima del J%rame. )o se podr(n ir Idetr(sI de %l.
/i adem(s, en el constructor del JDialog ponemos a true el #lag que indica que es modal, adem(s de
pasarle una ventana padre, entonces el JDialog impedir( el acceso a las otras ventanas hasta que se
cierre.
-uedes ver esto m(s detallado >y embarullado? en:
http:11EEE.chuidiang.com1+ava1novatos1&0rameN&Dialog.php
Cambiar el icono de la taza de caf en JFrame y JDialog
!ambiar el icono de la taza de ca#% que aparece en los J%rame, arriba a la izquierda, es #(cil. .asta con
llamar al m%todo setIconImage/0 del J%rame.
0rame#setAconAmage (ne/ AmageAcon($0ic2ero#gi0$)#getAmage())&
Los JDialog no tienen este m%todo, pero heredan el icono de su ventana padre. -or ello, basta con
crearlos pas(ndoles como padre en el constructor un J%rame que tenga el icono cambiado, o bien otro
JDialog que a su vez se le haya cambiado el icono
G;ialog dialog , ne/ G;ialog (0rame)&
Abrir y cerrar ventanas secundarias (JDialog) desde la primaria (JFrame)
$n el siguiente cdigo de e+emplo, una ventana principal &0rame tiene un botn para abrir una ventana
secundaria &Dialog.
import java#a/t#event#Dction)vent&
import java#a/t#event#Dction4istener&
import java#a/t#event#Hindo/Ddapter&
import java#a/t#event#Hindo/)vent&
import java*#s/ing#G%utton&
import java*#s/ing#G;ialog&
import java*#s/ing#G6rame&
import java*#s/ing#G4abel&
import java*#s/ing#Hindo/Constants&
public class ;osBentanas
private G6rame ventanaPrincipal&
private G;ialog ventanaSecundaria&
-..
. Fparam args
.-
public static void main(String[] args)
ne/ ;osBentanas()&
(
public ;osBentanas()

-- ConstrucciIn de ventana principal


ventanaPrincipal , ne/ G6rame($Bentana principal$)&
G%utton botIn , ne/ G%utton($Dbre secundaria$)&
ventanaPrincipal#getContentPane()#add(botIn)&
ventanaPrincipal#pack()&
-- ConstrucciIn de ventana secundaria
ventanaSecundaria , ne/ G;ialog(ventanaPrincipal<$Bentana secundaria$)&
G4abel eti:ueta , ne/ G4abel($Jola$)&
ventanaSecundaria#getContentPane()#add(eti:ueta)&
ventanaSecundaria#pack()&
-- Jacer :ue el botIn abra la ventana secundaria " cierre la
-- principal
botIn#addDction4istener(ne/ Dction4istener()
public void actionPer0ormed(Dction)vent e)
ventanaPrincipal#setBisible(0alse)&
ventanaSecundaria#setBisible(true)&
(
()&
-- Jacer :ue al cerrarse la secundaria con la * de arriba a la
-- derec2a< se muestre la primaria
ventanaSecundaria#addHindo/4istener(ne/ Hindo/Ddapter()
public void /indo/Closing(Hindo/)vent e)
ventanaPrincipal#setBisible(true)&
ventanaSecundaria#setBisible(0alse)&
(
public void /indo/Closed(Hindo/)vent e)
ventanaPrincipal#setBisible(true)&
ventanaSecundaria#setBisible(0alse)&
(
()&
-- Mostrar la ventana principal
ventanaPrincipal#set;e0aultClose@peration(Hindo/Constants#)KA5?@N?C4@S))&
ventanaPrincipal#setBisible(true)&
(
(
$n primer lugar se construyen la ventana primaria y secundaria, una con un botn y la otra con una
etiqueta.
Luego al botn se le a*ade un (ction?istener para que oculte la principal y muestre la secundaria
cuando se pulsa.
0inalmente se a*ade un @indo&(dapter a la ventana secundaria para enterarnos de cu(ndo se cierra
pulsando la x de arriba a la derecha. !uando esto sucede, mostramos la ventana primaria y ocultamos la
secundaria.
Centrar una ventana en pantalla
/i queremos que una ventana nos salga centrada en la pantalla, antes del +d2 ,.D no nos quedaba m(s
remedio que echar unas cuentas. $l cdigo pod6a ser como este:
-- Se da a la ventana el tamaLo< con pack() o setSiMe()
v#pack()&
-- Se obtienen las dimensiones en pi*els de la pantalla#
;imension pantalla , 5oolkit#get;e0ault5oolkit()#getScreenSiMe()&

-- Se obtienen las dimensiones en pi*els de la ventana#
;imension ventana , v#getSiMe()&

-- Cna cuenta para situar la ventana en el centro de la pantalla#
v#set4ocation(
(pantalla#/idt2 N ventana#/idt2) - !<
(pantalla#2eig2t N ventana#2eig2t) - !)&

-- Se visualiMa la ventana#
v#setBisible(true)&
-ara que el m%todo pack() d% un tama*o adecuado a la ventana es necesario que la ventana ya tenga
dentro los componentes y que estemos usando un Layout que no sea null.
Desde la versin ,.D del &DA existe un m%todo de la clase JWindow que realiza la operacin de centrar
la ventana sobre otro componente especi#ico. $ste m%todo es setLocationRealtie!o(JComponenet
otroComponente), donde otroComponente es cualquier componente sobre el que queremos que salga
centrada la ventana p.e: J"rame, J#ialog, J$utton, J!e%t"ield, etc...
-- 4a ventana saldrO centrada sobre el botIn un%otIn#
v#set4ocation=elative5o (un%otIn)&
/i se pasa null como valor a este par(metro, entonces la ventana se centrara +usto al centro de la
pantalla del -!...
-- 4a ventana saldrO centrada en pantalla#
v#set4ocation=elative5o (null)&
0uente: http:11chuEi2i.chuidiang.org1index.phpStitleO&0rameNyN&Dialog
Creaci+n de la Clase -electorColores,arc
$l selector de colores lo crearemos en una ventana siguiendo los siguientes pasos:
nos situamos en la ventana -ro+ects y con el botn derecho del ratn seleccionamos el paquete paqaEt.
$ntonces elegimos )eE T @ther...
se abre el cuadro de di(logo )eE 0ile y abrimos las carpetas &ava R45 0orms y AG" 0orms. $ntonces
elegimos 0rame 0orm y hacemos clic sobre el botn .

se abre el cuadro de di(logo )eE 0rame 0orm. $n el campo de texto !lass )ame: introducimos el
nombre de la !lase /elector!olores:arc y #inalmente hacemos clic sobre el botn
$ste Asistente >Gizard? nos ha creado una pesta*a llamada /elector!olores:arc, la cual contiene dos
botnes Design y /ource.
!uando el botn Design est( activo entonces el 5D$ nos proporciona un entorno gr(#ico para dise*ar
nuestras aplicaciones visuales. /i hacemos clic sobre el marco que tenemos en el (rea de dise*o
podemos ver la ventana -roperties que en el #uturo nos ser( muy 'til para cambiar las di#erentes
propiedades de los componentes visuales &ava.
Ahora vamos a hacer clic sobre el botn /ource para ver el cdigo #uente &ava generado por el
Asistente
)et.eans, al igual que otros entornos de desarrollo &ava, no permite que el desarrollador pueda
modi#icar cdigo en algunos m%todos que est(n relacionados con el entorno gr(#ico.
La causa de esta restriccin es debido a la sincronizacin que el entorno de desarrollo tiene que realizar
cuando pasa de Dise*o a !digo #uente y viceversa.
-ara evitar posibles errores en la escritura de cdigo relacionado con la parte visual, )et.eans pre#iere
que el traba+o visual se realice directamente en este caso en el entorno gr(#ico en vez de codi#icarlo
nososotros mismos.
)et.eans nos indica que no podemos modi#icar o a*adir nuevo cdigo con un #ondo de color azul
$ste es el cdigo de la !lase /elector!olores:arc creado por el Asistente
package pa:a/t&
public class SelectorColoresMarc e*tends java#a/t#6rame
public SelectorColoresMarc()
initComponents()&
(
private void initComponents()
addHindo/4istener(ne/ java#a/t#event#Hindo/Ddapter()
public void /indo/Closing(java#a/t#event#Hindo/)vent evt)
e*it6orm(evt)&
(
()&
pack()&
(
private void e*it6orm(java#a/t#event#Hindo/)vent evt)
S"stem#e*it(8)&
(
public static void main(String args[])
java#a/t#)vent3ueue#invoke4ater(ne/ =unnable()
public void run()
ne/ SelectorColoresMarc()#setBisible(true)&
(
()&
(
(
ne/ SelectorColoresMarc()#setBisible(true)&
se crea una instancia de la Clase SelectorColoresMarc
public SelectorColoresMarc()
initComponents()&
(
cuando se est( creando el @b+eto se llama al !onstructor y %ste a su vez realiza una invocacin al
m%todo init!omponents>?
en entornos de desarrollo como por e+emplo &.uilder, en vez de llamar a este m%todo hubiera llamada
al m%todo +b5nit>?. $stos 5D$s se crean un m%todo propio donde depositan el cdigo &ava re#erente a la
parte visual. As6 cuando pasamos del entrono de codi#icacin al entrono visual el parsing de cdigo
+ava a entorno visual lo realizan de una #orma m(s r(pida y optimizada.
el cdigo de este m%todo ya lo estudiaremos m(s adelante.
neE /elector!olores:arc>?.setLisible>true?P
como podemos observar el Asistente no nos ha creado un cdigo con una variable de re#erencia como
por e+emplo
SelectorColoresMarc marco , ne/ SelectorColoresMarc()&
marco#setBisible(true)&
por que en este caso ha considerado que la variable de re#erencia marc no la necesita. /implemente crea
un @b+eto de tipo /elector!olores:arc y seguidamente en la misma l6nea de cdigo ya habla con uno
de sus m%todos sin necesidad de utilizar una variable de re#erencia.
el m%todo setLisible>true? se utiliza para mostrar en pantalla el @b+eto /elector!olores:arc que ya est(
instanciado en memoria. :(s adelante ya veremos como las aplicaciones gr(#icas primero se
construyen en memoria y seguidamente cuando todos sus componentes ya est(n inicializados se
muestran dichos componentes en la pantalla.
Ahora e+ecutamos esta !lase, y vemos una ventana sin dimensiones
-ara que el 0rame >marco, ventana? tenga dimensiones, vamos a modi#icar el cdigo perteneciente al
m%todo main>...?
package pa:a/t&
public class SelectorColoresMarc e*tends java#a/t#6rame
public SelectorColoresMarc()
initComponents()&
(
private void initComponents()
addHindo/4istener(ne/ java#a/t#event#Hindo/Ddapter()
public void /indo/Closing(java#a/t#event#Hindo/)vent evt)
e*it6orm(evt)&
(
()&
pack()&
(
private void e*it6orm(java#a/t#event#Hindo/)vent evt)
S"stem#e*it(8)&
(
public static void main(String args[])
SelectorColoresMarc marco , ne/ SelectorColoresMarc()&
marco#setSiMe('88<!88)&
marco#set5itle($Selector de colores$)&
marco#setBisible(true)&
(
(
ahora ya podemos e+ecutar esta !lase para ver una ventana con dimensiones.
%uente:
http:11EEE.+avadabbadoo.org1cursos1in#osintesis.net1+avase1paqaEt1selectorcolores1paso<,operativa.ht
ml
Comandos ->? desde NetBeans
.ueno es este unos de los casos en el que se puede acelerar las cosas teniendo una herramienta que te
permita hacer varias cosas a la vez.
$n este caso con el )et.eans 9.= podemos hacer nuestras consultas a .D.>aunque en las versiones
anteriores tambi%n lo hac6an pero ahora hay mas opcines de administracin?.
#!A!omo siempre nos vamos a la opcin -resentaciones>e+ecucin o 5BNTI,E?. /eguidamente en le
icono de .ase de datos>clic2 derecho y buscar en Nueva Cone)i+n?
9!AAl dar en nueva conexn nos saldr( la siguiente inter#az donde tendremos que colocar la
in#ormacin de tu .D>en este caso :y/ql?.
Adicionalmente decir que te piden el driver dependiendo de la conexion en este caso del mysql
conector.
:!AAl conectarte te saldr( el icono con el nombre de tu .D, para e+ecutar comandos slo ponemos clic2
derecho EJECBT(5 C8,(ND8!!!
;!A$scribimos la sentencia y e+ecutamos.
!omo ven hay m(s opcines que en las versiones anteriores como en el =.= slo teniamos para ser
sentencia entre otras cosas.-ero ahora tenemos para limpiar "abla,actualizar registros,insertar
registros,entre otros.
0uente: http:11+avayca#e.blogspot.com1;<<U1<,1comandos3sql3desde3netbeans.html
Conectando 'ostgre->? con NETBE(N- J(C(
$n este peque*o tutorial ense*ar% la #orma de conectar nuestra base de datos -ostgre/QL Q.B con el
5D$ )etbeans, es muy sencillo, antes que todo necesitamos ba+ar nuestro Driver, el cual nos permitira
conectarnos y hacer puente entre ambos D$/!A7RA7
4na vez ya descargado estar6amos en condiciones para poder conectarnos.
Abrimos )et.eans y vamos al :en' Ferramientas >"ools? y luego a Librer6as, ah6 seleccionamos
V)ueva Librer6aW nos aparece V)ombre de librer6aW digitamos -ostgre/QL y de+amos la opcin por
de#ault en el campo tipo de librer6a y presionamos el botn @2.
Luego presionamos el .otn (dd JarD%older, ah6 seleccionamos nuestro driver que acabamos de
descargar, el cual se deberia llamar postgres1lA=!:AE:!jd*c;!jar y presionamos @A. y en la siguiente
ventana tambien @A.
!on esto estamos en condiciones de hacer nuestro primer programa que se conecte con la base de datos
desde +ava.
Ahora haremos la conexion con nuestra base de datos
pac2age e+emploP
import +ava.sql.XP 11 importamos +ava.sql para poder traba+ar con /QL
public class :ain Y
public :ain>? Y
Z
public static void main>/tring[\ args? Y
/tring driver O Vorg.postgresql.DriverWP 11 el nombre de nuestro driver -ostgres.
/tring connect/tring O V+dbc:postgresql:11localhost:=DB;1e+emplo1WP 11 llamamos nuestra bd
/tring user O VpostgresWP 11 usuario postgres
/tring passEord O W VP 11 no tiene passEord nuestra bd.
try Y
!lass.#or)ame>driver?P
11Facemos la coneccion.
!onnection conn O Driver:anager.get!onnection>connect/tring, user, passEord?P
11/i la conexion #ue realizada con exito, muestra el sgte mensa+e.
/ystem.out.println>V!onexion a la base de datos $+emplo realizada con exitoJ V?P
11!erramos la conexin
conn.close>?P
Z
11/i se produce una $xcepcin y no nos podemos conectar, muestra el sgte. mensa+e.
catch>/QL$xception e? Y
/ystem.out.println>V/e ha producido un error en la conexion a la base de datos $+emploJ V?P
Z
Z
0uente: http:11migueQ=.Eordpress.com1;<<Q1<H1,,1conectando3postgresql3con3netbeans3+ava1
Conectar Java con ,y->? en NetBeans
Dentro de unas semanas tendr% que desarrollar, +unto con un equipo de traba+o, un sistema de un
almacen en &ava ba+o la plata#orma de )et.eans. $s por eso que comenzar% a pubicar una serie de post
sobre cmo mane+ar bases de datos de :y/QL con &ava, y en los cuales poco a poco ir% agregando
nuevas #uncionalidades.
-or ahora solo mostrar% cmo realizar la conexin a la base de datos de :y/QL.
-ara comenzar debemos de tener instalado )et.eans, en lo particular yo tengo instalada la versin 9.<.
-osteriormente debemos descargar un Driver o Conector para poder conectarnos a la base de datos. /e
puede decir que ese Driver sabe Vcmo hablar con la base de datosW, yo descargu% la versin =.<.
4na vez descargado el archivo, extraemos los componentes, de estos el archivo que nos interesa es
mys1lAconnectorAjavaA<!E!<A*in!jar, este +ar es la clase o Driver que nos permitir( conectarnos a la
base de datos.
Ahora tenemos que hacer que esa clase est% accesible para nuestros proyectos, as6 que la vamos a
guardar en la carpeta ]#&R'C!(R&()#')J*+*C1+re1lib1ext. /i has realizado una instalacin por
de#ecto del )et.eans en GindoEs, entonces estar( en:
C:F(rc.ivos de programaFJavaFjd4#!!EGE;FjreFli*Fe)t. $n esta carpeta es donde se agregan los +ar
adicionales, y as6 ya los tendremos disponibles para cuando necesitemos usarlos de nuevo.
Ahora que ya tenemos el conector a la base de datos pasaremos a la parte del )et.eans:
,. !reamos un nuevo proyecto: )eE -ro+ect 3C &ava 3C Des2top Application >.asic application?.
;. Agregamos un botn al #ormulario y le cambiamos su label a V!argar datosW.
B. Agregamos una nueva clase llamada TestConnection
import java#s:l#.&
public class 5estConnection
public String bd , $nombre?bd$&
public String login , $usuario$&
public String pass/ord , $contraseLa$&
public String url , $jdbc:m"s:l:--local2ost-$Pbd&
public void conectar()
Connection conn , null&
tr"
Class#0orName($org#gjt#mm#m"s:l#;river$)&
conn , ;riverManager#getConnection(url< login< pass/ord)&
i0 (conn E, null)

S"stem#out#println($Cone*iIn a base de datos $PurlP$ ### @k$)&


conn#close()&
(
(
catc2(S34)*ception e*)
S"stem#out#println($Jubo un problema al intentar conectarse con la base de
datos $Purl)&
(
catc2(ClassNot6ound)*ception e*)
S"stem#out#println(e*)&
(
(
(
D. Facemos doble clic en el botn V!argar datosW y colocamos el siguiente cdigo:
sourcecode language,QjavaQ [
5estConnection cone*ion , ne/ 5estConnection()&
cone*ion#conectar()&
]
listoJJJ. !on esto ya tenemos realizada la conexin a la base de datos de :y/QL
0uente: http:11#ragoEb.Eordpress.com1;<<Q1<=1<,1conectar3+ava3con3mysql3en3netbeans1
Java A ??enar un JTa*le con 5esult-et
1 !ntorno
&DA 9 4pdate ;,
)etbeans 9.U.,
:y/QL =.,.
" #ntroducci$n
Lo que se desea demostrar en este tutorial es como mostrar los datos de una consulta en un &"able.
Faciendo uso de la clase 7esult/et:etaData que nos brinda la in#ormacin de una tabla de la base de
datos y la clase 7esult/et que nos devuelve la data producto de una consulta hacia la base de datos.
% Desarrollo
%1 Crear el proyecto
-rimero debemos de crear un proyecto en )etbeans para eso nos vamos a I0ile3C)eE -ro+ectI y
seleccionamos la opcin de crear un I&ava ApplicationI
como nombre al proyecto le ponemos ILlenar&"ableI
Al proyecto debemos de agregar un #ormulario >&0rame0orm? que lo llamaremos I#rmLlenar&tableI.
-ara hacemos clic derecho en el paquete que se llama Illenar+tableI de ah6 seleccionamos )eE y
elegimos I&0rame 0ormI
%" Dise&o del Formulario
Debemos de dise*ar el siguiente #ormulario:
Donde:
$l &"ext.ox: 7ecibe el nombre de txtQuery
$l &"able: 7ecibe el nombre de +tQuery
$l &.utton: 7ecibe el nombre de btn!onsultar
%% Crear base de datos en 'y()*
Debemos de crear una base de datos en :y/QL. A la base de la llamaremos IbdproductosI y tambi%n
crearemos una tabla que se llamara IproductoI
%+ Codificando el action del bot$n ,Consultar,
Debemos de codi#icar la accin del botn I!onsultarI que va a llenar al &"able con la data producto de
la consulta que vamos a hacer a la base de datos bdproductos que esta en :y/QL. )o olvidar agregar
el conector al )etbeans para poder comunicarnos con :y/QL.
-ara ir a la Action del botn debemos hacer clic derecho en el botn de ah6 seleccionamos $vents,
luego Action y #inalmente Action-er#ormed
luego dentro de ese evento ponemos el siguiente codigo
try Y
11-ara establecer el modelo al &"able
De#ault"able:odel modelo O neE De#ault"able:odel>?P
this.+tQuery.set:odel>modelo?P
11-ara conectarnos a nuestra base de datos
Driver:anager.registerDriver>neE com.mysql.+dbc.Driver>??P
!onnection conexion O Driver:anager.get!onnection>I+dbc:mysql:11localhost1bdproductosI,
IusuarioI, IclaveI?P
11-ara e+ecutar la consulta
/tatement s O conexion.create/tatement>?P
11$+ecutamos la consulta que escribimos en la ca+a de texto
11y los datos lo almacenamos en un 7esult/et
7esult/et rs O s.executeQuery>txtQuery.get"ext>??P
11@bteniendo la in#ormacion de las columnas que estan siendo consultadas
7esult/et:etaData rs:d O rs.get:etaData>?P
11La cantidad de columnas que tiene la consulta
int cantidad!olumnas O rs:d.get!olumn!ount>?P
11$stablecer como cabezeras el nombre de las colimnas
#or >int i O ,P i ]O cantidad!olumnasP i88? Y
modelo.add!olumn>rs:d.get!olumnLabel>i??P
Z
11!reando las #ilas para el &"able
Ehile >rs.next>?? Y
@b+ect[\ #ila O neE @b+ect[cantidad!olumnas\P
#or >int i O <P i ] cantidad!olumnasP i88? Y
#ila[i\Ors.get@b+ect>i8,?P
Z
modelo.add7oE>#ila?P
Z
rs.close>?P
conexion.close>?P
Zcatch >$xception ex? Y
ex.print/tac2"race>?P
Z
+ !-emplo de la aplicaci$n
/in poner etiquetas a la consulta

!on etiquetas a la consulta

0uente: http:11EEE.programandoconca#e.com1;<,<1,,1+ava3llenar3un3+table3con3resultset.html
Centrar un J%rameDJDialog en pantalla
Al crear un nuevo &0rame &Dialog en /Eing, al hacerlos visibles estos aparecer(n arriba a la
izquierda de nuestra pantalla. -or e+emplo si realizamos:
import java*#s/ing#G6rame&
public class Prueba
public static void main(String[] args)
G6rame 0rame , ne/ G6rame($Prueba G6rame$)&
0rame#setSiMe(+88< +88)&
0rame#set;e0aultClose@peration(0rame#)KA5?@N?C4@S))&
0rame#setBisible(true)&
(
(
al e+ecutarlo, veremos como resultado as6:
/i ahora especi#icamos por medio del m%todo set?ocation5elativeTo a null, la ventana se posicionar(
en el medio de la pantalla. -or lo que si agregamos la siguiente linea:
import java*#s/ing#G6rame&
public class Prueba
public static void main(String[] args)
G6rame 0rame , ne/ G6rame($Prueba G6rame$)&
0rame#setSiMe(+88< +88)&
0rame#set4ocation=elative5o(null)&
0rame#set;e0aultClose@peration(0rame#)KA5?@N?C4@S))&
0rame#setBisible(true)&
(
(
tendremos un resultado similar a este:
%uente: http:11le#unes.Eordpress.com1;<<Q1<;1,,1centrar3un3+#rame+dialog3en3pantalla1
Centrar JDialog en J3rame
/i lo que deseamos es centrar un &Dialog en el &0rame VpadreW, lo que hacemos es usar el mismo
m%todo, pero esta vez especi#icando que la posicion de apertura del &Dialog ser( con respecta al
&0rame:
import java*#s/ing#G6rame&
public class Prueba
public static void main(String[] args)
G6rame 0rame , ne/ G6rame($Prueba G6rame$)&
0rame#setSiMe(+88< +88)&
0rame#set4ocation=elative5o(null)&
0inal G%utton botIn , ne/ G%utton($Dbrir ;ialogo$)&
botIn#addDction4istener(ne/ Dction4istener()
public void actionPer0ormed(Dction)vent e)
G;ialog dialogo , ne/ G;ialog(0rame)&
dialogo#setSiMe(188< 188)&
dialogo#set4ocation=elative5o(0rame)&
dialogo#setBisible(true)&
(
()&
0rame#add(botIn)&
0rame#set;e0aultClose@peration(0rame#)KA5?@N?C4@S))&
0rame#setBisible(true)&
(
(
los que no da como resultado al hacer clic2:
0uente: http:11le#unes.Eordpress.com1;<<Q1<;1,,1centrar3un3+#rame+dialog3en3pantalla1
(sesoramiento en programa
Fice el acceso al programa mediante una contrase*a>necesaria? con dos clases.
la q contiene el metodo main:
!digo:
public class aplicacion Y
public static void main>/tring[\ args? Y
contrase*a ob+OneE contrase*a>?P
Z
Z
la q contiene las especi#icaciones de la ventana:
!digo:
import +ava.aEt.!olorP
import +avax.sEing.XP
import +avax.sEing.&0rameP
import +ava.aEt.event.XP
public class contrase*a Y
public contrase*a>?Y
#inal &0rame marcoOneE &0rame>IAcceso de programaI?P11!7$A:@/ $L :A7!@ D$ LA
L$)"A)A
11espacio deonde van los componentes
&Des2top-ane escOneE &Des2top-ane>?P

&Label eusuarioOneE &Label>I4suario:I?P
&Label econtrase*aOneE &Label>I!ontrase*a:I?P
#inal &"ext0ield usuarioOneE &"ext0ield>?P
#inal &-assEord0ield contrase*a O neE &-assEord0ield>?P
&.utton cerrarOneE &.utton>IcerrarI?P
&.utton ingresarOneE &.utton>IingresarI?P

11ubicacion en el plano
eusuario.set.ounds>,<,,<,,<<,B<?P
usuario.set.ounds>U<,,<,,U<,B<?P
econtrase*a.set.ounds>,<, =<, ,<<, B<?P
contrase*a.set.ounds>U<,=<,,U<,B<?P
cerrar.set.ounds>,Q<, ,<<, ,<<, B<?P
ingresar.set.ounds>,<, ,<<, ,<<, B<?P
11ocultamos la contrase*a rusticamente


11agregar al escritorio los di#erentes ob+etos
esc.add>eusuario?P
esc.add>usuario?P
esc.add>econtrase*a?P
esc.add>contrase*a?P
esc.add>cerrar?P
esc.add>ingresar?P
esc.set.ac2ground>!olor.L5RF"NR7A?P11esto es solo para distinguir el escritorio de la ventana

marco.add>esc?P11este agrega el escritorio a la ventana
marco.set/ize>B<<,,Q<?P11le damos tama*o variable
marco.setLocation7elative"o>null?P
marco.setDe#ault!lose@peration>&0rame.$M5"N@)N!L@/$?P
marco.setLisible>true?P11luego ir al metodo main a ocupar esta clase como metodo para un ob+eto

11programamos los botnes
ingresar.addActionListener>neE ActionListener>?Y
public void action-er#ormed>Action$vent e?Y
/tring userP
/tring claveP
claveOcontrase*a.get"ext>?P
userO usuario.get"ext>?P

i# >user.equals5gnore!ase>I#elipeI?^^clave.equals>Icbr#elipeI??Y
&@ption-ane.shoE:essageDialog>null,I.ienvenido al sistemaI?P11aprobacion
11abrir otro 07A:$ -rograma
programa #rameOneE programa>?P11 con este me muevo a la siguiente ventana... me costo caleta
pillarlo
marco.setLisible>#alse?P
Zelse &@ption-ane.shoE:essageDialog>null,IreintentarI?P
Z
Z?P

cerrar.addActionListener>neE ActionListener>?Y11para el botn cerrar tan solo ocupamos exit
public void action-er#ormed>Action$vent e?Y
/ystem.exit><?P
Z

Z?P

Z

Z
0uente: http:11EEE.elcachondeo.cl1#oro1#,B=1;<B,HB,3asesoramiento3en3programa1
C+mo usar 3rames y diHlogos en Java Net*eans
"odos los programas que vemos en el escritorio de GindoEs o Linux usan ventanas es por eso una de
las razones que el sistema m(s usado en el mundo tiene el nombre VventanaW en ingles GindoEs,
cuando hacemos sistema en &ava )etbeans existen dos tipos de ventanas que son: 0rames y di(logos. A
continuacin te estaremos hablando de cada una de ellas.
Lisita mi Eeb:http:11EEE.Eix.com1#oxso#tEare1estudiosave#enix
Los 07A:$/ son ventanas principales que no necesitan de la existencia de otras para existir, por
e+emplo la ventana principal de G@7D o $M!$L podemos tener varios G@7D abiertos al mismo
tiempo todos son independientes esos y no necesitan de otra ventana para su existencias en &ALA estas
ventanas principales se llaman 07A:$ y cuando se las da un nombre se acostumbra a poner el nombre
que lo identi#ica y con la terminacin 07A:$ por e+emplo :A5)07A:$ es el 07A:A principal, o
)$G5"$:07A:$ u 07A:$ para crear un nuevo 6tem.
Los D5AL@R@/ son ventanas tambi%n al igual que las ventanas de tipo 07A:$ pero con la di#erencia
que estos bloquean al #ormulario o ventana padre hasta que se cierre el D5AL@R@.
.ueno primeramente vamos a crear un 07A:$ principal y abrir otro 07A:$ a trav%s de un botn en
el 07A:$ principal.
!reamos un nuevo proyecto:
Ahora escogemos &ALA y &ALA A--L5!A"5@) y despu%s clic en el botn )$M":
Luego de+amos las opcines como se muestra en la siguiente imagen:
Ahora hacemos clic en 05)5/F, y ahora creamos nuestro primer &07A:$ haciendo clic derecho en el
icono en #orma de una taza de ca#% de nuestro proyecto que acabamos de crear como en la siguiente
imagen:
De+amos las opcines como en la siguiente imagen:
Luego hacemos clic en 05)5/F recuerda que nuestro primer 07A:$ se llama )$G&07A:$ como se
muestra en la anterior imagen.
De la misma manera creamos otro 07A:$ llamado )$G&07A:$,:
Ahora ya tenemos dos &07A:$ vamos abrir el &)$G07A:$, a trav%s del )$G&07A:$ por medio
de un &.4""@).
Ahora hacemos clic en el )$G&07A:$, y en sus propiedades cambiamos la propiedad
D$0A4L"!L@/$@-$7A"5@) de $M5"N@)N!L@/$ A D5/-@/$, como se muestra en la siguiente
imagen recuerda que es del )$G&07A:$,:
$sto hemos hecho para que cada 07A:$ sea independiente a la hora de cerrar y o se sierren todas
cuando cerremos una.
Ahora agregamos un botn al otro )$G&07A:$ al primero que creamos y abrimos su cdigo de su
evento con clic derecho como en la siguiente imagen:
escribimos en siguiente cdigo como en la siguiente imagen:
Listo con eso cuando hagamos clic en el botn se abrir( nuestro )$G&07A:$,, cuando e+ecutes el
proyecto te pedir( que eli+as el 07A:$ principal le dices que sea )$G&07A:$ como en la siguiente
imagen:
Ahora vamos a crear un D5AL@R@ que es el otro tipo de ventana que tiene el &ALA, de la misma
#orma que hemos creado un 07A:$ se crea un D5AL@R@, como en la siguiente imagen:
Luego hacemos clic en 05)5/F, ahora para abrir este )$G&D5AL@R por medio de nuestro 07A:$
de la misma #orma que hicimos anteriormente arrastramos un botn en el )$G&07A:$ y en su
evento escribimos el siguiente cdigo:
Listo ahora e+ecuta tu proyecto y recuerda que el 07A:$ principal de be ser )$G&07A:$ si te sale
la siguiente ventana:
$lige )$G&07A:$, y cuando e+ecute veras las di#erencias que existen entre una ventana de tipo
D5AL@R@ y una ventana de tipo 07A:$, espero que te haya servido.
0uente: http:11EEE.mailxmail.com1como3usar3#rames3dialogos3+ava3netbeansNh
C+mo poner 3ondo a un 3ormulario de Java Net*eans
.ueno si y has usado alguna vez un D$L-F5 o !88.45LD$7 o un L5/4AL .A/5! y 4) L5/45AL
!_, y has pensado que poner una imagen de #ondo a un #ormulario de &ALA )$".$A)/ es tan #(cil
como en las otras tecnolog6as casi te equivocaste, no es para nada igual, es totalmente di#erente muy
di#erente no es di#6cil porque una vez que sepas como se hace lo har(s muy #(cilmente despu%s.
Lisita mi Eeb:http:11EEE.Eix.com1#oxso#tEare1estudiosave#enix
$ntonces sigue estos pasos, abre tu )$".$A)/, haz clic en 05L$3C)$G -7@&$!":
Ahora escoge &ALA y despu%s &ALA A--L5!A"5@) como se muestra en la siguiente imagen:
Luego de hacer clic en )$M" te saldr( otra ventana ponle un nombre a tu aplicacin en nuestro caso
ser( A-L5!A!5@)!@)0@)D@ y de+a las dem(s opcines como en la siguiente imagen:
Despu%s de hacer clic en 05)/F se creara el siguiente paquete en la parte derecha como en la siguiente
imagen:
Ahora vamos a crear nuestro #ormulario principal, haciendo clic en 05L$ despu%s en )$G 05L$ como
en la siguiente imagen:
$scogemos en categor6as escogemos /G5)R R45 0@7:/ y tipo de archivo &D5AL@R 0@7: y de
pues hacemos clic en )$M"C como en la siguiente imagen:
Ahora solo le ponemos un nombre en mi caso V-rincipalW y luego le damos clic en 05)5/F:
Ahora creamos otro #ormulario de tipo -A)$L para que sea el #ondo de nuestro #ormulario principal.
hacemos similar al anterior clic en 05L$ luego en )4$L@ 05L$:
-eo esta vez no escogemos &D5AL@R 0@7: si no que &-A)$L 0@7: de /G5)R R45 0@7: como
se muestra en la siguiente imagen:
Luego clic en )$M" y luego le ponemos un nombre en mi caso V0ondoW como en la siguiente imagen:
Luego hacemos clic en 05)5/F y se creara nuestro #ormulario y ahora listo vamos a empezar a traba+ar
en la con#iguracin de nuestro 0ondo, para eso nos ubicamos en nuestro #ormulario 0ondo no en el
#ormulario principal si no en #ondo como muestra en la siguiente imagen:
Le arrastramos un &Label, y le ampliamos su tama*o por todo el #ormulario agarr(ndole de una
esquina y agrand(ndole hasta que tape todo el #ormulario 0ondo:
Ahora nos vamos a las propiedades del &Label, que est( en la parte derecha y borramos su propiedad
"$M" para que no se vea el t6tulo &LA.$L, y hacemos clic en la propiedad 5!@) en su botn buscar
que est( representado por un botn de tres puntos suspensivos como se muestra en la #igura:
Luego nos saldr( una ventana done tenemos que elegir la imagen de #ondo que queremos, como en la
siguiente imagen:
)osotros hacemos clic en el botn 5:-@7" "@ -7@&$!"` y escogemos la imagen que queramos de
nuestro ordenador como en la siguiente imagen:
Luego hacemos clic en )$M" y despu%s clic en 05)5/F:
Luego clic en el botn @A, nos aparecer( el #ormulario llamado 0ondo con la imagen de #ondo que
le escogimos ahora solo tenemos que importar este #ormulario 0ondo a nuestro #ormulario -rincipal y
lo hacemos de la siguiente #orma:
Facemos clic en -rincipal para entrar en el #ormulario -rincipal luego en clic en /@47!$ para entrar
en su cdigo:
Luego buscamos las l6neas siguientes:
escribimos las siguientes l6neas de cdigo dentro de las llaves de amarillo que se muestran en la
imagen de arriba:
$l cdigo debe quedar as6:
Ahora haz clic en el botn -LA que es un tri(ngulo verde:
te pedir( que eli+as en #ormulario principal:
$scoges -rincipal y listo ya tienes tu #ondo pero solo se ver( cuando se e+ecute tu proyecto, recuerda
que tienes que traba+ar pone ido tus botnes y todo lo dem(s en el #ormulario -rincipal y n as6 en el
#ormulario 0ondo. -ara cada #ormulario que quieres con #ondo tienes que crear otro #ormulario 0ondo.
.ueno es muy largo porque en &ava de esa #orma se pone un #ondo, en la pr(ctica es relativamente
corto y sencillo.
0uente: http:11EEE.mailxmail.com1como3poner3#ondo3#ormulario3+ava3netbeansNh
IC+mo ocultar el *ot+n cerrar del J%rameJ en NetBeansJ
-uedes quitar el marco completo de la ventana con la siguiente propiedad del &#rame
miventana.set4ndecorated>true?P
0uente: http:11es.ansEers.yahoo.com1question1indexSqidO;<,,<B,;<Q<H<9AAD<QqE
In.a*ilitar *ot+n cerrar Java en J%rame
"rata el siguiente cdigo, a mi me #unciono sin problema alguno, colcalo en la clase principal donde
inicie el cdigo del programa.
set;e0aultClose@peration(8)&
ejemplo:
class Programa e*tends G6rame
Programa()
set;e0aultClose@peration(8)&
(
(
0uente: http:11EEE.todoexpertos.com1categorias1tecnologia3e3internet1programacion1+ava1respuestas1,<,QHD;1inhabilitar3
botn3cerrar3+ava3en3+#rameg
J%rame, JDialog y otras ventanas
!uando queremos hacer ventanitas en +ava nos encontramos con dos ventanas: $l J%rame y el
JDialog. a!u(ndo se usa una u otraS, aQu% di#erencias hay entre ellasS.
Los JDialog admiten un padre y pueden ser o no modales. a-ara qu% sirve ese padreS a-uedo hacer
cualquier JDialog modalS
@tras veces queremos hacer una ventana de error, de aviso, para pedir un dato o con#irmar algo.
a-ongo J%rame o JDialog para esas ventanasS a"engo que construirlaS
Lamos a tratar en este tutorial de echar un vistazo a J%rame y JDialog, as6 como a J8ption'ane y ver
cu(ndo usamos una u otra. "rataremos de responder a todas estas preguntas.
J%rame y JDialog
Los dos tipos de ventanas principales que tenemos en +ava son J%rame y JDialog. Fay varias
di#erencias entre ellas y en #uncin de estas di#erencias vamos a ver para qu% sirven
/i instanciamos un J%rame, en la barra de aba+o de EindoEs >creo que se llama Ibarra de
herramientasI? nos aparece un nuevo IbotncitoI correspondiente a nuestra aplicacin. /i
instanciamos un JDialog, no aparece nada.
4n J%rame tiene un m%todo setIconImage/0 para cambiar el icono por de#ecto de la taza de
ca#%. JDialog no tiene este m%todo.
4n JDialog admite otra ventana >J%rame o JDialog? como padre en el constructor. J%rame no
admite padres.
4n JDialog puede ser modal, un J%rame no.
"odo esto nos indica lo siguiente:
4n J%rame debe ser la ventana principal de nuestra aplicacin y slo debe haber una.
Las ventanas secundarias de nuestra aplicacin deben ser JDialog.
Los motivos de esto son los siguientes.
Al mostrar el J%rame un botn en la barra de herramientas de EindoEs y tener m%todo para cambiar el
icono, es la ventana ideal como ventana principal de nuestra aplicacin y slo debe haber una. )os
permite cambiar el icono y slo debe haber un botn en la barra de herramientas de EindoEs para
nuestra aplicacin.
/i usamos un JDialog como ventana principal, no tenemos botn en la barra de herramientas y no hay
#orma #(cil de cambiarle el icono.
Los JDialog son ideales para ventanas secundarias porque admiten una ventana padre. /i la LentanaA
es padre del &Dialog., entonces el &Dialog. siempre estar( por delante de LentanaA, nunca quedar(
por detr(s. Lo ideal es que hagamos nuestras ventanas secundarias como JDialog cuyo padre sea el
J%rame principal. De esta #orma los JDialog siempre ser(n visibles por encima del J%rame y no se
ir(n detr(s ni quedar(n ocultos por el J%rame.
@tra venta+a de admitir un padre es que heredan el icono de %l. /i hemos cambiado el icono del
J%rame con el m%todo setIconImage/0, entonces todos los JDialog que hagamos como hi+os de este
J%rame heredar(n el icono. "odas las ventanas de nuestra aplicacin tendr(n el mismo icono en lugar
de la taza de ca#% por de#ecto.
Jerar1ua de padres y ventanas modales
4n JDialog puede ser modal, pas(ndole un true en el constructor en el sitio adecuado o haci%ndolo
modal con el m%todo set,odal/0. /i hacemos un JDialog modal, todas las dem(s ventanas se
deshabilitar(n hasta que el usuario de nuestro programa cierre el JDialog. $sto est( estupendo para
pedir un dato al usuario y evitar que toque otras cosas hasta que haya introducido el dato. /in embargo,
tiene un peligro.
/upongamos un JDialog que lo hacemos modal para pedir unos datos al usuario. $ste JDialog tiene un
botn de IAceptarI para que el usuario lo pulse cuando haya terminado de introducir los datos.
/upongamos que en el cdigo de ese botn IAceptarI comprobamos los datos que ha metido el usuario
y vemos que son incorrectos. Le sacamos un segundo JDialog modal para indicarle el error y no
cerramos el primero.
aQui%n debe ser el padre de ese segundo JDialog modalS. /i hacemos que el padre sea el J%rame
tendremos dos JDialog modales hi+os del J%rame, es decir, dos JDialog modales hermanos. $sto nos
dar( problemas, como que ambas ventanas queden deshabilitadas, que al cerrar una de ellas se nos
oculten todas, que parte de la ventana quede deshabilitada mientras que otra parte no, etc.
$ntonces, acmo hacemosS. -ara que +ava no haga cosas raras, el padre del segundo JDialog modal
debe ser el primer JDialog modal. De esta #orma, el segundo tiene IprioridadI sobre el primero. "odo
queda deshabilitado excepto este segundo JDialog. !uando lo cerremos, ser( el primero el que mande.
7esumiendo, si queremos varias ventanas modales simult(neamente en pantalla, cada ventana que se
muestre debe ser padre de la siguiente, de #orma que la cadena de ventanas modales sean padre, hi+o,
nieto, etc. "ener dos ventanas modales simultaneas que sean hermanas o primas o cualquier otra
relacin que no sea directa, nos dar( problemas.
J8ption'ane
-ara hacer ventanas sencillas que avisen de un error al usuario y tengan un botn de I!errarI, o que le
pidan una con#irmacin para hacer algo >como borrar un #ichero? y tengan dos botnes de I/iI y I)oI,
o para pedirle que eli+a una opcin entre varias disponibles ... tenemos suerte. )o hay que construir la
ventana.
La clase J8ption'ane de +ava tiene m%todos s.o&Con3irmDialog/0, s.o&InputDialog/0,
s.o&8ptionDialog/0, s.o&,essageDialog/0. $stos m%todos mostar(n una ventana modal que pide al
usuario una con#irmacin, que le pide un dato o le muestra un mensa+e. $n caso de que el usuario tenga
que elegir algo, el m%todo usado devuelve el valor elegido.
-or e+emplo, para mostrar un aviso de error, nos basta esta simple l6nea de cdigo
&@ption-ane.shoE:essageDialog>ventana-adre, Imensa+e de errorI, It6tulo de la ventanaI,
&@ption-ane.$77@7N:$//AR$?P
$sto mostrar( el mensa+e de error y detendr( la e+ecucin del cdigo hasta que el usuario cierre la
ventana.
Ahora viene el dato importante. $sta ventana es modal y admite un padre. /i ya hay una ventana modal
visible en pantalla, deber6as pasar esa ventana como padre de esta para no tener problemas.
JInternal%rame
$l JInternal%rame es una ventana especial que ni es ventana ni es nada. De hecho, no hereda de
@indo&. $n realidad es un componente +ava que se dibu+a dentro de otro componente, pero adornado
con la barra de t6tulo de una ventana y sus botnes de maximizar, minimizar y cerrar. -uede incluso
arrastrarse y modi#icarse de tama*o siempre que se mete dentro del componente adecuado.
$l sitio bueno para meter los JInternal%rame es el JDes4top'ane. $ste panel admite
JInternal%rame y sabe mane+arlos.
G6rame ventana , ne/ G6rame()&
G;esktopPane desktop , ne/ G;esktopPane()&
ventana#getContentPane#add(desktop)&
GAnternal6rame internal , ne/ GAnternal6rame()&
desktop#add(internal)&
$n este cdigo el JInternal%rame se comportar( como una ventana, pero que no puede salirse del
&Des2top que la contiene.
5esumen
$n nuestra aplicacin debe haber un J%rame y slo uno, que ser( la ventana principal.
"odas las ventanas secundarias deben ser JDialog y todos los JDialog deber6an tener padre.
"odos los JDialog modales visibles a la vez en pantalla, deben ser unos hi+os de otros en una
cadena Ipadre3hi+o3nietoI directa. )o pueden ser IhermanosI, ni IprimosI ni IsobrinosI.
%uente: http:11EEE.chuidiang.com1+ava1novatos1&0rameN&Dialog.php
Cerrar la ventana J%rame o JDialog al pulsar la tecla E-C('E
Aeyboard0ocus:anager 2b O Aeyboard0ocus:anager.get!urrentAeyboard0ocus:anager>?P
kb#addRe")ventPostProcessor(ne/ Re")ventPostProcessor()
public boolean postProcessRe")vent(Re")vent e)
i0 (e#getRe"Code() ,, Re")vent#BR?)SCDP) SS t2is E, null){
S"stem#out#println($probando###$)&
dispose()&
return false;
}
return true;
(
()&
%uente: http:11#oro.chuidiang.com1+ava3+;se1cerrar3la3ventana3+#rame3o3+dialog3al3pulsar3la3tecla3escape1
J(C( desde cero
Clase J%rame
-or herencia la clase &0rame y sus clases descendientes >subclases directas ?
pueden utilizar los datos y1o m%todos de la superclase 0rame, GindoE,
!ontainer, !omponent y @b+ect de la librer6a aEt.
La clase &0rame es ligeramente incompatible con la clase 0rame. !omo todo
otro contenedor de alto nivel de la librer6a /Eing, un &0rame contiene un
&7oot-ane como su 'nico elemento. $l content-ane proporcionado por el
root-ane deber6a, como una regla, contener todos los componentes que
no sean men' mostrados por el &0rame.
A di#erencia del 0rame, un &0rame tiene alguna nocin de como responder
cuando el usuario intenta cerrar la ventana. $l comportamiento por de#ecto es simplemente ocultar el
&0rame cuando el usuario cierra la ventana. -ara cambiar el comportamiento por de#ecto se debe
invocar al m%todo setDe3aultClose8peration/0!
I!A JE5(5>BK( DE C?(-E-
II!A ,LT8D8-
(T5IBBT8-
static int $M5"N@)N!L@/$ La salida por de#ecto al cerrar una ventana.
C8N-T5BCT85E-
&0rame>? !rea un nuevo #rame que es inicialmente visible
&0rame>/tring t6tulo? !rea un nuevo #rame con el t6tulo indicado como par(metro
,LT8D8-
"ipo de retorno :%todo Descripcin
!ontainer get!ontent-ane>? 7etorna el ob+eto content-ane.
int getDe#ault!lose@peration>?
7etorna la operacin que ocurre cuando el usuario hace la operacin
de cerrar la ventana del #rame
+:enu.ar get&:enu.ar>? 7etorna el men'.ar establecido en el #rame
Loid remove>!omponent comp?
7emueve el componente indicado como par(metro de %ste
contenedor
Loid
set!ontent-ane>!ontainer
content-ane?
$stablece la propiedad del content-ane
Loid
setDe#ault!lose@peration>int
operation?
$stablece la operacin que suceder( por de#ecto cuando el usuario
cierra la ventana
Loid set&:enu.ar>&:enu.ar menu? $stablece la barra de men' para el #rame
Loid setLayout>Layout:anager layout?
-or de#ecto, la distribucin de los paneles de %ste componente no
debe cambiarseP en su lugar, deber6a ser cambiada la distribucin de
su content-ane que generalmente es un panel.
III!A 8T58- ,LT8D8-
'ara Colocar el nom*re en la ventana del J%rame:
, this.set"itle>V"6tulo del #rameW?P
'ara ma)imiMar la ventana de J%rame
, this.set$xtended/tate>this.:AM5:5b$DN.@"F?P
'ara desactivar el *ot+n de cierre del J%rame
, this.setDe#ault!lose@peration><?
, this.setDe#ault!lose@peration>this.D@N)@"F5)RN@)N!L@/$?P
'ara .acer visi*le al 3rame
, t2is#setBisible(true)&
8B-E5C(CI8N: "odos estos m%todos se deben invocar en el constructor del &0rameP es decir:
public Principal()

panDcces , ne/ panDcceso()&


admin , ne/ Ddministrador()&
listadoDlu , ne/ 4istaDlumnos()&
initComponents()&
0ec2a , ne/ 6ec2a()&
--Ma*imiMar la ventana del G6rame
t2is#set)*tendedState(t2is#MDKAMAT);?%@5J)&
--)vita :ue se cierrre el 0rame con el botIn salir es:uivale a
t2is#set;e0aultClose@peration(8)&
t2is#set;e0aultClose@peration(t2is#;@?N@5JANU?@N?C4@S))&
t2is#set5itle($SAS5)MD AN5)U=D4 ;) N@5DS N SAN$)&
lbl6ec2a#set5e*t($$ P 0ec2a#iniciarComponentes())&
tr"

CAManager#set4ookDnd6eel(CAManager#getS"stem4ookDnd6eelClassName())&
(
catc2 ()*ception e)

e#printStack5race()&
(
(
IC!A EJE,'?8-
,. #ise,e una aplicaci-n con dos .rames/ uno de bienenida y otro de despedida actiados a
tras de bot-nes como se muestra a continuaci-n 0
%uente: http:11+avax<H,,.blogspot.com1;<<U1,<1clase3+#rame.html
Java A des.a*ilitar ma)imiMar en 3rame
public Login>? Y
init!omponents>?P
set/ize>D<<,B<<?P
this.set7esizable>#alse?P11 esto hara que el #rame no se pueda maximizar
Z
%uente: http:11EEE.laEebdelprogramador.com1#oros1&ava1UB<<UH3deshabilitarNmaximizarNenN#rame.html
J3rame sin el *oton de cerrar, ma)imiMar y minimiMar
0acil y sencillo
set4ndecorated>true?P
get7oot-ane>?.setGindoEDecoration/tyle>&7oot-ane.)@)$?P
se le pone al #rame y listo
0uente: http:11s2uarch.blogspot.com1;<,,1<B1+#rame3sin3el3botn3de3cerrar3maximizar.html
?imitar caracteres en un JTe)t3ield
-or diversas razones tenemos la necesidad de evitar que un usuario ingrese ya sea n'meros, letras,
ciertos caracteres especiales o m(s de un n'mero m(ximo de caracteres.
-ara lograr estos ob+etivos voy a mostrar algunos de e+emplos de clases que implementan algun tipo de
limitacin en los datos ingresados.
-rimer e+emplo: Limitar el +"ext0ield a solo letras y espacios.
)ombre de la clase: Limitador/oloLetras.+ava
import java*#s/ing#te*t#DttributeSet&
import java*#s/ing#te*t#%ad4ocation)*ception&
import java*#s/ing#te*t#Plain;ocument&

/**
* @author Hernn
*/
public class 4imitadorSolo4etras extends Plain;ocument
public void insertString(int arg8< String arg1< DttributeSet arg!) throws
ad4ocation)*ception

for (int i,8&iVarg1#lengt2()&iPP)
if (EC2aracter#is4etter(arg1#c2arDt(i)) SS E
C2aracter#isSpaceC2ar(arg1#c2arDt(i)))
return&
super#insertString(arg8< arg1< arg!)&
(
(
:odo de uso: supongamos que tenemos un &"ext0ield llamado txt)ombres, entonces lo que tenemos
que hacer es:
t*tNombres#set;ocument(new 4imitadorSolo4etras())&
/egundo $+emplo: Limitar el +"ext0ield a solo n'meros.
)ombre de la clase: Limitador/olo)umeros.+ava
import java*#s/ing#te*t#DttributeSet&
import java*#s/ing#te*t#%ad4ocation)*ception&
import java*#s/ing#te*t#Plain;ocument&

/**
* @author Hernn
*/
public class 4imitadorSolo4etras extends Plain;ocument
public void insertString(int arg8< String arg1< DttributeSet arg!) throws
ad4ocation)*ception

for (int i,8&iVarg1#lengt2()&iPP)
if (EC2aracter#is4etter(arg1#c2arDt(i)) SS
C2aracter#isSpaceC2ar(arg1#c2arDt(i)))
return&
super#insertString(arg8< arg1< arg!)&
(
(
:odo de uso: supongamos que tenemos un &"ext0ield llamado txt)ombres, entonces lo que tenemos
que hacer es:
t*t;NA#set;ocument(new 4imitadorSoloNumeros())&
"ercer $+emplo: Limitar el +"ext0ield a solo letras y espacios y adem(s limitar la cantidad de caracteres
ingresados.
)ombre de la clase: Limitador/oloLetras)ro:ax.+ava
import java*#s/ing#G5e*t6ield&
import java*#s/ing#te*t#DttributeSet&
import java*#s/ing#te*t#%ad4ocation)*ception&
import java*#s/ing#te*t#Plain;ocument&

/**
* @author Hernn
*/
public class 4imitadorSolo4etrasNroMa* extends Plain;ocument

private G5e*t6ield miG5e*t6ield&
private int nroMa*Caracteres&
public 4imitadorSolo4etrasNroMa*(G5e*t6ield mijte*t< int nroMa*Caract)
miG5e*t6ield,mijte*t&
nroMa*Caracteres,nroMa*Caract&
(
public void insertString(int arg8< String arg1< DttributeSet arg!) throws
%ad4ocation)*ception

for (int i,8&iVarg1#lengt2()&iPP)
if ((EC2aracter#is4etter(arg1#c2arDt(i)) SS E
C2aracter#isSpaceC2ar(arg1#c2arDt(i)))WW(miG5e*t6ield#get5e*t()#lengt2()
Parg1#lengt2())XnroMa*Caracteres)
return&
super#insertString(arg8< arg1< arg!)&
(
(
:odo de uso: supongamos que tenemos un &"ext0ield llamado txtApellidos, entonces lo que tenemos
que hacer es:
t*tDpellidos#set;ocument(new 4imitadorSolo4etrasNroMa*(t*tDpellidos<'8))&
!uarto $+emplo >a pedido de trancelex?: Limitar el +"ext0ield a solo letras y espacios, y adem(s cuando
se llegue al n'mero maximo pasar al prximo campo.
)ombre de la clase: Limitador/oloLetras)ro:axL;.+ava
import java*#s/ing#G5e*t6ield&
import java*#s/ing#te*t#DttributeSet&
import java*#s/ing#te*t#%ad4ocation)*ception&
import java*#s/ing#te*t#Plain;ocument&

/**
* @author Hernn
*/
public class 4imitadorSolo4etrasNroMa*B! extends Plain;ocument

private G5e*t6ield miG5e*t6ield&
private int nroMa*Caracteres&
public 4imitadorSolo4etrasNroMa*B!(G5e*t6ield mijte*t< int nroMa*Caract)
miG5e*t6ield,mijte*t&
nroMa*Caracteres,nroMa*Caract&
(
public void insertString(int arg8< String arg1< DttributeSet arg!) throws
ad4ocation)*ception
for (int i,8&iVarg1#lengt2()&iPP)
if ((miG5e*t6ield#get5e*t()#lengt2()Parg1#lengt2())XnroMa*Caracteres)
miG5e*t6ield#trans0er6ocus()&
return&
(else if (EC2aracter#is4etter(arg1#c2arDt(i)) SS E
C2aracter#isSpaceC2ar(arg1#c2arDt(i)))
return&
(
super#insertString(arg8< arg1< arg!)&
(
(
:odo de uso: supongamos que tenemos un &"ext0ield llamado txtApellidos, entonces lo que tenemos
que hacer es:
t*tDpellidos#set;ocument(new 4imitadorSolo4etrasNroMa*B!(t*tDpellidos<'8))&
%uente: http:11EEE.divideandconquer.com.ar1;<<Q1,<1limitar3caracteres3en3un3+text#ield1
I,aneras de conectar net*eans con postgre->?J
La unica manera que conozco de conectar netbeans>+ava? con postgre/Ql es de los siguientes modos:
,odo #
public static java#s:l#Connection cone*ion&
[###]
C=4?bd , $jdbc:postgres:l:--1Y!#19Z#8#!+!:+7'!-obras$&
usuario , $user$&
contrasinal , $pass/ord$&
Class#0orName($org#postgres:l#;river$)#ne/Anstance()&
Properties props , ne/ Properties()&
props#setPropert"($user$< usuario)&
props#setPropert"($pass/ord$< contrasinal)&
--! opciInes: :ue vienen siendo lo mismo
1# cone*ion , ;riverManager#getConnection(C=4?bd< props)&
!# cone*ion , ;riverManager#getConnection(C=4?bd< usuario< contrasinal)&
,odo 9
public static java#s:l#Connection cone*ion&
[###]
i0 (pool ,, null)
pool , ne/ Gdbc'Pooling;ataSource()&
pool#setPortNumber(+7'!)&
pool#setCser($usuario$)&
pool#setPass/ord($pass/ord$)&
pool#setMa*Connections(188)&
pool#setServerName($1Y!#19!#8#!+!$)&
pool#set;atabaseName($obras$)&
(
cone*ion , pool#getConnection()&
pool#set4ogHriter(ne/ java#io#PrintHriter(S"stem#out))&
--Commit a true
cone*ion#setDutoCommit(true)&
%uente: http:11EEE.#orosdelEeb.com1#D=1maneras3conectar3netbeans3con3postgresql3Q;=BD<1
Cam*iando el icono de los J%rame
$sta es una #orma r(pida y sencilla de cambiar el icono de los &0rame que viene por de#ecto
desarrollando aplicaciones &ava, con algo de cdigo. /olo hay que tener en cuenta la ruta del archivo de
imagen.
this.set5con5mage >neE 5mage5con>get!lass>?.get7esource>WrutaNimagen1imagen.gi#W??.get5mage>??P
$n mi caso yo cree un paquete el cual contiene mis imagenes que deseo tener en mi aplicacion,
supongamos que el paquete se llame Nmipa1uete!imagenesO, entonces la ruta seria asi:
this.set5con5mage >neE 5mage5con>get!lass>?.get7esource>W1mipaquete1imagenes1imagen.gi#W??.get5mage>??P
$spero les sirva O?.
%uente: http:11nachxs.blogsome.com1;<<H1,<1;=1cambiando3el3icono3de3los3+#rame1
Java P (@TD-&ing P Cam*iar el icono de una ventana
Al traba+ar con ventanas en &ava, notaremos que estas llevan por de#ecto el icono con el s6mbolo de
&ava el cual es una taza de ca#%.
)o es #ea la taza de ca#%, pero en un &0rame podemos cambiarlo a nuestro gusto, y aunque no podemos
hacer lo mismo en un &Dialog este heredara el icono de su ventana padre. 5ncluso podr6amos cambiar el
icono que usa &ava por de#ecto para sus aplicaciones, aunque claro que seria algo dr(stico.
Cam*iando el icono en nuestro J%rame
-ara personalizar nuestro icono en un &0rame utilizaremos el m%todo void set5con5mage>5mage image?,
veamos un simple e+emplo:
package programa&
import java#a/t#Amage&
import java*#s/ing#AmageAcon&
import java*#s/ing#G6rame&
class Hindo/;emo e*tends G6rame
public Hindo/;emo()
super($Bentana personaliMada$)&
set;e0aultClose@peration(G6rame#)KA5?@N?C4@S))&
Amage icon , ne/
AmageAcon(getClass()#get=esource($-programa-imagenes-love#png$))#getAmage()&
setAconAmage(icon)&
setSiMe('+8< '+8)&
set4ocation=elative5o(null)&
setBisible(true)&
(
public static void main(String[] args)
ne/ Hindo/;emo()&
(
(
!omo se puede ver tengo una clase en el paquete programa y tengo una imagen llamada loe con
extensin 1234 en el paquete programa.imagenes.
$n el cdigo que hemos visto prestemos atencin sobre:
Amage icon , ne/
AmageAcon(getClass()#get=esource($-programa-imagenes-love#png$))#getAmage()&
setAconAmage(icon)&
Al m%todo void set5con5mage>? hay que pasarle nuestra imagen como argumento, utilizamos neE
5mage5con>47L location?.get5mage>? donde el argumento location lo obtenemos a trav%s del m%todo
get!lass>?.get7esource>/tring name? que nos devuelve un 47L absoluto del recurso que especi#icamos
como /tring. Los tipos de archivo que podemos utilizar son R50, &-$R y-)R >este 'ltimo desde &;/$
,.B? pero no pueden ser 5!@ o .:-. $n caso de utilizar un tipo de archivo no valido el icono
predeterminado simplemente no cambiara y seguiremos viendo la taza de ca#%, y en caso de que el
archivo no se encontrase el m%todo retornar6a null y la &L: nos arro+ar6a una )ull-ointer$xception.
"anto &Dialogs como &5nternal0rames que tengan este &0rame como padre llevar6an el mismo icono.
Leamos como queda ahora nuestra ventana:
como alternativa al cdigo anterior tenemos otra #orma muy similar de lograr el mismo resultado:
5mage icon ,
"ool2it.getDe#ault"ool2it>?.get5mage>get!lass>?.get7esource>I1programa1imagenes1love.pngI??P
set5con5mage>icon?P
Desde un editor visual
"raba+ando con editores visuales las cosas pueden ser di#erentes, sin duda el caso mas especial es el
editor visual de NetBeans que veremos a continuacin.
NetBeans P
$n el caso que estemos traba+ando con el editor visual de )et.eans >:atisse? no podemos modi#icar
manualmente el cdigo generado, as6 que seleccionamos el &0rame en la pesta*a V5nspectorW y luego en
la pesta*a de propiedades >V&0rame c -ropertiesV? buscamos la propiedad Vicon5mageW seleccionando
donde se ve a continuacin:
/e nos abrir( una ventana con nuevas opcines en la cual seleccionamos V!ustom !odeW y como
veremos tenemos un campo de texto donde podremos escribir nuestro cdigo para aplicar el m%todo
void set5mage5con>?. /iguiendo con mi e+emplo donde tengo el archivo de imagen loe1png en el
paquete programa.imagenes el cdigo a introducir ser6a:
ne/ AmageAcon(getClass()#get=esource($-programa-imagenes-love#png$))#getAmage()
Al presionar V@2W el editor visual introducir( nuestro cdigo donde debe.
%uente: http:11dar2byteblog.Eordpress.com1;<,,1<,1,D1+ava3aEtsEing3cambiar3el3icono3de3una3ventana1
8*tener tamaQoDdimensi+n de la pantalla en Java
-ara obtener el Itama*oI de la pantalla, asi como otros atributos como la IresolucionI en +ava, se hace
uso de la clase abstracta "ool2it.$sta clase nos otorga los metodos get-creen-iMe/0 que retona las
dimensiones de pantalla en pixeles y get-creen5esolution/0, que retorna un valor en --- >puntos por
pulgada?.
import java#a/t#;imension&
import java#a/t#5oolkit&
-..
. F/eb 2ttp:--jcNmouse#blogspot#com-
. Faut2or Mouse
.-
public class Main
public static void main(String[] args)
-- 5@;@ code application logic 2ere
--@btiene el tamaLo de la pantalla
;imension d , 5oolkit#get;e0ault5oolkit()#getScreenSiMe()&
--obtiene la resolucion de la pantalla en PPP (Puntos por pulgada)
int sr , 5oolkit#get;e0ault5oolkit()#getScreen=esolution()&
--muestra la in0ormacion por la consola de java
S"stem#out#println($5amaLo de pantalla: $ P d#/idt2 P $*$ P d#2eig2t P $<
de0iniciIn: $ P sr P $ ppp$)&
(
(
%uente: http:11+c3mouse.blogspot.com1;<,<1<;1obtener3tamanodimension3de3la3pantalla.html
Convertir n$meros a letras en java /Tipo %actura, c.e1ue, reci*o0
!uando se realizan traba+os donde se necesita mostrar al cliente un determinado monto de dinero, tipo
#actura, recibo, cheque, etc, el cliente desea ver el monto en numeral asi como en literal.
-or e+emplo:
=""=,<E R oc.ocientos setenta y siete mil oc.ocientos sesenta y seis <ED#EE Bolivianos
-ues bien, la siguiente clase a la que llame NumeroGaG?etra!java realiza +ustamente esa operacion,
esta extracomentada y trate de hacerla lo mas entendible posible.
La logica que se utliza es la siguiente:
La clase recibe un numero e+. #9:;<"=S,<E valida este numero, si el numero no es valido devuelve
NB??
/i el numero es valido segun sea este unidad, decena, centena, mil o millon, va clasi#icando el numero
y llama a sus procedimientos correspondientes, estas #unciones, son utilizadas en cascada, osea: nuestro
numero de e+emplo es #9:;<"=S,<E, entonces separa en #9:;<"=S y <E, siendo =< nuestra parte
decimal.
$l numero entero, #9:;<"=S es clasi#icado O es millon, entonces llama a la #uncion get:illones, esta
#uncion a la vez divide el numero en miles y millones #9:;<"=S O #9: ;<"=U donde ,;B
corresponde a millones y D=9HQU a miles entonces la misma #uncion llama a las #unciones get,iles,
getCentenas, getBnidades, segun corresponda, al igual que la #uncion get:iles, hace uso de
get!entenas, getDecenas get4nidades, lo mismo get!entenas, hace uso de getDececas, get4nidades.
$spero se entienda :?
import java#util#rege*#Pattern&
-..
. F/eb 2ttp:--jcNmouse#blogspot#com-
. Faut2or Mouse
.-
public class Numero?a?4etra
private 0inal String[] CNA;D;)S , $$< $un $< $dos $< $tres $< $cuatro $< $cinco
$< $seis $< $siete $< $oc2o $< $nueve $(&
private 0inal String[] ;)C)NDS , $dieM $< $once $< $doce $< $trece $< $catorce
$< $:uince $< $dieciseis $<
$diecisiete $< $diecioc2o $< $diecinueve$< $veinte $< $treinta $< $cuarenta $<
$cincuenta $< $sesenta $< $setenta $< $oc2enta $< $noventa $(&
private 0inal String[] C)N5)NDS , $$< $ciento $< $doscientos $< $trecientos $<
$cuatrocientos $< $:uinientos $< $seiscientos $<
$setecientos $< $oc2ocientos $< $novecientos $(&
public Numero?a?4etra()
(
public String Convertir(String numero< boolean ma"usculas)
String literal , $$&
String parte?decimal&
--si el numero utiliMa (#) en lugar de (<) NX se reemplaMa
numero , numero#replace($#$< $<$)&
--si el numero no tiene parte decimal< se le agrega <88
i0(numero#inde*@0($<$),,N1)
numero , numero P $<88$&
(
--se valida 0ormato de entrada NX 8<88 " YYY YYY YYY<88
i0 (Pattern#matc2es($[[d1<Y(<[[d1<!($< numero))
--se divide el numero 8888888<88 NX entero " decimal
String Num[] , numero#split($<$)&
--de da 0ormato al numero decimal
parte?decimal , Num[1] P $-188 %olivianos#$&
--se convierte el numero a literal
i0 (Anteger#parseAnt(Num[8]) ,, 8) --si el valor es cero
literal , $cero $&
(else i0 (Anteger#parseAnt(Num[8]) X YYYYYY) --si es millon
literal , getMillones(Num[8])&
(else i0 (Anteger#parseAnt(Num[8]) X YYY) --si es miles
literal , getMiles(Num[8])&
(else i0 (Anteger#parseAnt(Num[8]) X YY) --si es centena
literal , getCentenas(Num[8])&
(else i0 (Anteger#parseAnt(Num[8]) X Y) --si es decena
literal , get;ecenas(Num[8])&
(else --sino unidades NX Y
literal , getCnidades(Num[8])&
(
--devuelve el resultado en ma"usculas o minusculas
i0 (ma"usculas)
return (literal P parte?decimal)#toCpperCase()&
(else
return (literal P parte?decimal)&
(
(else --error< no se puede convertir
return literal , null&
(
(
-. 0unciones para convertir los numeros a literales .-
private String getCnidades(String numero) -- 1 N Y
--si tuviera algun 8 antes se lo :uita NX 8Y , Y o 88Y,Y
String num , numero#substring(numero#lengt2() N 1)&
return CNA;D;)S[Anteger#parseAnt(num)]&
(
private String get;ecenas(String num) -- YY
int n , Anteger#parseAnt(num)&
i0 (n V 18) --para casos como NX 81 N 8Y
return getCnidades(num)&
(else i0 (n X 1Y) --para !8###YY
String u , getCnidades(num)&
i0 (u#e:uals($$)) --para !8<'8<78<+8<98<\8<Z8<Y8
return ;)C)NDS[Anteger#parseAnt(num#substring(8< 1)) P Z]&
(else
return ;)C)NDS[Anteger#parseAnt(num#substring(8< 1)) P Z] P $" $ P u&
(
(else --numeros entre 11 " 1Y
return ;)C)NDS[n N 18]&
(
(
private String getCentenas(String num) -- YYY o 8YY
i0( Anteger#parseAnt(num)XYY )--es centena
i0 (Anteger#parseAnt(num) ,, 188) --caso especial
return $ cien $&
(else
return C)N5)NDS[Anteger#parseAnt(num#substring(8< 1))] P
get;ecenas(num#substring(1))&
(
(else--por )j# 8YY
--se :uita el 8 antes de convertir a decenas
return get;ecenas(Anteger#parseAnt(num)P$$)&
(
(
private String getMiles(String numero) -- YYY YYY
--obtiene las centenas
String c , numero#substring(numero#lengt2() N ')&
--obtiene los miles
String m , numero#substring(8< numero#lengt2() N ')&
String n,$$&
--se comprueba :ue miles tenga valor entero
i0 (Anteger#parseAnt(m) X 8)
n , getCentenas(m)&
return n P $mil $ P getCentenas(c)&
(else
return $$ P getCentenas(c)&
(
(
private String getMillones(String numero) --888 888 888
--se obtiene los miles
String miles , numero#substring(numero#lengt2() N 9)&
--se obtiene los millones
String millon , numero#substring(8< numero#lengt2() N 9)&
String n , $$&
i0(millon#lengt2()X1)
n , getCentenas(millon) P $millones $&
(else
n , getCnidades(millon) P $millon $&
(
return n P getMiles(miles)&
(
(
$sta clase, recibe un numero de <,<< a UUUUUUUUU.<< en #ormato /tring, el separador decimal puede ser
un punto >.? o una coma >,?, ademas tiene un parametro booleano ImayusculasI el cual sea verdadero
>true? o #also >#alse?, retorna el resultado en mayusculas o minusculas, esta clase no acepta numeros
negativos ni tampoco numero mayores o iguales a mil millones, aunque claro trate de escribir esta clase
para que sea #acilmente comprensible y asi pueda ser ampliado o modi#icado segun sus necesidades.
La #orma de llamara a esta clase es:
Numero?a?4etra Num4etra , ne/ Numero?a?4etra()&
String numero , $!8887#\8$&
S"stem#out#println( numero P $ literal , $ P Num4etra#Convertir(numero<true))&
y probando para un rango mayor de numeros tenemos como resultado:
'+!Z!!<+8 literal , 5=)CA)N5@S CANCC)N5D > ;@S MA4 @CJ@CA)N5@S B)AN5) > ;@S +8-188
%@4ABADN@S#
'\8<+8 literal , trecientos setenta +8-188 %olivianos#
\7ZZ'<+8 literal , S)5)N5D > CCD5=@ MA4 @CJ@CA)N5@S @CJ)N5D > 5=)S +8-188
%@4ABADN@S#
'+7Z81<+8 literal , trecientos cincuenta " cuatro mil oc2ocientos un +8-188
%olivianos#
1!<+8 literal , ;@C) +8-188 %@4ABADN@S#
+11Z1!898<+8 literal , 3CANA)N5@S @NC) MA44@N)S @CJ@CA)N5@S ;@C) MA4 S)S)N5D +8-188
%@4ABADN@S#
!Z+'97<+8 literal , doscientos oc2enta " cinco mil trecientos sesenta " cuatro
+8-188 %olivianos#
Y\<+8 literal , N@B)N5D > SA)5) +8-188 %@4ABADN@S#
ZZ!<+8 literal , @CJ@CA)N5@S @CJ)N5D > ;@S +8-188 %@4ABADN@S#
!Z<+8 literal , B)AN5) > @CJ@ +8-188 %@4ABADN@S#
'Y+'9!Z9Y<+8 literal , 5=)CA)N5@S N@B)N5D > CANC@ MA44@N)S 5=)CA)N5@S S)S)N5D > ;@S
MA4 @CJ@CA)N5@S S)S)N5D > NC)B) +8-188 %@4ABADN@S#
9Z\911<+8 literal , S)ASCA)N5@S @CJ)N5D > SA)5) MA4 S)ASCA)N5@S @NC) +8-188
%@4ABADN@S#
79<+8 literal , CCD=)N5D > S)AS +8-188 %@4ABADN@S#
'Y79!+<+8 literal , trecientos noventa " cuatro mil seiscientos veinte " cinco
+8-188 %olivianos#
9Z99\1Z\1<+8 literal , seiscientos oc2enta " seis millones seiscientos setenta " un
mil oc2ocientos setenta " un +8-188 %olivianos#
Z98!''87\<+8 literal , @CJ@CA)N5@S S)S)N5D MA44@N)S ;@SCA)N5@S 5=)AN5D > 5=)S MA4
CCD=)N5D > SA)5) +8-188 %@4ABADN@S#
9+97\\1+Y<+8 literal , S)ASCA)N5@S CANCC)N5D > S)AS MA44@N)S CCD5=@CA)N5@S S)5)N5D
> SA)5) MA4 CA)N5@ CANCC)N5D > NC)B) +8-188 %@4ABADN@S#
YY8'\<+8 literal , N@B)N5D > NC)B) MA4 5=)AN5D > SA)5) +8-188 %@4ABADN@S#
1+Y1Z8<+8 literal , ciento cincuenta " nueve mil ciento oc2enta +8-188 %olivianos#
9YYY'<+8 literal , S)S)N5D > NC)B) MA4 N@B)CA)N5@S N@B)N5D > 5=)S +8-188
%@4ABADN@S#
\9<+8 literal , setenta " seis +8-188 %olivianos#
\7<+8 literal , setenta " cuatro +8-188 %olivianos#
7<+8 literal , cuatro +8-188 %olivianos#
+\!'+9<+8 literal , 3CANA)N5@S S)5)N5D > ;@S MA4 5=)CA)N5@S CANCC)N5D > S)AS +8-188
%@4ABADN@S#
Z+<+8 literal , @CJ)N5D > CANC@ +8-188 %@4ABADN@S#
9\ZY\\887<+8 literal , seiscientos setenta " oc2o millones novecientos setenta "
siete mil cuatro +8-188 %olivianos#
'11!\+<+8 literal , 5=)CA)N5@S @NC) MA4 ;@SCA)N5@S S)5)N5D > CANC@ +8-188
%@4ABADN@S#
ZZZ<+8 literal , @CJ@CA)N5@S @CJ)N5D > @CJ@ +8-188 %@4ABADN@S#
Z91\781!+<+8 literal , @CJ@CA)N5@S S)S)N5D > CN MA44@N)S S)5)CA)N5@S CCD=)N5D MA4
CA)N5@ B)AN5) > CANC@ +8-188 %@4ABADN@S#
'\8!79<+8 literal , trecientos setenta mil doscientos cuarenta " seis +8-188
%olivianos#
YZ9777<+8 literal , novecientos oc2enta " seis mil cuatrocientos cuarenta " cuatro
+8-188 %olivianos#
!8!<+8 literal , ;@SCA)N5@S ;@S +8-188 %@4ABADN@S#
78\!Y+<+8 literal , CCD5=@CA)N5@S SA)5) MA4 ;@SCA)N5@S N@B)N5D > CANC@ +8-188
%@4ABADN@S#
+!!<+8 literal , 3CANA)N5@S B)AN5) > ;@S +8-188 %@4ABADN@S#
'\ZZ\Z9+'<+8 literal , 5=)CA)N5@S S)5)N5D > @CJ@ MA44@N)S @CJ@CA)N5@S S)5)N5D >
@CJ@ MA4 S)ASCA)N5@S CANCC)N5D > 5=)S +8-188 %@4ABADN@S#
\1!17!<+8 literal , S)5)CA)N5@S ;@C) MA4 CA)N5@ CCD=)N5D > ;@S +8-188 %@4ABADN@S#
+ZZ\'\8\+<+8 literal , 3CANA)N5@S @CJ)N5D > @CJ@ MA44@N)S S)5)CA)N5@S 5=)AN5D >
SA)5) MA4 S)5)N5D > CANC@ +8-188 %@4ABADN@S#
Y79+78<+8 literal , novecientos cuarenta " seis mil :uinientos cuarenta +8-188
%olivianos#
'799\7+\<+8 literal , treinta " cuatro millones seiscientos sesenta " siete mil
cuatrocientos cincuenta " siete +8-188 %olivianos#
'Y1Z\7<+8 literal , trecientos noventa " un mil oc2ocientos setenta " cuatro +8-188
%olivianos#
\7+<+8 literal , S)5)CA)N5@S CCD=)N5D > CANC@ +8-188 %@4ABADN@S#
9\88!7<+8 literal , seiscientos setenta mil veinte " cuatro +8-188 %olivianos#
\8'8!Y<+8 literal , setecientos tres mil veinte " nueve +8-188 %olivianos#
\7+<+8 literal , setecientos cuarenta " cinco +8-188 %olivianos#
Y\+71+++Z<+8 literal , N@B)CA)N5@S S)5)N5D > CANC@ MA44@N)S CCD5=@CA)N5@S 3CANC)
MA4 3CANA)N5@S CANCC)N5D > @CJ@ +8-188 %@4ABADN@S#
!Y7<+8 literal , ;@SCA)N5@S N@B)N5D > CCD5=@ +8-188 %@4ABADN@S#
++Y\Y7<+8 literal , :uinientos cincuenta " nueve mil setecientos noventa " cuatro
+8-188 %olivianos#
!'<+8 literal , veinte " tres +8-188 %olivianos#
+Z9''+<+8 literal , 3CANA)N5@S @CJ)N5D > S)AS MA4 5=)CA)N5@S 5=)AN5D > CANC@ +8-188
%@4ABADN@S#
171\7Y81<+8 literal , catorce millones ciento setenta " cuatro mil novecientos un
+8-188 %olivianos#
+!Y++188!<+8 literal , :uinientos veinte " nueve millones :uinientos cincuenta " un
mil dos +8-188 %olivianos#
Y'8<+8 literal , N@B)CA)N5@S 5=)AN5D +8-188 %@4ABADN@S#
+Z191\<+8 literal , :uinientos oc2enta " un mil seiscientos diecisiete +8-188
%olivianos#
77<+8 literal , CCD=)N5D > CCD5=@ +8-188 %@4ABADN@S#
\!\'8!Z87<+8 literal , S)5)CA)N5@S B)AN5) > SA)5) MA44@N)S 5=)CA)N5@S ;@S MA4
@CJ@CA)N5@S CCD5=@ +8-188 %@4ABADN@S#
99<+8 literal , S)S)N5D > S)AS +8-188 %@4ABADN@S#
'791Z'YZ<+8 literal , 5=)AN5D > CCD5=@ MA44@N)S S)ASCA)N5@S ;A)CA@CJ@ MA4
5=)CA)N5@S N@B)N5D > @CJ@ +8-188 %@4ABADN@S#
7\\'+78\Y<+8 literal , CCD5=@CA)N5@S S)5)N5D > SA)5) MA44@N)S 5=)CA)N5@S CANCC)N5D
> CCD5=@ MA4 S)5)N5D > NC)B) +8-188 %@4ABADN@S#
Z1'<+8 literal , @CJ@CA)N5@S 5=)C) +8-188 %@4ABADN@S#
9'7ZZZ!\8<+8 literal , S)ASCA)N5@S 5=)AN5D > CCD5=@ MA44@N)S @CJ@CA)N5@S @CJ)N5D >
@CJ@ MA4 ;@SCA)N5@S S)5)N5D +8-188 %@4ABADN@S#
!1Y+77<+8 literal , ;@SCA)N5@S ;A)CANC)B)MA4 3CANA)N5@S CCD=)N5D > CCD5=@ +8-188
%@4ABADN@S#
+1<+8 literal , cincuenta " un +8-188 %olivianos#
7'+978<+8 literal , CCD5=@CA)N5@S 5=)AN5D > CANC@ MA4 S)ASCA)N5@S CCD=)N5D +8-188
%@4ABADN@S#
++\ZY9<+8 literal , :uinientos cincuenta " siete mil oc2ocientos noventa " seis
+8-188 %olivianos#
'9<+8 literal , 5=)AN5D > S)AS +8-188 %@4ABADN@S#
\18<+8 literal , S)5)CA)N5@S ;A)T +8-188 %@4ABADN@S#
Z+8<+8 literal , @CJ@CA)N5@S CANCC)N5D +8-188 %@4ABADN@S#
!'87YZZ77<+8 literal , doscientos treinta millones cuatrocientos noventa " oc2o mil
oc2ocientos cuarenta " cuatro +8-188 %olivianos#
187!Y9<+8 literal , ciento cuatro mil doscientos noventa " seis +8-188 %olivianos#
1<+8 literal , CN +8-188 %@4ABADN@S#
N8188188<\8 literal , null
88'<\8 literal , tres \8-188 %olivianos#
!Z<\7+ literal , null
8<+ literal , C)=@ +-188 %@4ABADN@S#
YYYYYYYYY literal , N@B)CA)N5@S N@B)N5D > NC)B) MA44@N)S N@B)CA)N5@S N@B)N5D >
NC)B) MA4 N@B)CA)N5@S N@B)N5D > NC)B) 88-188 %@4ABADN@S#
YYYYYYYYYY literal , null
7ZZ8'\\8 literal , cuarenta " oc2o millones oc2ocientos tres mil setecientos
setenta 88-188 %olivianos#
!8887#\8 literal , B)AN5) MA4 CCD5=@ \8-188 %@4ABADN@S#
0uente: http:11+c3mouse.blogspot.com1;<,,1<D1convertir3numeros3letras3en3+ava3tipo.html
Datos en un jtexfield
,ay$sculas y minsculas en jtextfield
APara mayusculas
private void t*tNombre5ipoMantenimientoRe"=eleased(java#a/t#event#Re")vent evt)
t*tNombre5ipoMantenimiento#set5e*t(t*tNombre5ipoMantenimiento#get5e*t()#toCpperCase
())&
(
'ara minusculas
private void t*tNombre5ipoMantenimientoRe"=eleased(java#a/t#event#Re")vent evt)
t*tNombre5ipoMantenimiento#set5e*t(t*tNombre5ipoMantenimiento#get5e*t()#to4o/erCase
())&
(
No permitir nmeros
private void t*tNombreCargoRe"5"ped(java#a/t#event#Re")vent evt)
-- lee la tecla presionada
int k,(int)evt#getRe"C2ar()&
-- c2e:uea en DSCAA si esta entre los numeros de las teclas : son numeros
i0 (k X 7\ SS k V +Z)
evt#setRe"C2ar((c2ar)Re")vent#BR?C4)D=)&
G@ptionPane#s2o/Message;ialog(null<$No puede ingresar numerosEEE$<$Bentana
)rror ;atos$<G@ptionPane#)==@=?M)SSDU))&
(
-- si la tecla presionada es enter trans0iere el 0oco
i0(k,,18)
t*tNombreCargo#trans0er6ocus()&
(
(
0uente: http:11EEE.#orosdelEeb.com1#D=1auxilio3extraer3datos3+table3+text#ield39;D<991
jte)t%ield solo numerico
.ueno aqui te de+o un e+mplo lo debes poner en el $vento Aey"yped del +text#ield
private void t*tCompraRe"5"ped(java#a/t#event#Re")vent evt)
int k,(int)evt#getRe"C2ar()&
i0 (k X, Y\ SS k V, 1!! WW kX,9+ SS kV,Y8)
evt#setRe"C2ar((c2ar)Re")vent#BR?C4)D=)&
G@ptionPane#s2o/Message;ialog(null<$No puede ingresar letrasEEE$<$Bentana )rror
;atos$<G@ptionPane#)==@=?M)SSDU))&
(
i0(k,,!71 WW k,,!8Y)
evt#setRe"C2ar((c2ar)Re")vent#BR?C4)D=)&
G@ptionPane#s2o/Message;ialog(null<$No puede ingresar letrasEEE$<$Bentana )rror
;atos$<G@ptionPane#)==@=?M)SSDU))&
(
i0(k,,18)
t*tCompra#trans0er6ocus()&
(
(
Fola :as vale tarde que nunca aqui hay otro e+emplo que en mi programa #unciona al ,<<d
G5e*t6ieldt01 , ne/ G5e*t6ield()& --tambien 0unciona con G6ormatted5e*t6ield()&
--codigo para limitar a :ue solo introdusca N]meros
t01#addRe"4istener(ne/ Re"Ddapter()
public void ke"5"ped(Re")vent e)
c2ar c , e#getRe"C2ar()&
i0 (E(C2aracter#is;igit(c) WW
(c ,, Re")vent#BR?%DCR?SPDC)) WW
(c ,, Re")vent#BR?;)4)5))))
get5oolkit()#beep()&
e#consume()&
(
(
()&
0uente: http:11EEE.#orosdelEeb.com1#D=1+text#ield3solo3numerico3=H=;QU1
pasar de un jte)t3ield a otro pulsando enter
import java*#s/ing#.&
import java#a/t#event#.&
public class )jemplo e*tends G6rame implements Dction4istener
public GPane panel&
public G5e*t6ield campo1&
public G5e*t6ield campo!&
public )jemplo()
panel , ne/ GPanel(ne/ 6lo/4a"out())&
campo1 , ne/ G5e*t6ield('8)&
campo! , ne/ G5e*t6ield('8)&
campo1#addDction4istener(t2is)&
panel#add(campo1)&
panel#add(campo!)&
t2is#getContentPane#add(panel)&
(
public void actionPer0ormed(Dction)vent e)
i0(e#getSource() ,, campo1)
campo!#set5e*t(campo1#get5e*t)&
campo1#set5e*t($$)&
(
(
public static void main(String args[])
)jemplo ventana , ne/ )jemplo()&
ventana#setBisible(true)&
(
(
%uente: http:11ar.ansEers.yahoo.com1question1indexSqidO;<<Q<H;H;B;Q=HAAQuvog
Evento 4eypress
private void j5e*t6ield1Re"=eleased(java#a/t#event#Re")vent evt)
-- 5@;@: Dgrege su codigo a:ui:
i0 (evt#getRe"Code() ,, evt#BR?)N5)=)
--lo : debe 2acer cuando presione " suelte la tecla enter
(
(
0uente: http:11#orode+ava.com1shoEthread.php1U9<3$vento32eypress
Calidaci+n de 3ormularios en Java
!diLa validacin de #ormularios nos permite asegurarnos que los datos que, por e+emplo, un usuario
ingrese en un campo de texto sean v(lidos. Dicha validacin puede hacerse una veM 1ue el usuario
.aya digitado todos los datos, o mientras el usuario los est6 digitando.
-ara el primer caso, lo me+or es utilizar expresiones regulares usando el m%todo matc5es() de la clase
6tring >si necesitas un e+emplo, clic aqu6?.
-ara el segundo caso tendremos que mane+ar los eventos del teclado que se generen sobre determinado
control, usando la inter#az 7ey*dapter y el m%todo keyReleased. As6, en nuestro cdigo de e+emplo
tenemos un J.e/tField al 1ue le aQadimos un *istener 1ue escuc0ar los eventos del teclado, y
veri#icar( si la tecla presionada es un caract%r v(lido >solo letras?, de lo contrario lo elimina.
)o hay nada especial en el cdigo de e+emplo salvo por un par de l6neas:
?nea #": se utiliza el m%todo anidado get"ool2it>?.beep>?, que har( que el sistema alerte al
usuario con un pitido cada vez que un dato errneo.
?nea 9<: comparamos el c5ar que digite el usuario con el entero Q, que es el cdigo resultado
al usar el .ac2space >tecla para borrar hacia la izquierda?P lo cual permite al usuario borrar
caracteres.
C+digoT
import java#a/t#=obot&
import java*#s/ing#.&
import java#a/t#event#.&
public class Solo4etras e*tends G6rame
private G5e*t6ield caja , ne/ G5e*t6ield()&
public Solo4etras()
super($Solo dejo escribir letras$)&
caja#addRe"4istener(ne/ Re"Ddapter()
public void ke"=eleased(Re")vent e)
C2aracter caracter , ne/ C2aracter(e#getRe"C2ar())&
i0 (EesBalido(caracter))
String te*to , $$&
0or (int i , 8& i V caja#get5e*t()#lengt2()& iPP)
i0 (esBalido(ne/ C2aracter(caja#get5e*t()#c2arDt(i))))
te*to P, caja#get5e*t()#c2arDt(i)&
caja#set5e*t(te*to)&
get5oolkit()#beep()&
(
(
public boolean esBalido(C2aracter caracter)

c2ar c , caracter#c2arBalue()&
i0 ( E(C2aracter#is4etter(c) --si es letra
WW c ,, ^ ^ --o un espacio
WW c ,, Z --o backspace
))
return 0alse&
else
return true&
(
()&
getContentPane()#add(caja)&
setSiMe('88< 98)&
setBisible(true)&
(
public static void main(String args[])
G6rame#set;e0ault4ookDnd6eel;ecorated(true)&
Solo4etras ventana , ne/ Solo4etras()&
ventana#set;e0aultClose@peration(G6rame#)KA5?@N?C4@S))&
(
(
%uente: http:11casidiablo.net1validacion3de3#ormularios3en3+ava1
Calidacion de Campos vacios Bsando 8*jetc
.uenas de nuevo amigos, en esta ocacion eh estado creando unos metodos con los cuales quiero validar
si los campos de tipo &tex#ield estan vacios y el codigo es el siguiente.
public void validarGte*0ield(@bject[] entrada)
0or (int i , 8& i V entrada#lengt2& iPP)
i0 (entrada[i] instanceo0 G5e*t6ield)
i0 (entrada[i]#toString()#is)mpt"())
G@ptionPane#s2o/Message;ialog(null< $Ja" campos vacios$)&
(else
G@ptionPane#s2o/Message;ialog(null< $Correcto$)&
(
(
(
(
-.Metodo para validar los Gte*0ield e*istentes.-
public void validarCampos()
-.)n este caso tengo dos Gte*0ield en mi G0rame los cuales deseo validar.-
validarGte*0ield(j5e*t6ield1<j5e*t6ield!)&
(
%uente:
http:11EEE.+avamexico.org1#oros1+avaNstandardNedition1validacionNdeNcamposNvaciosNusandoNob+etc
Trans3ormando -tring a Date P uso de -impleDate%ormat
$n uno de los post, se planteo la pregunta acmo puedo trans#ormar un /tring a DateS -ara hacer m(s
interesante el asunto el valor de la variable /tring estaba en el siguiente #ormato a*o3mes3d6a. $n
cdigo se ver6a algo as6:
/tring str0echa V;<<H3,;3;=eP
!on anterioridad conoc6a la existencia de la clase /impleDate0ormat, que hasta ahora la utilic% para
V#ormatearW la salida de un ob+eto tipo Date. !uando se imprime en consola un ob+eto Date se obtiene:
Ged )ov ;, ,;:;H:== !@" ;<<H, pero mi salida debe ser algo as6: ;,1,,1;<<H. $n cdigo ser6a as6:
Calendar calendario , UregorianCalendar#getAnstance()&
;ate 0ec2a , calendario#get5ime()&
S"stem#out#println(0ec2a)&
Simple;ate6ormat 0ormato;e6ec2a , ne/ Simple;ate6ormat(_dd-MM-""""`)&
S"stem#out#println(0ormato;e6ec2a#0ormat(0ec2a))&
$l primer /ystem.out.println imprime Ged )ov ;, ,;:;H:== !@" ;<<H, mientras que el segundo
imprime la #echa de acuerdo al #ormato d6a1mes1a*o >;,1,,1;<<H? que se especi#ica como par(metro
del constructor de la clase /impleDate0ormat.
-ero la clase /impleDate0ormat no solamente me permite V#ormatearW ob+etos tipo Date, sino que me
permite crear ob+etos Date a partir de un /tring que se encuentra en un #ormato determinado. $s as6
cmo se puede hacer.
,. !reamos un ob+eto /impleDate0ormat y el par(metro del constructor ser( el #ormato en el que
se encuentra la variable tipo /tring.
;. !rear un ob+eto tipo date, en donde se almacenar( la #echa.
B. 4tilizar el m%todo parse de la clase /impleDate0ormat, tener en cuenta que puede lanzar
excepcines.
$n cdigo:
Simple;ate6ormat 0ormato;el5e*to , ne/ Simple;ate6ormat(_""""NMMNdd`)&
String str6ec2a , _!88\N1!N!+a&
;ate 0ec2a , null&
tr"
0ec2a , 0ormato;el5e*to#parse(str6ec2a)&
(catc2 (Parse)*ception e*)
e*#printStack5race()&
(
S"stem#out#println(0ec2a#toString())&
4na nota sobre los #ormatos: si utilizamos una m min'scula estamos diciendo minutos, si utilizamos :
may'scula decimos meses. Aqu6 pueden encontrar mayores detalles
%uente: http:11ca#elo+ano.Eordpress.com1;<<H1,,1;,1trans#ormando3string3a3date3uso3de3simpledate#ormat1
8peradores aritm6ticos, lectura, conversi+n y escritura Java A Net*eans!
8*jetivo:
4tilizar los conceptos de variable y tipo, (mbito de la variable, leer datos de la R45, mostrar datos en la
R45 del lengua+e seleccionado.
(l 3inaliMar la clase los estudiantes estarHn en capacidad de:
De#inir las operaciones elementales que o#rece el lengua+e seleccionado.
7ealizar e+ercicios de programacin en el lengua+e seleccionado.
!rear programas simples usando lectura y escritura de datos y las operaciones b(sicas en el lengua+e
seleccionado.
Tra*ajando con J(C(!
5mportante tener presente la bibliogra#6a dada.
?a estructura clave de un programa en
J(C(
?a parte #: es la exterior, en esta solo
pueden haber dos tipos de elementos,
primero el paquete que aparece con la
palabra pac2age nombreP en este e+emplo
no lo colocamos pues no debe usarse a la
ligera.
$l segundo tipo de elemento que puede
aparecer es la importacin que se logra con
la palabra import seguida de lo que se desea importar y terminando con punto y coma
package nombrepa:uete&
import java#io#.&
import java*#s/ing#.&
import ####
?a parte 9: fsta es la macro estructura que se denomina clase, todo debe estar dentro de la clase pero
en partes espec6#icas. la clase esta determinada as6:
public class )ombreAlgoritmoY
aqu6 adentro va todo el programa dividido en partes espec6#icas.
Z
$l bloque que #orma a la clase esta determinado por las llaves YZdesde donde abren signi#ica que inicia
y donde cierran signi#ica que termina. 5mportante que el nombre )ombreAlgoritmo sea el mismo del
archivo .+ava es decir del cdigo #uente.
"odo el programa debe estar contenido dentro de la estructura que denominamos clase.
?a parte :: $ste es un subprograma, cada subprograma tiene una estructura especial la cual
estudiaremos con m(s detalle en los prximos cursos.
$l bloque esta delimitado por las llaves que abren y las llaves que cierran dentro de este se colocan las
instrucciones que con#orman el programa.
?as varia*les y su Hm*ito
?os tipos de las varia*les:
Java maneja dos grandes tipos 1ue son, los primitivos y los e)tendidos!
?os primitivos son:
s.ort: entero muy corto >; bytes 3B;H9Q a B;H9H?
int: entero corto >D .ytes 3;,DHDQB9DQ a ;,DHDQB9DH?
long: entero largo >Q .ytes 3U;;BBH;<B9Q=DHH=Q<Q a U;;BBH;<B9Q=DHH=Q<H?
3loat: decimal corto >D .ytes ,.D<,;UQD9DB;DQ,H<H e3D= a B.D<;Q;BD99BQ=;QQ9<e8BQ? >positivo o
negativo?
dou*le: decimal largo >Q bytes D.UD<9=9D=QD,;D9=DDe3B;D a ,.HUH9UB,BDQ9;B,=H<e8B<Q? >positivo
o negativo?
c.ar: un car(cter incluido los extendidos >; bytes < to 9==B=?
*yte: esta en el rango >3,;Q a ,;H?
*oolean: valor lgico true3#alse >!orresponde a un bit?
?os e)tendidos:
Los tipos de datos extendidos son in#initos, dado que cualquier usuario puede de#inir el propio seg'n la
orientacin a ob+etos. Los m(s usados para el curso pueden ser.
-tring: para el mane+o de cadenas de texto.
Dou*le: para la conversin de tipos double
Integer: para la conversin de tipos int
-.ort: para conversin de tipos short
?ong: para la conversin de tipos long
%loat: para la conversin de tipos #loat.
De3inir una varia*le Ulo*al
$stas variables se debe colocar dentro de la clase y #uera de cualquier m%todo.
#orma general tipo nombre O valor5nicialP
tipo: es cualquiera de los antes mencionados.
nom*re: debe ser al#anum%rico, puede contender letras y n'meros siempre debe iniciar con una letra y
nunca debe contener espacios en blanco o caracteres especiales como 1>dg_O83S......
Ejemplos
/tring nombreOIIP
double salarioO<P
int edadO<P
De3inir una varia*le local
Lo que di#erencia a esta de las dem(s es el lugar en donde se colocan. "oda variable local debe
colocarse dentro de un m%todo y #uera de cualquier bloque que se de#ina dentro de este.
?as varia*les glo*ales: son accesibles desde cualquier parte de la clase y por tanto por cualquier
m%todo que este contenido en esta, la imagen nos muestra las variables Rlobales en el bloque
numerado con , y B. Dado que la parte en la cual #ueron de#inidas es la clase y #uera de cualquier
m%todo. La palabra static signi#ica que la variable pertenece a la clase y no a las instancias de la misma
aunque esta es teor6a orientada a ob+etos aplica para un me+or entendimiento.
?as varia*les locales: son accesibles solo para el m%todo en el cual han sido de#inidas en este caso las
encerradas en el bloque ;.
Dos variables de (mbitos distintos pueden llamarse igual, esto no se aconse+a dado que hace necesario
ingresar un elemento que se denomina resolucin de ambighedad this, con #ines pr(cticos evitaremos
que esto suceda.
?as varia*les de *lo1ue: son las que se de#inen dentro de los bloques como el si el mientras y otros
que m(s adelante traba+aremos en el curso.
?as 3ormas de conversi+n de te)tos a num6ricos son las siguientes:
5nteger.parse5nt>texto?P 11convierte el texto dado a entero
Long.parseLong>texto?P11convierte el texto dado a un entero
Double.parseDouble>texto?P11convierte el texto dado a decimal
<! 8peradores aritm6ticos de java!
Asignacin................................................................O
/uma.........................................................................8
7esta.........................................................................3
:ultiplicacin...........................................................X
Divisin....................................................................1
:odulo......................................................................d
-otenciacin..............................................................:ath.poE>base,exponente?
7aiz cuadrada...........................................................:ath.sqrt>radicando?
5ncremento de uno....................................................88
Decremento de uno...................................................333
! 8peradores relacionales 1ue aplica solo para los n$meros no para los te)tos
mayor que.................................................................C
menor que.................................................................]
mayor o igual que.....................................................CO
menor o igual que.....................................................]O
igual que...................................................................OO
di#erente que.............................................................JO
"! 8peradores l+gicos
A)D..........................................................................^^
@7.............................................................................TT
)@"..........................................................................J
?os algoritmos de tres pasos usando JavaANet*eans
'aso # Leer los datos
'aso 9 7ealizar los procesos Algoritmo
'aso : 5mprimir o mostrar los resultados.
'ara leer los datos ingresados por el usuario!
@btendremos los datos inicialmente de tres posibles elementos que son: campos de texto text0ield, las
areas de texto textArea, ventana de captura &@ption-ane. "odos los elementos mencionados retornan lo
capturado del usuario en el #ormato texto motivo por el cual se hace necesario convertirlo a num%rico
en los casos en que sea necesario.
#! 5ecolectando los datos de una campo de te)to!
nombre!ampo.get"ext>?P esta es la #orma general de capturar un texto que el usuario a ingresado en
el campo de texto.
$+emplo el campo de texto se llama nombre
/tring nomOnombre.get"ext>?P 11Lo que se encuentre escrito en el campo de texto lo recupera y lo
almacena en la variable.
9! 5ecolectando los datos de un Hrea de te)to!
nombreArea"exto.get"ext>?P es decir igual que como lo hicimos en el caso del campo de texto.
$+emplo el (rea de texto se llama in#o
/tring datOin#o.get"ext>?P
:! 5ecolectar los datos desde una ventana de captura!
&@ption-ane.shoE5nputDialog>I"exto que ilustra al usuario sobre lo que se le pideI?P
$+emplo
/tring apellidoO&@ption-ane.shoE5nputDialog>I5ngrese su apellidoI?P
'ara procesar los datos!
$n estos algoritmos de tres pasos, necesitamos mucho la conversin de tipos a los valores num%ricos y
textos al igual que los operadores aritm%ticos elementales.
Convertir los datos y ejemplos!
%orma general
Double.parseDouble> te)to?P 11 convierte un texto al tipo num%rico double
5nteger.parse5nt> te)to ?P 11 convierte un texto al tipo num%rico entero
Long.parseLong> te)to ?P 11 convierte un texto al tipo num%rico entero de mayor capacidad
0loat.parse0loat > te)to?P 11 convierte un texto al tipo num%rico decimal corto
te)to se re#iere a una de varias cosas que pueden ser >literal, variable, expresin o #uncin? todas de
tipo /tring.
Ejemplos para la captura de datos y su conversi+n a n$mero!
#! -i se desea leer un entero capturado de una caja de te)to o de una Hrea de te)to a la cual
llamaremos num#
DD3orma# de .acerlo
/tring sOnum,.get"ext>?P
int n,O5nteger.parse5nt>s?P
DD3orma9 de .acerlo
int n,O5nteger.parse5nt>num,.get"ext>??P 11en este e+emplo se ahorra el uso de la variable de tipo
texto.
9! -i se desea leer un decimal de una ventana de captura!
DD%orma # de .acerlo
/tring salO&@ptio-ane.shoE5nputDialog>IDigite el salario que desea: I?P
double salarioODouble.parseDouble>sal?P
DD%orma 9 de .acerlo
double salrioODouble.parseDouble>&@ption-ane.shoE5nputDialog>IDigite el salario que desea: I??P
'ara mostrar los datos
?os resultados de una sola linea se muestran 3Hcilmente en un campo de te)to asi:
campoDe"exto.set"ext> resultado ?P
resultado debe ser un elemento de tipo texto si no lo es, un truco es colocar inicialmente II8resultado
para lograr la conversin. resultado puede ser una variable, un literal, una expresin o una #uncin.
CuHndo el campo de te)to es mHs de una lnea podemos usar un Hrea de te)to!
areaDe"exto.set"ext> linea,8IinI?P
areaDetexto.set"ext>areaDe"exto.get"ext>?8linea;8IinI?P
areaDetexto.set"ext>areaDe"exto.get"ext>?8lineaB8IinI?P 11 y de esta manera agregar m(s l6neas IinI
corresponde a un enter
CuHndo se trata de mostrar en un mensaje de aceptar y cerrar se .ace as:
&@ption-ane.shoE:essageDialog>main-anel, resultado ?P se puede aplicar cualquiera de las #ormas
antes vistas para el resultado.
Ejemplo # completo en vdeo!
!rear un programa que muestre cu(ntos clic se le ha dado a un botn. La idea es que al momento de
hacer clic contamos uno y lo mostramos en un mensa+e emergente.
,. !onstruimos la inter#az gr(#ica. La cual solo constar( de un botn.
;. programamos el evento clic2ed del botn para realizar en este el algoritmo
B. )ecesitamos una variable global donde vamos guardando el n'mero de veces que se ha presionado
el botn.
D. 4tilizaremos el &@ption-ane.shoE:essageDialog para mostrar los resultados.
Cideo: http:11EEE.youtube.com1EatchSvOpLULL&/Diq$
Ejemplo 9 completo en vdeo!
!rear un programa que permita convertir uno minutos ingresados por el usuario a horas.
,. !onstruir la R45 del e+ercicio, para lo cual usaremos dos ca+as de texto una para los minutos
ingresados y otra para colocar su equivalente a horas es decir la respuesta el problema dado.
;. Asignar nombres a las ca+as de texto de #orma que sean usados correctamente en el cdigo para
captura y mostrar los datos.
B. a en el cdigo capturar los minutos ingresados convertirlos a variables decimales.
D. Aplicar la regla de tres para pasar minutos a horas.
=. :ostrar en el campo de texto seleccionado el resultado de la operacin.
Cideo: http:11EEE.youtube.com1EatchSvO=g!D7/dM0DQ
,. /olicitar que un usuario ingrese la base de un n'mero y el exponente al cual desea elevarlo, el
programa debe mostrar el resultado de la operacin.
;. /olicitarle a una persona que ingrese su nombre, identi#icacin y cuantos billetes de ,<<<, =<<<,
,<<<<, ;<<<<, =<<<< tiene, para que el sistema le imprima el valor total de dinero del que dispone.
B. Dado el lado de un cuadrado, imprimir el (rea del mismo.
D. Dada la base y la altura de un triangulo, imprimir el (rea del mismo
=. -edir a un usuario que ingrese un n'mero, luego otro y el programa deber( imprimir el residuo de la
divisin entera del primer n'mero sobre el segundo.
9. -edir a un usuario que ingrese su nombre, identi#icacin, nombre de la materia, y las notas de
seguimiento, parcial y #inal, el sistema deber( imprimir todos los datos +unto con la nota de#initiva.
H. Dada una lista de cuatro productos, leer el nombre y el precio de cada uno de ellos, el precio no
incluye iva, luego imprimir, el valor del iva para cada producto y el costo total de la compra con y
sin iva.
Q. Dado un nombre, a*o de nacimiento y teniendo presente el a*o actual, calcular la edad de la
persona.
U. -ensando en los datos de un triangulo rect(ngulo, calcular, dados la hipotenusa y uno de los catetos,
el (rea de dicho triangulo.
,<. Dado el nombre de un estudiante, la materia, las notas de seguimiento y parcial, el programa deber(
imprimir todos los datos y cuanto necesita el estudiante para ganar la asignatura.
,,. Dada una cantidad de dolares y el valor de la tasa de cambio a pesos, imprimir a cuantos pesos
equivale la ci#ra ingresada.
,;. -edir a una persona que ingrese el monto que desea que le presten en una natillera, si los intereses
son anticipados al =d mensual, preguntar a cuantos meses desea el pr%stamo y generarle cuanto
paga de intereses y cuanto realmente le terminan prestando.
,B. !onstruir un programa que permita calcular el valor real de un electrodom%stico del cual se debe
identi#icar el nombre, el n'mero de cuotas y el costo de cada cuota.
,D. Dado el n'mero de pelda*os de una escalera, al ancho del pelda*o y la distancia entre dos pelda*o,
imprimir el largo de dicha escalera. /i el ancho del pelda*o esta dado en mil6metros, la distancia
entre ellos esta dada en metros y se pide el largo de la escalera en cent6metros.
,=. Dados Q d6gitos binarios ingresados por el usuario, imprimir su equivalente decimal.
,9. Dados Q d6gitos octales ingresados por el teclado, imprimir el equivalente decimal.
0uente: http:11sites.google.com1site1tutoriasdeingenieria1lengua+es3de3programacion1operadores3y3operaciones3basicas3de3
+ava3netbeans
Bsando I3 en JavaANet*eans
8*jetivo:
7econocer la toma de decisiones en el lengua+e seleccionado.
(l 3inaliMar la clase los estudiantes estarHn en capacidad de:
4tilizar las decisiones que o#rece el lengua+e seleccionado.
7ealizar e+ercicios de programacin en el lengua+e seleccionado.
?os operadores relacionales para los tipos primitivos
]................................................................................menor que
C................................................................................mayor que
]O..............................................................................menor o igual que
CO..............................................................................mayor o igual que
JO...............................................................................di#erente de
OO..............................................................................5gual a
?os operadores l+gicos
^^............................................................................and
TT.................................................................................or
J.................................................................................not
?os valores l+gicos *oolean
true
#alse
?as 3unciones para comparar te)tos
-ara veri#icar si es igual te)to!e1uals/ te)toComparaci+n 0
para veri#icar si es mayor, menor incluso igual te)to!compareTo/ te)toComparaci+n0
?as decisiones!
Las sentencias de decisin se denominan /5 D$ L@ !@)"7A75@. /u #inalidad es la de hacer una
pregunta lgica o relacional y con base en dicha pregunta hacer un bloque de cdigo u otro. /e dice que
un si esta anidado cuando se encuentra dentro de otro bloque si o por de lo contrario.
-i de una sola lnea
$sta decisin solo aplica para una l6nea que se encuentra exactamente despu%s del i#, tambi%n aplica
para else, cuando sea de una sola l6nea no necesita las llaves.
-i de un *lo1ue
La #inalidad de este es evaluar la expresin y en caso que sea verdadera e+ecutar todas las instrucciones
que se encuentran encerradas por YZ. 7ecordemos a a esa parte que est( delimitada por las llaves se les
denomina bloque.
-i con de lo contrario
La #inalidad es evaluar la expresin si es verdadera ingresa al bloque que est( deba+o del i# desde Yabre
hasta Zcierra. $n caso de ser la expresin #alsa, salta el bloque principal y entra al bloque else que esta
delimitado por YZ, Yabre el bloque Zcierra el bloque.
$sta es excluyendo es decir o entra al bloque de verdad o lo hace al de #alsedad pero no a ambos. A
esto se le denomina exclusin mutua.
-i de lo contrario -i!!! else!
$sta decisin es especial en la medida que muestra un anidamiento impl6cito. La #inalidad es hacer la
pregunta inicial si esta es #alsa, por de lo contrario se realiza otra pregunta, esto se repite
inde#inidamente y solo hasta el #inal se agrega de lo contrario. !uando se ingresa a un bloque ya no se
ingresa a ning'n otro de manera que siguen siendo excluyentes entre /5
?as decisiones anidadas!
/igni#ican que dentro de cualquiera de los bloques de los i#,else e i# else, se pueden colocar otros i#,
else e i# else y a su vez dentro de estos otros y esto sin un l6mite dado. 4na clave es respetar la
indentacin:
Claves necesarias para las decisiones
,. /iempre la expresin del i# debe estar encerrada entre par%ntesis > expresin? y dentro de %sta se
pueden colocar otros i#, else, i# else...
;. $s me+or siempre delimitar los bloques con YZde #orma que no se preste para con#usiones.
B. /iempre respetar la sangr6a, tabulacin o indentacin.
D. $s me+or anidar preguntas, que hacer expresiones muy comple+as de entender.
=. $l mayor o igual cuando se habla de enteros, puede ser reemplazado por C valor 3, y ] valor8,
9. !uando se comparan textos OO no #unciona y debe ser utilizada la palabra equals as6:
3orma #
String s,$2ola$&
i0 (s#e:uals($prueba$),,true)
--blo:ue de verdad
(
3orma 9
String variable,$$&
i0 ($prueba$#e:uals(variable))
--blo:ue de verdad
(
3orma :
String var1,$$<var!,$$&
i0 ( var1#e:uals(var!))
--blo:ue de verdad
(
3orma ;
String var1,$$<var!,$$&
i0 ( var1#e:uals(var!P$e*presiIn$))
--blo:ue de verdad
(
H. !uando se de#ine una variable dentro de un bloque, %sta solo IviveI para el bloque por tanto #uera de
este sirve, para recordar el tema del (mbito ver clases anteriores
?a instrucci+n casos
$s usada para determinar de entre un grupo de elementos cual de ellos es igual a uno dado. /u
desventa+a radica en que solo #unciona para enteros int o char y en los casos solo pueden haber valores
constantes, aclaro que este solo es un comportamiento de +ava otros lengua+es no la mane+an o lo hacen
de manera distinta.
La palabra brea2, determina el #in del caso y los dos puntos despu%s del literal determinan el inicio. $n
el gr(#ico lo que aparece con corchetes signi#ica que puede estar pero no es obligatorio.
de#ault es el caso por de#ecto si despu%s de evaluar todos los anteriores no encuentra coincidencias
entonces por de#ecto ingresa a %ste.
Dentro del grupo de sentencias se puede ubicar cualquiera de las vistas o por ver es decir i#, else, #or,
Ehile sEitch.....
7espetar la tabulacin hace la di#erencia entre entender o complicar el problema.
%uente: http:11sites.google.com1site1tutoriasdeingenieria1lengua+es3de3programacion1usando3i#3en3+ava3netbeans
?imitar los caracteres en un JTe)t%ield
$ste es un e+emplo muy basico, donde se limita la entrada de caracteres en un &"ext0ield, pues es una
#orma muy util cuando se necesita.
-ara que quede claro, la clase &"ext0ieldLimit es una clase de tipo Document que sobreescribir(
insert-tring/T0 que controlar( la condicion de la cantidad de caracteres como l6mite. $sta clase es
llamada donde se instancia el &"ext0ield, es decir donde se declara dicho componente, veamos:
-..
.
. Faut2or mani*
.-
import java*#s/ing#te*t#.&
public class G5e*t6ield4imit e*tends Plain;ocument
private int limit&
-- optional uppercase conversion
private boolean toCppercase , 0alse&
G5e*t6ield4imit(int limit)
super()&
t2is#limit , limit&
(
G5e*t6ield4imit(int limit< boolean upper)
super()&
t2is#limit , limit&
toCppercase , upper&
(
F@verride
public void insertString
(int o00set< String str< DttributeSet attr)
t2ro/s %ad4ocation)*ception
i0 (str ,, null) return&

i0 ((get4engt2() P str#lengt2()) V, limit)
i0 (toCppercase) str , str#toCpperCase()&
super#insertString(o00set< str< attr)&
(
(
(
$l constructor recibe un int, que indica el l6mite de caracteres que se permitir( ingresar en el &"ext0ield
G5e*t6ield4imit(int limit)
Ahora veamos como se usa esta clase con aplic(ndolo a nuestro &"ext0ield:
G5e*t6ield te*t0ield , ne/ G5e*t6ield()&
te*t6ield#set;ocument(ne/ G5e*t6ield4imit(1+))&
)oten como se hace una instancia de la clase &"ext0ieldLimit antes mencionada recibiendo el numero
,= como limitador de cararteres. Ac( podr(n ver el e+emplo completo, y aba+o los encontraran el cdigo
empleando.
%uente: http:11EEE.apuntes.delibertad.com1+ava1limitar3los3caracteres3en3un3+text#ield1
-8%T@(5E DE INCENT(5I8 DE-(558??(D8 EN NETBE(N-
.uenas, a continuacin les de+o un aplicativo que hice como
proyecto en la universidad en el Ber ciclo y quisiera compartirlo
para ver si pueden aportar me+oras al programa y si a alguien le
sirve que pueda usarlo para un proyecto y me+orarlo al mismo
estilo de so#tEare libre.
.ueno por motivos de tiempo me #alto programar las
instrucciones del botn de Aardex, pues bueno si alguien se
anima a complementarlo o enviar sugerencias para
complementarlo se puede hacer. $spero sus comentarios y
sugerencias para la me+ora de un programa.
N4n sistema grande y comple+o que no ha evolucionado a partir
de otro peque*o y simple no #unciona y, adem(s, es imposible
arreglarlo para que #uncioneO 3 Bjarne -troustrup.
( continuaci+n les dejo unas capturas del aplicativo
-rimera pantalla o ventana principal de control con todos los botnes:
/egunda captura que corresponde al botn proveedores, el cual contiene los datos mas resaltantes de un
proveedor de productos:
"ercera captura que le corresponde al botn de clientes, el cual contiene los datos principales de los
clientes que se tiene:
La cuarta captura corresponde al botn de productos al cual se ingresaran los atributos de cada
producto para tenerlos en la base de datos y a partir de hay hacer una orden de compra.
La quinta captura o imagen que se muestra corresponde al botn de personal, el cual contiene los datos
o atributos mas resaltantes de cada vendedor o almacenero que mane+ara el so#tEare de inventario:
La sexta y 'ltima imagen que se muestra corresponde a el botn de orden de compra el cual va a
interactuar con los productos existentes para a partir de los que se tiene hacer una orden de compra.
E-'ECI%IC(CI8NE-:
!uando intenten cargar el aplicativo en su )et.eans quiz( les aparezca una advertencia de error, eso
por el problema de compatibilidad ya que lo desarroll% en la versin del )et.eans 9.H., . -ero omiten
la advertencia de error y le dan simplemente a continuar o aceptar y se cargar( el aplicativo a su lista de
proyectos con un peque*o icono de advertencia en la taza de ca#%, pero correr( sin ning'n problema..
4na vez que hayan cargado el aplicativo a su lista de proyectos en )et.eans aparecer(n dos paquetes,
el paquete llamado IneEpac2ageI es el que contiene las claces y #ormularios y para que vean correr el
aplicativo completo abren ese paquete y dan clic2 derecho al #ormulario llamado I-resentacion.+avaI y
seleccionan e+ecutar archivo.
Aparecer( despu%s de la presentacin una peque*a ventana que pedir( la validacin y existen dos tipos
como acceder como administrador o como vendedor, si se selecciona vendedor se activara el cuadro
donde les pide el cdigo del vendedor, pero en este caso ingresaremos como administrador, para eso en
nivel de acceso seleccionamos IAD:5)5/"7AD@7I y la contrase*a es IA!7$D5"A!5j)I le dan a
I@AI y listo.
&ustamente despu%s de logearse les aparecer( una ventana que les pide el tipo de cambio, bueno es sin
importancia por que lo puse mas que todo para complementarlo, claro eso no quita que sea importante
ya que mane+aremos precios, pero bueno no a#ecta en nada lo que pongan en ese apartado de tipo de
cambio, si pueden codi#icarlo y darle un uso para que sea utilizado el tipo de cambio dentro del
aplicativo ser6a excelente, pero hay esta solo para resaltar ese atributo dentro del aplicativo, entonces
solo colocan un valor num%rico cualquiera al tipo de cambio y le san en I/AL$I y se abrir( reci%n el
#ormulario de control, asimismo la #echa que aparece es I#icticiaI ya que no encontr% el m%todo de que
como se cargue la #echa actual para ese cuadro de texto.
Algo muy importante, se observa en cada #ormulario en la parte izquierda un +List o me+or dicho una
lista que contiene el listado de proveedores, vendedores, productos segun sea el #ormulario
seleccionado, el algoritmo lo implemente para que mediante un evento de teclado se impriman los
atributos del ob+eto seleccionado que este en la lista, es decir, por e+emplo seleccionan el botn de
-7@D4!"@/ se abrira el #ormulario correspondiente y se observa un listado de productos en una lista
al lado izquierdo, seleccionamos cualquiera le damos un clic2 y le damos $)"$7 y se imprimiran los
atributos del producto seleccionado.
Lo que quise desarrollar y esto si lo resalto mucho por que quise desarrollar un algoritmo que me
permita #iltrar la lista >+List? a trav%s de un campo de texto >"ext0ield? para que el metodo de b'squeda
sea mas sencillo, si alguien encuentra la #orma de hacerlo se agradecer(, ya que lo busque por 5nternet
y nunca logr% encontrar la manera como.
-rincipalmente cabe mencionar que no se utiliz conexiones a bases de datos como /QL o :y/ql ni
@racle por motivos que en aquel siclo aun no veiamos ese tema, pero tiene un estilo de base de datos ya
que los datos ingresados se guardan en archivos binarios de extensin I.binI, lo cual guarda los datos
ingresados en la misma carpeta donde se encuentran los archivos del aplicativo.
Adicionalmente si alguien sabe como insertarle un calendario I+!alendarI al aplicativo en las partes
donde se necesita #echa lo agradecer6a mucho ya que trate de insertarlo pero no entend6 nunca por que
me identi#icaba como error, bueno es un detalle mas para me+orar la apariencia del aplicativo.
$l cdigo de cada producto se genera aleatoriamente con el m%todo I7andonI para que no existan
problemas al momento de crear uno manualmente.
-or motivos de tiempo no implemente el botn de Aardex, ademas por #alta de conocimiento en la
parte tem(tica ya que es un tema mas de contabilidad, ya que si alguien podr6a darme ideas de como
implementar un Aardex se podr6a traba+ar en ello.
$n conclusin este es un peque*o aplicativo que desarroll%, con la intencin que sea totalmente
intuitivo para un usuario, con el genial )et.eans 5D$ y lo posteo con la intencin tambien de me+orarlo
y asimismo aprender mas de este programa tan completo e interesante, cualquier aporte al aplicativo,
comentario, cr6tica constructiva y puntos se agradecer(n mucho, saludos.
%uente: http:11EEE.taringa.net1posts1in#o1,<<U=;;=1/o#tEare3de3inventario3desarrollado3en3+ava333)et.eans.html
C+mo .acer cuadros de diHlogo simples
DDttulo e icono por de3ecto
&@ption-ane.shoE:essageDialog>null,I"exto del mensa+e.I?P
DDttulo personaliMado, icono de aviso
&@ption-ane.shoE:essageDialog>null,I"exto del mensa+e.I,I"6tulo del marcoI,
&@ption-ane.GA7)5)RN:$//AR$?P
DDttulo personaliMado, icono de error
&@ption-ane.shoE:essageDialog>null,I"exto del mensa+e.I,I"6tulo del marcoI,
&@ption-ane.$77@7N:$//AR$?P
DDttulo personaliMado, sin icono
&@ption-ane.shoE:essageDialog>null,I"exto del mensa+e.I,I"6tulo del marcoI,
&@ption-ane.-LA5)N:$//AR$?P
0uente: http:11ayuda3+ava.blogspot.com1;<<H1<H1cmo3hacer3cuadros3de3dilogo3simples.html
Uenerar un archivo jar ejecutable
:uchas veces necesitamos crear un archivo que podamos e+ecutar , esto es mas cuando empezamos a
traba+ar con inter#ace gr(#ica y en #in necesitamos crear un e+ecutable. $l propio )et.eans posee una
sencilla #orma de como crear e+ecutables con nuestros proyectos para esto hay que tener en cuenta lo
siguiente:
#!A Al momento de crear nuestro proyecto debemos haber desmarcado las casillas de Create 'ain
Class y set as 'ain 1ro-ect 2
9!A Ahora nos ubicamos en nuestro proyecto , en mi caso ser( este proyecto:
:!A nos vamos a .uild k !lean and .uild :ain -ro+ect
;!A )et.eans nos debe con#irmar que ya se construyo el archivo +ar de nuestra aplicacin con un
mensa+e de BBI?D -BCCE--%B? el cual nos indica que la construccin ha sido exitosa . $s en este
momento que en la carpeta de nuestro proyecto se ha creado una nueva carpeta llamada dist en la cual
esta nuestro archivo +ar:
Ahora cada vez que deseamos e+ecutar nuestro proyecto sin abrir el netbeans solo bastar( con hacer
doble clic en el archivo &A7 y listo.
"ambi%n se puede agregar nuestro arc.ivo J(5 a nuevos proyectos que desarrollemos .
%uente: http:11+avax<H,,.blogspot.com1;<<U1<D1generar3un3archivo3+ar3e+ecutable.html
-a*er cuantas 3ilas tiene un 5esult-et
!reo que no se puede, no me suena al menos. -ero puedes hacer un
7esult/et rsP
..
rs.last>?P
int cuantos O rs.get7oE>?P
en vez de hacer tantos .next>?. "e devolver( el n'mero de la 'ltima #ila, lo que no s% es si tendr(s que
sumarle ,, restarle ,, o quedarte con ese n'mero ya >haz alguna pruebita? para saber cuantas #ilas hay.
%uente: http:11EEE.#orosdelEeb.com1#D=1saber3cuantas3#ilas3tiene3resultset3D;=UH91
INetBeans !S IComo convertir un int a su codigo (-CIIJ
1X
Fola, puedes hacer un casting con >char?
para las conversiones de octal, hexadecima y binario puedes usar la clase 5nteger
"e de+o los e+emplos
X1
public class Main
public static void main(String[]args)
int n , Y\&
S"stem#out#println( (c2ar)n )&
S"stem#out#println( Anteger#to%inar"String(n))&
S"stem#out#println( Anteger#toJe*String(n))&
S"stem#out#println( Anteger#to@ctalString(n))&
(
(
--)l entero n se convierte al caracter ^a^
--Saludos#
%uente: http:11mx.ansEers.yahoo.com1question1indexSqidO;<,,<B,B,=;<=UAAFa9Qp
Tutorial de Java -&ing /##0: J,enuBar, J,enu, J,enuItem!
Lamos a ver ahora una ventana principal &0rame >ventana principal? que contiene un :enu principal
>&:enu.ar? con varias opciones >Archivo, $ditar, Ayuda y /alir?, cada una de las cuales contiene otras
opciones de men' >&:enu5tem? y una barra de progreso >&-rogress.ar?. !olocaremos tambi%n un
componente &"extArea.
La me+or manera de a#rontar este dise*o es crear desde )et.eans un proyecto nuevo siguiendo la
plantilla correspondiente a V-royecto )uevoW, V&avaW y V&ava Des2top AplicationW. >Aplicacin
b(sica?.
/i llamamos al proyecto VAplie+emploW aparecer( un paquete con dicho nombre. $ste paquete contiene
tres componentes +ava: Apli$+emploAbout.ox, Apli$+emploApp, Apli$+emploLieE.
(pliEjemplo(pp
Apli$+emploApp, de#ine una clase llamada igual VApli$+emploAppW que deriva de la clase por
extensin V/ingle0rameApplicationW, de#inida en el paquete org.+des2top.application./ingle0rame3
Application. )tese que la plantilla ha incorporado dos nuevas bibliotecas de clases denominadas
app#rameEor23,.<.B.+ar y sEing3Eor2er3,.,.+ar. /i despliega la primera de ellas, en el paquete
org.+des2top.application encontrar( la de#inicin de la clase V/ingle0rameApplicationW que buscamos.
$sta clase contiene el m%todo est(tico main >m%todo vinculado a la clase y no a sus instancias u
ob+etos? necesario para arrancar, a trav%s de la m(quina virtual de &ava, el proyecto. aQu% hace
exactamente el m%todo mainS. -ues llamar a launch>Apli$+emploApp.class, args?P
$sto crea una instancia de la clase Apli$+emploApp y llama al m%todo startup de la instancia u ob+eto
reci%n creado. $n el m%todo startup tenemos el m%todo shoE>neE Apli$+emploLieE>this??P con esto
instanciamos la clase Apli$+emploLieE y la visualizamos.
(pliEjemploCie&
Apli$+emploLieE es la clase que describe al &0rame o ventana principal. /i desplegamos desde el
V5nspectorW los componentes >tenemos que estar en modo Dise*o? veremos el siguiente (rbol
Lemos pues que el &0rame, contiene
4n panel >&-anel? principal que ocupa todo el &0rame
4n menu principal >&:enu.ar? con dos opciones #ile:enu y help:enu >los dos son
componentes &:enu5tem y los dos tienen a su vez una opcin de men', son los llamados
&:enu5tem?.
4n panel o componente &-anel que a su vez contiene dos etiquetas &Label, un separador
&/eparator y una barra de progreso.
0inalmente, la plantilla ha creado otro &0rame, Apli$+emploAbout.ox, que muestra una ventana con
in#ormacin b(sica de nuestra aplicacin.
$sta inter#az est( compuesta b(sicamente de un componente &Dialog >un tipo especial de ventana? que
a su vez contiene componentes del tipo &.uton y &Label. @bserve que los componentes del tipo &Label
pueden contener textos y1o im(genes. !omo es natural, para una aplicacin particular tendremos que
modi#icar los val<res de estos componentes.
Lamos ahora a singularizar la inter#az (pliEjemploCie&.
La primera tarea que vamos a hacer es particularizar la barra de men', pues deseamos que las
opciones principales del men' principal sean Archivo, $ditar, Ayuda y !errar. -ara ello lo primero
ser( cambiar el texto de la primera opcin V0ileW por VArchivoW. -ara ello seleccionamos el &:enu
correspondiente a 0ile y desde la ca+a de propiedades cambiamos la propiedad VtextW. Despu%s
seleccionamos desde la paleta de men's un componente men' en el men' principal al que le
asignaremos la propiedad VtextW en V$ditarW. Facemos lo mismo con una opcin de V!errarW.
!ambiamos el texto de la opcin VFelpW y #inalmente reorganizamos la opciones. $s decir:
Ahora en la opcin principal VArchivoW queremos que se desplieguen las cuatro opciones
VAbrirW, V/alvarW, V/alvar como`W y V/alirW. -ara ello, insertamos tres elementos de men'
>&:enu5tem? por encima del ya existente. !ambiamos la propiedad VtextW a los textos previstos,
cambiamos las propiedades Vtool"ip"extW a VAbrir archivo nuevoW, V/alvar archivoW, V/alvar con
otro nombreW y V/alir de la aplicacinW respectivamente. 0inalmente, cambiamos las propiedades
VacceleratorW de cada una de las opciones de VArchivoW a trav%s de
de esta manera cambiamos el ata+o de te+ado a !trl8A, !trl8/, !trl8! las tres primeras opciones de
VArchivoW. $s decir:
Lamos #inalmente a colocar un icono en las opciones VAbrirW y V/alvarW. -ara hacer esto lo primero
que tenemos que hacer es localizar la carpeta !:i$+emplos&avaiApli$+emploisrciaplie+emploiresources
>o en su caso, la correspondiente a los recursos del proyecto? y copiar los iconos que representar(n las
dos #unciones. Luego seleccionando el elemento de men' VAbrirW y desde la ca+a de propiedades
seleccionamos la propiedad ViconW y seleccionamos #inalmente el archivo, es decir:
0inalmente,
0uente: http:11+tagua.Eordpress.com1;<,<1<U1;D1tutorial3de3+ava3sEing3,,3+menubar3+menu3+menuitem3+progressbar3+textarea1
I?lamar J%rame dede Bn j,enuItem NETBE(N-J
-ues en el evento onclic2 del menu, lo puedes hacer tansolamente debes, si estas traba+ando desde el
editor de #ormularios del netbeans, hacer cli2 derecho3Ceventos3Cmouse clic2ed te parecera el metodo
que te captara el evento clic2 >tambien se lo puede hacer desde el evento action? luego llamas a tu
#ormulario instanciandolo
0ormualrio #ormOneE 0ormulario>?P
#orm.setLisible>true?P
y listo con esto tendria que andar
ha y tambien tendrias que tener en cuenta, si los #ormualrios estan en modal o no, siempre la ventana
principal tiene que ser un +#rame y la que despues se abren tienen que ser +dialog, y a estas se la pueden
poner como modal o no...saludos
%uente: http:11es.ansEers.yahoo.com1question1indexSqidO;<,,<;<,<U=9,QAA,HlcU
JCom*oBo) Con 8*jetos y Base de Datos ,y->?
public BectorVClase@bjetoParaCombo%o*X 4ista;e@bjetosParaCombo%o*()
Connection cone*ion&
cone*ion , Cone*ion%;#obtenerCone*ion()&
tr"
=esultSet resultado&
Statement sentencia&
sentencia,cone*ion#createStatement()&
resultado,sentencia#e*ecute3uer"($S)4)C5 . 6=@M @bjetoParaCombo%o*$)&
BectorVClase@bjetoParaCombo%o*X data,ne/ BectorVClase@bjetoParaCombo%o*X()&
i0(resultado#ne*t())
do
Clase@bjetoParaCombo%o* o4ista5emporal , ne/
Clase@bjetoParaCombo%o*(resultado#getAnt(1)<resultado#getString(!))&
data#add)lement(o4ista5emporal)&
(
/2ile(resultado#ne*t())&
return data&
(
else
return null&
(
( catc2()*ception e*)
S"stem#out#print(e*)&
return null&
(
(
%uente: http:11chuEi2i.chuidiang.org1index.phpStitleO&!ombo.oxN!onN@b+etosNyN.aseNdeNDatosN:y/QL
Ejecutar ->? en Java
$n esta ocasin veremos como e+ecutar sentencias /QL en &ava, tomando en cuenta la conexin que
realizamos a la base de datos anteriormente.
-ara este e+emplo uso una tabla llamada VusuariosW, la cual tiene 'nicamente B campos: id>autoinc?,
nombre y contrase*a
$l cdigo de la clase es el siguiente:
import java#s:l#.&
public class Cone*ion
private String user&
private String pass/ord&
private String db&
private String 2ost&
private String url&
private Connection conn , null&
private Statement stm&
private =esultSet rs&
public Cone*ion(String usuario< String contraseLa< String bd< String servidor)

t2is#user , usuario&
t2is#pass/ord , contraseLa&
t2is#db , bd&
t2is#2ost , servidor&
t2is#url , $jdbc:m"s:l:--$ P t2is#2ost P $-$ P t2is#db&
(
public void conectar()

tr"
Class#0orName($org#gjt#mm#m"s:l#;river$)&
conn , ;riverManager#getConnection(url< user< pass/ord)&
i0 (conn E, null)

S"stem#out#println($Cone*iIn a base de datos $PurlP$ ### @k$)&


stm , conn#createStatement()&
(
(
catc2(S34)*ception e*)
S"stem#out#println($Jubo un problema al intentar conectarse con la base de datos
Purl)&
(
catc2(ClassNot6ound)*ception e*)
S"stem#out#println(e*)&
(
(
public void consultar() t2ro/s S34)*ception

rs , stm#e*ecute3uer"($S)4)C5 . 6=@M usuarios$)&


/2ile(rs#ne*t())

S"stem#out#println(rs#getString($nombre$))&
S"stem#out#println(rs#getString($contraseLa$))&
(
(
public void actualiMar() t2ro/s S34)*ception

stm#e*ecute($CP;D5) usuarios S)5 nombre,^nombre usuario^ HJ)=) id,$P1)&


(
public void insertar() t2ro/s S34)*ception

stm#e*ecute($ANS)=5 AN5@ usuarios (nombre< contraseLa) BD4C)S (^ne/?name^<


^ne/?Pass^)$)&
(
public void eliminar() t2ro/s S34)*ception

stm#e*ecute($;)4)5) 6=@M usuarios HJ)=) id,$P1)&


(
(
lnicamente resta crear una instancia de la clase y empezar a utilizar sus m%todos.
0uente: http:11#ragoEb.Eordpress.com1;<<Q1<=1<Q1e+ecutar3sql3en3+ava1
Ejemplo de Java V ->? V Net*eans
Despu%s de un poco de retraso de este post y de tener un poco de tiempo sin postear algo, traigo este
e+emplo >el tercero? de &ava y :y/QL ba+o la plata#orma )etbeans. $l propsito de este post es crear
una clase que realmente realiza las acciones b(sicas >agregar, modi#icar, eliminar, consultar? pero
implementadas de una Vme+or maneraW comparada con los otros post que hay en este blog sobre este
tema >tampoco quiero decir que sea la me+or ni mucho menos?.
La base de datos que usaremos para este e+emplo es la siguiente:
.D: prueba.
tabla: usuarios.
campos: id>autoinc?, nombre, contrase*a.
Diagrama de clases:
.ueno, primero que nada empezaremos con nuestra clase que contendr( los m%todos de las acciones
que vamos a realizar.
import java#s:l#.&
import java#util#Jas2table&
public class SQLconnection
private String user&
private String pass/ord&
private String db&
private String 2ost&
private String url&
private Connection conn , null&
private Statement stm&
private =esultSet rs&
public SQLconnection!

t2is#url , _jdbc:m"s:l:--` P t2is#2ost P _-` P t2is#db&


(
public SQLconnection Strin" server# Strin" usuario# Strin" contrase$a# Strin" bd!

t2is#user , usuario&
t2is#pass/ord , contraseLa&
t2is#db , bd&
t2is#2ost , server&
t2is#url , _jdbc:m"s:l:--` P t2is#2ost P _-` P t2is#db&
(
public void connectar!

tr"
Class#0orName(_org#gjt#mm#m"s:l#;river`)&
conn , ;riverManager#getConnection(url< user< pass/ord)&
i0 (conn E, null)

S"stem#out#println(_Cone*iIn a base de datos _PurlP` b @k`)&


stm , conn#createStatement()&
(
(
catc2(S34)*ception e*)
S"stem#out#println(_Jubo un problema al intentar conectarse con la base de datos
_Purl)&
(
catc2(ClassNot6ound)*ception e*)
S"stem#out#println(e*)&
(
(
public Strin" "et%b!
return db&
(
public void set%bStrin" db!
t2is#db , db&
(
public Strin" "et&ost!
return 2ost&
(
public void set&ostStrin" host!
t2is#2ost , 2ost&
(
public Strin" "etPassword!
return pass/ord&
(
public void setPasswordStrin" password!
t2is#pass/ord , pass/ord&
(
public Strin" "et'ser!
return user&
(
public void set'serStrin" user!
t2is#user , user&
(
public (esultSet consultarStrin" tabla! throws SQL)xception

rs , stm#e*ecute3uer"(_S)4)C5 . 6=@M ` P tabla)&


return rs&
(
public Strin" buscar*ombreStrin" tabla# Strin" nombre! throws SQL)xception

String name , null&


tr"
rs , stm#e*ecute3uer"(_S)4)C5 . 6=@M ` P tabla P _ HJ)=) nombre , c`P nombre P`c
4AMA5a)&
rs#ne*t()&
name , rs#getString(!)&
(catc2(S34)*ception e*)S"stem#out#println(e*)&(
return name&
(
public void insertar&ashtable usuario!

tr"
stm#e*ecute(_ANS)=5 AN5@ usuarios (nombre< contraseLa) BD4C)S (c` P
usuario#get(_nombre`) P _c<Q` P usuario#get(_contraseLa`) P _c)`)&
(catc2 (S34)*ception e*)
S"stem#out#println(e*)&
(
(
public void actuali+arStrin" tabla# &ashtable usuario# Strin" nombre!

tr"
stm#e*ecute(_CP;D5) ` P tabla P ` S)5 nombre,Q` P usuario#get(_nombre`) P _c HJ)=)
nombre,Q` P nombre P _c`)&
(catc2 (S34)*ception e*)
S"stem#out#println(e*)&
(
(
public void eliminarStrin" tabla# Strin" nombre!

tr"
stm#e*ecute(_;)4)5) 6=@M ` P tabla P ` HJ)=) nombre,Q` P nombre P _c`)&
(catc2 (S34)*ception e*)
S"stem#out#println(e*)&
(
(
(
!omo podemos observar, esta clase cuenta con sobrecarga de constructores lo cual nos permite
conectarnos de ; maneras distintas a la base de datos. La primera es utilizar el constructor que no
recibe ning'n par(metro y de#inirlos mediante los m%todos set y get para despu%s llamar al m%todo
conectar. La segunda es enviarle directamente los valores al constructor y, al igual que en la #orma
anterior, e+ecutar el m%todo conectar, y esta ser( la #orma que usaremos para nuestro e+emplo.
-rimero que nada vamos a conectarnos a nuestra base de datos y realizaremos una consulta de todos
los registros:
S34connection con , ne/ S34connection(_local2ost`<_usuario`<_contraseLa`<_prueba`)&
con#connectar()&
=esultSet rs&
rs , con#consultar(_usuarios`)&
/2ile(rs#ne*t())
S"stem#out#println(rs#getString(1))&
S"stem#out#println(rs#getString(!))&
S"stem#out#println(rs#getString('))&
(
$n esta clase tambi%n implementamos una opcin que nos permite realizar b'squedas por medio de
nombres>es el campo de la base de datos que eleg6 para este e+emplo?P ha este m%todo le mandamos ;
par(metros, que son la base de datos y el nombre:
S"stem#out#println(con#buscarNombre(_usuarios`< _0rago`))&
-ara insertar un nuevo registro vamos a hacer uso del Fastable para enviarle los valores que queremos
agregar:
Jas2table usuario , ne/ Jas2table()&
usuario#put(_nombre`<_0rago`)&
usuario#put(_contraseLa`<_***`)&
con#insertar(usuario)&
-ara eliminar un registro simplemente le e+ecutamos el m%todo correspondiente y le pasamos como
parametros la tabla y el nomrbe del usuario a eliminar:
con#eliminar(tabla< _0rago`)&
-ara actualiMar un registro le tenemos que pasar B par(metros al m%todo. $L primero es el nombre de
la tablaP el segundo es un Fastable en el que se incluya la modi#icacin que se quiere realizar y el tercer
es, en este caso, el nombre de la persona a la que se le va realizar la modi#icacin:
Jas2table usuario , ne/ Jas2table()&
usuario#put(_nombre`< _0rago1a)&
con#actualiMar(tabla< usuario< _0rago`)&
0uente: http:11#ragoEb.Eordpress.com1;<<Q1<H1;;1e+emplo3de3+ava3sql3netbeans1
C8NECT(5 ,W->? ( J(C( /Net*eans0
!onocemos la #orma de conectar mysql o alguna base de datos como lo es /ql /erver, @racle,
-osgre/QL a +ava perousando lis drivers:anager una #orma visual muy practica pero muy comple+a a
la hora de mandar la aplicacion a alguna otra computadora, para olvidarnos de esto y no tener un
desorden de codi#icaciones visuales en el #orm crearemos una clase de conexcion, en ella realizaremos
un metodos para la conexion y otros dos para hacer las consultas y operaciones de insert y update a la
base de datos.
?a Clase
-ara crear la clase de conexion en nuestra solucion damos clic en el boton de Agregar Archivo, o nos
vamos a archivo una vez que nos aparesca la ventana de nuevo archivo esco+emos la carpeta de !lases
&ava y el tipo de archivo !lase &ava, una vez que nos ha creado la , empezamos bueno de esta seccion,
la codi#icacion.
Codi3icacion:
$mpezamos anexando la siguiente directiva que utilizaremos +ava.sql.X, esto nos permitira utilizar
todos los componentes para la creacion de la conexion y otros metodos que utilizemos
$+emplo:
&mport 8aa1sql19
:etodo de conexion , para el metodo de conexcion para ello utilizaremos los siguientes componentes:
!onnection, /tatement y 7esult/et, a continuacion generamos el metodo o en este caso el constructor
de la clase.
p&'li% Conexion() {
tr/
{
Cl"ss.$or!"me(0%om.m/s1l.jd'%.2rier3);
String &rl = 0jd'%(m/s1l(**lo%"lhost(3345*'dpr&e'r"sj""3;
%n= 2rier6"n"ger.getConne%tion( &rl7 0root37 0+234#58 );
.
%"t%h(Ex%eption ee)
{
S/stem.o&t.println(0Error( 3 ) ee.get6ess"ge());
.
.
/i se observa detenidamente, se utiliza una variable string denominada url, que sera la direccion de
nuestra base de datos, la primera linea nos crea la in#ormacion del driver de conexion y por ultimo se
genera dicha conexion usando la variable VcnW y asignandole los parametros de ruta de la base de
datos,usuario y contrase*a.
'etodos Au/iliares
*continuacion crearemos los metodos para generar los insert/ update y deletes de los registros de la
base de datos1
p&'li% String Eje%&t"r(String s1l)
{
String error=3";
Tr/
{
St=Cone%.%re"teSt"tement();
St.exe%&te(s1l);
.
%"t%h(Ex%eption ex)
{
error = ex.get6ess"ge();
.
ret&rn(error);
.
$l /t es nuestro /tatemen el cual generara el comando de e+ecucion, para ello todo este comando lo
mandamos en el parametro sql, la #uncion es de tipo string, por ello se regresa la variable de tipo string
error la cual contendra el error que pueda optenerce en el proceso de insert o update,o en su caso no
traer nada debido a que la accion #ue exitosa.
-or ultimo creamos el metodo para e+ecutar consultas para ello utilizaremos un componente llamado
7esult/et.
p&'li% 9es&ltSet Cons&lt"(String s1l){
String error=3";
Tr/
{
St=Cone%.%re"teSt"tement();
reg=St.exe%&te:&er/(s1l);
.
%"t%h(Ex%eption ee)
{
error = ee.get6ess"ge();
.
ret&rn(reg);
.
Dentro de esta #uncion volvemos a encontrar a nuestro /tatement por lo anteriormente mencionado sera
nuestro e+ecutor de comandos del parametro sql el cual tendra como valor la consulta que deseamos
e+ecutar.
Conclusion:
"odas la variables de conexion >cn?, /tatement >/t? y 7esult/et>reg? #ueron declaradas #uera de todos
los metodos, es decir son globales y pueden verse en toda la clase no importa en que proceso lo
utilizemos, y para saldar la duda, anteriormente di+e que todos estos son metodos, asi es pero por que
e+ecutar y consulta los llame #unciones, es sencillo recordemos algo de teoria, toda #uncion retorna un
valor es por ello que se le llama #unciones a e+ecutar y a consulta por que regresan el valor de la
variable error y reg respectivamente.
Bso
-ara terminar esta entrada, les de+o la #orma de utilizar esta clase.
**;nst"n%i"mos l" %l"se de %onexion
Conexion %xn = ne- Conex%ion();
**<ener"mos &n insert en l" t"'l" de %lientes &s"ndo el metodo eje%&t"r de l"
%l"se %onexi=n
string msg =
%xn.Eje%&t"r(0;!SE9T ;!T> tpj%lientes (nom're7"pellidos) ?@ABES (CD&"nE7F,ereGE);
**<ener"mos &n sele%t " l" t"'l" de %lientes7 el res&lt"do %"er" en res&ltset
9es&ltSet = %xn.Cons&lt"(0SEAECT H F9>6 tpj%lientes3);
N8T( I,'85T(NTE: Las #unciones o metodos utilizados, regresan un tipo de datos o componente
especi#ico, es por ello que en e+ecutar el resultado lo guardo en eun string y en consulta lo guardo en n
7esult/et, ademas hay que resaltar algo, +ava obliga a los usuarioa utilizar el clasico catch y try para
mane+ar correctamente las exepciones que puedan existir dentro de la llamada al metodo, eso es todo
por el dia de hoy espero les sea de gran utilidad este codigo, de+en sus comentarion y1o sugerencias de
que desean ver sobre tecnologia en el blog.
0uente: http:11+hodric2gg.Eordpress.com1;<<H1,,1B<1conectar3mysql3a3+ava3netbeans1
Conectando 'ostgre->? con Java
$n este mini tutorial intentar% explicar la manera en conectar nuestra aplicacin hecha en &ALA con la
.ase de Datos de -ostgre/QL.
-rimero, es necesario descargarse el &D.! Driver para -ostgre/QL. $ste se encuentra en la p(gina
http:11+dbc.postgresql.org1index.html @bviamente, ser( necesario contar con nuestra .ase de Datos
#uncionando para realizar las consultas necesarias.
-osteriormente hay que determinar la manera de agregar este Driver a nuestro proyecto. )et.eans
o#rece una manera mas que sencilla.
!onociendo la ubicacin de nuestro Driver y con el proyecto abierto, en el -anel de -royectos,
ubicamos en el mrbol de -royecto la opcin Libraries, clic Derecho en ella y seleccionamos Add &A7 1
0older..., de esta manera estaremos
agregando e+ .&A7 del Driver que descargamos. $sto nos crea en nuestro proyecto una carpeta llamada
IdistI y en ella otra de nombre IlibI donde esta nuestro Driver.
Ahora, teniendo lo necesario, podemos probar nuestra conexin con -ostgre/QL y realizar lo que nos
concierne, Altas, .a+as y :odi#icaciones a nuestras tablas.
-ara empezar, debemos de importar lo siguiente:
import java#s:l#.&
!abe mencionar que hay una gran di#erencia entre /elect y 4pdate, 5nsert o Delete, ya que no se
aplican de igual manera. A continuacin muestro el proceso para realizar un /elect >en idioma gee2,
vamos a selectear?
public class Main
public static void main(String[] args)
DXCaria*le para almacenar la B5? de cone)i+n a nuestra Base de Datos, si esta estuviera en otra
mH1uina, necesitariamos estar registrados en ella y contar con su I'XD
String url , $jdbc:postgres:l:--local2ost-moo$&
tr"
DD(cceso al Driver
Class#0orName($org#postgres:l#;river$)&
DD?a cone)i+n con los parHmetros necesarios
Connection con , ;riverManager#getConnection( url<$postgres$<$postgres$)&
DD(*rimos la cone)i+n y la iniciamos
Statement stmt , con#createStatement()&
DXBn 5esult-et es como en !NET un Data-et, un arreglo temporal donde se almacenarH el
resultado de la consulta ->?XD
=esultSet rs&
DDBna varia*le -tring para almacenar la sentencia ->?
String :uer" , $select id as A; 0rom moo#usuarios$&
DDEn el 5esult-et guardamos el resultado de ejecutar la consulta
rs , stmt#e*ecute3uer"(:uer")&
DDEn un ciclo &.ile recorremos cada 3ila del resultado de nuestro -elect
/2ile ( rs#ne*t())
DX(1ui practicamente podemos .acer lo 1ue deseemos con el resultado, en mi caso solo lo mande
a imprimirXD
S"stem#out#println(rs#getString($A;$) P $ $ P rs#getString($A;$))&
(
DDCerramos la cone)i+n
stmt#e*ecute($)N;$)&
stmt#close()&
con#close()&
(
catc2( )*ception e )
DD'or si ocurre un error
S"stem#out#println(e#getMessage())&
e#printStack5race()&
(
(
(
'ara realiMar todo a1uello di3erente a un -elect, utilMaremos lo siguiente:
DXCaria*le para almacenar la B5? de cone)i+n a nuestra Base de Datos, si esta estuviera en otra
mH1uina, necesitariamos estar registrados en ella y contar con su I'XD
String url , $jdbc:postgres:l:--local2ost-moo$&
tr"
DD(cceso al Driver
Class#0orName($org#postgres:l#;river$)&
DD?a cone)i+n con los parHmetros necesarios
Connection con , ;riverManager#getConnection( url<$postgres$<$postgres$)&
DD(*rimos la cone)i+n y la iniciamos
Statement stmt , con#createStatement()&
DDBna varia*le -tring para almacenar la sentencia ->?
String :uer" , $update moo#usuarios set nombre , ^Mauricio^ /2ere id ,
^1^$&
DDEjecutamos la consulta ->?
stmt#e*ecute3uer"(:uer")&
DDCerramos la cone)i+n
stmt#e*ecute($)N;$)&
stmt#close()&
con#close()&
(
catc2( )*ception e )
DD'or si ocurre un error
/ystem.out.println>e.get:essage>??P
e.print/tac2"race>?P
Z
$s muy importante tener en cuenta que si este m%todo lo utilizas en una #uncin para hacerla llamar
cuando lo necesites, y quieras enviarle tanto argumentos como retornar resultados, en la #uncin de
/elect las l6neas siguientes )@ deben de estar presentes:
stmt#e*ecute($)N;$)&
stmt#close()&
en la parte de 4pdate, 5nsert o Delete, solo la siguiente l6nea:
stmt#e*ecute($)N;$)&
$spero que sea 'til esta in#ormacin.
0uente: http:11mygnet.net1articulos1+ava1conectandoNpostgresqlNconN+ava.,,9;
5esult-et Y JTa*le
.asado en el tutorial :eter un 7esult/et en un &"able veremos muy brevemente como hacerlo,
destacando las principales l6neas del cdigo.
$n primera instancia nos conectamos a la .D y e+ecutamos la consulta /QL que nos llenar( el
7esult/et
Driver,anager#register;river(new com#m"s:l#jdbc#Driver())&
**9eempl"G"r lo%"lhost7 pr&e'"7 &s&"rio / %l"e por los host de l" '"se de d"tos7
nom're de es1&em"7 &ser / p"ss.
Connection conexion O
Driver,anager.get!onnection>I+dbc:mysql:11localhost1pruebaI,IusuarioI,IclaveI?P
-tatement s O conexion.createn>?P
5esult-et rs O s.executeQuery>Iselect X #rom personaI?P
!rear un &"able, pasando como par(metro un De#ault"able:odel
De3aultTa*le,odel modelo , new De3aultTa*le,odel()&
JTa*le tabla , new JTa*le(modelo)&
)os queda resolver como llenar el De#ault"able:odel. .(sicamente, la #orma es esta:
** Cre"mos l"s %ol&mn"s.
modelo#addColumn($id$)&
modelo#addColumn($nombre$)&
modelo.add!olumn>InacimientoI?P
:: $ucle para cada resultado en la consulta
Ehile >rs.next>?? Y
:: 6e crea un array que ser una de las .ilas de la tabla1
,bject [\ #ila O ne& ,bject[B\P :: ;ay tres columnas en la tabla
** Se rellen" %"d" posi%i=n del "rr"/ %on &n" de l"s %ol&mn"s de l" t"'l" en
'"se de d"tos.
0or (int i,8&iV'&iPP)
#ila[i\ O rs.get@b+ect>i8,?P 11 $l primer indice en rs es el ,, no el cero, por eso se suma ,.
11 /e a*ade al modelo la #ila completa.
modelo.add7oE>#ila?P
Z
4na alternativa propuesta en el tutorial es crear una clase !onversor7esult/etADe#ault"able:odel
>puedes optar por un nombre m(s corto? que haciendo uso del atributo 7esult/et:etaData del
7esult/et pueda obtener la metadata de las columnas seleccionadas. De esta #orma, nos
independizamos de la consulta que se realice y el n'mero de #ilas y columnas devueltas.
%uente: http:11luau#.com1;<<Q1<D1;B1resultset3+table1
?lamar 8tro J%rame
-ara llamar a un &#rame desde un boton, ya sea, situado en la pantalla principal o no, solo debes escribir
el siguiente codigo en el evento del boton que deseas:
6rame! dg,ne/ 6rame!()&
;imension dlgSiMe,dg#getPre0erredSiMe()&
;imension pantalla,getSiMe()&
;imension ventana,dg#getSiMe()&
dg#set4ocation((pantalla#/idt2Ndg#HA;5J)-!<(pantalla#2eig2tNdg#J)AUJ5)-!)&
dg#set4ocation=elative5o(null)&--Centra el segundo 0rame en la pantalla
dg#pack()&
dg#set=esiMable(true)&--Permite redimensionarlo o agrandarlo
dg#setBisible(true)&--)sto 2ace :ue se vea el segundo j0rame
%uente: http:11EEE.laEebdelprogramador.com1#oros1&.uilder1HBQB<=3LlamarN@troN&0rameNNN.html
,andar llamar a otra ventana desde un *oton utiliMando NetBeans!
/aludos compa*eros , en la universidad apenas comienzo a ver +ava, y no hemos visto mucho sobre
este lengua+e.
:e impuse un peque*o reto el cual consiste en conectar el programa creado en )et.eans a una base de
datos creada en :y/QL, la conexion #ue correcta y despues de leer y moverle por un rato pude lograr
insertar datos a la base desde el propio programa en netbeans.
Ahora lo que quiero hacer es crear otras tablas en la base y obvio desde el programa meter los datos >lo
cual ya se hacer?, la cosa aqui es no se como hacerle para cuando yo le de clic a al boton de I:aestrosI
por e+emplo me aparezca la ventana para desde ahi insertar los datos.
@sea lo que quiero es que cuando yo le de clic a M boton me aparezca la otra ventana para insertar los
datos.
$l code es el siguiente:
!digo -F-:
-.
. alumnos#java
.
. Created on Z de marMo de !818< 8Y:+! DM
.-
package desktopapplication1&
import java#s:l#.&
import java*#s/ing#G@ptionPane&
-..
.
. Faut2or D4CMN@
.-
public class alumnos e*tends java*#s/ing#G6rame
private Connection conn&
private Statement sentencia&
private =esultSet res&
-.. Creates ne/ 0orm alumnos .-
public alumnos()
initComponents()&

tr"
Class#0orName($org#gjt#mm#m"s:l#;river$)&

onn,;riverManager#getConnection($jdbc:m"s:l:--local2ost-control?escolar$<$root$<$ro
ot$)&
sentencia,conn#createStatement()&
G@ptionPane#s2o/Message;ialog(t2is<$4a cone*ion 0ue correcta$)&



(catc2()*ception e)
G@ptionPane#s2o/Message;ialog(t2is<e#getMessage())&
(
(
-.. 52is met2od is called 0rom /it2in t2e constructor to
. initialiMe t2e 0orm#
. HD=NANU: ;o N@5 modi0" t2is code# 52e content o0 t2is met2od is
. al/a"s regenerated b" t2e 6orm )ditor#
.-
FSuppressHarnings($unc2ecked$)
-- VeditorN0old de0aultstate,$collapsed$ desc,$Uenerated Code$X
private void initComponents()
j%utton1 , ne/ java*#s/ing#G%utton()&
j5e*t6ield1 , ne/ java*#s/ing#G5e*t6ield()&
j5e*t6ield! , ne/ java*#s/ing#G5e*t6ield()&
j5e*t6ield' , ne/ java*#s/ing#G5e*t6ield()&
j5e*t6ield7 , ne/ java*#s/ing#G5e*t6ield()&
j4abel1 , ne/ java*#s/ing#G4abel()&
j4abel! , ne/ java*#s/ing#G4abel()&
j4abel' , ne/ java*#s/ing#G4abel()&
j4abel7 , ne/ java*#s/ing#G4abel()&
j4abel+ , ne/ java*#s/ing#G4abel()&
j4abel9 , ne/ java*#s/ing#G4abel()&
j5e*t6ield+ , ne/ java*#s/ing#G5e*t6ield()&
j5e*t6ield9 , ne/ java*#s/ing#G5e*t6ield()&
j%utton! , ne/ java*#s/ing#G%utton()&
j%utton' , ne/ java*#s/ing#G%utton()&
j%utton7 , ne/ java*#s/ing#G%utton()&
set;e0aultClose@peration(java*#s/ing#Hindo/Constants#)KA5?@N?C4@S))&
setName($6orm$)& -- N@A1ZN
org#jdesktop#application#=esourceMap resourceMap ,
org#jdesktop#application#Dpplication#getAnstance(desktopapplication1#;esktopDpplica
tion1#class)#getConte*t()#get=esourceMap(alumnos#class)&
j%utton1#set5e*t(resourceMap#getString($btn?prim#te*t$))& -- N@A1ZN
j%utton1#setName($btn?prim$)& -- N@A1ZN
j%utton1#addDction4istener(ne/ java#a/t#event#Dction4istener()
public void actionPer0ormed(java#a/t#event#Dction)vent evt)
j%utton1DctionPer0ormed(evt)&
(
()&
j5e*t6ield1#set5e*t(resourceMap#getString($Ad?t*t#te*t$))& -- N@A1ZN
j5e*t6ield1#setName($Ad?t*t$)& -- N@A1ZN
j5e*t6ield!#set5e*t(resourceMap#getString($j5e*t6ield!#te*t$))& -- N@A1ZN
j5e*t6ield!#setName($j5e*t6ield!$)& -- N@A1ZN
j5e*t6ield'#set5e*t(resourceMap#getString($j5e*t6ield'#te*t$))& -- N@A1ZN
j5e*t6ield'#setName($j5e*t6ield'$)& -- N@A1ZN
j5e*t6ield7#set5e*t(resourceMap#getString($j5e*t6ield7#te*t$))& -- N@A1ZN
j5e*t6ield7#setName($j5e*t6ield7$)& -- N@A1ZN
j4abel1#set5e*t(resourceMap#getString($j4abel1#te*t$))& -- N@A1ZN
j4abel1#setName($j4abel1$)& -- N@A1ZN
j4abel!#set5e*t(resourceMap#getString($j4abel!#te*t$))& -- N@A1ZN
j4abel!#setName($j4abel!$)& -- N@A1ZN
j4abel'#set5e*t(resourceMap#getString($j4abel'#te*t$))& -- N@A1ZN
j4abel'#setName($j4abel'$)& -- N@A1ZN
j4abel7#set5e*t(resourceMap#getString($j4abel7#te*t$))& -- N@A1ZN
j4abel7#setName($j4abel7$)& -- N@A1ZN
j4abel+#set5e*t(resourceMap#getString($j4abel+#te*t$))& -- N@A1ZN
j4abel+#setName($j4abel+$)& -- N@A1ZN
j4abel9#set5e*t(resourceMap#getString($j4abel9#te*t$))& -- N@A1ZN
j4abel9#setName($j4abel9$)& -- N@A1ZN
j5e*t6ield+#set5e*t(resourceMap#getString($j5e*t6ield+#te*t$))& -- N@A1ZN
j5e*t6ield+#setName($j5e*t6ield+$)& -- N@A1ZN
j5e*t6ield9#set5e*t(resourceMap#getString($j5e*t6ield9#te*t$))& -- N@A1ZN
j5e*t6ield9#setName($j5e*t6ield9$)& -- N@A1ZN
j%utton!#set5e*t(resourceMap#getString($j%utton!#te*t$))& -- N@A1ZN
j%utton!#setName($j%utton!$)& -- N@A1ZN
j%utton!#addDction4istener(ne/ java#a/t#event#Dction4istener()
public void actionPer0ormed(java#a/t#event#Dction)vent evt)
j%utton!DctionPer0ormed(evt)&
(
()&
j%utton'#set5e*t(resourceMap#getString($j%utton'#te*t$))& -- N@A1ZN
j%utton'#setName($j%utton'$)& -- N@A1ZN
j%utton'#addDction4istener(ne/ java#a/t#event#Dction4istener()
public void actionPer0ormed(java#a/t#event#Dction)vent evt)
j%utton'DctionPer0ormed(evt)&
(
()&
j%utton7#set5e*t(resourceMap#getString($j%utton7#te*t$))& -- N@A1ZN
j%utton7#setName($j%utton7$)& -- N@A1ZN
j%utton7#addDction4istener(ne/ java#a/t#event#Dction4istener()
public void actionPer0ormed(java#a/t#event#Dction)vent evt)
j%utton7DctionPer0ormed(evt)&
(
()&
java*#s/ing#Uroup4a"out la"out , ne/
java*#s/ing#Uroup4a"out(getContentPane())&
getContentPane()#set4a"out(la"out)&
la"out#setJoriMontalUroup(
la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addUroup(la"out#createSe:uentialUroup()
#addContainerUap()

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addComponent(j4abel1< java*#s/ing#Uroup4a"out#P=)6)==);?SAT)<
+'< java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addComponent(j4abel!)
#addComponent(j4abel7)
#addComponent(j4abel')
#addComponent(j4abel+)
#addComponent(j4abel9))
#addUap(!'< !'< !')

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU<
0alse)
#addComponent(j5e*t6ield9)
#addComponent(j5e*t6ield+)
#addComponent(j5e*t6ield7)
#addComponent(j5e*t6ield!<
java*#s/ing#Uroup4a"out#;)6DC45?SAT)< 1\!< S2ort#MDK?BD4C))
#addComponent(j5e*t6ield')
#addComponent(j5e*t6ield1))
#addUap('!< '!< '!)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addComponent(j%utton!)
#addComponent(j%utton')
#addComponent(j%utton1)
#addComponent(j%utton7))
#addContainerUap(''< S2ort#MDK?BD4C)))
)&
la"out#setBerticalUroup(
la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addUroup(la"out#createSe:uentialUroup()

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addUroup(la"out#createSe:uentialUroup()
#addUap(!Z< !Z< !Z)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#%DS)4AN))
#addComponent(j5e*t6ield1<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< java*#s/ing#Uroup4a"out#;)6DC45?SAT)<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addComponent(j4abel1)))
#addUroup(la"out#createSe:uentialUroup()
#addContainerUap()
#addComponent(j%utton7)))
#addUap(1Z< 1Z< 1Z)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#%DS)4AN))
#addComponent(j5e*t6ield!<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< java*#s/ing#Uroup4a"out#;)6DC45?SAT)<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addComponent(j4abel!)
#addComponent(j%utton1))

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addUroup(la"out#createSe:uentialUroup()
#addUap(1Z< 1Z< 1Z)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#%DS)4AN))
#addComponent(j5e*t6ield'<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< java*#s/ing#Uroup4a"out#;)6DC45?SAT)<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addComponent(j4abel7))
#addUap(1Z< 1Z< 1Z)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#%DS)4AN))
#addComponent(j5e*t6ield7<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< java*#s/ing#Uroup4a"out#;)6DC45?SAT)<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addComponent(j4abel'))
#addUap(1Z< 1Z< 1Z)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#%DS)4AN))
#addComponent(j4abel+)
#addComponent(j5e*t6ield+<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< java*#s/ing#Uroup4a"out#;)6DC45?SAT)<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addComponent(j%utton'))
#addUap(1Z< 1Z< 1Z)

#addUroup(la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#%DS)4AN))
#addComponent(j4abel9)
#addComponent(j5e*t6ield9<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< java*#s/ing#Uroup4a"out#;)6DC45?SAT)<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))))
#addUroup(la"out#createSe:uentialUroup()
#addUap('9< '9< '9)
#addComponent(j%utton!)))
#addContainerUap(+9< S2ort#MDK?BD4C)))
)&
pack()&
(-- V-editorN0oldX
private void j%utton1DctionPer0ormed(java#a/t#event#Dction)vent evt)
-- 5@;@ add "our 2andling code 2ere:
tr"

Class#0orName($org#gjt#mm#m"s:l#;river$)&

conn,;riverManager#getConnection($jdbc:m"s:l:--local2ost-control?escolar$<$root$<$r
oot$)&
sentencia,conn#createStatement()&


res,sentencia#e*ecute3uer"($S)4)C5 . 6=@M estudiantes$)&
res#0irst()&

j5e*t6ield1#set5e*t(res#getString(1))&
j5e*t6ield!#set5e*t(res#getString(!))&
j5e*t6ield'#set5e*t(res#getString('))&
j5e*t6ield7#set5e*t(res#getString(7))&
j5e*t6ield+#set5e*t(res#getString(+))&
j5e*t6ield9#set5e*t(res#getString(9))&



(
catc2()*ception e)
G@ptionPane#s2o/Message;ialog(t2is<e#getMessage())&


(
(
private void j%utton!DctionPer0ormed(java#a/t#event#Dction)vent evt)
tr"

String Matricula,($8$)&
String Nombre?)studiante,j5e*t6ield!#get5e*t()&
String )dad,j5e*t6ield'#get5e*t()&
String Se*o,j5e*t6ield7#get5e*t()&
String 5ele0ono,j5e*t6ield+#get5e*t()&
String ;ireccion,j5e*t6ield9#get5e*t()&

j5e*t6ield1#set5e*t($$)&
j5e*t6ield!#set5e*t($$)&
j5e*t6ield'#set5e*t($$)&
j5e*t6ield7#set5e*t($$)&
j5e*t6ield+#set5e*t($$)&
j5e*t6ield9#set5e*t($$)&

sentencia#e*ecuteCpdate($ANS)=5 AN5@ estudiantes BD4C)S
(^$PMatriculaP$^<^$PNombre?)studianteP$^<^$P)dadP$^<^$PSe*oP$^<^$P5ele0onoP$^<^$P;i
reccionP$^ )$)&
(
catc2()*ception e)

G@ptionPane#s2o/Message;ialog(t2is<e#getMessage())&
(
(
private void j%utton'DctionPer0ormed(java#a/t#event#Dction)vent evt)
String Nombre?)studiante,j5e*t6ield!#get5e*t()&
tr"

sentencia#e*ecuteCpdate($;)4)5) 0rom estudiantes /2ere
Nombre?)studiante,^$PNombre?)studianteP$^$)&



(
catc2()*ception e)

G@ptionPane#s2o/Message;ialog(t2is<e#getMessage())&

(
(
private void j%utton7DctionPer0ormed(java#a/t#event#Dction)vent evt)
(
-..
. Fparam args t2e command line arguments
.-
public static void main(String args[])
java#a/t#)vent3ueue#invoke4ater(ne/ =unnable()
public void run()
ne/ alumnos()#setBisible(true)&
(
()&
(
-- Bariables declaration N do not modi0"
private java*#s/ing#G%utton j%utton1&
private java*#s/ing#G%utton j%utton!&
private java*#s/ing#G%utton j%utton'&
private java*#s/ing#G%utton j%utton7&
private java*#s/ing#G4abel j4abel1&
private java*#s/ing#G4abel j4abel!&
private java*#s/ing#G4abel j4abel'&
private java*#s/ing#G4abel j4abel7&
private java*#s/ing#G4abel j4abel+&
private java*#s/ing#G4abel j4abel9&
private java*#s/ing#G5e*t6ield j5e*t6ield1&
private java*#s/ing#G5e*t6ield j5e*t6ield!&
private java*#s/ing#G5e*t6ield j5e*t6ield'&
private java*#s/ing#G5e*t6ield j5e*t6ield7&
private java*#s/ing#G5e*t6ield j5e*t6ield+&
private java*#s/ing#G5e*t6ield j5e*t6ield9&
-- )nd o0 variables declaration

(
%uente: http:11#orode+ava.com1shoEthread.php1;B,B3:andar3llamar3a3otra3ventana3desde3un3boton3
utilizando3)et.eans#
TamaQo del resultset
Statement stmt , connection#createStatement(
=esultSet#5>P)?SC=@44?ANS)NSA5AB)<=esultSet#C@NCC= ?=)D;?@N4>)&
=esultSet resultSet , stmt#e*ecute3uer"($S)4)C5 . 6=@M tutabla$)&
resultSet#last()&
int ro/Count , resultSet#get=o/()&
%uente: http:11#orode+ava.com1shoEthread.php1,=U3tamad!Bd.,o3del3resultset
,ostrar un 5esult-et en un JTa*le en Java
J(C(:
**,rimero se o'tiene l" %onexi=n " l" '"se de d"tos %on &n %=digo %omo
este(
%river-ana"er#register;river(new com#m"s:l#jdbc#%river())&
.onnection cone*ion ,
%river-ana"er#getConnection($jdbc:m"s:l:--local2ost-prueba$<$usuario$<$clav
e$)&
**El sig&iente p"so es re"liG"r l" %ons&lt" / o'tener el 9es&ltSet.
El%=digo es el sig&iente
Statements,cone*ion#createStatement()&
(esultSetrs,s#e*ecute3uer"($select.0romtablaprueba$)&
**,"r"meterlosd"tosenelDT"'le7&s"remosl"%l"se2e$"&ltT"'le6odel.,"r"ello'"st
"%oninst"n%i"relDT"'le%omosem&estr"enel%odigo
%efault/able-odelmodelo,new%efault/able-odel()&
0/abletabla,new0/able(modelo)&
**@hor"s=loh"/1&erellen"rel2e$"&ltT"'le6odel%onlosd"tosdel9es&ltSet.
**Cre"mosl"s%ol&mn"s.
modelo#addColumn($id$)&
modelo#addColumn($nombre$)&
modelo#addColumn($tele0ono$)&
**9e%orremoslosregistros%on&n%i%lo-hile
/2ile(rs#ne*t())

**Se%re"&n"rr"/1&eserI&n"del"s$il"sdel"t"'l".
,bject[]0ila,new,bject[']&**J"/tres%ol&mn"senl"t"'l"
**Serellen"%"d"posi%i=ndel"rr"/%on&n"del"s%ol&mn"sdel"t"'l"en'"seded"tos.
0or(inti,8&iV'&iPP)
0ila[i],rs#get@bject(iP1)&**Elprimerindi%eenrsesel+7noel%ero7poresoses&m"+.
**!oes%omoen,J,ootrosleng&"jesdondelosindi%esini%i"n%on4
**Se"K"de"lmodelol"$il"%omplet".
modelo#add=o/(0ila)&
(
%uente: http:11EEE.scriptmatico.com1;<<Q1<D1,Q1mostrar3un3resultset3en3un3+table3en3+ava1
Cargar un jcom*o*o) desde un resulset con Net*eans <!E 5C9
/2ile( =esultado#is%e0ore6irst()E,true)

4ista#addAtem(=esultado#getString('))&
S"stem#out#println(=esultado#is6irst())&
=esultado#previous()&
--S"stem#out#println(=esultado#getString('))&
(
%uente: http:11EEE.programacion.com1#oros1+ava3basico1cargarNunN+comboboxNdesdeNunNresulsetNconNnetbeansN=N<Nrc;N;QB;;H
Consultar DB en Java P ,ostrar resultados en un JTa*le
/iguiendo con nuestro tema de cone)iones a *ases de datos desde Java` !uando estamos traba+ando
con bases de datos y aplicaciones que usen /Eing, la manera m(s elegante de presentar los datos a un
usuario es usando tablas usando la clase &"able.
Lo que haremos ser( b(sicamente crear una clase que herede de la clase Abstract"able:odel:
$sta clase abstracta provee la implementacin por de#ecto de la mayor6a de los m%todos en la inter#az
"able:odel. -ara crear un "able:odel como subclase de Abstract"able:odel necesitar(s
implementar 'nicamente los sigientes tres m%todos:
public int get=o/Count()& public int getColumnCount()&public @bject
getBalueDt(int ro/< int column)&
Dicha clase administrar( el contenido de nuestra tabla. "en en cuenta que vamos a traba+ar con la base
de datos que hicimos aqu6. Leamos entonces el cdigo:
import java#s:l#.&
import java#util#.&
import java*#s/ing#table#.&
-- 4as 0ilas " columnas del objeto =esultSet se cuentan desde 1 " las 0ilas
-- " columnas del objeto G5able se cuentan desde 8# Dl procesar 0ilas
-- o columnas del objeto =esultSet para usarlas en un objeto G5able< es
-- necesario sumar 1 al n]mero de 0ila o columnas para manipular la
-- columna apropiada del objeto =esultSet (es decir< la columna 8 del objeto G5able
-- es la columna 1 del objeto =esultSet " la 0ila 8 del objeto G5able es la 0ila 1
del objeto =esultSet)#
public class Modelo5abla=esultados e*tends Dbstract5ableModel
private Connection cone*ion&
private Statement instruccion&
private =esultSet conjunto=esultados&
private =esultSetMeta;ata meta;atos&
private int numero;e6ilas&
-- mantener el registro del estado de la cone*iIn a la base de datos
private boolean conectadoD4a%ase;e;atos , 0alse&
-- inicialiMar conjunto=esultados " obtener su objeto de meta datos&
-- determinar el n]mero de 0ilas
public Modelo5abla=esultados( String controlador< String url<
String consulta ) t2ro/s S34)*ception< ClassNot6ound)*ception
-- cargar clase de controlador de base de datos
Class#0orName( controlador )&
-- conectarse a la base de datos
cone*ion , ;riverManager#getConnection( url )&
-- crear objeto Statement para consultar la base de datos
instruccion , cone*ion#createStatement(
=esultSet#5>P)?SC=@44?ANS)NSA5AB)<
=esultSet#C@NCC=?=)D;?@N4> )&
-- actualiMar estado de cone*iIn a la base de datos
conectadoD4a%ase;e;atos , true&
-- establecer consulta " ejecutarla
establecerConsulta( consulta )&
(
-- obtener la clase :ue representa al tipo de columna
public Class getColumnClass( int columna ) t2ro/s AllegalState)*ception
-- asegurar :ue la cone*iIn a la base de datos est disponible
i0 ( EconectadoD4a%ase;e;atos )
t2ro/ ne/ AllegalState)*ception( $No 2a" cone*ion a la base de datos$ )&
-- determinar la clase de Gava de columna
tr"
String nombreClase , meta;atos#getColumnClassName( columna P 1 )&
-- devolver objeto Class :ue representa a nombreClase
return Class#0orName( nombreClase )&
(
-- atrapar e*cepciones S34)*ception " ClassNot6ound)*ception
catc2 ( )*ception e*cepcion )
e*cepcion#printStack5race()&
(
-- si ocurren problemas arriba< suponer :ue es tipo @bject
return @bject#class&
(
-- obtener el n]mero de columnas en el objeto =esultSet
public int getColumnCount() t2ro/s AllegalState)*ception
-- asegurar :ue la cone*iIn a la base de datos est disponible
i0 ( EconectadoD4a%ase;e;atos )
t2ro/ ne/ AllegalState)*ception( $No 2a" cone*ion a la base de datos$ )&
-- determinar el n]mero de columnas
tr"
return meta;atos#getColumnCount()&
(
-- atrapar e*cepciones S34)*ception e imprimir mensaje de error
catc2 ( S34)*ception e*cepcionS34 )
e*cepcionS34#printStack5race()&
(
-- si ocurren problemas arriba< devolver 8 para el n]mero de columnas
return 8&
(
-- obtener el nombre de una columna especd0ica en el objeto =esultSet
public String getColumnName( int columna ) t2ro/s AllegalState)*ception
-- asegurar :ue la cone*iIn a la base de datos est disponible
i0 ( EconectadoD4a%ase;e;atos )
t2ro/ ne/ AllegalState)*ception( $No 2a" cone*ion a la base de datos$ )&
-- determinar el nombre de la columna
tr"
return meta;atos#getColumnName( columna P 1 )&
(
-- atrapar e*cepciones S34)*ception e imprimir mensaje de error
catc2 ( S34)*ception e*cepcionS34 )
e*cepcionS34#printStack5race()&
(
-- si 2a" problemas< devolver cadena vacda para el nombre de la columna
return $$&
(
-- devolver el n]mero de 0ilas en el objeto =esultSet
public int get=o/Count() t2ro/s AllegalState)*ception
-- asegurar :ue la cone*iIn a la base de datos est disponible
i0 ( EconectadoD4a%ase;e;atos )
t2ro/ ne/ AllegalState)*ception( $No 2a" cone*ion a la base de datos$ )&
return numero;e6ilas&
(
-- obtener el valor en una 0ila " columna especd0icas
public @bject getBalueDt( int 0ila< int columna ) t2ro/s AllegalState)*ception
-- asegurar :ue la cone*iIn a la base de datos est disponible
i0 ( EconectadoD4a%ase;e;atos )
t2ro/ ne/ AllegalState)*ception( $No 2a" cone*ion a la base de datos$ )&
-- obtener un valor en una 0ila " columna especd0icas del objeto =esultSet
tr"
conjunto=esultados#absolute( 0ila P 1 )&
return conjunto=esultados#get@bject( columna P 1 )&
(
-- atrapar e*cepciones S34)*ceptions e imprimir mensaje de error
catc2 ( S34)*ception e*cepcionS34 )
e*cepcionS34#printStack5race()&
(
-- si 2a" problemas< devolver objeto cadena vacda
return $$&
(
-- establecer nueva cadena de consulta para la base de datos
public void establecerConsulta( String consulta )t2ro/s S34)*ception<
AllegalState)*ception
-- asegurar :ue la cone*iIn a la base de datos est disponible
i0 ( EconectadoD4a%ase;e;atos )
t2ro/ ne/ AllegalState)*ception( $No 2a" cone*ion a la base de datos$ )&
-- especi0icar consulta " ejecutarla
conjunto=esultados , instruccion#e*ecute3uer"( consulta )&
-- obtener meta datos para el objeto =esultSet
meta;atos , conjunto=esultados#getMeta;ata()&
-- determinar el n]mero de 0ilas en el objeto =esultSet
conjunto=esultados#last()& -- mover a la ]ltima 0ila
numero;e6ilas , conjunto=esultados#get=o/()& -- obtener n]mero de 0ila
-- noti0icar al objeto G5able :ue el modelo 2a cambiado
0ire5ableStructureC2anged()&
(
-- cerrar objetos Statement " Connection
public void desconectar;e4a%ase;e;atos()
-- cerrar objetos Statement " Connection
tr"
instruccion#close()&
cone*ion#close()&
(
-- atrapar e*cepciones S34)*ception e imprimir mensaje de error
catc2 ( S34)*ception e*cepcionS34 )
e*cepcionS34#printStack5race()&
(
-- actualiMar estado de cone*iIn a la base de datos
0inall"
conectadoD4a%ase;e;atos , 0alse&
(
(
( -- 0in de la clase =esultSet5ableModel
Cosas por e)plicar el en c+digo anterior:
/i tienes dudas respecto a las operaciones hechas con el A-5 de &D.! signi#ica que debes leer
esto primero: $+emplo -rogramacin con &D.!
pu*lic Class getColumnClass/0Z con este m%todo obtendremos el tipo de dato de la columna
>5nteger, /tring, 0loat, etc?.
pu*lic int getColumnCount/0Z este m%todo devuelve el n'mero de columnas que tendr( la
tabla.
pu*lic -tring getColumnName/int )0Z devuelve el nombre de la columna M de la tabla.
pu*lic int get5o&Count/0Z este m%todo devuelve el n'mero de #ilas que tendr( la tabla.
pu*lic 8*ject getCalue(t/int 3, int c0Z asigna a la tabla el valor de la celda que se encuentra
en la #ila . y en la columna c.
3ireTa*le-tructureC.anged/0Z esto le indica al ob+eto Abstract"able:odel que la estructura
de la tabla ha cambiado.
Ahora el cdigo del #rame que contiene la tabla:
import java#a/t#.&
import java#a/t#event#.&
import java#s:l#.&
import java#util#.&
import java*#s/ing#.&
import java*#s/ing#table#.&
public class Mostrar=esultadosConsulta e*tends G6rame
-- controlador G;%C " C=4 de la base de datos
static 0inal String C@N5=@4D;@=?G;%C , $com#m"s:l#jdbc#;river$&
static 0inal String C=4?%DS););D5@S , $jdbc:m"s:l:--local2ost-ejemploe
user,rootSamp&amp&pass/ord,$&
-- la consulta predeterminada recupera todos los datos de la tabla autores
static 0inal String C@NSC45D?P=);)5)=MAND;D , $S)4)C5 . 6=@M datos$&
private Modelo5abla=esultados modelo5abla&
private G5e*tDrea areaConsulta&
-- crear objeto Modelo5abla=esultados " UCA
public Mostrar=esultadosConsulta()
super( $Mostrando resultados de la consulta$ )&
-- crear objeto Modelo5abla=esultados " mostrar tabla de la base de datos
tr"
-- crear objeto 5ableModel para los resultados del a consulta S)4)C5 .
6=@M autores
modelo5abla , ne/ Modelo5abla=esultados( C@N5=@4D;@=?G;%C<
C=4?%DS););D5@S<
C@NSC45D?P=);)5)=MAND;D )&
G5able tabla=esultados , ne/ G5able(modelo5abla)&

getContentPane()#set4a"out(ne/ %order4a"out())&
getContentPane()#add( ne/ GScrollPane(tabla=esultados) <
%order4a"out#C)N5)= )&
-- establecer tamaLo de ventana " mostrarla en pantalla
setSiMe( +88< !+8 )&
setBisible( true )&
( -- 0in de blo:ue tr"
-- atrapar la e*cepciIn ClassNot6ound)*ception lanMada por el
-- objeto Modelo5abla=esultados si no se encuentra el controlador de la
base de datos
catc2 ( ClassNot6ound)*ception claseNo)ncontrada )
G@ptionPane#s2o/Message;ialog( null<
$No se encontro el controlador de la base de datos$< $No se
encontro el controlador$<
G@ptionPane#)==@=?M)SSDU) )&
S"stem#e*it( 1 )& -- terminar la aplicaciIn
( -- 0in de blo:ue catc2
-- atrapar la e*cepciIn S34)*ception lanMada por el objeto
Modelo5abla=esultados
-- si ocurren problemas al establecer la cone*iIn a la base de datos
-- " realiMar la consulta en la misma
catc2 ( S34)*ception e*cepcionS34 )
G@ptionPane#s2o/Message;ialog( null< e*cepcionS34#getMessage()<
$)rror en la base de datos$< G@ptionPane#)==@=?M)SSDU) )&
-- asegurar :ue la cone*iIn a la base de datos est cerrada
modelo5abla#desconectar;e4a%ase;e;atos()&
S"stem#e*it( 1 )& -- terminar la aplicaciIn
(
-- desec2ar la ventana cuando el usuario salga de la aplicaciIn
-- (esta opciIn sobrescribe a la opciIn predeterminada de JA;)?@N?C4@S))
set;e0aultClose@peration( ;ASP@S)?@N?C4@S) )&
-- asegurar :ue la cone*iIn a la base de datos est cerrada cuando el
usuario salga de la aplicaciIn
addHindo/4istener(
ne/ Hindo/Ddapter()
-- desconectarse de la base de datos " salir cuando se 2a"a cerrado la
ventana
public void /indo/Closed( Hindo/)vent evento )
modelo5abla#desconectar;e4a%ase;e;atos()&
S"stem#e*it( 8 )&
(
(
)&
( -- 0in del constructor de Mostrar=esultadosConsulta
-- ejecutar la aplicaciIn
public static void main( String args[] )
G6rame#set;e0ault4ookDnd6eel;ecorated(true)&
ne/ Mostrar=esultadosConsulta()&
(
( -- 0in de la clase Mostrar=esultadosConsulta
%uente: http:11casidiablo.net1consultar3base3datos3+ava3mostrar3resultados3+table1
?imitar la cantidad de caracteres en un JTe)t%ield
-ara empezar debo poner que estoy traba+ando en )et.eans, bueno, lo mismo del t6tulo...
Lo que quiero hacer es que una ca+a de texto >&"ext0ield? no me permita colocar m(s de un caracter, lo
que he logrado hacer es validar eso pero reci%n cuando se presenta alg'n evento:
$+emplo:
!digo:
i0(G5e*t6ield#get5e*t()#lengt2() E, 1)
--aca la e*cepciIn
)lse
--aca sigue todo normal
-ero yo quisiera que no se pudiera colocar m(s de un caracter, sin necesidad de hacer v(lido algun
evento, he buscado en las propiedades del mismo &"ext0ield, pero sin encontrar nada que me ayude.
$spero haberme hecho entender y que alguien pueda ayudarme.
$n mi caso uso:
C+digo:
5e*t6ield (nombre de variable),ne/ 5e*t6ield ($lo :ue :uieres :ue va"a en el
campo$< !+)&
luego mas aba+o donde quieras ponerlo le das un: add>nombre de la variable?
Donde el ;= es la cantidad de caracteres permitidos, asi lo mane+o yo, tambien en )et.eans.
-ues yo soy mas applets que programas a consola y a nivel maquina, pero si puedo ayudarte.
$n tu i# has probado poner que si es mas largo haga #ocus en el siguiente campo o pierda #ocusS
tambien puede ser otra #orma con +"ext0ield lo que he hecho hasta el momento es algo asi >me da
#lo+era abrir el netbeans, pero lo se mas o menos de memoria?:
C+digo:
t*t1#re:uest6ocus()&
( else i0(t*t1#get5e*t()#to4o/erCase()#lengt2() E, 1
lblMensaje#set5e*t($ingrese solo un caracter$)&
t*t1#set5e*t($$)&
t*t1#re:uest6ocus()&
( else
-->D DCD 5@;@ C@M@ ;)%) 6CNCA@ND= C@N CN CD=DC5)= ANU=)SD;@
(
%uente: http:11#orospamloco.net1limitar3la3cantidad3de3caracteres3en3un3+text#ield3t,UB.html
7ay alguna 3unci+n en Java D Net*eans 1ue me devuelva el valor (-CII de un caracterJ
c2ar c , ^D^&
int ascii , (int) c&
%uente: http:11mx.ansEers.yahoo.com1question1indexSqidO;<<U,,,Q<H,B,UAADM7tG
8*tener los c+digos (-CII de una cadena de te)to
$n este e+emplo vamos a ver como obtenemos los cdigos A/!55 de una cadena de texto con &ava. -ara
ello recorreremos los caracteres de la cadena e iremos obteniendo el cdigo. -ara ello nos apoyamos en
el m%todo.code-ointAt>?.
$l m%todo .code-ointAt>? devuelve el cdigo A/!55 de un car(cter en concreto. $l car(cter ser( el que
coincida con el 6ndice que se pasa como par(metro al m%todo.
$mpezamos de#iniendo la cadena:
String sCadena , $)sto es una cadena de te*to$&
Ahora empezamos recorriendo la cadena, para ello nos apoyamos en un bucle #or y en el m%todo
.length>?, el cual nos ayuda a conocer el tama*o de la cadena. $n el interior del bucle, y apoy(ndonos
en el elemento de interaccin vamos obteniendo el cdigo A/!55 de los caracteres con el
m%todo.code-ointAt>?
0or (int *,8&*VsCadena#lengt2()&*PP)
S"stem#out#println(sCadena#c2arDt(*) P $ , $ P sCadena#codePointDt(*))&&
Lemos que utilizamos el m%todo.charAt>? para sacar el car(cter asociado al cdigo A/!55.
package com#lineadecodigo#java#string&
-..
. F0ile CodigosDSCAACadena#java
. Fversion 1#8
. Faut2or 4inea de Codigo (2ttp:--lineadecodigo#com)
. Fdate 7-enero-!818
. Furl 2ttp:--lineadecodigo#com-java-obtenerNlosNcodigosNasciiNdeNunaNcadenaNdeN
te*to-
. Fdescription )*traer los cIdigos DSCAA de una cadena de te*to
.-
public class CodigosDSCAACadena
public static void main(String[] args)
String sCadena , $)sto es una cadena de te*to$&

0or (int *,8&*VsCadena#lengt2()&*PP)
S"stem#out#println(sCadena#c2arDt(*) P $ , $ P
sCadena#codePointDt(*))&
(
(
%uente: http:11cucutaloco.es.tl1@btener3los3cd0Bdigos3A/!553de3una3cadena3de3texto.htm
8*tener codigo ascii de un -tring
String cadena , $2ola$&
S"stem#out#println((int) cadena#c2arDt(8))&
--4o de arriba devuelve tu 187###
int c , 8&
0or (int i , 8& i V cadena#lengt2()& iPP)
c P, (int)cadena#c2arDt(i)&
(
S"stem#out#println(c)&
%uente: http:11EEE.#orosdelEeb.com1#D=1obtener3codigo3ascii3string3BQDQ,B1
C+digo (scii
)o hace #alta ning'n m%todo para obtener esto. Debes tener en cuenta que el tipo char es un n'mero de
< a ;==, simplementes debes hacer un casting, algo como:
c2ar a , ^a^&
S"stem#out#println((int)a)&
$sto te devolver( el cdigo ascii del car(cter a.
%uente: http:11EEE.todoexpertos.com1categorias1tecnologia3e3internet1programacion1+ava1respuestas19DH9D<1codigo3
ascii
Convertir c.ar a -tring
Lo m(s #(cil, aunque carretero es:
c2ar c,^'^&
String d , $$Pc&
-- concatenar un caracter nulo ($$) P la variable de tipo c2ar#
%uente: http:11EEE.#orosdelEeb.com1#D=1convertir3char3string3,Q<,<91
,6todos de la clase -tring
:%todo Descripcin
V !oncatenacin >unin de hilera?."ambi%n permite concatenar una hilera con un dato num%rico o
booleano.
$&$:-L@
,3? /tring cadena O V4niversidad I 8 V "%cnicaIP
Ahora cadena contendr(: I4niversidad "%cnicaI
!adena 8O V )acionalWP
Ahora cadena contiene 4niversidad "%cnica )acional
;3? int i O =P
/tring resultado O I$l valor de i es I 8 iP
Ahora resultado contiene: V$l valor de i es =W
lengt./ 0 7etorna la cantidad de caracteres que tiene la /tring
$&$:-L@
,3? /tring cadena O V4niversidad "%cnicaWP
int a O cadena.length>?P
La variable VaW contendr( ,U
int inde)83/-tring + c.ar0 7etorna el 6ndice o posicin donde aparece por primera vez la /tring o
char
que se recibe como par(metro, o un 3, si no la encuentra
$&$:-L@
,3? /tring cadena O I/an &oseIP
int posicion O cadena.index@#>I&oseI ?P
Ahora posicin contiene un D
int a O cadena.index@#>oop?P
Ahora la variable a contiene un =
7ecuerde que la primera posicin es cero.
-tring replace /c.ar viejoC.ar, c.ar nuevoC.ar0 7emplaza en la hilera que invoca el m%todo, el
vie+o!har por el nuevo!har. /e utiliza para reemplazar caracteres
$&$:-L@
,3? /tring hilera, cadena O Vmam(IP
hilera O cadena.replace>omp,ppp ?P
Ahora hilera contiene Vpap(W y cadena contin'a teniendo Vmam(W.
-tring replace(ll /-tring vieja-tring, -tring nueva-tring0 7emplaza en la hilera que invoca al
m%todo la vie+a /tring por la nueva /tring. /e utiliza para reemplazar subhileras
$&$:-L@
,3? /tring cadena O V&os% /otoIP
cadena O cadena.replaceAll>V/otoW,W/ol6sW ?P
Ahora cadena contiene V&os% /ol6sW ya que se modi#ic sobre ella misma
-tring to?o&erCase/0 !onvierte todos los caracteres de la hilera a min'scula.
/olo para hileras, no #unciona para char.
$&$:-L@
,3? /tring cadena O I&ALAIP
cadena O cadena.toLoEer!ase>?P
Ahora cadena contiene V+avaW
-tring toBpperCase/0 !onvierte todos los caracteres de la hilera a may'scula. /olo para hileras, no
#unciona para char.
$&$:-L@
,3? /tring cadena O I+avaIP
cadena O cadena.to4pper!ase>?P
Ahora cadena contiene V&ALAW
*oolean e1uals/-tring str0: !ompara la hilera que invoca al m%todo con la del par(metro. /i son
iguales retorna true y si n, retorna #alse. $s sensitivo a may'sculas y min'sculas.
$&$:-L@
,3? /tring cadena, O Vala+uelaI, cadena; O VAla+uelaWP
i# >cadena,.equals>cadena;??Y
out.println>V/on igualesW?P
else
out.println>V/on di#erentesW?P
La impresin ser(: /on di#erentes
*oolean e1ualsIgnoreCase /-tring str0 !ompara la hilera que invoca al m%todo con la del par(metro.
/i son iguales retorna true y si n, retorna #alse. )o es sensitivo a may'sculas y min'sculas.
$&$:-L@
,3? /tring cadena, O Vala+uelaIP
/tring cadena; O VAla+uelaWP
i# >cadena,.equals5gnore!ase>cadena;??Y
out.println>V/on igualesW?P
else
out.println>V/on di#erentesW?P
La impresin ser(: /on iguales
int compareTo/-tring str#0 !ompara ; cadenas y retorna un valor num%rico.:
!ero >o?: si ambas cadenas son iguales
4n n'mero ] < si la primera hilera es menor a la segunda.
4n n'mero C < si la primera hilera es mayor a la segunda.
$&$:-L@
/tring cad,OI,;BDIP
/tring cad;OI,BBDIP
valorOcad,.compare"o>cad;?P
i#>valorOO<?ut.println>I/on igualesIP
else
i# >valor]<?
out.println>Icad, menor cad;IP
else
out.println>Icad, mayor cad;IP
-tring trim/0:
$limina espacios en blanco al principio y al #inal de la cadena. )o elimina los espacios situados entre
las palabras.
$&$:-L@
,3? /tring cadena O I -rogramacin , IP
cadena O cadena.trim>?P
Ahora cadena contiene V-rogramacin ,W
-tring su*string/int indiceInicial, int indice%inal0 7etorna el segmento de la /tring entre la posicin
oindice5nicialp inclusive hasta una posicin anterior a oindice0inalp.
$&$:-L@
,3? /tring cadena O IDesarrollo @rientado a @b+etosIP
out.println>cadena.substring>,,,;<??P
5mpresin: @rientado
c.ar c.ar(t /int indice0 Devuelve el car(cter que ocupa la posicin indicada por el 6ndice.
$&$:-L@
,3? /tring cadena O I-olimor#ismoIP
out.println>cadena.charAt>D??P
5mpresin : m
;3? char caracter O cadena.charAt>H?P
Ahora car(cter contiene o#p
-tring!value83 !onvierte valores de una clase a otra. -ermite convertir valores que no son de tipo
/tring a valores de tipo /tring.
$ste m%todo pertenece a la clase /tring directamente, no hay que utilizar el nombre del ob+eto creado
>es un m%todo est(tico?.
$&$:-L@
/tring numero O /tring.value@#>,;BD?P
/tring #echa O /tring.value@#>neE Date>??P
:%todos de la clase !ar(cter
*olean is?etter/c.ar caracter00
7etorna un verdadero si el car(cter del par(metro es una letra
$&$:-L@
,3? char caracterP
i# >!haracter.isLetter>caracter??
out.println>caracter 8I es una letraIP
*olean isDigit/c.ar caracter00
7etorna un verdadero si el car(cter del par(metro es un d6gito
$&$:-L@
,3? char caracterP
i# >!haracter.isDigit>caracter??
out.println>caracter 8I es un d6gitoIP
*olean isBpperCase/c.ar caracter0
7etorna un verdadero si el car(cter del par(metro es una letra may'scula
$&$:-L@
,3? char caracterP
i# >!haracter.is4pper!ase>caracter??
out.println>caracter 8I es una letra may'sculaIP
*oolean is?o&erCase/c.ar caracter0
7etorna un verdadero si el car(cter del par(metro es una letra min'scula
$&$:-L@
,3? char caracterP
i# >!haracter.isLoEer!ase>caracter??
out.println>caracter 8I es una letra min'sculaIP
Conversiones
int valor O 5nteger.parse5nt>/tring?DD 'asar de -tring a int
/tring resultado O 5nteger.to/tring>,;BD=? DD 'asar de int a -tring
/tring resultado O Double.to/tring>,;BD=.;=?DD 'asar de dou*le a -tring
/tring resultado O 0loat.to/tring>,;BD=.H<?DD 'asar de int a -tring
/tring hilera O !haracter.to/tring>caracter?DD'asar de caracter a .ilera
/tring numero O /tring.value@#>,;BD?P
/tring #echa O /tring.value@#>neE Date>??P
%uente: http:11EEE.taringa.net1posts1apuntes3y3monogra#ias1H=D=BBB1:etodos3de3la3clase3
/tring.html
JTa*le en Net*eans
-.
. 5o c2ange t2is template< c2oose 5ools W 5emplates
. and open t2e template in t2e editor#
.-
-.
. Ne/G6rame'#java
.
. Created on 89-89-!811< 81:'7:+\ DM
.-
package mariscal#pruebas&
-..
.
. Faut2or Ddministrador
.-
public class Ne/G6rame' e*tends java*#s/ing#G6rame
-.. Creates ne/ 0orm Ne/G6rame' .-
public Ne/G6rame'()
initComponents()&
j5able1#getColumnModel()#getColumn(8)#setHidt2(!+)&
j5able1#getColumnModel()#getColumn(8)#setMa*Hidt2(!+)&
j5able1#getColumnModel()#getColumn(8)#setMinHidt2(!8)&
j5able1#getColumnModel()#getColumn(1)#setHidt2(1++)&
j5able1#getColumnModel()#getColumn(1)#setMa*Hidt2(1++)&
j5able1#getColumnModel()#getColumn(1)#setMinHidt2(1+8)&
(
-.. 52is met2od is called 0rom /it2in t2e constructor to
. initialiMe t2e 0orm#
. HD=NANU: ;o N@5 modi0" t2is code# 52e content o0 t2is met2od is
. al/a"s regenerated b" t2e 6orm )ditor#
.-
FSuppressHarnings($unc2ecked$)
-- VeditorN0old de0aultstate,$collapsed$ desc,$Uenerated Code$X
private void initComponents()
jScrollPane1 , ne/ java*#s/ing#GScrollPane()&
j5able1 , ne/ java*#s/ing#G5able()&
set;e0aultClose@peration(java*#s/ing#Hindo/Constants#)KA5?@N?C4@S))&
j5able1#setModel(ne/ java*#s/ing#table#;e0ault5ableModel(
ne/ @bject [][]
null< null< null(<
null< null< null(<
null< null< null(<
null< null< null(
(<
ne/ String []
$5itle 1$< $5itle !$< $5itle '$
(
))&
j5able1#setDuto=esiMeMode(java*#s/ing#G5able#DC5@?=)SAT)?@66)&
jScrollPane1#setBie/portBie/(j5able1)&
java*#s/ing#Uroup4a"out la"out , ne/ java*#s/ing#Uroup4a"out(getContentPane())&
getContentPane()#set4a"out(la"out)&
la"out#setJoriMontalUroup(
la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addUroup(la"out#createSe:uentialUroup()
#addComponent(jScrollPane1< java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< '\+<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addContainerUap(!+< S2ort#MDK?BD4C)))
)&
la"out#setBerticalUroup(
la"out#createParallelUroup(java*#s/ing#Uroup4a"out#Dlignment#4)D;ANU)
#addUroup(la"out#createSe:uentialUroup()
#addComponent(jScrollPane1< java*#s/ing#Uroup4a"out#P=)6)==);?SAT)< !\+<
java*#s/ing#Uroup4a"out#P=)6)==);?SAT))
#addContainerUap(!+< S2ort#MDK?BD4C)))
)&
pack()&
(-- V-editorN0oldX
-..
. Fparam args t2e command line arguments
.-
public static void main(String args[])
java#a/t#)vent3ueue#invoke4ater(ne/ =unnable()
public void run()
ne/ Ne/G6rame'()#setBisible(true)&
(
()&
(
-- Bariables declaration N do not modi0"
private java*#s/ing#GScrollPane jScrollPane1&
private java*#s/ing#G5able j5able1&
-- )nd o0 variables declaration
(
%uente: http:11EEE.laEebdelprogramador.com1#oros1&ava1,;9UHB,3AyudaN&"ableNenN)etbeans.html
Java: JTa*le
Las tablas nos permiten tener tabulados de in#ormacin que se vean organizados y que sean de utilidad
para los clientes. Las tablas son muy utilizadas en programas similares a excel, donde se deben tener
re+illas de in#ormacinP o en programas de administracin donde pueden haber varios productos que
tienen un con+unto de caracter6sticas, o en programas de ventas, donde pueden haber varios vendedores
con n'mero de ventas y con total vendido.
-ara agregar una tabla en )et.eans selecciona el icono de tabla de la paleta >que regularmente se
encuentra a la derecha? . 4na vez que lo hayas seleccionado agr%galo a la ventana principal. $l
&"able utiliza un Data:odel para representar sus datos, de la misma manera que varios otros
componentes como &List.
Creando un modelo estHtico
$l modelo nos permite indicarle a la tabla qu% in#ormacin va a contener. /i slo queremos presentar
in#ormacin est(tica >que nunca cambia? al cliente entonces podemos usar un modelo est(tico, para
hacer esto vamos a hacer clic2 en el atributo model que se encuentra en las propiedades.
4na vez que hicimos clic2 aparecer( una pantalla en la que podemos editar cmo queremos que se vea
la tabla. $n esta pantalla podemos seleccionar el n'emro de columnas, el nombre de las columnas e
incluso podemos agregar algunos datos.
$n la pantalla anterior podemos ver cmo mane+ar el n'mero de columnas >con los botones de 5nsert,
Delete o con los botones de 8, 3? y tambi%n podemos ver una re+illa donde podemos poner el t6tulo que
aparece en la columna, el tipo de dato que va a guardar y si se puede editar o no.
!on esto podemos crear una tabla est(tica que siempre va a iniciar con los mismos datos.
Creando un modelo dinHmico
La mayor6a de las veces un usuario no va a querer una tabla est(tica >en la que aunque pueda editar los
valores no se muestren los valores que se hab6an guardado previamente?. $s por esto que es necesario
crear un modelo din(mico. -ara poder crear un modelo din(mico es necesario implementar la inter#az
5ableModel que nos obliga a sobrecargar un gran n'mero de m%todos:
getColumnClass(): $s un m%todo que nos permite saber qu% clase tiene guardada cada
columna, esto es para que sean m(s #(ciles de pintar para +ava.
getColumnCount(): $s un m%todo que nos permite saber cu(ntas columnas tiene la tabla.
getColumnName(): $s un m%todo que nos permite saber el encabezado de la tabla para una
cierta columna.
get=o/Count(): $s un m%todo que nos permite saber cu(ntas #ilas tiene la tabla.
getBalueDt(): $s un m%todo que nos devuelve el valor que se encuentra en la posicin pasada
como par(metro.
isCell)ditable(): $s un m%todo que nos devuelve verdadero si la celda puede ser
modi#icada, o #also en caso contrario.
setBalueDt(): $s un m%todo que nos permite cambiar el valor que se encuentra en la posicin
pasada como par(metro mediante cdigo >el usuario puede cambiar los datos dependiendo del
m%todo isCell)ditable()?.
getBalueDt(): $s un m%todo que nos devuelve el valor que est( guardado en la celda pasada
como par(metro, este valor va a ser de la clase que indica getColumnClass() para esa columna.
Adem(s de todos los m%todos anteriores, la inter#az 5ableModel tiene un par de m%todos para mane+ar
eventos >como por e+emplo, que el usuario haga clic2, que edite una celda?. $stos m%todos involucran
agregar cdigo a nuestra clase que cuando modi#ique alg'n valor o que agregue nuevos datos tenga que
disparar eventos. $ste cdigo, aunque no es muy complicado, no tendr6a ninguna utilidad >a menos que
vayamos a escribir una manera de deshacer acciones o algo similar?, sin embargo como tenemos que
implementar 5ableModel tendr6amos que implementarlos. -or suerte &ava cuenta con un modelo ya
implementado >el que utilizan todas las tablas al ser creadas? que podemos utilizar para no implementar
estos m%todos, entonces, en lugar de implmentar la inter#az 5ableModel vamos a extender la clase
;e0ault5ableModel que ya implementa la inter#az anterior.
Implementando el modelo dinHmico
)ormalmente las tablas slo crecen en una direccin >hacia aba+o, aumentando el n'mero de #ilas?. -or
e+emplo, en el reporte de empleados, es probable que contratemos o despidamos empleados, por lo que
vamos a tener que agregar m(s #ilas, sin embargo ser6a raro que apareciera un nuevo atributo que
quisi%ramos mane+ar del empleado >y m(s raro a'n que el cliente pudiera modi#icar el programa de tal
manera que lo agregue?. $ntonces, como la mayor6a de las tablas crecen en una sola dimensin>slo
aumenta el n'mero de #ilas? vamos a implementar un modelo en el que utilizando un ArrayList que
contiene arreglos vamos a mane+ar el crecimiento de la tabla >el ArrayList puede crecer, pero los
arreglos no?.
$l Drra"4ist va a representar las #ilas de la tabla, y va a contener arreglos, que representan las
columnas.
-rimero veamos a crear una clase nueva, que extienda ;e0ault5ableModel.
public class )ditable5ableModel
e*tends ;e0ault5ableModel
)uestro modelo debe tener alguna manera de almacenar los datos >ya vimos cmo vamos a resolver
este problema? y adem(s debe contar con variables de control que nos #aciliten la tarea de saber cu(l es
el nombre de las columnas, qu% tipo de dato guarda cada columna >importante para poder guardar
n'meros o booleanos? y si la columna es editable >la mayor6a de las veces este par(metro va a ser
verdadero, pero podr6an haber ocasiones en que necesit(ramos que #uera #also?.
private Drra"4istV@bject[]X data&
private int numColumns&
private String columnNames[]&
private Class classes[]&
private boolean editable[]&
$l constructor que recibe todos los par(metros debe de crear un tabla de datos en blanco y debe de leer
los par(metros que manda el usuario. !omo vamos a tener varios constructores que reciban di#erente
n'mero de par(metros debemos construir un m%todo que nos permita iniciar el ob+eto y llamarlo desde
todos los constructores, el m%todo ser6a algo similar a:
private void initComponents(String columnNames[]< Class classes[]< boolean
editable[])
t2ro/s AllegalDrgument)*ception
i0 (columnNames#lengt2 E, classes#lengt2 WW classes#lengt2 E,
editable#lengt2)
t2ro/ ne/ AllegalDrgument)*ception($52e arra"s passed as parameters
must be o0 t2e same siMe$)&

data , ne/ Drra"4istV@bject[]X()&

t2is#numColumns , columnNames#lengt2&
t2is#columnNames , columnNames&
t2is#classes , classes&
t2is#editable , editable&
(
La mayor6a de los m%todos son simples getters y setters >por e+emplo get=o/Count() slo debe
regresar el tama*o de data con data#siMe(), getBalueDt() slo debe obtener el valor de la celda
con data#get(ro/)[col]?, por lo que estos m%todos no van a ser consultados con m(s detenimiento.
/in embargo, para permitir que la tabla pueda crecer debemos crear m%todos que nos permitan agregar
o quitar #ilas. $stos m%todos deben agregar o quitar arreglos de ob+etos de la lista de datos. $s decir:
public void add=o/()
int num=o/s , data#siMe()&

@bject[] ro/ , ne/ @bject[numColumns]&
data#add(ro/)&

t2is#0ire5able=o/sAnserted(num=o/s< num=o/sP1)&
(
> para remover va a ser mu" similar:
F@verride
public void remove=o/(int ro/)
data#remove(ro/)&
t2is#0ire5able=o/s;eleted(ro/< ro/)&
(
$n los m%todos anteriores no est( sucediendo mucho que no sepamos, excepto por los m%todos
0ire5able=o/sAnserted() y 0ire5able=o/s;eleted(). $stos dos m%todos le indican a la tabla >y la
tabla se encarga de comunicarle a todos los componentes que dependan de ella? que se agregaron o
quitaron #ilas. /i no hici%ramos esta llamada entonces no ver6amos los cambios hasta que
modi#iquemos los datos en la lista, que ser6a cuando la tabla se dar6a cuenta de que el modelo cambi.
@tro m%todo que quiz(s ser6a importante implementar ser6a uno que nos permitiera agregar #ilas con
datos, ya que muchas veces vamos a leer los datos de un archivo y vamos a querer construir la tabla.
public void add=o/(@bject[] ro/)
int num=o/s , data#siMe()&
data#add(ro/)&
t2is#0ire5able=o/sAnserted(num=o/s< num=o/sP1)&
(
Quiz(s tambi%n ser6a prudente crear un constructor que reciba una matriz de datos y de ah6 obtenga
todos los datos para crear la tabla.
Bsando el modelo
!onstruir el modelo es un proceso un poco abstracto y muchas veces no sabemos cmo est(n
sucediendo las cosas sino hasta que lo comenzamos a usar, para poder usar nuestro modelo vamos a
crear una clase de prueba que tenga una ventana con una tabla y dos botones de la siguiente manera:
Lamos a declarar el modelo en la parte de declaraciones globales, para que toda la inter#az gr(#ica
pueda acceder a ella >esto es conveniente porque as6 los botones van a poder usarlo directamente, sin
tener que sacarlo de la tabla pero podr6a considerarse una mala pr(ctica de programacin?.
private )ditable5ableModel model&
$n el constructor de la ventana vamos a agregar el siguiente cdigo:
public )ditableModel5est()
initComponents()&

String columnNames[] , $Nombre$< $)dad$< $5ele0ono$ (&
Class classes[] , String#class< Anteger#class< String#class (&
boolean editable[] , true< true< true (&

model , ne/ )ditable5ableModel(columnNames< classes< editable)&

tbl)mplo"ees#setModel(model)&
(
!omo podemos ver, el cdigo est( creando tres arreglos, el primero tiene los nombres de las columnas
>son tres columnas: nombre, edad y tel%#ono?, el segundo arreglo es un arreglo de clases, que nos dice
de qu% tipo va a ser cada columna. -odemos utilizar cualquier clase de &ava, pero regularmente
queremos utilizar /tring, 5nteger, Double, 0loat o .oolean, que son las clases para las que ya est(
creado un renderer y por lo tanto no tenemos que preocuparnos por eso. 06+ate que despu%s del nombre
de la clase ponemos .class para que obtenga la clase. $l 'ltimo arreglo es un arreglo de boolean y nos
dice si las columnas van a ser editables >en la mayor6a de los casos s6?.
Ahora vamos a implementar el botn para agregar #ilas:
private void btnDdd=o/DctionPer0ormed(java#a/t#event#Dction)vent evt)
model#add=o/()&
(
!omo nuestro modelo est( bien implementado esto #ue sencill6simo, ahora vamos a implementar el
botn que borra las #ilas seleccionadas:
private void btn=emove=o/DctionPer0ormed(java#a/t#event#Dction)vent evt)
int ro/s[] , tbl)mplo"ees#getSelected=o/s()&
model#remove=o/s(ro/s)&
(
5gual de sencillo. 4na vez que hayamos hecho todo esto nuestro programa debe permitir agregar y
quitar #ilas y poner los datos que querramos adentro de las #ilas.
Uuardar datos
4na vez que los usuarios tengan la oportunidad de modi#icar la tabla van a agregar datos y van a querer
guardar esos datos >imaginen que cada que abran excel tienen que volver a poner todos los datos que
hab6an puesto la vez anterior?. -ara guardar los datos vamos a crear un m%todo en el modelo que se
encargue de poner los datos en una matriz >para que sea m(s #(cil de mane+ar? y despu%s, utilizando
este m%todo vamos a utilizar un par de ciclos para guardar los datos en un archivo.
$n el modelo vamos a agregar el siguiente m%todo:
public @bject[][] get;ataMatri*()
int num=o/s , get=o/Count()&
int numCols , getColumnCount()&
@bject matri*[][] , ne/ @bject[num=o/s][numCols]&

0or (int ro/Ande* , 8& ro/Ande* V data#siMe()& ro/Ande*PP)
@bject[] ro/ , data#get(ro/Ande*)&
0or (int colAnde* , 8& colAnde* V ro/#lengt2& colAnde*PP)
@bject object , ro/[colAnde*]&
matri*[ro/Ande*][colAnde*] , object&
(
(

return matri*&
(
dentro de la inter#az gr(#ica hay que crear un nuevo botn que sea el que guarda y debemos poner el
siguiente cdigo:
private void btnSaveDctionPer0ormed(java#a/t#event#Dction)vent evt)
tr"
PrintHriter 0ile@ut , ne/ PrintHriter(ne/ 6ileHriter($out#csv$))&

@bject[][] data , model#get;ataMatri*()&
0or (int i , 8& i V data#lengt2& iPP)
0ile@ut#print(data[i][8])&
0or (int j , 1& j V data[i]#lengt2& jPP)
@bject object , data[i][j]&
i0 (object E, null)
0ile@ut#print($<$ P object#toString())&
else
0ile@ut#print($<$)&
(
0ile@ut#println()&
(
0ile@ut#close()&
G@ptionPane#s2o/Message;ialog(t2is< $;atos guardados$)&
( catc2 (A@)*ception e*)
G@ptionPane#s2o/Message;ialog(t2is< $)rror al guardarE$)&
(
(
$l m%todo anterior deber6a mostrar una ventana para seleccionar el archivo y deber6a de proporcionar
in#ormacin m(s relevante en los errores, pero para este e+emplo es su#iciente para ver que los datos se
guardan. 4na vez que hagamos esto se va a crear un archivo llamado out.csv que puede ser abierto por
excel.
%uente: http:11EEE.maguso#t.net1neotrials1pages1+ava1+table.html
C+mo seleccionar una 3ila de un JTa*le de Java
A veces nos vemos en la necesidad de seleccionar o resaltar mediante c-digo una .ila de un JTa*le,
ya sea porque necesitamos realizar una b'squeda en la tabla o por cualquier otro motivo. /i el JTa*le
se encuentra dentro de un J-croll'ane, las barras de desplazamiento se deben mover autom(ticamente
para que se vea la #ila que se seleccion.
-ara realizar %sta tarea tenemos el m%todo c.ange-election de la clase JTa*le, el cual cuenta con D
par(metros: ro&Inde), columnInde), toggle y e)tendP los dos primeros son dos n'meros enteros que
indican la #ila y columna de la celda, mientras que toggle y e)tend son booleanos que sirven para
indicar si queremos seleccionar una #ila, un rango de #ilas o varias #ilas.
-ara entender me+or el #uncionamiento de %ste m%todo realizaremos un e+emplo pr(ctico, que consistir(
en realizar la b'squeda de un elemento qu6mico dentro de una tabla. $s decir tendremos una tabla con
cierta cantidad de elementos qu6micos, para buscar un determinado elemento deberemos introducirlo
dentro del campo de texto respectivo, seguidamente deberemos presionar el botn .uscar e
inmediatamente se resaltar( la #ila en la cual se encuentra el dato que est(bamos buscando >si #ue
encontrado?.
La inter#az gr(#ica quedar6a como sigue:
!omo vemos en la anterior imagen buscamos el elemento IDecanoI que se encuentra a lo 'ltimo de la
tabla, por lo que las barras de desplazamiento se movieron autom(ticamente hasta hacer visible la #ila
donde se encuentra el dato.
/i realizamos una nueva b'squeda, la #ila seleccionada anteriormente se deseleccionar( y se
seleccionar( la #ila donde se encuentra el dato de la 'ltima b'squeda, como podemos ver en la siguiente
imagen:
$l cdigo que va dentro del botn Buscar para realizar este programa es el siguiente:
private void btn%uscarDctionPer0ormed(java#a/t#event#Dction)vent evt)
String ele , t*t)lemento#get5e*t()&
0or (int i , 8& i V tbComponentes#get=o/Count()& iPP)
i0 (tbComponentes#getBalueDt(i< 1)#e:uals(ele))
tbComponentes#c2angeSelection(i< 1< 0alse< 0alse)&
break&
(
(
(
Del anterior cdigo podemos observar en la l6nea de cdigo H que los par(metros toggle y e)tend del
m%todo c.ange-election deben estar en .alse, para traba+ar de la manera que nos propusimos en el
e+emplo: mantener seleccionada solamente una #ila por cada b'squeda.
/in embargo puede haber otras ocasiones en las que se necesita seleccionar m(s de una #ila a la vez,
para ello pueden I+ugarI con el cdigo de e+emplo que les estoy pasando, cambiando los valores de los
par(metros toggle y e)tend para poder visualizar me+or qu% Ipapel +ueganI dentro del m%todo.
Les recomiendo leer la documentacin o#icial del m%todo selection!hange de la clase &"able, donde
encontrar(n una breve explicacin sobre el mismo y sus par(metros.
)o se preocupen que no me olvido de de+arles el c+digo 3uente programado en Java utilizando
NetBeans !< para que puedan practicar. $spero les haya sido de utilidad, cualquier acotacin o aporte
ser( bienvenido, hasta la prxima.
%uente: http:11+edicerocool.blogspot.com1;<,,1<,1como3seleccionar3una3#ila3de3un3+table.html
Desplegar datos en jta*le /net*eans0
-uedes en un boton o #uncion colocar esto:
!digo:
@bject[][] dtPer&
String[] columNames , $aleatorio$<$2ora de llegada$<$2ora de entrada$<$tiempo de
servicio$<$2ora de salida$<$longitud de la cola$(&
dtPer , get;atos()&
;e0ault5ableModel datos , ne/ ;e0ault5ableModel(dtPer<columNames)&
tabla#setModel(datos)&
y la #uncion getDatos>? seria:
!digo:
public @bject [][] get;atos()
int registros , 8&
tr"
PreparedStatement pstm , con#getConnection()#prepareStatement($S)4)C5
count(1) as total 6=@M 2orario$)&
=esultSet res , pstm#e*ecute3uer"()&
res#ne*t()&
registros , res#getAnt($total$)&
res#close()&
(catc2(S34)*ception e)
S"stem#out#println(e)&
(

@bject[][] data , ne/ String[registros][9]&
tr"
PreparedStatement pstm , con#getConnection()#prepareStatement($S)4)C5 $ P
$ aleatorio< 2ora?llegada< 2ora?entrada< tiempo?servicio< 2ora de
salida< longitud?cola $ P
$ 6=@M 2orario$ P
$ @=;)= %> aleatorio $)&
=esultSet res , pstm#e*ecute3uer"()&
int i , 8&
/2ile(res#ne*t())
String v1 , res#getString($aleatorio$)&
String v! , res#getString($2ora?llegada$)&
String v' , res#getString($2ora?entrada$)&
String v7 , res#getString($tiempo?servicio$)&
String v+ , res#getString($2ora de salida$)&
String v9 , res#getString($longitud?cola$)&
data[i][8] , v1&
data[i][1] , v!&
data[i][!] , v'&
data[i]['] , v7&
data[i][7] , v+&
data[i][+] , v9&
iPP&
(
res#close()&
(catc2(S34)*ception e)
S"stem#out#println(e)&
(
return data&
(
%uente: http:11EEE.#orosdelEeb.com1#D=1desplegar3datos3+table3netbeans3Q9<;HQ1
E)traer datos de un jta*le a un jte)t3ield
-ara obtener un valor de una tabla existe un metodo getLalueAt>#ila, columna? un e+emplo seria asi
Anteger id , (Anteger) tabla#getBalueDt(tabla#getSelected=o/()< 8)&
luego 2arias el t*t#set5e*t(Anteger#toString(id))&
%uente: http:11EEE.#orosdelEeb.com1#D=1auxilio3extraer3datos3+table3+text#ield39;D<991
CustomiMando un JTa*le, .Hgalo usted mismo en < simples pasos
$l ob+etivo de este art6culo es modi#icar un &"able para que quede totalmente distinto y me+orado. /i no
les sirve tal como queda al #inal, no se preocupen ya que pueden sacar buenas ideas de los pasos
intermedios. $mpecemos, el ob+etivo es tran#ormar:
$n`
'aso #: ,odi3icar el ,odelo del JTa*le JDe3aultTa*le,odel
-ara no meter m(gia y misticismo en esto, vamos a usar directamente el editor de )etbeans. -ara ello
seleccionamos la "abla, y en las propiedades buscamos VmodelW y le damos a los tres puntitos VTW
$sto va a abrir un editor muy simple, la idea es de+ar sin #ilas la tabla y con solo dos columnas >para
este caso la primera tiene el icono y la segunda tiene el texto?.
Deber6an con0igurar algo como esto:
!uando terminemos ya deber6amos tener nuestra tabla en el siguiente estado:
'aso 9: >ue no se muestre la ca*ecera del JTa*le
$sto es muy simple de hacer, pero es por la mayor6a desconocido. La idea es que la cabecera >5cono c
"exto? est%, pero no se muestre. -ara esto seleccionamos el &"able, y buscamos en el cuadro de
propiedades Vta*le7eaderW y le damos a los tres puntitos VTV. La idea aca es poner un null como
parametro del constructor para esto, dentro del editor, seleccionamos en el combo VC+digo 'ersonalW
y ponemos >null?.
Lamos avanzando y seguro ya tenemos algo como %sto:
'aso :: Creando el 5enderiMador de las celdas
$ste es el V2iller stepW de la idea, donde la mayoria toma aire, cuenta hasta ,< y tira la compu al patio
no sin antes recordar a la madre de los desarrolladores de sun y desear que les pase un 0ocus por arriba.
Lo que tenemos que hacer es crear una clase que ser( utilizada para renderizar las celdas, en ella vamos
a escribir como se va a mostrar cada una y de que #orma. -arece sumamente complicado, salvo que
tenemos un As ba+o la manga, los +Label.
$l +Label si tiene algo de bueno es que podemos mostrar un icono1im(gen en %l, entonces ser6a buena
idea poder hacer que cada celda del JTa*le sea un j?a*el!
$l cIdigo de esta clase se los dejo a continuaciIn " comentado< luego 2ago unas
breves acotaciones:
-..
. ;escripciIn: Cn renderiMador de celdas de un G5able :ue pone
. un j4abel en cada una de las celdas para :ue se pueda poner
. un icono-imagen
. Fversion 1#8
. Faut2or Auga
. Fcambios
. Ftodo
.-
public class AconCell=enderer e*tends ;e0ault5ableCell=enderer

-..
. DcO rede0inimos como se muestra< vemos : a2ora lo 0orMamos a
. trabajar con G4abel< pero si no lo es< por ejemplo un String
. igual lo muestro llamando a Super
.-
public Component get5ableCell=endererComponent (G5able table< @bject value< boolean
isSelected<boolean 2as6ocus< int ro/< int column)

i0(value instanceo0 G4abel)

G4abel label , (G4abel)value&


label#set@pa:ue(true)&
0illColor(table<label<isSelected)&
return label&
(
else

return super#get5ableCell=endererComponent(table< value< isSelected< 2as6ocus< ro/<


column)&
(
(

-..
. )ste mtodo es para :ue pinte el 0ondo del G4abel cuando
. lo seleccionamos para :ue no :uede en blanco< desentonando
. con el resto de las celdas :ue no son G4abel
.-
public void 0illColor(G5able t<G4abel l<boolean isSelected )

i0(isSelected)

l#set%ackground(t#getSelection%ackground())&
l#set6oreground(t#getSelection6oreground())&
(
else

l#set%ackground(t#get%ackground())&
l#set6oreground(t#get6oreground())&
(
(
!omo vemos, rede#inimos dos m%todos de De#ault"able!ell7enderer, el primero indica que y como
vamos a mostrar la celda >y vemos que traba+amos con &Label? y el segundo m%todo est( atento a los
cambios de color para ahcerlo uni#orme y que no desentonen los colores.
Ahora lo que resta es pasarle el 7ederer al &"able para que use %ste en lugar del De#ault.
j5able1#set;e0ault=enderer(@bject#class<ne/ AconCell=enderer())&
$n este punto no tenemos cambios visuales, as6 que sigamos con el siguiente paso
'aso ;: ?lenando el JTa*le con datos de 'rue*a
Ahora a probar el producto terminado. Lamos a cargar algunas #ilas con datos, vamos con los datos de
una sola #ila para que se entienda la idea:
@bject[] 0ila , ne/ @bject[!]&
AmageAcon icon , ne/
AmageAcon(getClass()#get=esource($-res-iconos-plantillas-vacio#png$))&
0ila[8] , ne/ G4abel(icon)&
0ila[1] , $Presupuesto en %lanco$&
!omo vemos el primer valor del Array es un &Label con un icono y sin texto. >Nota: 6i/ podr<amos
5aber 5ec5o una sola columna y que muestre icono y te%to al mismo tiempo/ pero era para me8orar el
e8emplo y demostrar que podemos me=clar JLabels y otros tipos de datos sin complicar el modelo?.
4na vez que tenemos los datos solo queda agregarlos al modelo de la tabla:
;e0ault5ableModel modelo , (;e0ault5ableModel)j5able1#getModel()&
modelo#add=o/(0ila)&
'aso <: ,ejorando la Cisual del JTa*le y la altura de las celdas
-rimero tenemos que a+ustar, en cada caso, la altura de las celdas de acuerdo al tama*o de los
iconos1im(genes que mostremos, as6 no nos corta la im(gen como en el caso anterior.
-- ;onde +8 es el tamaLo :ue :uerramos en la celda seg]n lo : necesitemos
j5able1#set=o/Jeig2t(+8)&
Ahora podemos cambiar un poco el tama*o de la tabla para que quede acorde a los datos y el tama*o
de las celdas. -ara esto nuevamente recurrimos a la #acilidad que nos da )etbeans y vamos a otro editor
haciendo Vclic4 derec.oW en la &"able y en VContenido de la Ta*laTW y vamos a la segunda /olapa
VColumnasV, en cada una podemos con#igurar el tama*o m6nimo, sugerido y m(ximo.
"odo lo bueno tiene #in, y este #ue el nuestro, ya con esto tenemos nuestro &"able modi#icado
completamente y si seguimos bien los pasos deber6amos tener algo como esto:
Lo que sigue es llenar la tabla con datos a nuestro anto+o, poner o sacar columnas, simplemente
modi#icarla a nuestro anto+o.
%uente: http:11hac2elare.Eordpress.com1;<,<1<U1;B1customizando3un3+table3hagalo3usted3mismo3en3
=3simples3pasos3leer3con3la3voz3de3sprayette1
Ta*las en net*eans
:uchas veces me han preguntado, oye como se usan las tablas en netbeansS o como puedo hacer
din(mica una tabla en +avaS, y la mas #recuente como puedo hacer din(mica una tabla con netbeansS la
cual es la misma que la anterior, por lo que decid6 escribir cada paso de lo que yo normalmente hago
cuando mane+o tablas, no se si sea lo mas correcto, pero a mi me #unciona:
Aqu6 supondr% que sabemos usar netbeans hasta el punto en el que se inserta una tabla, es decir cuando
podemos ver algo como esto:
a teniendo la tabla creada se pueden modi#icar sus propiedades de #orma gr(#ica dando clic23derecho
sobre la tabla que creamos
Aparecer( un cuadro de dialogo que describe las propiedades de la tabla, en la primera pesta*a Imodelo
de la tablaI se indica de donde se obtendr(n los datos de la tabla, la verdad, de esa pesta*a no se casi
nada si embargo si nos pasamos a la pesta*a que dice !olumnas ,
-odemos ver las propiedades de cada columna ; en esta parte podemos cambiar el tipo de el valor que
aceptara la tabla, si es editable o si se puede cambiar el tama*o de la celda y por supuesto el nombre de
la columna y los n'meros B,D,=,9 en la seleccin de modelo indican la #orma en que se podr(n
seleccionar las celdas de la tablaP a continuacin una descripcin de lo que hacen:
B solo permite la seleccin de #ilas
/i se selecciona D solo se podr( seleccionar una sola celda
/i se selecciona = se podr( seleccionar m'ltiples celdas, pero estas deber(n ser vecinas
por ultimo si se selecciona 9 se podr( seleccionar celdas sin importar que sean vecinas o no
Los tipos que se pueden seleccionar en las tablas son los que se muestran en la imagen, lo cual puede
ser 'til para recabar datos con #ormato, en lo personal, no me gusta usar las +tables para recabar datos
porque siempre se tiene un problema al insertar el ultimo dato, pero de igual #orma al de#inir el tipo del
ob+eto de una columna esta no aceptara que se inserte otro tipo de valor y en adicin, al seleccionar
boolean el valor de las columnas cambiaran por un chec2box donde la palomita signi#ica true, y vaci
#alse
Despu%s de cambiarle el #ormato a la tabla todo lo que quieras, podemos seguir con lo din(mico, ahhh
la pesta*a de #ilas o roEs solo permite agregar o quitar renglones en la tabla, pero bueno eso no nos
sirve si lo que queremos es ponerlos dinamicamente.
$sto de #ormatear la tabla servir( ahora tenemos una tabla que solo acepta ciertos tipos de datos, con
todos los renglones en blanco.
$stas tablas, sin tener que ver con netbeans se mane+an de #orma di#erente de la que muchos pensamos,
la +"able es mas bien una versin gr(#ica, y sus datos provienen de un "able:odel y ese es el que se
necesita saber utilizar bueno, en si el "able:odel no, sino un hi+o de este, el De#ault"able:odel, el
cual permite manipularlo #(cilmente. solo necesitamos pues sacarlo de ah6, ya que si revisas el cdigo
que genero el netbeans en la #uncin de init!omponents dice algo como
ne/ jtable(ne/ ;e0ault5ableModelcosas raras de netbeans()&
$n las cosas raras de netbeans se desarrollan todas las caracter6sticas que seleccionamos gr(#icamente
para aplicar a la tabla, entonces, despu%s de init!omponets sacamos el ob+eto del modelo de la tabla, lo
casteamos y lo guardamos en un atributo de nuestra clase.
private java*#s/ing#table#;e0ault5ableModel modelo&--atributo de nuestra clase
public Anicio() --este es el constructor de la tabla
initComponents()&
modelo , (java*#s/ing#table#;e0ault5ableModel)tabla#getModel()&--con esta
linea obtenemos el modelo
tabla#setModel(modelo)&--con esta instruccion se pueden cambiar las
caracteristicas de la tabla por otro modelo
(
con el modelo guardado podemos realizar varias acciones como agregar un rengln, borrar un
rengln, agregar datos, modi#icarlos, y obtener los valores de la tabla.
--borrar renglIn seleccionado
tr"
modelo#remove=o/(tabla#getSelected=o/())&
(catc2()*ception e)
java*#s/ing#G@ptionPane#s2o/Message;ialog(t2is< $Seleccione almenos
una celda$<$)rror$<java*#s/ing#G@ptionPane#)==@=?M)SSDU))&
(
--insertar renglIn con datos
modelo#add=o/(ne/ @bject[]!'<$Jola$<!'#+<true()&--4os datos del nuevo
renglon de la tabla< se puede insertar un renglon vacio si en lugar de los
datos se pone (
--modi0icar datos de la tabla esto se puede 2acer directamente desde la tabla< pero
lo 2aremos con el modelo
modelo#setBalueDt($valorNuevo$<renglon<columna)&
--tomar un valor de la tabla ojo:los valores salen en 0orma de object por lo :ue se
necesitan castear
@bject variable , modelo#getBalueDt(renglon<columna)&
listo tenemos una tabla din(mica P?
De cualquier #orma de+o el cdigo de e+emplo en mi pagina http:11luismy.espaciogratis.in#o
%uente: http:11#aq3netbeans.blogspot.com1;<,,1<,1tablas3en3netbeans.html
J?ist
(rc.ivos necesarios:
$l &List nos permite crear una lista para agregar a nuestras aplicaciones. A di#erencia del &!ombo.ox
que puede crecer muy #(cilmente, el &List es un poco m(s di#6cil de mane+ar pero nos permite hacer
cosas m(s interesantes que el &!ombo.ox. "ambi%n veremos cmo utilizar algunas otras clases que
nos van a permitir mane+ar un &List de una manera m(s e#iciente por e+emplo para permitir que crezca
de manera din(mica. -odemos utilizar listas para mostrar a los +ugadores en un +uego de mesa o
tambi%n podemos utilizarla para mostrar una lista de contactos.
La clase que incluye este trial es un programa que 'nicamente incluye un &List con los nombres de los
empleados de una empresa. $l programa nos permite contratar m(s empleados y despedirlos seg'n sea
necesario.
:ain.+ava
IC+mo utiliMar un J?istJ
!onstruir un &List
es muy sencillo si
no queremos que
sea din(mico, es
decir: si queremos
que el usuario no
pueda agregar m(s items. -ara hacerlo basta con declarar un arreglo de /tring y pasarlo como
par(metro al constructor del &List.
-ara hacer que el &List tenga una barra
de desplazamiento es necesario utilizar
una clase auxiliar llamada &/croll-ane.
$sta clase se va a detallar en alg'n trial m(s adelante, pero por el momento se debe de construir como
se ve en la #oto.
$s importante notar que el &/croll-ane es el que se a*ade a la #orma y no la lista en si. $sto es porque
el &/coll-ane contiene a la lista.
-ara escuchar eventos en una lista
>por e+emplo para saber cuando se
seleccion un elemento? es necesario
importar un nuevo tipo de escuchador
de eventos. -rimero que nada
tenemos que importar la librer6a:
+avax.sEing.event.X despu%s la clase
tiene que implementar List/election3
Listener y por 'ltimo tenemos que
hacer un m%todo value!hanged>? que
recibe un ob+eto List/election$vent.
Dentro de este m%todo podemos utilizar la variable List/election$vent para saber cu(l #ue el &List que
mand llamar el m%todo mediante el m%todo get/ource>? que es igual que el que hab6amos utilizado
hasta ahora.
Bn paso mHs allH
4na parte importante de las listas es el poder agregar
y eliminar registros. -ara hacer esto necesitamos
crear un ob+eto llamado De#aultList:odel e iniciar
el &List con este ob+eto en vez de con el arreglo de
/tring como hab6amos visto en la primera parte.
!omo podemos ver aqui podemos agregar elementos
al De#aultList:odel utilizando el m%todo
add$lement>? que recibe un /tring con el elemento a
a*adir.
4na vez que ya tengamos el De#aultList:odel con todos los elementos que queramos es hora de crear
la lista con el constructor que recibe el De#aultList:odel. 7ecuerda que la variable list:odel que
estamos utilizando en el cdigo es un ob+eto tipo De#aultList:odel.
4na vez que ya creamos la lista
podemos utilizar nuestro De#ault3
List:odel para eliminar los eleven3
tos que queramos, si sabemos el 6n3
dice en que lugar #ueron agregados
>que es la misma posicin en la que
aparecen en el &List? con el m%todo
remove$lementAt>? que recibe 'ni3camente un n'mero que es el 6ndice a borrar. "ambi%n hay un
m%todo del &List que nos permite saber qu% elemento est( seleccionado. $l m%todo get/elected5ndex>?
nos devuelve el 6ndice del elemento que est% seleccionado en ese momento.
$ntonces, para poder borrar un elemento de un &List podemos utilizar +untos el m%todo para borrar el
registro en un 6ndice y el m%todo que nos devuelve el 6ndice que est( actualmente seleccioando, con lo
que podemos borrar el elemento que seleccion el usuario. /i nuestro &List permite elegir m(s de un
elemento entonces el m%todo get/elected5ndex>? no #unciona, para leer un poco m(s acerca de cmo
mane+ar listas donde se puedan mane+ar multiples selecciones consulten la clase :ain.+ava que se les
da al principio.
"ambi%n es importante saber cmo
guardar los datos de un
De#aultList:odel a un archivo.
"ambi%n hay un m%todo que nos
devuelve que tantos elementos se han
agregado al De#aultList:odel llamado
get/ize>?, este m%todo lo podemos utilizar para hacer un #or que guarde desde < hasta el tama*o todos
los registros que encuentre, es m(s sencillo mane+ar este tipo de guardado en archivos de texto por lo
que les recomiendo que lo hagan as6.
%uente: http:11EEE.maguso#t.net1trials1list.html
7acer 1ue una celda del JTa*le no sea edita*le
/i usamos De3aultTa*le,odel las celdas del JTa*le son editables por de#ecto. A veces esto no nos
interesa y JTa*le no tiene m6todos para impedirlo. La #orma de decidir qu% celdas son o no editables
es hacer nuestro propio modelo de datos, nuestro Ta*le,odel. La #orma sencilla de hacerlo es heredar
de De3aultTa*le,odel y rede#inir el m%todo isCellEdita*le/0 para que sirva a nuestros propositos
public class MiModelo e*tends ;e0ault5ableModel

public boolean isCell)ditable (int ro/< int column)



-- D:ud devolvemos true o 0alse seg]n :ueramos :ue una celda
-- identi0icada por 0ila<columna (ro/<column)< sea o no editable
i0 (column ,, ')
return true&
return 0alse&
(
(
$n este e+emplo, hemos creado nuestro propio modelo de datos que hace que la columna D >los 6ndices
empiezan en cero? de la tabla sea editable y el resto no. Ahora simplemente instanciamos el JTa*le
usando este modelo y rellenamos los datos igual que antes
MiModelo modelo , ne/ MiModelo()&
G5able tabla , ne/ G5able(modelo)&
%uente: http:11#oro.chuidiang.com1+ava3+;se1+table3no3editable1
jTa*le y su [,odelo[
!ontinuando con las tablas en &ava, vamos a ver como crear las tablas y mane+arlas, en la entrada de
I"ablas /EingI explico un poco del tema, pero en esta entrada explicare mas del tema y date m(s tips.
-ara evitarnos problemas utilizaremos un I:odeloI para nuestra tabla, acomo #unciona estoS, la verdad
que explicarlo es medio enredado, as6 que me+or una imagen:
.(sicamente es crear la tabla, cargarle el modelo y agregar la data, esto se hace con la #inalidad de
editar el modelo que es mas #exible para utilizar solo la tabla como una especie de panel el cual
contendra los datos, en realidad lo que editamos es el modelo, en otras palabras es como hacer galletas,
el molde es nuestro modelo, la data es la masa y la galleta es la tabla.
Quedando claros en esto (pienso "o) vamos con algunos tru:uillos importantes e
imprecindibles# Para crear el modelo " agregarselo a la tabla#
;e0ault5ableModel modelo , ne/ ;e0ault5ableModel()&
G5able tabla , ne/ G5able(modelo)&
(gregar columnas
modelo#addColumn($columna$)&
(gregar datos
@bject [] 0ilas , ne/ @bject[!]&
0ilas[8] , $dato columna 1$&
0ilas[1] , $dato columna !$&
modelo#add=o/ ( 0ilas )&
Borrar datos
modelo#remove=o/(6A4D)&
,odi3icar
modelo#setBalueDt ($nuevo dato$< 0ila< columna)&
8*tener el valor donde se .ace clic4!
public void mouseClicked(Mouse)vent e)
int 0ila , tabla#ro/DtPoint(evt#getPoint())&
int columna , tabla#columnDtPoint(evt#getPoint())&
i0 ((0ila X N1) SS (columna X N1))
S"stem#out#println(modelo#getBalueDt(0ila<columna))&
(
7acer 1ue la celda no se edite
public boolean isCell)ditable (int ro/< int column)
i0 (column ,, ')
return true&
return 0alse&
(
Cam*iar el tipo de dato
public Class getColumnClass(int columna)
i0 (columna ,, 8) return %oolean#class&
i0 (columna ,, 1) return Anteger#class&
return @bject#class&
(
(gregarle un -croll
G5able tabla , ne/ G5able()&
GScrollPane scroll , ne/ GScrollPane(tabla)&
G5able tabla , ne/ G5able()&
GScrollPane scroll , ne/ GScrollPane()&
scroll#setBie/portBie/(tabla)&
%uente: http:11carlitoxenlaEeb.blogspot.com1;<,<1<=1+table3y3su3modelo.html
J(C(: Celdas no edita*les
package cunlogant2orium#.&
import java*#s/ing#table#;e0ault5ableModel&

-..
.
. Faut2or /2"em
.-
public class Custom;e0ault5ableModel e*tends ;e0ault5ableModel
-..
. Sobreescribe el mtodo isCell)ditable de ;e0ault5ableModel<
. para :ue las celdas no sean editables#
.
. Fparam ro/
. Fparam column
. Freturn
.-
F@verride
public boolean isCell)ditable (int ro/< int column)

return 0alse&
(


(
%uente: http:11bu##erdecodigo.blogspot.com1;<,,1,,1+ava3celdas3no3editables.html
'asar datos en J3rames
--agrgale $getters$ a la clase Segundario< por ejemplo:
public class Segundario
-- a:ud el cIdigo :ue "a tendas
public String getNombre ()
return jNombre#get5e*t ()&
(
(
-- muestra en 0orma modal el j0rame secundario
Segundario n0 , ne/ Segundario()&
00#setModal (true)&
n0#setBisible(true)&
-- a:ud "a puedes e*traer los datos
String nombre , n0#getNombre ()&
####
-- a:ud destru"es el j0rame secundario
n0#removeDll ()&
n0#dispose ()&
%uente: http:11es.ansEers.yahoo.com1question1indexSqidO;<<U<U;U<Q,,<,AAblm"u
IC+mo .acer un JTa*le no edita*leJ
-uedes utilizar un "able:odel#
;e0inir una clase como esta:
public class M"Model e*tends Dbstract5ableModel
--not necessar"
(
G5able m"5able , ne/ G5able()&
m"5able#setModel(ne/ M"Model())&
-uedes reemplaMar el mtodo isCell)ditable " poner en prOctica lo :ue :uieras por
e+emplo:
--instance table model
;e0ault5ableModel tableModel , ne/ ;e0ault5ableModel()
F@verride
public boolean isCell)ditable(int ro/< int column)
--all cells 0alse return 0alse&
(
(&
table#setModel(tableModel)&
@
--instance table model
;e0ault5ableModel tableModel , ne/ ;e0ault5ableModel()
F@verride
public boolean isCell)ditable(int ro/< int column)
--@nl" t2e t2ird column
return column,,'&
(
(&
table#setModel(tableModel)&
%uente: http:11stac2over#loE.com1questions1,UU<Q,H1hoE3to3ma2e3a3+table3non3editable
'asar datos de un registro de un JTa*le a un JDialog en sus respectivos campos
-artiendo de que su &"able se llame &"-rueba, el &Dialog donde esta el &"able donde se va a capturar
los clic2s se llame &D-rincipal y que el &Dialog donde esten los &text0ield a rellenar se llame
&Dialog:odi#icarP se debe hacer lo siguiente.
/e le debe declarar un capturador de eventos al &"able para que detecte los clic2s y su respectiva
posicion>tanto #ila como columna?P
G5Pruebas#addMouse4istener(ne/ 4istenerG5able(t2is<nuevoG;ialogSecundario))&
$n este e+emplo yo estoy asignandole un nuevo ob+eto de tipo Listener&"able donde Listener&"able es
otra clase que implementa la inter#as :ouseListener. a continuacion un e+emplo de una clase
>Listener&"able? implementando la inter#az :ouselistener para capturar el evento del clic2>cada vez
que se de un clic2 en el &"able se e+ecutara el metodo mouse!lic2ed.
import java#a/t#event#Mouse)vent&
import java#a/t#event#Mouse4istener&
import java*#s/ing#event#5ableModel)vent&
import java*#s/ing#event#5ableModel4istener&
public class 4istenerG5able implements Mouse4istener
int0ila&
intcolumna&
G;ialog G;Principal&
G;ialog G;ialogModi0icar&
private 4istenerG5able(G;ialog G;principal< G;ialog G;ialogModi0icar)
--supuestamente en G;Principal esta el G5Pruebas#
t2is#G;Principal, G;principal&
t2is#G;ialogModi0icar,G;ialogModi0icar&
(
public void mouseClicked(Mouse)vent e)
0ila,G;Principal#getG5Pruebas()#ro/DtPoint(e#getPoint())&
columna,G;Principal#getG5Pruebas()#columnDtPoint(e#getPoint())&
-- en este caso "a capturamos las 0ila " la columna donde se dio clic
S"stem#o&t#println($6ila $ P 0ila P $ columna$ P columna )&
--teniendo eso solo nos :uedaria por actualiMar el G;ialog donde estan
--todos los campos --de la siguiente 0orma####
--No olvide :ue el :ue guarda el contenido del G5able es el ;e0ault5ableModel
--por lo tanto necesitamos obtenerlo#
;e0ault5ableModel d0t , (;e0ault5ableModel)
G;Principal#getG5Pruebas()#getModel()&
--D2ora se empeMarian a rellenar los campos por medio de los metodos
--Set " le"endo cada valor del ;e0ault5ableModel con el metodo getBalueDt(int
--0ila< int Columna)&
G;ialogModi0icar#setNombre(d0t#getBalueDt(0ila<8))&
G;ialogModi0icar#setDpellido(d0t#getBalueDt(0ila<1))&
G;ialogModi0icar#set5el(d0t#getBalueDt(0ila<!))&
--Siendo esas 8<1<! las columnas del jtable correspondientes a cada valor
--re:uerido<por ejemplo siendo la columna 8 la :ue tiene todos los nombres#
(
(
4o que depronto #altaria seria implementar un i# que descarte cuando detecte el clic2 en la #ila y
columna 3, que ese quiere decir que no ha seleccionado nada pero dio clic2 en algun borde del &"able
$spero haber sido claro...
%uente: http:11comunidad.dragon+ar.org1#;<,1pasar3datos3de3un3registro3de3un3+table3un3+dialog3en3sus3respectivos3campos3,<;U91
'asar Datos de un jDialog a otro jDialog
"ienes que instanciar el +dialogNsecundario desde el +dialogNprincipal y pasar los par(metros que
deseas obtener en el +dialogNsecundario y ya estando en el +dialogNsecundario lo atrapas por su m%todo
constructor.
Algo asi:
!digo -F-:
public class jdialog?principal
private button pasar?datosDction
String nombre,$;avid$&
Ant edad,!8&
jdialog?secundario re0,ne/ jdialog?secundario(null<true<nombre<edad)&
(
###
(
public class jdialog?secundario
private String nombre&
private int edad&
public jdialog?secundario(###<###<String nombre<int edad)&
t2is#nombre,nombre&--D:ud la variable t2is#nombre es ;avid#
t2is#edad,edad&--D:ud la variable t2is#edad es !8#
--Cna veM capturado las variables puedes mostrarlo en G5e*t6ield#
(
###
(
%uente: http:11#orode+ava.com1shoEthread.php19B,3-asar3Datos3de3un3+Dialog3a3otro3+Dialog
Java A Di3erencia entre J%rame %orm y JDialog %orm
-ara llamar a un &Dialog 0orm: neE menu.p-rincipal>neE +ava.aEt.0rame>?,true?.setLisible>true?P
-ara llamar a un &0rame 0orm: neE menu.p-rincipal>?.setLisible>true?P
%uente: http:11EEE.laEebdelprogramador.com1#oros1&ava1U9H9BD3Di#erenciaNentreN&0rameN0ormNyN&DialogN0orm.html
J%ormattedTe)t%ield y ,as4%ormatter
/i bien dentro de las aplicaciones ba+o sEing >+ava? podemos utilizar un componente como el
&"ext0ield para capturar una entrada de texto. -ero que sucede si esta entrada debe seguir un #ormato
espec6#icoS o posee un tama*o obligatorio al cual debe llegarS !laros e+emplos de esto son al querer
capturar un n'mero de tele#no o un n'mero de c%dula >D)5?.
-ara ello se puede utilizar un componente conocido como &0ormatted"ext0ield. Al que podemos
indicar el #ormato de nuestra entrada. Lo que tenemos que hacer es crear una instancia de la !lase
:as20ormatter en base a un patrn y este enviarlo en el constructor del &0ormatted"ext0ield.
Mask6ormatter patron , ne/ Mask6ormatter(_fffffffffNf`)&
G6ormatted5e*t6ield campo)ntrada , ne/ G6ormatted5e*t6ield(patron)&
y listo nuestra entrada ser( validada, en este caso solo para n'meros.
/i utilizamos )et.eans, deberemos colocar una instancia de la clase Abstract0ormatter0actory en la
propiedad 0ormatter0actory del elemento gr(#ico.
ne/ java*#s/ing#G6ormatted5e*t6ield#Dbstract6ormatter6actor"()
public java*#s/ing#G6ormatted5e*t6ield#Dbstract6ormatter
get6ormatter(java*#s/ing#G6ormatted5e*t6ield t0)
tr"
return ne/ java*#s/ing#te*t#Mask6ormatter($ffffffff#ff$)&
( catc2(java#te*t#Parse)*ception pe)
pe#printStack5race()&
(
return null&
(
(
7esulta muy 'til en varias ocaciones.
%uente: http:11qmarqeva.Eordpress.com1;<<U1<91,=1+#ormattedtext#ield3y3mas2#ormatter1
Ejemplos de uso del J%ormattedTe)t%ield
$l J%ormattedTe)t%ield es un componente +ava un paso m(s evolucionado que un JTe)t%ield
normalito. $l JTe)t%ield permite al usuario meter texto. !uando desde nuestro cdigo le pedimos el
contenido, nos devuelve el texto introducido por el usuario como -tring. !uando desde cdigo le
decimos lo que queremos que muestre, debemos pasarle un -tring. $l JTe)t%ield, adem(s, no hace
ning'n tipo de comprobacin sobre el texto.
$l J%ormattedTe)t%ield da un paso m(s all(. Aunque el usuario mete un texto, el
J%ormattedTe)t%ield lo convierte a la clase que nosotros queramos >un Integer, %loat, Date o
incluso una clase nuestra propia?. !uando queramos pasarle algo, le podemos pasar directamente
cualquiera de estas clases y %l se encarga de la conversin a texto para mostrar.
J%ormattedTe)t%ield para editar Integer
-ara editar cualquier tipo b(sico de +ava, estilo Integer, %loat, Dou*le, Date, etc, basta con llamar al
m%todo setCalue/0 del J%ormattedTe)t%ield pas(ndole uno de estos tipos de datos, o bien pas(rselo
en el constructor.
-or e+emplo, para Integer, nos bastar6a con cualquiera de los dos casos siguientes:
G6ormatted5e*t6ield te*t6ield1 , ne/ G6ormatted5e*t6ield (ne/ Anteger('))&
-- o bien ####
G6ormatted5e*t6ield te*t6ield! , ne/ G6ormatted5e*t6ield ()&
te*t6ield!#setBalue(ne/ Anteger('))&
!on esto ya tenemos un editor que nos permite recoger Integer directamente cuando el usuario lo edite
Anteger valor , te*t6ield1#getBalue()&
/upongamos que el usuario escribe algo en el J%ormattedTe)t%ield y l uego pincha con el ratn en
otros sitio >se dice que el J%ormattedTe)t%ield pierde el #oco?, por e+emplo, en un botn de IAceptarI
los cambios introducidos. $n el momento que el J%ormattedTe)t%ield pierde el #oco, comprueba el
texto escrito por el usuario. /i es correcto, lo guarda de #orma que el m%todo getCalue/0 nos devolver(
el nuevo valor. /i es incorrecto, pondr( autom(ticamente el 'ltimo valor bueno, deshaciendo el cambio
hecho por el usuario.
/i no te interesa cambiar ese comportamiento, puedes pasar al siguiente punto. /i quieres cambiarlo,
sigue leyendo.
$ste comportamiento puede cambiarse con el m%todo set%ocus?ostBe.avior/0, al que podemos pasar
varios valores:
J%ormattedTe)t%ield!C8,,IT. /i el texto introducido es correcto, se guarda para
devolverlo cuando se haga getLalue>?. /i es incorrecto, no se hace nada, el texto en pantalla queda
como esta, o sea, mal. getLalue>? nos devolver( el 'ltimo valor correcto, independientemente de lo
que se muestre en pantalla.
J%ormattedTe)t%ield!5ECE5T. !uando hacemos clic2 en otro sitio, el editor vuelve
autom(ticamete a su 'ltimo valor bueno, descartando todas nuestras ediciones, sean correctas o no.
-ara que esta opcin tenga sentido, debemos llamar desde cdigo al m%todo commit$dit>? sin que el
&0ormatted"ext0ield pierda el #oco, por e+emplo, cuando se pulsa ]introC sobre el editor, validando
as6 los cambios realizados.
J%ormattedTe)t%ield!C8,,ITG85G5ECE5T. $sta es la opcin por de#ecto y la m(s 'til.
/i el texto introducido es incorrecto, se vuelve autom(ticamente al 'ltimo valor bueno conocido. /i
el texto no es v(lido, se muestra el 'ltimo valor bueno conocido.]C
J%ormattedTe)t%ield!'E5-I-T. $sta opcin no hace nada con el texto introducido,
independientemente de que est% bien o mal. getLalue>? siempre devolver( el 'ltimo valor bueno
conocido. -ara que el editor recoga el nuevo valor, debemos llamar a commit$dit>? previamente.
-uedes ver estos cuatro casos #uncionando en unos applets de e+emplo. "ambi%n puedes descargarte los
#uentes de los mismos.
J%ormattedTe)t%ield para editar nuestra propia clase
-odemos usar la #orma indicada en el punto anterior con cualquier clase b(sica de +ava >Integer, %loat,
Date, etc?. /i queremos que el J%ormattedTe)t%ield nos acepte y devuelva una clase nuestra propia,
debemos hacer un poco m(s de cdigo.
Lamos primero a de#inir nuestra propia clase. -or e+emplo, una clase ,ayuscula que representa una
cadena de texto siempre en may'sculas. Le ponemos un constructor que admita un -tring para
convertirlo a may'sculas y un m%todo to-tring/0 para obtener la cadena en may'sculas. La clase puede
ser como esta
-..=epresenta una cadena en ma"]sculas .-
class Ma"usculas

-.. 4a cadena en ma"]sculas .-


private String valor,$$&
-.. Pasa a ma"]sculas la cadena :ue se le pasa " la guarda .-
public Ma"usculas(String cadena)

valor , cadena#toCpperCase()&
(
-.. ;evuelve la cadena en ma"]sculas .-
public String toString()

return valor&
(
(
-ara que el J%ormattedTe)t%ield nos acepte esto en sus m%todos setCalue/0 y getCalue/0, tiene que
saber la #orma de convertir esto a un texto que se muestre en el editor y la #orma de convertir el texto
recogido del editor y convertirlo a esta clase.
Las clases que realizan este tipo de conversiones para el J%ormattedTe)t%ield heredan de
J%ormattedTe)t%ield!(*stract%ormatter, una clase interna del J%ormattedTe)t%ield. /i queremos
usar nuestra clase ,ayuscula, debemos hacer una clase hi+a de J%ormattedTe)t%ield!(*stractA
%ormatter y de#inir los dos m%todos abstractos que tiene que son, precisamente, los de convertir de
clase a -tring y de -tring a clase.
-.. Clase :ue sabe convertir Ma"uscula a te*to para presentar en el editor "
de te*to recogido del editor obtener una clase Ma"]scula
.-class 6ormateador e*tends G6ormatted5e*t6ield#Dbstract6ormatter

-.. Se le pasa el te*to del editor " debe devolver una clase Ma"uscula .-
public @bject string5oBalue(String te*t) t2ro/s Parse)*ception

return ne/ Ma"usculas(te*t)&
(
-.. Se le pasa una clase Ma"uscula o null " devuelve la cadena para poner en
el editor .-
public String value5oString(@bject value) t2ro/s Parse)*ception

i0 (value,,null)
return ($$)&
return value#toString()&
(
(
.ien, ya tenemos todo lo necesario construido. Ahora solo hay que instanciar el &0ormatted"ext0ield
pas(ndole en el constructor nuestra clase 0ormateador y con setLalue>? darle un primer valor v(lido
para evitar problemas.
G6ormatted5e*t6ield te*t6ield , ne/ G6ormatted5e*t6ield(ne/ 6ormateador())&
te*t6ield#setBalue(ne/ Ma"usculas($2ola$))&
$l m%todo getCalue/0 nos devolver( una clase ,ayusculas y a trav%s de setCalue/0 podemos pasarle
una clase ,ayusculas sin problemas.
-uedes ver un Applet con este editor #uncionando y descargarte sus #uentes.
J%ormattedTe)t%ield con mHscara para %loat
$xisten varios J%ormattedTe)t%ield!(*stract%ormatter adem(s de los que podamos hacernos
nosotros. 4no de los m(s conocidos es el ,as4%ormatter. $ste #ormateador restringe el texto v(lido
incluso mientras lo estamos tecleando. Al instanciar el ,as4%ormatter le damos un IpatrnI sobre
cmo queremos que sea el texto. 4na vez con#igurado todo, el usuario no podr( escribir en el
%ormattedTe)t%ield nada que se salga de ese IpatrnI. Leamos con un e+emplo qu% quiero decir.
/upongamos que quiero un editor que me permita escribir un n'mero con dos ci#ras enteras y dos
decimales. )o queremos que el usuario escriba algo que no sea un n'mero y no queremos que escriba
ni m(s ni menos de las ci#ras de las indicadas. $l editor debe admitir y devolvernos con setCalue/0 y
getCalue/0 un %loat.
-ara conseguir esto, basta instanciar un :as20ormatter y pas(rselo al &0ormatted"ext0ield en el
constructor. -ara evitar problemas, le damos un valor v(lido inicial v(lido al editor. $l neE
:as20ormatter lanza una excepcin, as6 que debemos capturarla.
tr"

-. )l $patrIn$ para el editor# 4as f representan ci0ras# )n la DPA puedes ver


mOs# @jo con el punto decimal< seg]n el idioma puede ser una coma#.-
Mask6ormatter mascara , ne/ Mask6ormatter($ff#ff$)&
-- Se constru"e el G6ormatted5e*t6ield pasOndole la mOscara
G6ormatted5e*t6ield te*t6ield , ne/ G6ormatted5e*t6ield(mascara)&
-- Se da un valor inicial vOlido para evitar problemas
te*t6ield#setBalue(ne/ 6loat($1!#'7$))&
(
catc2 (###)
a est( listo. )uestro editor slo admite n'meros de dos ci#ras enteras y dos decimales y no nos de+a
escribir otra cosa. Los m%todos getCalue/0 y setCalue/0 devuelven y admiten %loats.
-odemos usar el ,as4%ormatter con cualquier tipo de dato que:
"enga un constructor con -tring. $l ,as4%ormatter para construir el dato llamar( al
constructor pas(ndole el -tring recogido en el J%ormattedTe)t%ield.
$l m%todo to-tring/0 devuelva algo que cuadre con el patrn que hemos puesto.
J%ormattedTe)t%ield con mHscara para nuestra propia clase!
$l ,as4%ormatter nos vale tambi%n para la clase Date. $l problema es que debemos restringirnos a
los #ormatos de texto que entiende Date en su constructor con -tring, que no son precisamente bonitos
ni cmodos para introducir un usuario.
/i queremos usar ,as4%ormatter con un #ormato distinto para Date o bien usar ,as4%ormatter con
una clase nuestra, debemos hacer algo parecido a lo que hicimos para poder usar nuestras propias
clases, pero heredando de ,as4%ormatter en vez de heredar de J%ormattedTe)t%ield!(*stractA
%ormatter.
-or e+emplo, supongamos que queremos un editor de 0echa hora en este #ormato Idd1mm1yy
hh:mm:ssI y que no queremos que nos de+en escribir nada incorrecto.
"enemos que hacernos nuestro propio ,as4%ormatter heredando del original y rede#iniendo los
m%todos de conversion de Date a -tring y de -tring a Date
-.. Mascara para 0ec2a-2ora a nuestro gusto .-
class 6ormato6ec2a e*tends Mask6ormatter

-.. Se constru"e con el patrIn deseado .-


public 6ormato6ec2a() t2ro/s Parse)*ception

-- 4as f son ci0ras " representa $dd-mm-"" 22:mm:ss$
super ($ff-ff-ff ff:ff:ff$)&
(
-.. Cna clase adecuada para convertir ;ate a String " viceversa de 0orma
cImoda# Puedes ver cImo se 2ace el patrIn $dd-MM-"" kk:mm:ss$ en la DPA#
)l patrIn :ue pongamos a:ud debe cuadrar correctamente con la mOscara :ue
2emos puesto en el constructor .-
private Simple;ate6ormat 0ormato , ne/ Simple;ate6ormat($dd-MM-"" kk:mm:ss$)&
-.. Convierte el te*to del editor en un ;ate .-
public @bject string5oBalue(String te*t) t2ro/s Parse)*ception

return 0ormato#parse@bject(te*t)&
(
-.. =edibe un ;ate o null " debe convertirlo a te*to :ue cumpla el patrIn
indicado anteriormente .-
public String value5oString(@bject value) t2ro/s Parse)*ception

i0 (value instanceo0 ;ate)
return 0ormato#0ormat((;ate)value)&
return 0ormato#0ormat(ne/ ;ate())&
(
(
a est( todo listo. /implemente instanciamos el J%ormattedTe)t%ield pas(ndole nuestro
%ormato%ec.a y le damos un valor inicial v(lido para evitar problemas. !omo nuestro constructor
lanza una excepcin, hay que meterlo todo en un tryAcatc..
tr"

G6ormatted5e*t6ield te*t6ield , ne/ G6ormatted5e*t6ield(ne/ 6ormato6ec2a())&


te*t6ield#setBalue(ne/ ;ate())&
(
catc2 (###)
El International,as4%ormatter
4na (*stract%ormatter interesante es el International,as4%oramatter. Adem(s de otras muchas
cosas, nos permite editar un n'mero sin que se salga de un rango determinado. -or e+emplo, un entero
entre ,< y ,<<. $ste (*stract%ormatter permite escribir cosas incorrectas, pero al #inal slo admite
n'meros entre el rango indicado.
/u uso es sencillo, basta algo como esto
Anternational6ormatter 0ormato , ne/ Anternational6ormatter()&
0ormato#setMa*imum(ne/ Anteger(188))&
0ormato#setMinimum(ne/ Anteger(18))&
G6ormatted5e*t6ield te*t6ield , ne/ G6ormatted5e*t6ield(0ormato)&
te*t6ield#setBalue(ne/ Anteger(Y8))&
%uente: http:11EEE.chuidiang.com1+ava1e+emplos1&0ormatted"ext0ield1$+emplos&0ormatted"ext0ield.php
Ceri3icar si la tecla pulsada no es un digito
5e*to# DddRe"4istener(ne/ Re"Ddapter()
public void ke"5"ped(Re")vent e)
c2ar caracter , e# UetRe"C2ar()&
--Beri0icar si la tecla pulsada no es un digito
i0(caracter V ^8^) WW (caracter X ^Y^)) SS (caracterE , Re")vent# BR?%DCR?SPDC)))
G@ptionPane# S2o/Message;ialog(ne/ G6rame()<$;isculpe< el valor de este Campo es
Numerico$<$An0ormaciIn$<G@ptionPane# AN6@=MD5A@N?M)SSDU)<ne/ AmageAcon(getClass()#
Uet=esource($-imagenes-adver# Png$)))&
e#Consume()& -- ignorar el evento de teclado
(
(
()&
%uente: http:11grupos.emagister.com1debate1convertirNaNmayusculasNenN+text#ieldNenNnetbeans19H<U3H,U<H<
%ormatear una 3ec.a en ddDmmDyyyy
import java#te*t#;ate6ormat&
import java#te*t#Simple;ate6ormat&
import java#util#Calendar&
import java#util#;ate&
public class Main
public static void main(String[] args)
;ate date , Calendar#getAnstance()#get5ime()&
-- ;ispla" a date in da"< mont2< "ear 0ormat
;ate6ormat 0ormatter , new Simple;ate6ormat($dd-MM-""""$)&
String toda" , 0ormatter#0ormat(date)&
S"stem#out#println($5oda" : $ P toda")&
(
(
%uente: http:11EEE.+ava;s.com1"utorial1&ava1<<D<NNData3"ype10ormatadateintoddmmyyyy.htm
Ingresar la 3ec.a
suponiendo :ue tu te*t0ield se llama 0ield6ec2a:
5e*t6ield 0ield6ec2a&
# # # # #
-- para validar la 0ec2a 2aMlo asd:
String 0ec2a , 0ield6ec2a#get5e*t ()&
i0 (0ec2a#matc2es ($[[d7([[N[[d!([[N[[d!($))
--a:ud el codigo :ue sigue si es vOlido
( else
-- a:ud el codigo :ue sigue si no es vOlido
(
%uente: http:11mx.ansEers.yahoo.com1question1indexSqidO;<<U<Q;U,<=Q=9AA,huan
Convirtiendo Date a -tring D -tring a Date
-odemos convertir un ob+eto #echa a /tring de varias maneras. !ada manera es un tipo de #ormato
establecido por el &L: instalado en nuestro computador. !onsideremos este e+emplo:
;ate d1 , ne/ ;ate()&
;ate6ormat[] d0a , ne/ ;ate6ormat[9]&
d0a[8] , ;ate6ormat#getAnstance()&
d0a[1] , ;ate6ormat#get;ateAnstance()&
d0a[!] , ;ate6ormat#get;ateAnstance(;ate6ormat#SJ@=5)&
d0a['] , ;ate6ormat#get;ateAnstance(;ate6ormat#M);ACM)&
d0a[7] , ;ate6ormat#get;ateAnstance(;ate6ormat#4@NU)&
d0a[+] , ;ate6ormat#get;ateAnstance(;ate6ormat#6C44)&
0or (;ate6ormat d0 : d0a)
S"stem#out#println(d0#0ormat(d1))&
(
$n mi caso, el resultado es:
8Y-8!-8Y 18:!Y DM
8Y-8!-!88Y
8Y-8!-8Y
8Y-8!-!88Y
Y de 0ebrero de !88Y
lunes U de #ebrero de ;<<U
)otemos el resultado del #ormato obtenido por ;ate6ormat#getAnstance(). $s toda la #echa en
#ormato corto, adem(s de la hora. :ientras que si obtenemos el #ormato con ;ate6ormat#get;ateN
Anstance() la #echa se muestra en #ormato medio >-odemos consultar la con#iguracin del sistema
operativo re#erido al #ormato de #echas?. "ambi%n podemos ver los dem(s #ormatos: /F@7",
:$D54:, LA7R$ y 04LL.
De la misma manera podemos convertir de /tring a ob+eto +ava.util.Date. Aqu6 muestro las di#erentes
maneras, de di#erentes cadenas:
;ate6ormat d0 , ;ate6ormat#get;ateAnstance()&
;ate d , d0#parse($8Y-8!-!88Y$)&
;ate6ormat d0 , ;ate6ormat#get;ateAnstance(;ate6ormat#SJ@=5)&
;ate d , d0#parse($8Y-8!-8Y$)&
;ate6ormat d0 , ;ate6ormat#get;ateAnstance(;ate6ormat#M);ACM)&
;ate d , d0#parse($8Y-8!-8Y$)&
;ate6ormat d0 , ;ate6ormat#get;ateAnstance(;ate6ormat#4@NU)&
;ate d , d0#parse($Y de 0ebrero de !88Y$)&
;ate6ormat d0 , ;ate6ormat#get;ateAnstance(;ate6ormat#6C44)&
;ate d , d0#parse($lunes Y de 0ebrero de !88Y$)&
%uente: http:11EEE.apuntesde+ava.com1;<<U1<;1convirtiendo3date3string3string3date.html
Convertir Date a -tring /y -tring a Date0
&ava almacena las #echas en un ob+eto llamado java#util#;ate. /i se imprime o se usa como cadena,
el resultado no es nada agradable ya que no se entiende: Sat Mar !\ 88:88:88 C@5 1Y\9
-ues bien, existe una clase llamada java#te*t#;ate6ormat que permite convertir de Date a /tring
>ba+o un #ormato en especial? y visceversa >tambi%n usando el mismo #ormato?.
Aqu6 de+o un peque*o cdigo >adaptado del libro de certi#icacin /!&- =.< de Aatty /ierra 3 -(gina
D9D? donde se muestra los di#erentes #ormatos que mane+a la clase java#te*t#;ate6ormat. /i
necesitas convertir una cadena >/tring? a Date, primero prueba este cdigo, anal6zalo y luego piensa
cmo lo puedes usar.
import java#te*t#;ate6ormat&
import java#te*t#Parse)*ception&
import java#util#;ate&
public class Main
public static void main(String[] args)
;ate 0ec2a , ne/ ;ate()&
;ate6ormat d0;e0ault , ;ate6ormat#getAnstance()&
;ate6ormat d0;ateAnstance , ;ate6ormat#get;ateAnstance()&
;ate6ormat d0;ateS2ort , ;ate6ormat#get;ateAnstance(;ate6ormat#SJ@=5)&
;ate6ormat d0;ateMedium , ;ate6ormat#get;ateAnstance(;ate6ormat#M);ACM)&
;ate6ormat d0;ate4ong , ;ate6ormat#get;ateAnstance(;ate6ormat#4@NU)&
;ate6ormat d0;ate6ull , ;ate6ormat#get;ateAnstance(;ate6ormat#6C44)&
S"stem#out#println($getAnstance(),$ P d0;e0ault#0ormat(0ec2a))&
S"stem#out#println($get;ateAnstance(),$ P d0;ateAnstance#0ormat(0ec2a))&
S"stem#out#println($get;ateAnstance(;ate6ormat#SJ@=5),$ P
d0;ateS2ort#0ormat(0ec2a))&
S"stem#out#println($get;ateAnstance(;ate6ormat#M);ACM),$ P
d0;ateMedium#0ormat(0ec2a))&
S"stem#out#println($get;ateAnstance(;ate6ormat#4@NU),$ P
d0;ate4ong#0ormat(0ec2a))&
S"stem#out#println($get;ateAnstance(;ate6ormat#6C44),$ P
d0;ate6ull#0ormat(0ec2a))&
tr"
;ate 0ec2a! , d0;ateMedium#parse($!\-8'-1Y\9$)&
S"stem#out#println($Parsed:$ P 0ec2a!)&
( catc2 (Parse)*ception e*)
e*#printStack5race()&
(
(
(
$l resultado para este cdigo, en mi caso, es el siguiente:
getAnstance(),!!-87-8Y 11:1! DM
get;ateAnstance(),!!-87-!88Y
get;ateAnstance(;ate6ormat#SJ@=5),!!-87-8Y
get;ateAnstance(;ate6ormat#M);ACM),!!-87-!88Y
get;ateAnstance(;ate6ormat#4@NU),!! de abril de !88Y
get;ateAnstance(;ate6ormat#6C44),mircoles !! de abril de !88Y
Parsed:Sat Mar !\ 88:88:88 C@5 1Y\9
%uente: http:11EEE.apuntesde+ava.com1;<<U1<D1convertir3date3string3y3string3date.html
%ormatear ,iles y decimales
$xiste alguna librer6a para separar miles y decimales
/i escribo en un text#ield:,<<< me de #ormato ,,<<<.<<
/i escribo ,<<<< de #ormato a ,<,<<<.<<
y asi sucesivamente para cantidades mayores.
Fe mirado Decimal0ormat.
A ver si alguien me tira un par de e+emplos.
import java#te*t#;ecimal6ormat&
###
%ecimal1ormat #ormateador O ne& %ecimal1ormat>I___,___.__I?P
::'ste daria a la salida >/???
System.out.println >#ormateador.#ormat >,<<<??P
::'ste otro >?/???
System.out.println >#ormateador.#ormat >,<<<<??P
%uente: http:11EEE.+avamexico.org1#oros1+avaNstandardNedition1#ormatearNmilesNyNdecimales
Decimal%ormat
La clase Decimal%ormat de +ava nos permite mostrar los n'meros en pantalla con el #ormato que
queramos, es decir, con cu(ntos decimales, si queremos
o coma para los decimales, etc. Decimal%ormat tambi%n es 'til para presentar un n'mero en un
JTe)t%ield o recoger el texto del JTe)t%ield y reconstruir el n'mero.
4n uso simple de Decimal%ormat puede ser este
import java#te*t#;ecimal6ormat&
###
;ecimal6ormat 0ormateador , ne/ ;ecimal6ormat($ffff#ffff$)&
-- )sto sale en pantalla con cuatro decimales< es decir< '<7'!7
S"stem#out#println (0ormateador#0ormat ('#7'!7!'Z'))&
$n la A-5 de Decimal0ormat podemos ver todos los posibles caracteres que admite la m(scara.
/i usamos ceros en vez de _, los huecos se rellenar(n con ceros.
import java#te*t#;ecimal6ormat&
###
;ecimal6ormat 0ormateador , ne/ ;ecimal6ormat($8888#8888$)&
-- )sto sale en pantalla con cuatro ci0ras enteras
-- " cuatro decimales< es decir< 888'<7'88
S"stem#out#println (0ormateador#0ormat ('#7'))&
'orcentajes
4na caracter6stica curiosa, es que si usamos en la m(scara el signo de porcenta+e d, el n'mero se
multiplicar( autom(ticamente por ,<< al presentarlo en pantalla.
;ecimal6ormat 0ormateador , ne/ ;ecimal6ormat($fff#ffg$)&
-- )sto saca en pantalla '7<77g
S"stem#out#println (0ormateador#0ormat(8#'777))&
Decimal%ormat-ym*ols
La clase Decimal%ormat usa por de#ecto el #ormato para el lengua+e que tengamos instalado en el
ordenador. $s decir, si nuestro sistema operativo est( en espa*ol, se usar( la coma para los decimales y
el punto para los separadores de miles. /i estamos en ingl%s, se usar( el punto decimal.
4na opcin para cambiar esto, es crear una clase Decimal%ormat-ym*ols, que vendr( rellena con lo
del idioma por de#ecto, y cambiar en ella el s6mbolo que nos interese. -or e+emplo, si estamos en
espa*ol y queremos usar el punto decimal en vez de la coma, podemos hacer esto
import java#te*t#;ecimal6ormat&
import java#te*t#;ecimal6ormatS"mbols&
###
;ecimal6ormatS"mbols simbolos , ne/ ;ecimal6ormatS"mbols()&
simbolos#set;ecimalSeparator(^#^)&
;ecimal6ormat 0ormateador , ne/ ;ecimal6ormat($ffff#ffff$<simbolos)&
-- )sto sale en pantalla con punto decimal< es decir< '#7'!7<
S"stem#out#println (0ormateador#0ormat ('#7'!7!'Z'))&
$n la A-5 de Decimal0ormat/ymbols puedes ver qu% m(s s6mbolos se pueden cambiar.
5econstruir el n$mero
/i suponemos que un usuario escribe en un JTe)t%ield un n'mero, podemos leerlo y reconstruirlo con
Decimal%ormat
G5e*t6ield te*t6ield , ne/ G5e*t6ield()&
###
;ecimal6ormat 0ormateador , ne/ ;ecimal6ormat($ffff#ffff$)&
String te*to , te*t6ield#get5e*t()&
tr"

-- parse() lanMa una Parse)*ception en caso de 0allo :ue 2a"
-- :ue capturar#
Number numero , 0ormateador#parse(te*to)&
double valor , numero#doubleBalue()&
-- )stas dos ldneas se puede abreviar con
-- double valor , 0ormateador#parse(te*to)#doubleBalue()&
(
catc2 (Parse)*ception e)

-- )rror# )l usuario 2a escrito algo :ue no se puede convertir
-- a n]mero#
(
%uente: http:11chuEi2i.chuidiang.org1index.phpStitleODecimal0ormat
-impleDate%ormat
'ara 1u6 sirve -impleDate%ormat
La clase 6imple#ate"ormat nos ayuda a mostrar las #echas en el #ormato que queramos o a
reconstruirlas a partir de una cadena de texto.
Convertir un Date a -tring
4n uso simple de 6imple#ate"ormat para escribir una #echa en pantalla puede ser este
import java#te*t#Simple;ate6ormat&
###
Simple;ate6ormat 0ormateador , ne/ Simple;ate6ormat($dd-MM-""""$)&
-- )sto muestra la 0ec2a actual en pantalla< mOs o menos asd !9-18-!889
S"stem#out#println(0ormateador#0ormat(ne/ ;ate()))&
-or supuesto, podemos +ugar con la m(scara y ponerla a nuestro gusto, dentro de las posibilidades que
nos o#rece la A-5 de 6imple#ate"ormat.
Simple;ate6ormat 0ormateador , ne/ Simple;ate6ormat($^Jo" es^ ))))))))) dd ^de^
MMMMM ^de^ """"$)&
Simple;ate6ormat 0ormatea , ne/ Simple;ate6ormat($dd-MM-""""$)&
Simple;ate6ormat 0orma , ne/ Simple;ate6ormat($^Angresaste^ ))))))))) dd ^de^
MMMMM ^de^ """"$)&
;ate6ormat 0ormato6ec2a,;ate6ormat#get;ateAnstance(;ate6ormat#6C44)&
$n la A-5 de 6imple#ate"ormat podemos ver todas las opciones para la m(scara de #echa y hora.
8*tener un Date a partir de un -tring
-ara reconstruir una #echa a partir de la cadena de texto, podemos usar la misma clase
6imple#ate"ormat. -or e+emplo, si un usuario escribe una #echa con este #ormato en un JTe)t%ield,
podemos leerla as6
import java#te*t#Simple;ate6ormat&
###
G5e*t6ield te*t6ield , ne/ G5e*t6ield()&
###
Simple;ate6ormat 0ormateador , ne/ Simple;ate6ormat($dd-MM-""""$)&
tr"

;ate 0ec2a , 0ormateador#parse(te*t6ield#get5e*t())&


(
catc2 (Parse)*ception e)

-- )rror< la cadena de te*to no se puede convertir en 0ec2a#


(
4na cosa interesante es que a la hora de convertir un 6tring a #ate, la clase 6imple#ate"ormat es
IindulgenteI, es decir, si metemos mal el 6tring, trata de corregirlo. -or e+emplo, si introducimos una
#echa IB; de $neroI, no obtendremos error, sino que se arreglar( y nos devolver( un Date
correspondiente a I, de 0ebreroI. -odemos eliminar este comportamiento con el m%todo
setLenient(.alse)P
Simple;ate6ormat 0ormateador , ne/ Simple;ate6ormat($dd-MM-""""$)&
0ormateador#set4enient(0alse)&
de esta #orma, el IB; de $neroI dar( un error.
@tro aspecto importante a tener en cuenta es nunca enviar
Simple;ate6ormat 0ormateador , ne/ Simple;ate6ormat($dd-mm-""""$)&
en vez de
Simple;ate6ormat 0ormateador , ne/ Simple;ate6ormat($dd-MM-""""$)&
debido a que mm se re#iere a minutos y no meses.
%uente: http:11chuEi2i.chuidiang.org1index.phpStitleO/impleDate0ormat
Calidar un Jte)t%ield y de3inir un tamaQo 3ijo para mi aplicaci+n
$sta es una clase que extiende al 2eyadapter y si la usas dentro del +text#ield solo te permite meter
n'mero y un solo punto para decimales.
espero te sirva.
/aludos
public class Re"DdapterNumerico e*tends Re"Ddapter
private G5e*t6ield te*to&
private boolean conpunto&
private c2ar puntodecimal&
public Re"DdapterNumerico(G5e*t6ield te*t< boolean condecimales< c2ar punto;ecimal)

super()&
te*to , te*t&
conpunto , condecimales&
puntodecimal , punto;ecimal&
(
F@verride
public void ke"5"ped(Re")vent e)
c2ar tecla , e#getRe"C2ar()&
i0(conpunto SS (tecla ,, puntodecimal))
i0 (te*to#get5e*t()#contains($$Ppuntodecimal))
e#consume()&
(
( else
i0 ($81!'7+9\ZY$#inde*@0(tecla) ,, N1)
e#consume()&
(
(
(
%uente: http:11#orode+ava.com1shoEthread.php1DH=D3)ecesito3Lalidar3un3&text0ield3y3de#inir3un3tamad!Bd.,o3#i+o3para3mi3aplicacid!Bd.Bn#
Java: Convertir un Date en un -tring 3ormato ddD,,Daaaa
/i tenemos un Date y lo queremos convertir en una #echa, por e+emplo, en el #ormato que se*alo en el
t6tulo, simplemente hay que hacer:
java#util#;ate date , ne/ java#util#;ate()&
java#te*t#Simple;ate6ormat sd0,ne/ java#te*t#Simple;ate6ormat($dd-MM-""""$)&
String 0ec2a , sd0#0ormat(date)&
7ealmente, con el /impleDate0ormat, podemos dar el #ormato que deseemos a las #echas. /i por
e+emplo quisi%semos poner la #echa en #ormato anglosa+n, simplemente habr6a que cambiar la l6nea
donde usamos el constructor y escribir`
java#te*t#Simple;ate6ormat sd0,ne/ java#te*t#Simple;ate6ormat($""""-MM-dd$)&
%uente: http:11blogs.vandal.net1BUU91vm1,HBHB,B,H;<<Q
Convertir datetime a string
m"String;ate,m"String;ate#trim()&
i0(m"String;ate#e:uals($$) WW m"String;ate#e:ualsAgnoreCase($null$))
m"String;ate,t2is#0ec2aJo"S()&
dia,m"String;ate#substring(9< Z)&
mes,m"String;ate#substring(7< 9)&
ano,m"String;ate#substring(8< 7)&
( else
dia,m"String;ate#substring(Z<18)&
mes,m"String;ate#substring(+<\)&
ano,m"String;ate#substring(8<7)&
(
%uente2 http:11EEE.todoexpertos.com1categorias1tecnologia3e3internet1programacion1+ava1respuestas1;<BDD<,1convertir3datetime3a3string
Java: JTa*le scroll a la $ltima 3ila cada veM 1ue se agrega una
?a Idea:
!uando se agrega dinamicamente una #ila a un &"able, el #oco de %sta no se altera, osea parecen las
#amosas barras de scroll y se siguen agregando datos, que si queremos ver, tenemos que scrollear. $l
ob+etivo de %ste cdigo ser6a que automaticamente cada vez que se agrega una #ila, ponerla en #oco
El Bso:
4na tabla que vaya registrando eventos de bit(cora > 4n Log ? e ir viendo en tiempo real que sucede sin
tener que estar usando la barra.
El C+digo:
public void agregar6ila5abla(###)
--CIdigo :ue agrega una 0ila en la tabla
--######
-- Scroll a la ]ltima 0ila
int ro/,tabla#get=o/Count()N1&
=ectangle rect,tabla#getCell=ect(ro/< 8< true)&
tabla#scroll=ect5oBisible(rect)&
tabla#clearSelection()&
tabla#set=o/SelectionAnterval(ro/< ro/)&
;e0ault5ableModel modelo,(;e0ault5ableModel)tabla#getModel()&
modelo#0ire5able;ataC2anged()&
(
%uente: http:11hac2elare.Eordpress.com1;<,,1<91;H1+ava3+table3scroll3a3la3ultima3#ila3cada3vez3que3
se3agrega3una1
JT(B?E
4n &"able es un componente visual de &ava que nos permite dibu+ar una tabla, de #orma que en cada
#ila1columna de la tabla podamos poner el dato que queramosP un nombre, un apellido, una edad, un
n'mero, etc.
http:11EEE.abcdatos.com1tutoriales1tutorial1zB,;Q.html
#e.inici-n Jtable
&table es una clase que me permite organizar una determinada in#ormacin en tabla, esta di#iere de una
base de datos normal porque al utilizar &table tu puedes visualizar esta tabla, brind(ndole a el usuario
organizacin de in#ormacin, oportunidades de editar y cambiar el tama*o de las columna entre otras.
&3&C&(6 #' J!*$L'
$n principio se creo la clase &table para constituir un inter#az ligado a bases de datos a trav%s de I&ava
Database !onnectivityI >&D.!?, y as6 evita la comple+idad que exist6a par el mane+o de datos, dando
as6 al programador mucha mas #acilidad a la hora de traba+ar con este tipo de in#ormacin.
&table le da al programador muchas #acilidades, pues este posee varias caracter6sticas que permiten
hacer desde tablas con in#ormacin comple+a y muy estructurada hasta tablas con in#ormacin sencilla
y Ib(sicaI.
!*$L' @(#'L
La clase &table controla como se presentan los datos, siendo el "able:odel quien controla los datos s6
mismos. para crear una &table habr( pues que crear un "able:odel antes, normalmente. "able:odel lo
que hace es predeterminar ciertas caracter6sticas para el &table es decir que tu puedes poner ciertos
par(metros dentro de un "able:odel y as6 no tener que determinarlos siempre. "able:odel es un
programa que guarda los datos de la tabla para si mismo, es decir, puede tener la in#ormacin de la
tabla pero estos datos son los visualizados por el computador, es decir, para visualizar una tabla el
"A.L$:@D$L puede tener la in#ormacin pero sin el &table no se puede visualizar para el usuario.
'#&!*$L' ( 3(A
&table tiene una caracter6stica muy llamativa, este permite que el programador pueda decirdir que se
edita y que no, sin embargo si el programador dentro de su programa o de su "A.L$:@D$L no tiene
determinado este aspecto, &table autom(ticamente hace editable las celdas dentro de la tabla. $xisten
varias maneras de hacer editable o no las celdas dentro de la tabla, para ver estos comandos tu te
puedes dirigir a Dentro de las celdas encontradas en una tabla se puede permitir al usuario editar o no
editar seg'n lo desee el programador, esta propiedad se puede arreglar desde el table model o
directamente y1o desde el programa. &table tiene la propiedad de de+ar editable las celdas si no
encuentra nada que hable de esto.
B L* &3"(R@*C&C3/ B L*6 C(LD@3*6A1
&table te brinda muchas #acilidades para poder crear una table, y as6 mismo de llenarla con la
in#ormacin que desees > n'meros, letras etc...? por lo que sencillamente dentro de una tabla esta
autom(ticamente a trav%s de la in#ormacin debidamente separada 3 por II>comillas? o por , >coma? 3 es
capaz de contabilizarlas y al mismo tiempo llenarla con la in#ormacin que se le dioP es decir el
programador solo se debe encargar de poner los t6tulos de las tablas y as6 mismo de escribir la
in#ormacin en el mismo orden en que desee que salga de acuerdo con los t6tulos y &table se encargara
autom(ticamente de colocar la in#ormacin donde se le indico.
D3 C;'C7 $(EA
-ara un !ell7endered con un "able:odel sencillo, tal vez identi#icar clases pueda ser algo mas
comple+o que no pueda hacer, pero para uno un poco mas avanzado, esto seria muy #(cil, y para esto
cito el caso de un !F$!A .@M>casilal de veri#icacin? el cual es un componente gra#ico generado por
&table despu%s de que identi#ica una in#ormacin tipo boolean, d(ndole as6 la apariencia de un cuadro
rellenable, un chec2 box no es mas que eso, una opcin 3 que puede ser editable o no 3 que simplemente
se chulea para indicar un si o un no > si esta chuleado signi#ica verdadero, sino lo esta indica #also?, la
cual el usuario solo puede colocar mediante un "able:odel que sepa identi#icar clases.
D3 L&6! $(EA
$n algunas oportunidades, para cierto tipo de in#ormacin que deseamos que el usuario complete,
necesitamos darle a el usuario, cierto tipo de opciones cosa que a trav%s de un List .ox tu puedes
o#recer al usuario el tipo de respuestas que tu desees que el selecciones, este tipo de organizacin de
in#ormacin ya no es tan sencillo como declarar una in#ormacin tipo boolean, toca crear la lista.
http:11EEE.g#c.edu.co1estudiantes1anuario1;<<;1sistemas1ale+andra1&table.+un21c;.html
La #orma m(s sencilla de usar un &"able y tener toda su #uncionalidad es instanciar un De#ault"able3
:odel y meterlo en el &"able, en el constructor
;e0ault5ableModel modelo , ne/ ;e0ault5ableModel()&
G5able tabla,ne/ G5able(modelo)&
-odemos a*adir columnas directamente en el modelo
modelo#addColumn($eti:ueta columna 1$)&
modelo#addColumn($eti:ueta columna !$)&
-odemos a*adir datos directamente en el modelo, as6 como borrarlos o modi#icarlos
@bject [] 0ila , ne/ @bject[!]&
0ila[8],$dato columna 1$&
0ila[1],$dato columna '$&
modelo#add=o/ ( 0ila )&-- DLade una 0ila al 0inal
modelo#setBalueDt ($nuevo valor$< 8< 1)&--Cambia el valor de la 0ila 1< columna !#
modelo#remove=o/ (8)&-- %orra la primera 0ila
"odo lo que hagamos se re#le+ar( de inmediato en el &"able.
@btener #ila y columna del &"able en la que se hace clic2
A veces nos interesa seleccionar una #ila del &"able para hacer algo con ella >sacar un men', recoger
datos para mostrarlos en otro sitio, etc?.
4na #orma de hacerlo es a*adiendo un :ouseListener al &"able, de esta manera:
tabla#addMouse4istener(ne/ MouseDdapter()

public void mouseClicked(Mouse)vent e)



int 0ila , tabla#ro/DtPoint(e#getPoint())&
int columna , tabla#columnDtPoint(e#getPoint())&
i0 ((0ila X N1) SS (columna X N1))
S"stem#out#println(modelo#getBalueDt(0ila<columna))&
(
()&
Femos a*adido un :ouseAdapter para no tener que implementar todos los m%todos del
:ouseListener.
!on el m%todo tabla.roEAt-oint>? es posible enterarnos en qu% #ila de del &"able ha ocurrido el evento
del ratn >el clic2 en este caso?. -ara ello basta llamar a este m%todo pas(ndole las coordenadas x,y del
evento de ratn, que se obtienen con el m%todo e.get-oint>?.
4na vez que sabemos la #ila, debemos comprobar si es mayor que 3,. $l m%todo roEAt-oint>? nos
devuelve 3, si pinchamos en el &"able, pero #uera de cualquier #ila. $s el caso de que el &"able tenga un
tama*o en pixels superior al que le corresponde seg'n su n'mero de #ilas.
Lo mismo vale para columnAt-oint>?.
4na vez que tenemos la #ila y sabemos que no es 3,, es #(cil a trav%s del modelo obtener los datos
correspondientes. $n este caso se escribe por pantalla con un /ystem.out.prinln>? el valor de la #ila y
columna que se ha seleccionado.
7acer 1ue una celda del JTa*le no sea edita*le
/i usamos De#ault"able:odel las celdas del &"able son editables por de#ecto. A veces esto no nos
interesa y &"able no tiene m%todos para impedirlo. La #orma de decidir qu% celdas son o no editables es
hacer nuestro propio modelo de datos, nuestro "able:odel. La #orma sencilla de hacerlo es heredar de
De#ault"able:odel y rede#inir el m%todo is!ell$ditable>? para que sirva a nuestros propsitos
public class MiModelo e*tends ;e0ault5ableModel
public boolean isCell)ditable (int ro/< int column)
--D:ud devolvemos true o 0alse seg]n :ueramos :ue una celda
--identi0icada por 0ila<columna (ro/<column)< sea o no editable
i0 (column ,, ')
return true&
return 0alse
(
(
$n este e+emplo, hemos creado nuestro propio modelo de datos que hace que la columna D >los 6ndices
empiezan en cero? de la tabla sea editable y el resto no. Ahora simplemente instanciamos el &"able
usando este modelo y rellenamos los datos igual que antes.
MiModelo modelo , ne/ MiModelo()&
G5able tabla , ne/ G5able(modelo)&
Cam*iar el tipo de dato con De3aultTa*le,odel
De#ault"able:odel por de#ecto le dice al &"able que todos los datos que tiene son @b+ect. A veces,
porque queramos cambiar el "able!ell7enderer o cualquier otro motivo, nos interesa que determinadas
columnas se consideren como .oolean, como 5nteger o cualquier otro tipo de dato.
-ara modi#icar esto, tenemos que crearnos nuestro propio modelo de Datos. La #orma m(s sencilla es
heredar de De#ault"able:odel y rede#inir el m%todo get!olumn!lass>?.
public class MiModelo e*tends ;e0ault5ableModel
-..Primera columna %oolean< segunda Anteger " el resto @bject .-
public Class getColumnClass(int columna)
i0 (columna ,, 8) return %oolean#class&
i0 (columna ,, 1) return Anteger#class&
return @bject#class&
(
(
$n el e+emplo se ha hecho que la primera columna sea de .oolean, la segunda de 5nteger y el resto de
@b+ect.
4na cosa curiosa de los .oolean, es que el &"able al pintarlos los pone como &!hec2.ox.
7acer visi*le una 3ila concreta del JTa*le dentro de un J-croll'ane
-ara que un &"able tenga barras de scroll y tenga una IcabeceraI con las etiquetas de las columnas, es
necesario meterla en un &/croll-ane. $sto se puede hacer de dos #ormas.
G5able tabla , ne/ G5able()&
GScrollPane scroll , ne/ GScrollPane(tabla)&
o bien
G5able tabla , ne/ G5able()&
GScrollPane scroll , ne/ GScrollPane()&
scroll#setBie/portBie/(tabla)&
es bastante habitual al principio equivocarse y usar el m%todo add>?, que )@ #uncionar( correctamente
G5able tabla , ne/ G5able()&
GScrollPane scroll , ne/ GScrollPane()&
-- )sto N@ 0unciona#
scroll#add(tabla)&
!uando tenemos un &"able metido dentro de un &/croll-ane, a veces queremos que las barras de scroll
se desplacen para que una determinada celda sea visible.
)o conozco una #orma inmediata de hacerlo, pero una posible solucin es esta.
###
-- Nos devuelve la posiciIn en pi*els de una celda en 0ila<columna
=ectangle r , tabla#getCell=ect( 0ila< columna< true)&
-- Mueve el scroll para :ue el rectangulo sea visible
scrollPane#getBie/port()#scroll=ect5oBisible (r)&
http:11EEE.chuidiang.com1chuEi2i1index.phpStitleO&"able_&"able
La &"able controla cmo se presentan los datos, siendo el "able:odel quien controla los datos en s6
mismos. -ara crear una &"able habr( pues que crear un "able:odel antes, normalmente. /e puede
implementar, para ello, el inter#az "able:odel, pero es mucho m(s simple heredar de la clase ayuda
Abstract"able:odel. $l e+emplo +ava,D,9.+ava muestra esta circunstancia.
import java#a/t#.&
import java#a/t#event#.&
import com#sun#java#s/ing#.&
import com#sun#java#s/ing#table#.&
import com#sun#java#s/ing#event#.&
--)l Modelo de la 5abla es el :ue controla todos los
-- datos :ue se colocan en ella
class Modelo;atos e*tends Dbstract5ableModel
@bject datos[][] ,
$uno$<$dos$<$tres$<$cuatro$(<
$cinco$<$seis$<$siete$<$oc2o$(<
$nueve$<$dieM$<$once$<$doce$(<
(&
--)sta clase imprime los datos en la consola cada veM
--:ue se produce un cambio en cual:uiera de las
--casillas de la table
class 5abla4istener implements 5ableModel4istener
public void tableC2anged( 5ableModel)vent evt )
0or( int i,8& i V j,$8&$ tabla ,$ ne/$ panel ,$ ne/$ 0rame ,$ ne/$X
4na vez que se tiene un "able:odel, ya slo resta colocarlo en el constructor de &"able. "odos los
detalles de presentacin, edicin y actualizacin est(n ocultos al programador. $n este e+emplo, se
coloca la &"able en un &/croll-ane, por lo que es necesario un m%todo especial en &"able.
Las tablas pueden soportar un comportamiento m(s comple+o. $n el e+emplo +ava,D,H.+ava, se utiliza
un m%todo para cargar un array de ocho columnas por un ciento de #ilas y, posteriormente, la tabla es
con#igurada para que muestre solamente las l6neas verticales y permita la seleccin simult(nea de la #ila
y columna en que se encuentre la celda marcada.
import java#a/t#.&
import java#a/t#event#.&
import java#util#.&
import com#sun#java#s/ing#.&
import com#sun#java#s/ing#table#.&
class java171\ e*tends GPanel
private G5able tabla&
private GScrollPane panelScroll&
private String titColumna[]&
private String datoColumna[][]&
public java171\()
set4a"out( ne/ %order4a"out() )&
--Creamos las columnas " las cargamos con los datos :ue van a
--aparecer en la pantalla
CreaColumnas()&
Carga;atos()&
--Creamos una instancia del componente S/ing
tabla , ne/ G5able( datoColumna<titColumna )&
--D:ud se con0iguran algunos de los parOmetros :ue permite
--variar la G5able
tabla#setS2o/JoriMontal4ines( 0alse )&
tabla#set=o/SelectionDllo/ed( true )&
tabla#setColumnSelectionDllo/ed( true )&
--Cambiamos el color de la Mona seleccionada (rojo-blanco)
tabla#setSelection6oreground( Color#/2ite )&
tabla#setSelection%ackground( Color#red )&
--Ancorporamos la tabla a un panel :ue incorpora "a una barra
--de desplaMamiento< para :ue la visibilidad de la tabla sea
--automOtica
panelScroll , ne/ GScrollPane( tabla )&
add( panelScroll< %order4a"out#C)N5)= )&
(
--Creamos las eti:uetas :ue sirven de tdtulo a cada una de
--las columnas de la tabla
public void CreaColumnas()
titColumna , ne/ String[Z]&
0or( int i,8& i V datocolumna ,$ ne/$ i",$8&$ i*,$8&$ ventana ,$ ne/$X
Aunque el e+emplo contiene un array relativamente grande de datos, la clase &"able no manipula
demasiado bien grandes cantidades de in#ormacin, resultando un rendimiento bastante pobre cuando
se sobrepasan los ;<<< elementos. http:11EEE.itapizaco.edu.mx1paginas1&ava"ut1#rou#e1parte,D1cap,D3
,B.html
%uente: http:11yohanamoreno.blogspot.com1;<<Q1<D1+table.html
(.ora te pongo un pe1ueQo ejemplo para 1ue veas como o*tener la tecla pulsada:
private void 0ormRe"=eleased(java#a/t#event#Re")vent evt)
int code , evt#getRe"Code()&
c2ar caracter , evt#getRe"C2ar()&(
%uente: http:11EEE.laEebdelprogramador.com1#oros1&ava1,<,HHU,3$ventoNAey-ressed.html
Java-cript \ Capturar la tecla %< con Javascript
Leamos cuales son los pasos.
Lo primero ser( saber que el usuario ha pulsado una tecla. $s por ello que deberemos de estar al tanto
del evento on2eydoEn. Al cual le asignaremos una #uncin de escucha. .ueno, el evento lo capturamos
a nivel de p(gina:
document#onke"do/n,capturar0+&
!omo podemos ver, la #uncin recibe el ob+eto event. $ste ser( el que contenga la in#ormacin de la
tecla que el usuario ha pulsado.
$mpecemos a detallar la #uncin capturar#=>?. Lo primero que hay que saber es que el cdigo de la
tecla pulsada via+a en la propiedad event.Ehich y que la tecla 0= tiene el cdigo ,,9. !omo la
propiedad event.Ehich no est( recogida en ninguna especi#icacin >de momento es del D@: Rec2o,
aunque ampliamente reconocida? tambi%n tenemos que utilizar la propiedad e.2eycode >de las
implementaciones para el 5nternet $xplorer?
As6, para capturar el cdigo de la tecla utilizamos la siguiente l6nea:
var code , (e#ke"Code e e#ke"Code : e#/2ic2)&
si es el cdigo ,,9.... pues, lo que queramos. aavisamos al usuarioS
if(code ,, 119)
alert($Pulsada la tecla 6+$)&
(
!omo podemos apreciar... un cdigo muy sencillo.
-or cierto, Iesto evita un re3resco de la pHginaJ
%uente: http:11lineadecodigo.com1categoria1+avascript1page1;1
5edondear decimales en Java
Fola, en vista de diversas curiosidades para poder reducir los decimales en Java Net*eans, les de+o
un peque*o tutorial donde explico paso a paso como redondear decimales en Java a la cantidad de
decimales que se desee.
-ara los que deseen el cdigo #uente del metodo redondear se los de+o a continuacin:
public double redondear(double numero< double ndecimal)
double 0actor , Mat2#po/(18< ndecimal)&
return (Mat2#round(numero . 0actor) - 0actor)&
(
Ahora procedo a explicar la 3unci+n redondear:
-ara poder redondear un decimal es necesario aplicar el m6todo ,at.!round >la cual redondea
decimales al valor entero m(s prximo?, cuando deseabamos redondear a ; decimales multiplicabamos
por ,<< y luego procediamos a dividir entre ,<<, pero si lo pensamos detalladamente, ,<< es igual que
,<
;
por lo cual utilizamos la varia*le 3actor que ser( la encargada de multiplicar y dividir el numero
,< elevado a la cantidad de decimales que se desee.
$s decir ,<
;
O :ath.poE>,<,;?
/i no entienden el m6todo matemHtico solo tomen en cuenta que la cantidad de ceros es la cantidad de
decimales luego de la coma, ahora procedo a desarrollarlo en java.
'aso #:
'aso 9:
'aso ::
'aso ;:
'aso <:
'aso :
'aso ":
'aso =:
'aso S:
%uente: http:11delmon.huachoplus.com1redondear3decimales3en3+ava.html
Como pasar datos de un J%rame a otro J%rame o un JDialog en NetBeansJJ
FolaJ -rimero creo que necesitar6amos saber qu% datos quieres pasar, si los tomas de campos de texto,
o cuando das un clic2 o que onda.
-ero bueno si deseas digamos que al dar clic2 en un botn te cree un nuevo #rame con datos del vie+ito
solo debes mandar el #rame del que quieres obtener los datos como par(metro y variable de instancia
del nuevo #rame.
$+emplo:
public class &0rame, extends &0rameY
11este es tu #rame del que obtendr(s datos
Z
public class &0rame; extends &0rameY
&0rame #rameP 11la variable de instancia del &'rame
public &0rame;>&0rame #rame,...?Y
this.#rame O #rameP
Z
Z
$ntonces si tienes un programa puedes crear un 0rame, y cuando creas el nuevo, le mandas el primero
de par(metro y de esta #orma puedes acceder a todos los datos del primero.
&0rame, mi0rame O neE &0rame,>?P
&0rame; tu0rame O neE &0rame;>mi0rame?P
%uente: http:11mx.ansEers.yahoo.com1question1indexSqidO;<<Q<H;H,<,;DDAAt:m7z
'asar Datos de un jDialog a otro jDialog
5nstanciar el +dialogNsecundario desde el +dialogNprincipal y pasar los par(metros que deseas obtener
en el +dialogNsecundario y ya estando en el +dialogNsecundario lo atrapas por su m%todo constructor.
public class jdialog?principal ###
###
private button pasar?datosDction####

String nombre,$;avid$&
int edad,!8&
jdialog?secundario re0,ne/ jdialog?secundario(null<true<nombre<edad)&
(
###
(
public class jdialog?secundario ###

private String nombre&


private int edad&
public jdialog?secundario(###<###<String nombre<int edad)&

t2is#nombre,nombre&--D:ui la variable t2is#nombre es ;avid#
t2is#edad,edad&--D:ui la variable t2is#edad es !8#
--Cna veM capturado las variables puedes mostrarlo en G5e*t6ield#
(
###
(
%uente: http:11#orode+ava.com1shoEthread.php19B,3-asar3Datos3de3un3+Dialog3a3otro3+Dialog

También podría gustarte