## Cómo Utilizar la Clase Dialog

El AWT proporciona soporte para cuadros de diálogo -- ventanas que son dependientes de otras ventanas -- con la clase Dialog. Ésta proporciona una subclase muy útil FileDialog que proporciona cuadros de diálogos para ayudar al usuario a abrir y guardar ficheros.

Lo único que distingue a los cuadros de diálogo de las ventanas normales (que son implementadas con objetos Frame) es que el cuadro de diálogo depende de alguna otra ventana (un Frame). Cuando esta otra ventana es destruida, también lo son sus cuadros de diálogo dependientes. Cuando esta otra ventana es miniaturizada sus cuadros de diálogo desaparecen de la pantalla. Cuando esta otra ventana vuelve a su estado normal, sus cuadros de diálogo vuelven a aparecer en la pantalla. El AWT proporciona automáticamente este comportamiento.

Como no existe un API actualmente que permita a los Applets encontrar la ventana en la que se están ejecutando, estos generalmente no pueden utilizar cuadros de diálogo. La excepción son los applets que traen sus propias ventanas (Frames) que pueden tener cuadros de diálogo dependientes de esas ventanas. Por esta razón, el siguiente applet consiste en un botón que trae una ventana que muestra un cuadro de diálogo.

Los cuadros de diálogo pueden ser modales. Los cuadros de diálogo modales requieren la atención del usuario, para evitar que el usuario haga nada en la aplicación del cuadro de diálogo hasta que se haya finalizado con él. Por defecto, los cuadros de diálogo no son modales -- el usuario puede mantenerlos y seguir trabajando con otras ventanas de la aplicación.

Aquí tienes el código para la ventana que muestra el applet anterior. Este código puede ser ejecutado como una aplicación solitaria o, con la ayuda de la clase AppletButton, como un applet. Aquí sólo está el código que implementa el objeto Dialog:

    class SimpleDialog extends Dialog {
        TextField field;
        DialogWindow parent;
        Button setButton;

        SimpleDialog(Frame dw, String title) {
            super(dw, title, false);
            parent = (DialogWindow)dw;

            ...//Crea y añade componentes, como un conjunto de botones.

            //Initialize this dialog to its preferred size.
            pack();
        }

        public boolean action(Event event, Object arg) {
            if ( (event.target == setButton)
               | (event.target instanceof TextField)) {
                parent.setText(field.getText());
            }
            field.selectAll();
            hide();
            return true;
        }
    }

El método pack() en el constructor de SimpleDialog es un método definido por la clase Window. (Recuerde que dialog es una subclase de Window). El método pack() redimensiona la ventana para que todos sus contenidos tengan su tamaño preferido o mínimo (dependiendo del controlador de disposición de la ventana). En general, la utilización de pack() es preferible a llamar al método resize() de una ventana, ya que pack() deja que cargue el controlador de disposición con la decisión del tamaño de la ventana, y éste es muy bueno ajustando las dependencias de la plataforma y otros factores que afectan al tamaño de los componentes.

Aquí tienes el código que muestra el cuadro de diálogo:

    if (dialog == null) {
        dialog = new SimpleDialog(this, "A Simple Dialog");
    }
    dialog.show();

Junto con los métodos utilizados en el primer fragmento de código, la clase Dialog proporciona los siguientes métodos:

Dialog(Frame, boolean)
  Igual que el constructor utilizado arriba, pero no selecciona el titulo de la ventana del cuadro de diálogo.
boolean isModal()
  Devuelve true si el cuadro de diálogo es modal.
String getTitle(), String setTitle(String)
  Obienen o cambian (respectivamente) el título del cuadro de diálogo.
boolean isResizable(), void setResizable(boolean)
  Encuentra o selecciona (respectivamente) si el tamaño de la ventana del cuadro de diálogo puede cambiarse.

Ozito