Diálogos modales

Otra tontería de java que he aprendido y que no sabía.

Sabía que un JOptionPane.show… mostraba un diálogo modal y que el código se queda bloqueado en la llamada hasta que se contesta al diálogo modal y se cierra. De alguna manera es la forma de pedirle una confirmación o un dato al usuario y esperar que conteste para seguir el código.

Lo que no sabía es que un setVisible(true) de un JDialog modal vulgaris también deja bloqueado el código hasta que se cierra el diálogo modal. En el siguiente código

    public static void main(String[] args) {
        JDialog d = new JDialog(new JFrame(),true);
        d.getContentPane().add(new JLabel("un dialogo"));

        d.pack();
        d.setVisible(true);
        System.out.println("Aquí estoy");
    }

el "Aquí estoy" no sale hasta que le usuario cierre el JDialog.

Esta entrada fue publicada en java. Guarda el enlace permanente.

4 respuestas a Diálogos modales

  1. Blaxter dijo:

    Mirando el código fuente, el método setVisible está implementado en la clase «Component» el cual simplemente es una llamada a show(), método que está deprecated.

    Por cierto, ¿Has probado SWT? Odio hacer GUIs pero jode todavía más cuando haces una GUI con swing/awt y ves que queda mogollon de fea xD. Con SWT al final usas widgets propios del SO.

  2. Chuidiang dijo:

    Hola:

    Algo he mirado de SWT, pero al final por no meter más librerías adicionales, prefiero seguir con SWING.

    Lo que si suelo hacer es cambiar el LookAndFeel para que coja el del sistema operativo, por lo que el aspecto de las ventanas al final es similar al de cualquier otra aplicación en el mismo sistema operativo.

    Se bueno.

  3. DaniP dijo:

    Buenas…

    El EventDispatcherThread , se queda bloqueado a la espera de acciones debido a que has definido al diálogo como «modal» (a través del «true» del constructor), al igual que el JOptionPane los crea de manera interna. Es por ello que no continúa la ejecución hasta que cierres este (métodos «setVisisble» y «dispose»).

    Otro día con un poquito más de tiempo os intentaré contar algún cuentecillo relacionado con el close de los diálogos para JRE 1.6.x desde varios Threads …
    (… el cuento acaba con que la abuelita le dice al lobo que use más «disposes» y menos «setVisible(false)» 😀 ).

    Un saludo,

    DaniP

  4. Pingback: Diario de Programación » SWT y JFace

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.