##
DIALOGOS Y VENTANAS

Una Ventana genérica, Window, puede utilizarse simplemente para que sea la clase padre de otras clases y se puede intercambiar por un Diálogo, Dialog, sin pérdida de funcionalidad. No se puede decir lo mismo de un Frame.

Se podría crear un menú pop-up con una Ventana, pero lo cierto es que en esta versión del JDK hay un montón de bugs y no merece la pena el enfrascarse en el intento. No obstante, hay ciertos métodos que están en la clase Window y que no están presentes en otras clases que pueden resultar interesantes y necesitar una Ventana si queremos emplearlos. Son:

- getToolkit()
- getWarningString()
- pack()
- toBack()
- toFront()

Un Diálogo es una subclase de Window, que puede tener un borde y ser modal, es decir, no permite hacer nada al usuario hasta que responda al diálogo. Esto es lo que se usa en las cajas de diálogo "Acerca de...", en la selección en listas, cuando se pide una entrada numérica, etc.

El código Java que se expone a continuación, implementa el diálogo Acerca de para la aplicación. Esta clase se crea oculta y necesitaremos llamar al método show() de la propia clase para hacerla visible.

        class AboutDialog extends Dialog {
            static int HOR_TAMANO = 300;
            static int VER_TAMANO = 150;

            public AboutDialog( Frame parent ) {
                super( parent,"Acerca de...",true );
                this.setResizable( false );
                setBackground( Color.gray );
                setLayout( new BorderLayout() );

                Panel p = new Panel();
                p.add( new Button( "Aceptar" ) );
                add( "South",p );
                resize( HOR_TAMANO,VER_TAMANO );
                }

            public void paint( Graphics g ) {
                g.setColor( Color.white );
                g.drawString( "Aplicación Java con AWT",
                    HOR_TAMANO/4,VER_TAMANO/3 );
                g.drawString( "Versión 1.00",
                    HOR_TAMANO/3+15,VER_TAMANO/3+20 );
                }

            public boolean handleEvent( Event evt ) {
                switch( evt.id ) {
                    case Event.ACTION_EVENT:
                        {
                        if( "Aceptar".equals( evt.arg ) )
                            {
                            hide();
                            return true;
                            }
                        }
                    default:
                        return false;
                    }
                }
            }

La ventana que aparece en pantalla generada por la clase anterior es la que muestra la figura:

Las aplicaciones independientes deberían heredar tomando como padre la ventana principal de esa aplicación. Así pueden implementar la interface MenuContainer y proporcionar menús.

No hay razón aparente para que sea una subclase de la clase Frame, pero si se quiere proporcionar funcionalidad extra, sí debería serlo, en vez de serlo de su padre: Window. Esto es así porque Frame implementa la interface MenuContainer, con lo cual tiene la posibilidad de proporcionar menús y cambiar el cursor, el icono de la aplicación, etc.

Un ejemplo más complicado de aplicación gráfica basada en el AWT es el convertidor de decimal a binario/octal/hexadecimal/base36, Convertidor.java, cuya presentación en pantalla es la que muestra la figura siguiente.

En la construcción de esta nueva aplicación se utilizan elementos que se presentan en profundidad en secciones posteriores de este Tutorial.

|  | ##### [Anterior] [Indice] [Siguiente]