Вы находитесь на странице: 1из 21

PRACTICA 3.

- Cajas de Dilogo
Objetivo
Desarrollar un programa que utilize cajas de dilogo predefinidas, personalizadas
y del tipo estndar, navegando entre diferentes formularios.
Objetivos especficos:
Usar MessageBox, InputBox, ConfirmBox, OptionBox de Java.
Usar JDialog para crear nuevos formularios y navegar entre ellos.
Usar JFileChooser y JColorChooser.

Introduccin
En muchas aplicaciones se hace necesario el visualizar nuevos datos, nueva
informacin o bien, realizar una tarea previa para poder continuar con la ejecucin
de la misma. Es as que no le resulta extrao al usuario el que se muestren y se
cierren ventanas durante la ejecucin, ya sea para pedir datos, que se realice
alguna confirmacin o accin, o por cualquier otra cosa que la aplicacin en su
ejecucin necesite.
En esta prctica se ver la manera de generar nuevas ventanas, adicionales al
formulario principal, diseadas para realizar la tarea que se requiera.
Francisco Javier Ceballos reporta tres formas de aadir nuevas ventanas a una
aplicacin:
Cajas de dilogo predefinidas. Son cajas de dilogo ya diseadas y que al
momento de requerirse se crean instancias de ellas por medio de la clase
JOptionPane de la biblioteca JFC (Java Foundation Class). Un ejemplo es
showMessageDialog.
Cajas de dilogo personalizadas. Son cajas de dilogo hechas a la medida,
para lo cual se cuenta con la clase JDialog.
Cajas de dilogo estndar. Son cajas de dilogo muy comunes. La clase
JFileChooser permite crear las ventanas para Abrir o Guardar archivos y la
clase JColorChooser muestra la paleta de colores para hacer algn cambio
de color en nuestra aplicacin.
Muchas de las ventanas que se muestran cuentan con varios botones que se
pueden pulsar y que al momento de regresar a la ventana inicial, debemos saber
cul de esos botones fue pulsado para realizar la tarea correspondiente.
Considere el caso de una ventana que ofrezca los botones OK, Retry, Cancel,
deberemos entonces poder actuar conforme lo determine el usuario del programa.
De igual manera en muchas ventanas adicionales se capturan datos que debemos

Dr. Hernn de la Garza

Prctica 3 - 1

poder recuperar y usar en la ventana original una vez que la ventana auxiliar haya
sido cerrada.
En esta prctica se usarn los tres tipos de cajas de dilogo y se identificarn los
datos capturados as como los botones pulsados.
Correlacin con los temas y subtemas del programa de estudio vigente
Esta prctica est directamente relacionada con las unidades II y III ya que se
hace uso nuevamente de la interfaz grfica es decir el entorno de desarrollo, al
hacer uso de las facilidades que brinda al programador. Se profundiza en conocer
nuevos elementos como el JDialog que permite crear nuevas ventanas
dependientes del mismo Frame, as como tambin el uso de componentes
visuales y no visuales. Esto ltimo pertenece a la unidad tres del temario.
Material y equipo necesario

Computadora o laptop
NetBeans versin 7.2 o superior.

Metodologa
Las cajas de dilogo se clasifican en tres categoras: Cajas de Dilogo
Predefinidas, Cajas de Dilogo Personalizadas y Cajas de Dilogo Estndar.
Presentaremos los tres tipos de cajas en una sola aplicacin pero en tres partes.
Parte Uno: Uso de Cajas de Dilogo Predefinidas
Paso 1. Crear un nuevo proyecto de nombre Practica3_CajasDialogo. Desmarcar
la casilla para que no genere clase main (Create Main Class).
Paso 2. Aadir un JFrame Form al proyecto. Disee el formulario tal como se
muestra en la siguiente imagen:

Dr. Hernn de la Garza

Prctica 3 - 2

Cambiamos los nombres de todos los componentes que se usan en este


formulario conforme a la siguiente relacin:
jButton1 jbtMessage
jButton2 jbtConfirm
jButton3 jbtInputUno
jButton4 jbtInputDos
jButton5 jbtOption
jButton6 jbtAvanzar
jLabel1. jlbPassword
jPasswordField1 jpfPassword
jLabel2. jlbBoton
jLabel3. jlbDatoUno
jLabel4. jlbDatoDos
Paso 3. Dar doble clic sobre el botn jbtMessage para hacer que se muestre la
estructura del mtodo que tiene asociado por default y que para los botones les
corresponde la del evento actionPerformed.
Una segunda manera de escoger este evento es dar clic derecho estando el
cursor encima del componente botn. En el men emergente escoger Events y
luego buscar la categora action y de ah, el actionPerformed.
Una tercera manera de escoger el evento de accin, es seleccionar el botn
jbtMessage y luego ir a la ventana de propiedades. En la parte superior de esta
ventana hay cuatro categoras entre las que se encuentra Events. Selccionar esta
Dr. Hernn de la Garza

Prctica 3 - 3

categora y se despliegan todos los eventos que pueden ser controlados para este
componente. Se busca en la lista el evento de actionPerformed.
Independientemente de cual fue el camino seguido para activar el evento
actionPerformed, el cdigo para ese botn es el siguiente:
private void jbtMessageActionPerformed(java.awt.event.ActionEvent evt) {

JOptionPane.showMessageDialog(this, "Esto es un MessageDialog", "Probando Cajas",
JOptionPane.OK_CANCEL_OPTION);
}

Ejecute el programa y al hacer clic en el botn Message aparecer una ventana


semejante a esta:

La ventana de mensaje aparece dentro de la ventana principal ya que el primer


argumento usado en su construccin dice this, indicando que esa ventana es su
ventana padre, cambie este argumento por null y observe el nuevo
comportamiento. Pruebe a cambiar el argumento del JOptionPane.
La sintaxis del MessageDialog es la siguiente:
public static void showMessageDialog(Component componentePadre,

Object mensaje,

String ttulo,

int tipoMensaje,

Dr. Hernn de la Garza

Prctica 3 - 4

Icon icono)

Throws HeadlessException

Los dos primeros argumentos son indispensables, los dems son opcionales.
Observe como usamos solamente cuatro de los cinco argumentos posibles ya que
el ltimo no lo especificamos. Pruebe a usar una expresin semejante a la
siguiente:
JOptionPane.showMessageDialog(this, "Esto es un MessageDialog",
"Probando Cajas", JOptionPane.OK_CANCEL_OPTION,
new ImageIcon("C:\\Archivos de programa\\" +
"Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"));

Usted puede sustituir la ruta que aparece en el new ImageIcon ya que esa
funciona para la computadora en la que se est escribiendo.
Paso 4. Procederemos a mostrar el cdigo para el botn jbtConfirm, el cual
desplegar un ConfirmDialog.
private void jbtConfirmActionPerformed(java.awt.event.ActionEvent evt) {
int resp =JOptionPane.showConfirmDialog(null, "Desea Continuar");
jlbBoton.setText("Boton pulsado: " + resp);

}

Al ejecutar el programa y pulsar el botn Confirm se muestra lo siguiente:

Dr. Hernn de la Garza

Prctica 3 - 5

Enseguida cerramos la ventana pulsando S. Se regresa a la ventana padre y se


ve en la etiqueta Botn pulsado un 0 (cero), el cual corresponde al valor del
botn pulsado en la ventana del confirm, ya que se numeran a partir del cero.
Pruebe hacer clic en los dos botones restantes, as como cerrar la ventana
pulsando la x en la esquina superior derecha. Reporte los valores que
corresponden a cada opcin.

Se ha presentado la versin corta del confirmDialog, ya que al igual que el


messageDialog, tiene varios parmetros adicionales que se pueden utilizar. La
sintaxis de esta caja de dilogo es la siguiente:
public static void showConfirmDialog(Component componentePadre,

Object mensaje,

String ttulo,

int botones,

int tipoMensaje,

Icon icono)

Throws HeadlessException

Pruebe sustituyendo la activacin del confirmDialog por esta nueva instruccin:


int resp =JOptionPane.showConfirmDialog(null, "Desea Continuar?",
"Probando Cajas", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE,
new ImageIcon("C:\\Archivos de programa\\" +
"Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"));

Dr. Hernn de la Garza

Prctica 3 - 6

Paso 5. Continuamos con el botn Input Uno, con el desplegaremos un


InputDialog el cual se usa para solicitar datos. El cdigo de activacin es el
siguiente:
private void jbtInputUnoActionPerformed(java.awt.event.ActionEvent evt) {
String clave = JOptionPane.showInputDialog("Palabra de Paso");
jlbDatoUno.setText("Dato tecleado o seleccionado: " + clave);

}

La ventana desplegada es:

Tecleamos algo en la caja de texto (hernan) y pulsamos ya sea aceptar o


cancelar. Regresamos a la ventana principal:

Observe el texto que dice Datos tecleado o seleccionado: hernan.

Dr. Hernn de la Garza

Prctica 3 - 7

El mtodo showInputDialog devuelve el objeto String tecleado si se puls Aceptar


o null si se puls Cancelar. Se ha presentado la versin ms corta de esta caja de
dilogo. Su sintaxis es como sigue:
public static void showInputDialog(Component componentePadre,

Object mensaje,

String ttulo,

int tipoMensaje,

Icon icono,
Object[] valores,
Object valorInicial)

throws HeadlessException

En el siguiente botn se muestra su uso con ms parmetros.


Paso 6. Procedemos a trabajar el siguiente botn Input dos. Se pide que revise y
entienda cada lnea del siguiente cdigo ya que primero se preparan los datos
antes de llamar a la ventana. Compara con la sintaxis de esta caja de dilogo que
se present arriba.
private void jbtInputDosActionPerformed(java.awt.event.ActionEvent evt) {
Object[] valoresSeleccionables = {"uno","dos","tres","cuatro","cinco55"};
String clave = (String)JOptionPane.showInputDialog(null, "Seleccione una Opcion", "Lista
de Valores",
JOptionPane.PLAIN_MESSAGE,
new ImageIcon("C:\\Archivos de programa\\" +
"Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"),
valoresSeleccionables,valoresSeleccionables[1]);
if (clave !=null){
jlbDatoDos.setText("Datos tecleado o seleccionado: "+ clave);
}else{
jbtMessage.doClick();
}

Dr. Hernn de la Garza

Prctica 3 - 8

Seleccione un dato de la caja combo y regrese a la ventana principal.

Puede ver el valor seleccionado en la tercera etiqueta de la ventana principal.


Paso 7. Se deja al practicante que haga funcionar el ltimo botn, que despliegue
un OptionMessage y se controlen ya sean sus datos y/o botones pulsados.
La sintaxis es:
public static void showInputDialog(Component componentePadre,

Object mensaje,

String ttulo,

Dr. Hernn de la Garza

Prctica 3 - 9

int tipoMensaje,

Icon icono,
Object[] ttulosBotones,
Object botnPorOmisin)

throws HeadlessException

Parte Dos. Cajas de Dilogo Personalizadas y Cajas de Dilogo Estndar


En esta seccin mostraremos como construir una ventana personalizada por
medio del uso de un JDialog, y aprovecharemos que al pulsar dos de sus botones
activen los componentes JFileChooser y JColorChoser, son cajas de dilogo
estndar. As entonces con esta sola ventana personalizada, probaremos la tercer
categora de cajas de dilogo.
Paso 8. Aadimos un JDialog a nuestro proyecto con nombre VentanaDos. La
forma de aadirlo es ya conocida, hacer clic con botn derecho en la ventana de
proyectos sobre la palabra Source Packages o <default packages>:

Se busca el elemento JDialog Form. Si no se encuentra escoja Other


Y se desplegar la siguiente ventana:

Dr. Hernn de la Garza

Prctica 3 - 10

Seleccione la categora Swing GUI Forms y ah est el JDialog Form!!


Recuerde darle el nombre de VentanaDos y enseguida la configuramos para que
tenga los siguientes componentes:

Son dos JLabel, un JTextField y tres JButton. Les daremos los nombres
siguientes:
jButton1 jbtNuevoArchivo
jButton2 jbtNuevoColor
jButton3 jbtRegresar
jLabel1. jlbTitulo
Dr. Hernn de la Garza

Prctica 3 - 11

jLabel2. jlbArchivo
jTextField1 jtfArchivo

Paso 9. Para hacer que esta ventana se muestre se requiere aadir en el cdigo
de la ventana principal una lnea de declaracin como la siguiente:
private VentanaDos nuevaVentana;

Puede aadirla debajo de la declaracin de la clase Ventana. Adems hay que


programar el evento actionPerformed del botn Avanzar. Se escribe el siguiente
cdigo para este mtodo:
private void jbtAvanzarActionPerformed(java.awt.event.ActionEvent evt) {
nuevaVentana = new VentanaDos(this,true);
nuevaVentana.setVisible(true);
}

Nota: Observe el segundo parmetro del constructor de VentanaDos, aparece un


true. Este valor indica que queremos que la ventana nueva sea MODAL, es decir
que tome el control y no permita ninguna otra accin hasta que se finalice con ella.
Mientras, la ventana principal contina visible dado que no indicamos que se
ocultara cambiando su propiedad setVisible() a false.
Al ejecutar la aplicacin y pulsar el botn avanzar se despliega nuestra ventana
personalizada, que por cierto, no tiene an programado ninguno de sus botones.

Dr. Hernn de la Garza

Prctica 3 - 12

Paso 10. Programamos el evento de actionPerformed del botn Nuevo archivo. El


cdigo har que se muestre la ventana de abrir archivo, la cual nos permite
navegar por los directorios buscando el archivo deseado. Una vez seleccionado el
archivo, en nuestro ejemplo, al pulsar el botn abrir de la caja de dilogo
JFileChooser, haremos que se muestre el nombre del archivo seleccionado en la
caja de texto de la ventana personalizada.
Dar doble clic en el botn Nuevo Archivo para generar la estructura del mtodo
actionPerformed de este componente, adems de que se aadi el Listener
correspondiente en el cdigo del mtodo initcomponents(). Normalmente el cdigo
del initComponentes est compactado y puede expandirse al hacer clic en el signo
mas
que
aparece
debajo
de
donde
est
el
letrero
@SuppressWarnings("unchecked").
Escriba el siguiente cdigo para el evento de actionPerformed del botn.
private void jbtNuevoArchivoActionPerformed(java.awt.event.ActionEvent evt) {
javax.swing.JFileChooser dlgAbrir = new javax.swing.JFileChooser();
int result = dlgAbrir.showOpenDialog(this);
if(result == javax.swing.JFileChooser.APPROVE_OPTION){
// poner el nombre del archivo en el jtfArchivo
jtfArchivo.setText(dlgAbrir.getSelectedFile().getName());
}
else
javax.swing.JOptionPane.showMessageDialog(null, "operacin cancelada");


}

El resultado es el siguiente al ejecutarlo:

Dr. Hernn de la Garza

Prctica 3 - 13

Despus de pulsar el botn Abrir se actualiza la caja de texto del jtfArchivo:

Paso 11. Pruebe a cambiar la lnea de cdigo del botn


jtfArchivo.setText(dlgAbrir.getSelectedFile().getName());

por la siguiente:
jtfArchivo.setText(dlgAbrir.getSelectedFile().getPath());

luego cambie

int result = dlgAbrir.showOpenDialog(this);

por

int result = dlgAbrir.showSaveDialog(this);

Dr. Hernn de la Garza

Prctica 3 - 14

y reporte lo que sucede.


Paso 12. A continuacin procederemos a trabajar con el botn Nuevo Color. Este
botn desplegar la paleta de colores y una vez seleccionado un color, ste se
queda guardado para luego ser utilizado en cambiar alguna propiedad de un
componente, ya sea el foreground, backcolor o alguna otra.
private void jbtNuevoColorActionPerformed(java.awt.event.ActionEvent evt) {
java.awt.Color color;
javax.swing.JColorChooser colorNuevo = new javax.swing.JColorChooser();
color = colorNuevo.showDialog(this, "Color", java.awt.Color.RED);
if(color!=null)
jlbArchivo.setForeground(color);


}

La pantalla desplegada al pulsar este botn es la siguiente:

Una vez aceptado un color ste se guard provisionalmente en la variable color,


para luego ser asignado su valor a la propiedad foreground de la etiqueta jlbTitulo,
dando como resultado lo siguiente:

Dr. Hernn de la Garza

Prctica 3 - 15

Paso 13. Por ltimo nos falta programar el botn jbtRegresar, para volver a la
ventana principal.
private void jbtRegresarActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
dispose();

// TODO add your handling code here:
}

A continuacin se muestra el cdigo para las dos Formas, la principal y la ventana


personalizada.
Cdigo de Ventana uno
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class Ventana extends javax.swing.JFrame {

Dr. Hernn de la Garza

Prctica 3 - 16


/** Creates new form Ventana */
public Ventana() {
initComponents();
}


private void jbtMessageActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(this, "Esto es un MessageDialog", "Probando Cajas",
JOptionPane.OK_CANCEL_OPTION);
// TODO add your handling code here:
}

private void jbtConfirmActionPerformed(java.awt.event.ActionEvent evt) {
int resp =JOptionPane.showConfirmDialog(null, "Desea Continuar");
jlbBoton.setText("Boton pulsado: " + resp);
// TODO add your handling code here:
}

private void jbtInputUnoActionPerformed(java.awt.event.ActionEvent evt) {
String clave = JOptionPane.showInputDialog("Palabra de Paso");
jlbDatoUno.setText("Dato tecleado o seleccionado: " + clave);
// TODO add your handling code here:
}

private void jbtInputDosActionPerformed(java.awt.event.ActionEvent evt) {
Object[] valoresSeleccionables = {"uno","dos","tres","cuatro","cinco"};
String clave = (String)JOptionPane.showInputDialog(null, "Seleccione una Opcion", "Lista
de Valores",
JOptionPane.PLAIN_MESSAGE,
new ImageIcon("C:\\Archivos de programa\\" +
"Microsoft Office\\CLIPART\\PUB60COR\\AG00175_.gif"),
valoresSeleccionables,valoresSeleccionables[1]);

Dr. Hernn de la Garza

Prctica 3 - 17

if (clave !=null){
jlbDatoDos.setText("Dato tecleado o seleccionado: "+ clave);
}else{
jbtMessage.doClick();
}

// TODO add your handling code here:
}

private void jbtOptionActionPerformed(java.awt.event.ActionEvent evt) {
// Escribe aqu tu cdigo para hacer que se muestre esta caja
}

private void jbtAvanzarActionPerformed(java.awt.event.ActionEvent evt) {
nuevaVentana = new VentanaDos(this,true);
nuevaVentana.setVisible(true);
// TODO add your handling code here:
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ventana().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jbtMessage;
private javax.swing.JButton jbtConfirm;
private javax.swing.JButton jbtInputUno;
private javax.swing.JButton jbtInputDos;
private javax.swing.JButton jbtOption;

Dr. Hernn de la Garza

Prctica 3 - 18

private javax.swing.JButton jbtAvanzar;


private javax.swing.JLabel jlbBoton;
private javax.swing.JLabel jlbDatoUno;
private javax.swing.JLabel jlbDatoDos;
private javax.swing.JLabel jlbPassword;
private javax.swing.JPasswordField jtfPassword;
// End of variables declaration

}

Cdigo de Ventana Dos




public class VentanaDos extends javax.swing.JDialog {

public VentanaDos(java.awt.Frame parent, boolean modal) {
super(parent, modal);
setSize(200, 200);
initComponents();
}


private void jbtNuevoarchivoActionPerformed(java.awt.event.ActionEvent evt) {
javax.swing.JFileChooser dlgAbrir = new javax.swing.JFileChooser();
int result = dlgAbrir.showOpenDialog(this);
if(result == javax.swing.JFileChooser.APPROVE_OPTION){
// poner el nombre del archivo en el jtfArchivo
jtfArchivo.setText(dlgAbrir.getSelectedFile().getName());
}
else
javax.swing.JOptionPane.showMessageDialog(null, "operacin cancelada");

Dr. Hernn de la Garza

Prctica 3 - 19

// TODO add your handling code here:


}

private void jbtRegresarActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
dispose();

// TODO add your handling code here:
}

private void jbtNuevoColorActionPerformed(java.awt.event.ActionEvent evt) {
java.awt.Color color;
javax.swing.JColorChooser colorNuevo = new javax.swing.JColorChooser();
color = colorNuevo.showDialog(this, "Color", java.awt.Color.RED);
if(color!=null)
jlbTitulo.setForeground(color);
// TODO add your handling code here:
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
VentanaDos dialog = new VentanaDos(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}

Dr. Hernn de la Garza

Prctica 3 - 20

// Variables declaration - do not modify


private javax.swing.JButton jbtNuevoArchivo;
private javax.swing.JButton jbtNuevoColor;
private javax.swing.JButton jbtRegresar;
private javax.swing.JLabel jlbTitulo;
private javax.swing.JLabel jlbArchivo;
private javax.swing.JTextField jtfArchivo;
// End of variables declaration
}

Sugerencias Didcticas
Para abordar el tema de las cajas de dilogo en todos sus tipos se requiere
primero que el alumno identifique los diferentes tipos y de entre ellos, a cada una
de las posibles cajas a trabajar. Para ello es conveniente presentarle ejemplos
variados de su uso.
Pedir a los alumnos que experimenten cambiando los parmetros de las cajas de
dilogo predefinidas, desde su versin simplificada hasta la que requiera ms
parmetros.
Reporte del alumno (resultados)
El alumno deber mostrar evidencias de haber realizado la prctica.
Mostrar los resultados de las diferentes actividades adicionales que se solicitaron
durante el desarrollo de la prctica.
Incluir el rubro de conclusiones y recomendaciones en el reporte.
Bibliografa preliminar
1. Java The Complete Reference Eighth Edition
Herbert Schildt
Oracle Press 2011
2. Java 2 Interfaces Grficas y Aplicaciones para Internet
Francisco Javier Ceballos
Alfaomega- RAMA 2. Edicin 2007
3. En la pgina oficial de Java:
docs.oracle.com/javase/tutorial/java/

Dr. Hernn de la Garza

Prctica 3 - 21

Вам также может понравиться