Document
Document
Document
La opcin de Ingresos
La opcin de Ingresos consiste en registrar los datos considerando lo siguiente:
a) El nmero de registro se genera automticamente en forma consecutiva
empezando en 1 para el primer libro.
b) El cdigo del libro debe tener 5 caracteres alfanumricos
c) El ao de edicin puede ser a partir del ao 2000 hasta el ao 2050
d) No se permite el ingreso de cdigos duplicados.
e) El estado del libro no se ingresa, pero debe considerarse como libre.
La opcin de Movimientos
La opcin de Movimientos consiste en seleccionar un libro previamente ingresado, mostrar
sus datos, y elegir su nuevo estado: Libre, prstamo a Sala, prstamo a Domicilio. Slo si el
nuevo estado fuera prstamo a domicilio se solicita fecha de devolucin; en otro caso la
fecha de devolucin toma el valor 00/00/00.
Para activar esta opcin slo se tiene que hacer clic en la ficha Movimientos como se
aprecia a continuacin. Observe que al pasar el mouse sobre sta ficha aparece un texto
con borde relacionado al contenido de la opcin.
27/08/2009 Pgina1
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
La opcin de Disponibilidad
La opcin de Disponibilidad sirve para consultar los datos de un libro ya ingresado,
eligindolo desde un comboBox.
La opcin de Listado muestra todos los libros ingresados y almacenados en el arreglo de
objetos, en forma de tabla. Para mostrar la informacin actualizada debe hacer clic en el
botn de refrescar tabla.
La opcin de Listado
27/08/2009 Pgina2
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
El cdigo esta compuesto de 9 clases: Libro, Libros, PanelIngresos, PanelMovimientos, PanelDisponibilidad,
PanelTabla, PanelListado, PanelPrincipal y Principal. Todas las clases deben estar en el mismo proyecto.
Desarrollo
Empecemos entonces creando un nuevo proyecto de nombre Problema03_09, nuevo paquete de nombre problema03. Clic
derecho en el paquete creado, elegimos nuevo Java Class de nombre Libro donde escribimos el siguiente cdigo
correspondiente a los atributos y a los constructores de la clase.
public class Libro{
// datos privados de la clase
pr i vat e St r i ng Ti t ul o, Aut or , Codi go, Edi t or i al , FechaDev;
pr i vat e St r i ng di a, mes, ani o, Est ado;
pr i vat e i nt Edi ci on;
// constructor vaco
public Libro() { }// fin del constructor vaco
// constructor que recibe un objeto Libro
public Libro(Libro uno){
set Ti t ul o( uno. get Ti t ul o( ) ) ;
set Aut or ( uno. get Aut or ( ) ) ;
set Codi go( uno. get Codi go( ) ) ;
set Edi t or i al ( uno. get Edi t or i al ( ) ) ;
set FechaDev( uno. get FechaDev( ) ) ;
set Di a( uno. get Di a( ) ) ;
set Mes( uno. get Mes( ) ) ;
27/08/2009 Pgina3
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
set Ani o( uno. get Ani o( ) ) ;
set Est ado( uno. get Est ado( ) ) ;
set Edi ci on( uno. get Edi ci on( ) ) ;
}// fin del constructor
}/ / f i n de l a cl ase Li br o
Recuerde que una clase tiene DATOS privados y tiene METODOS pblicos y/o privados quienes deben manipular los datos
de la clase. Los objetos acceden a los datos de la clase a travs de los mtodos pblicos.
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
Tambin debe notar la presencia de dos constructores, uno sin parmetro y el otro con un parmetro que sirve para recibir un
objeto de la misma clase y conservar los datos del parmetro recibido.
En ste momento lo ms probable es que tenga marcado varias lneas con errores. Eso se debe a que falta generar los
mtodos get/set para todos los atributos.
Para generar los mtodos get/set haga clic derecho en la clase Libro, elija Refactor, Encapsulate Fields y marque los
checks de todos los atributos como aprecia en la siguiente ventana:
Hace clic en el botn Refactor y listo. Ahora la clase completa queda as:
public class Libro{
// datos privados de la clase
pr i vat e St r i ng Ti t ul o, Aut or , Codi go, Edi t or i al , FechaDev;
pr i vat e St r i ng di a, mes, ani o, Est ado;
pr i vat e i nt Edi ci on;
// constructor vaco
publ i c Li br o( ) { }/ / f i n del const r uct or vac o
// constructor que recibe un objeto Libro
publ i c Li br o( Li br o uno) {
27/08/2009 Pgina4
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
}
publ i c St r i ng get FechaDev( ) {
r et ur n FechaDev;
}
publ i c voi d set FechaDev( St r i ng FechaDev) {
t hi s. FechaDev = FechaDev;
}
publ i c St r i ng get Di a( ) {
r et ur n di a;
}
publ i c voi d set Di a( St r i ng di a) {
t hi s. di a = di a;
}
publ i c St r i ng get Mes( ) {
r et ur n mes;
}
publ i c voi d set Mes( St r i ng mes) {
t hi s. mes = mes;
}
publ i c St r i ng get Ani o( ) {
r et ur n ani o;
}
publ i c voi d set Ani o( St r i ng ani o) {
t hi s. ani o = ani o;
}
publ i c St r i ng get Est ado( ) {
r et ur n Est ado;
}
publ i c voi d set Est ado( St r i ng Est ado) {
t hi s. Est ado = Est ado;
}
publ i c i nt get Edi ci on( ) {
r et ur n Edi ci on;
27/08/2009 Pgina6
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
}
publ i c voi d set Edi ci on( i nt Edi ci on) {
t hi s. Edi ci on = Edi ci on;
}
}// Fin de la clase Libro
A continuacin la clase Libros que administra la informacin de todos los libros en un arreglo de objetos contenido en la clase
ArrayList. Clic derecho en el paquete problema03, nuevo Java Class de nombre Libros y escribimos el siguiente cdigo:
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public void ingresarDatos() {
/ / cr eamos espaci o en memor i a par a un l i br o
unLi br o=new Li br o( ) ;
/ / i ngr esar dat os de un l i br o
unLi br o. set Codi go( l eer Codi go( ) ) ;
unLi br o. set Ti t ul o( l eer Ti t ul o( ) ) ;
unLi br o. set Aut or ( l eer Aut or ( ) ) ;
unLi br o. set Edi t or i al ( l eer Edi t or i al ( ) ) ;
unLi br o. set Edi ci on( I nt eger . par seI nt ( l eer Ani oDeEdi ci on( ) ) ) ;
unLi br o. set Est ado( " Li br e" ) ;
unLi br o. set FechaDev( " 00/ 00/ 00" ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public String leerCodigo() {
r et ur n t xt Codi go. get Text ( ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public String leerTitulo() {
r et ur n t xt Ti t ul o. get Text ( ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public String leerAutor() {
r et ur n t xt Aut or . get Text ( ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public String leerEditorial() {
r et ur n t xt Edi t or i al . get Text ( ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public String leerAnioDeEdicion() {
St r i ng Ani oEdi ci on;
27/08/2009 Pgina10
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
Ani oEdi ci on = cboEdi ci on. get Sel ect edI t em( ) . t oSt r i ng( ) ;
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public void mostrarIngresos() {
bor r ar Ar ea( ) ;
/ / most r ar dat os i ngr esados de un l i br o
i mpr i me( " Nmer o de Regi st r o : " + l i br os. numer oLi br os( ) ) ;
i mpr i me( " Cdi go\ t : " + unLi br o. get Codi go( ) ) ;
i mpr i me( " Ti t ul o\ t : " + unLi br o. get Ti t ul o( ) ) ;
i mpr i me( " Aut or \ t : " + unLi br o. get Aut or ( ) ) ;
i mpr i me( " Edi t or i al \ t : " + unLi br o. get Edi t or i al ( ) ) ;
i mpr i me( " Ao de Edi ci n\ t : " + unLi br o. get Edi ci on( ) ) ;
//adicionar los cdigos ingresados a los combos respectivos
//para su posterior consulta
Panel Movi mi ent os. get ComboCodi gos( ) . addI t em( unLi br o. get Codi go( ) ) ;
Panel Di sponi bi l i dad. get ComboCodi gos( ) . addI t em( unLi br o. get Codi go( ) ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public void borrarArea() {
t xt Sal i da. set Text ( " " ) ;
}
/ / . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public void imprime(String cadena) {
t xt Sal i da. append( cadena + " \ n" ) ;
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
27/08/2009 Pgina12
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
public void prepararNuevoIngreso(){
t xt Codi go. set Text ( " " ) ;
t xt Ti t ul o. set Text ( " " ) ;
t xt Aut or . set Text ( " " ) ;
t xt Edi t or i al . set Text ( " " ) ;
cboEdi ci on. set Sel ect edI ndex( 0) ;
t xt Codi go. r equest Focus( ) ;
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
}
No le sorprenda que hasta ac le aparescan 2 lneas de error que corresponden a la llamada de los paneles
PanelMovimientos y PanelDisponibilidad porque stos paneles an no desarrollamos su diseo y cdigo. As que no se
preocupe y sigamos desarrollando el proyecto.
Regresamos al diseo y hacemos doble clic en el botn Cancelar para programar su accin:
private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {
pr epar ar NuevoI ngr eso( ) ;
}
Algunas variables son de mbito static para que puedan ser utilizadas desde otros paneles sin perder su contenido.
En el mtodo ingresarDatos() que se estn utilizando los mtodos de la clase propia para guardar los datos ledos, por
ejemplo en la siguiente orden:
unLi br o. setEdicion( I nt eger . par seI nt ( l eer Ani oDeEdi ci on( ) ) ) ;
Se lee el ao de edicin del libro a travs del mtodo leerAnioDeEdicion(), el cual es retornado como String, se le
convierte a entero cuyo valor es colocado en el dato del objeto unLibro a travs del mtodo setEdicion().
En el mtodo leerAnioDeEdicion() la siguiente orden:
Ani oEdi ci on = cboEdi ci on. get Sel ect edI t em( ) . toString( ) ;
Se obtiene el tem seleccionado como objeto cuyo valor se convierte en String a travs del mtodo toString(); siendo ste
valor retornado para su uso.
En el mtodo mostrarIngresos() que se muestran los datos ingresados utilizando los mtodos de la clase propia.
Al hacer clic en el botn cancelar, no se guardan los datos ingresados y se prepara un nuevo ingreso.
Desarrollo del Panel Principal
Ahora, vamos a disear el PanelPrincipal. Clic derecho en el paquete problema03, nuevo JPanel Form de nombre
PanelPrincipal donde hacemos el siguiente diseo:
PanelPrincipal con BorderLayout. En el centro colocamos un J TabbedPane que nos va permitir administrar un men de
opciones tipo fichas.
Vamos al cdigo fuente (source) del PanelPrincipal para escribir lo que est en negrita:
publ i c cl ass Panel Pr i nci pal ext ends j avax. swi ng. J Panel {
/ / decl ar ar obj et os de l a GUI
PanelIngresos panIng;
PanelMovimientos panMovi;
PanelDisponibilidad panDisp;
PanelListado panList;
27/08/2009 Pgina13
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
publ i c Panel Pr i nci pal ( ) {
i ni t Component s( ) ;
/ / Panel es def i ni dos en cl ases separ adas
panIng = new PanelIngresos();
panMovi = new PanelMovimientos();
panDisp = new PanelDisponibilidad();
panList = new PanelListado();
/ / enl aza cada pest aa con un panel a most r ar
jtpMenu.addTab("Ingresos",panIng);
jtpMenu.addTab("Movimientos",panMovi);
jtpMenu.addTab("Disponibilidad",panDisp);
jtpMenu.addTab("Listado",panList);
/ / est abl ece t ext o que apar ece al pasar el Mouse por cada
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m
/ / f i cha
jtpMenu.setToolTipTextAt(0,"Ingresa nuevo libro");
jtpMenu.setToolTipTextAt(1,"Cambia de estado:libre, sala, domicilio");
jtpMenu.setToolTipTextAt(2,"Muestra el estado actual del libro");
jtpMenu.setToolTipTextAt(3,"Muestra todos los libros");
/ / est abl ece col or de f ondo par a cada pest aa
jtpMenu.setBackgroundAt(0,new Color(149,199,199));
jtpMenu.setBackgroundAt(1,new Color(199,199,149));
jtpMenu.setBackgroundAt(2,new Color(199,149,199));
jtpMenu.setBackgroundAt(3,new Color(249,249,199));
/ / est abl ece un i cono par a cada pest aa
jtpMenu.setIconAt(0,
new ImageIcon(getClass().getResource("/images/bolita.gif")));
jtpMenu.setIconAt(1,
new ImageIcon(getClass().getResource("/images/estrei.gif")));
jtpMenu.setIconAt(2,
new ImageIcon(getClass().getResource("/images/estrei.gif")));
jtpMenu.setIconAt(3,
new ImageIcon(getClass().getResource("/images/bolita.gif")));
}
Si queremos que las fichas tenga alguna imagen, debemos crear la carpeta images dentro de la carpeta source (src) donde
colocaremos las imgenes correspondientes.
Para mayor detalle sobre la clase JTabbedPane puede revisar el captulo 3.
Podemos decir que el uso de las clases propias no slo permiten construir paneles independientes sino tambin permiten
definir objetos de dichas clases en cualquier panel.
En un panel se pueden declarar variables globales que sean utilizadas exclusivamente en dicho panel; sin embargo cuando se
tiene la necesidad de utilizar la misma variable sin perder su valor desde otros paneles; stas variables deben ser precedidas
por la palabra reservada static y desarrollar su mtodo de retorno correspondiente. Tan simple como eso.
Ahora creamos nuestro frame principal: clic derecho en el paquete problema03, elegimos nuevo JFrame Form de nombre
Principal, le ponemos un ttulo y le aplicamos distribucin BorderLayout. Luego vamos al cdigo fuente y escribimos lo que
est en negrita:
publ i c cl ass Pr i nci pal ext ends j avax. swi ng. J Fr ame {
publ i c Pr i nci pal ( ) {
i ni t Component s( ) ;
add(new PanelPrincipal());
setSize(500,300);
}
27/08/2009 Pgina14
Super JAVA SE for Windows with NetBeans IDE - Demo
Por: Julio Vsquez Paragulla ([email protected])
Ya puede ejecutar su aplicacin.
Las opciones de men pueden tener diversas presentaciones; una de ellas es en forma de fichas como la que hemos
presentado en ste ltimo ejercicio; otra es en forma de radioButtons; otra es en forma de botones; otra es en forma de men
en un Frame cuando una opcin a su vez tiene otras opciones. Esta ltima forma la veremos en el ejercicio del prximo
captulo.
El desarrollo completo del proyecto lo puede ver en el Libro y en el CD adjunto.
h
t
t
p
:
/
/
w
w
w
.
p
a
r
a
i
n
f
o
r
m
a
t
i
c
o
s
.
c
o
m