Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

viernes, 2 de septiembre de 2016

Cómo crear una ventana modal que envíe datos ingresados por el usuario en Java Swing

Agradezco la ayuda a:
http://stackoverflow.com/a/28461883
http://stackoverflow.com/a/4089370

En Netbeans, para poder crear una ventana modal para nuestra aplicación de Swing, se debe crear un nuevo JFrame Form, y en la línea donde se declara la clase:

public class JModalFrame extends javax.swing.JFrame

cambiarla por:

public class JModalFrame extends javax.swing.JDialog

y en el constructor se debe poner:

setModal(true);

Luego de añadir un área de texto, un checkbox y un botón a la ventana modal, el código para poder retornar valores desde esta ventana es:

    Object[] thoseValues;
   
    public Object[] showDialog()
    {
        return thoseValues;
    }
   
    public JModalFrame()
    {
        setModal(true);
        thoseValues = new Object[2];
        initComponents();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                        
    {                                            
        thoseValues[0] = jCheckBox1.isSelected();
        thoseValues[1] = jTextArea1.getText();
       
        setModal(false);
        this.setVisible(false);
    }                                       
    


Para abrir la ventana modal, se debe añadir el siguiente código en la ventana principal (en mi caso, es la ventana que está declarada como la clase main en las propiedades del proyecto en Netbeans):

    JModalFrame jMod = new JModalFrame();
    jMod.setVisible(true);
    Object[] thosevalues = jMod.showDialog();

    jMod.dispose();


Se pueden recibir cualquier tipo de valores, yo he elegido un array de objetos.


Si se desea que la ventana modal aparezca en la barra de tareas se debe añadir el siugiente código en su constructor:

// http://stackoverflow.com/a/14261194
super(null, java.awt.Dialog.ModalityType.TOOLKIT_MODAL);

No hay comentarios: