7.1.- Diálogos modales.
En una aplicación de interfaz gráfica en Java es necesario definir un objeto de la clase Frame. Este objeto va a ser el diálogo padre de toda la aplicación, derivando de él el resto de diálogos que queramos añadir a la aplicación. Para añadir un diálogo modal, Java ya permitía la creación de diálogos modales a través del constructor de la clase JDialog
como hemos comentado en el punto anterior.
Para crear diálogos modales, en el constructor del diálogo establecemos el parámetro "modal" a true, de forma que este diálogo creado mantiene el foco, impidiendo que pueda ser tomado por cualquier otro, dentro de la aplicación, de forma que no podemos seguir ejecutando la aplicación hasta cerrarlo.
package mipaquete;
import javax.swing.*;
public class Ventana {
public static void main(String[] args) {
JFrame ventana = new JFrame("");
ventana.setAlwaysOnTop(true);
ventana.setSize(300,300);
ventana.setVisible(true);
JDialog dialogo_Modal = new JDialog(ventana, "Dialogo Modal", true);
dialogo_Modal.setSize(300,300);
dialogo_Modal.setLocationRelativeTo(null);
dialogo_Modal.setVisible(true);
}
}
Se puede definir la modalidad de un diálogo utilizando dos clases estáticas dentro de la clase Dialog. Las clases son static class ModalityType
y static class ModalExclusionType
. Las dos clases incorporan una enumeración que indica el nivel de bloqueo que pueden generar.
La clase static class ModalityType
sirve para definir el tipo de bloqueo, o también llamado alcance del bloqueo en una aplicación, su enumeración contiene:
APPLICATION_MODAL
: bloquea todas las ventanas de la aplicación, excepto las ventanas que se deriven de ella.DOCUMENT_MODAL
: bloquea la ventana padre de la ventana y su jerarquía superior.MODELESS
: no bloquea ninguna ventana.TOOLKIT_MODAL
: bloquea las ventanas de nivel superior que corren en el mismoTOOLKIT
.
Podemos excluir del bloqueo a una ventana o diálogo utilizando la clase ModalExclusionType
, esta puede excluir del bloqueo según alguna de estas opciones de su enumeración:
APPLICATION_EXCLUDE
: La ventana que utiliza este valor de enumeración no será bloqueada por ningún diálogo de la aplicación.NO_EXCLUDE
: Indica que la ventana no estará excluida del bloqueo si este ocurriera.TOOLKIT_EXCLUDE
: Indica que no se bloqueará esta ventana si se llamase aAPPLICATION_MODAL
oTOOLKIT_MODAL
.
Para saber más
En el siguiente enlace se presentan todos los diálogos modales estándar en Java.