Sunteți pe pagina 1din 3

JFrame, JDialog y otras ventanas

http://www.chuidiang.com/java/novatos/JFrame_JDialog.php

JFrame, JDialog y otras ventanas


Cuando queremos hacer ventanitas en java nos encontramos con dos ventanas: El JFrame y el JDialog. Cundo se usa una u otra?, Qu diferencias hay entre ellas?. Los JDialog admiten un padre y pueden ser o no modales. Para qu sirve ese padre? Puedo hacer cualquier JDialog modal? Otras veces queremos hacer una ventana de error, de aviso, para pedir un dato o confirmar algo. Pongo JFrame o JDialog para esas ventanas? Tengo que construirla? Vamos a tratar en este tutorial de echar un vistazo a JFrame y JDialog, as como a JOptionPane y ver cundo usamos una u otra. Trataremos de responder a todas estas preguntas.

JFrame y JDialog

Los dos tipos de ventanas principales que tenemos en java son JFrame y JDialog. Hay varias diferencias entre ellas y en funcin de estas diferencias vamos a ver para qu sirven Si instanciamos un JFrame, en la barra de abajo de windows (creo que se llama "barra de herramientas") nos aparece un nuevo "botoncito" correspondiente a nuestra aplicacin. Si instanciamos un JDialog, no aparece nada. Un JFrame tiene un mtodo setIconImage() para cambiar el icono por defecto de la taza de caf. JDialog no tiene este mtodo. Un JDialog admite otra ventana (JFrame o JDialog) como padre en el constructor. JFrame no admite padres. Un JDialog puede ser modal, un JFrame no. Todo esto nos indica lo siguiente: Un JFrame 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 JFrame un botn en la barra de herramientas de windows y tener mtodo para cambiar el icono, es la ventana ideal como ventana principal de nuestra aplicacin y slo debe haber una. Nos permite cambiar el icono y slo debe haber un botn en la barra de herramientas de windows para nuestra aplicacin. Si usamos un JDialog como ventana principal, no tenemos botn en la barra de herramientas y no hay forma fcil de cambiarle el icono. Los JDialog son ideales para ventanas secundarias porque admiten una ventana padre. Si la VentanaA es padre del JDialogB, entonces el JDialogB siempre estar por delante de

1 de 3

10/12/2008 03:00 a.m.

JFrame, JDialog y otras ventanas

Otra ventaja de admitir un padre es que heredan el icono de l. Si hemos cambiado el icono http://www.chuidiang.com/java/novatos/JFrame_JDialog.php del JFrame con el mtodo setIconImage(), entonces todos los JDialog que hagamos como hijos de este JFrame heredarn el icono. Todas las ventanas de nuestra aplicacin tendrn el mismo icono en lugar de la taza de caf por defecto.

Jerarqua de padres y ventanas modales

Un JDialog puede ser modal, pasndole un true en el constructor en el sitio adecuado o hacindolo modal con el mtodo setModal(). Si hacemos un JDialog modal, todas las dems ventanas se deshabilitarn hasta que el usuario de nuestro programa cierre el JDialog. Esto est estupendo para pedir un dato al usuario y evitar que toque otras cosas hasta que haya introducido el dato. Sin embargo, tiene un peligro. Supongamos un JDialog que lo hacemos modal para pedir unos datos al usuario. Este JDialog tiene un botn de "Aceptar" para que el usuario lo pulse cuando haya terminado de introducir los datos. Supongamos que en el cdigo de ese botn "Aceptar" 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. Quin debe ser el padre de ese segundo JDialog modal?. Si hacemos que el padre sea el JFrame tendremos dos JDialog modales hijos del JFrame, es decir, dos JDialog modales hermanos. Esto 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. Entonces, cmo hacemos?. Para que java no haga cosas raras, el padre del segundo JDialog modal debe ser el primer JDialog modal. De esta forma, el segundo tiene "prioridad" sobre el primero. Todo queda deshabilitado excepto este segundo JDialog. Cuando lo cerremos, ser el primero el que mande. Resumiendo, si queremos varias ventanas modales simultneamente en pantalla, cada ventana que se muestre debe ser padre de la siguiente, de forma que la cadena de ventanas modales sean padre, hijo, nieto, etc. Tener dos ventanas modales simultaneas que sean hermanas o primas o cualquier otra relacin que no sea directa, nos dar problemas.

JOptionPane

Para hacer ventanas sencillas que avisen de un error al usuario y tengan un botn de "Cerrar", o que le pidan una confirmacin para hacer algo (como borrar un fichero) y tengan dos botones de "Si" y "No", o para pedirle que elija una opcin entre varias disponibles ... tenemos suerte. No hay que construir la ventana. La clase JOptionPane de java tiene mtodos showConfirmDialog(), showInputDialog(), showOptionDialog(), showMessageDialog(). Estos mtodos mostarn una ventana modal que pide al usuario una confirmacin, que le pide un dato o le muestra un mensaje. En caso de que el usuario tenga que elegir algo, el mtodo usado devuelve el valor elegido. Por ejemplo, para mostrar un aviso de error, nos basta esta simple lnea de cdigo

Esto mostrar el mensaje de error y detendr la ejecucin del cdigo hasta que el usuario

2 de 3

10/12/2008 03:00 a.m.

JFrame, JDialog y otras ventanas


JInternalFrame

http://www.chuidiang.com/java/novatos/JFrame_JDialog.php

El JInternalFrame es una ventana especial que ni es ventana ni es nada. De hecho, no hereda de Window. En realidad es un componente java que se dibuja dentro de otro componente, pero adornado con la barra de ttulo de una ventana y sus botones de maximizar, minimizar y cerrar. Puede incluso arrastrarse y modificarse de tamao siempre que se mete dentro del componente adecuado. El sitio bueno para meter los JInternalFrame es el JDesktopPane. Este panel admite JInternalFrame y sabe manejarlos.

En este cdigo el JInternalFrame se comportar como una ventana, pero que no puede salirse del JDesktop que la contiene.

Resumen

En nuestra aplicacin debe haber un JFrame y slo uno, que ser la ventana principal. Todas las ventanas secundarias deben ser JDialog y todos los JDialog deberan tener padre. Todos los JDialog modales visibles a la vez en pantalla, deben ser unos hijos de otros en una cadena "padre-hijo-nieto" directa. No pueden ser "hermanos", ni "primos" ni "sobrinos".

3 de 3

10/12/2008 03:00 a.m.

S-ar putea să vă placă și