jueves, 5 de julio de 2012

Formulario Modal y OptionPane

Formulario Modal
¿Que es un formulario Modal?
Es cuando una ventana retiene el foco sobre si misma impide que se trabaje sobre las demás ventanas, hasta que se elija alguna de las opciones disponibles dentro de ella.

Ejemplo: Cuando un procesador de texto pregunta si deseamos Guardar, hasta que elijamos "Guardar", "No Guardar" o "Cancelar" podremos manipular las otras ventanas.

¿Como podemos hacerlo en Java?
Pues existen varias formas (cada persona puede generar distintas formas de hacerlo) pero ahora explicare una de ella.

En java existe
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
ó
this.setDefaultCloseOperation(javax.swing.WindowConstants. EXIT_ON_CLOSE );

para el caso hacen la misma acción (a un que la ultima importa la librería y la primera ya ha sido hecha), automatiza la acción de cerrar, pues la quita de memoria, es decir la cierra, si no la colocáramos esto haría que el formulario solo se ocultaría, dejaría de ser visible pero a un en ejecución.

Pero lo que necesitamos es que el botón cerrar desencadene una acción por lo cual debemos programar la acción cerra y dejarla de la siguiente forma

this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

el cual no hará nada, no cerrara el formulario, por lo cual debemos usar un

this.addWindowListener(new WindowListener() )

el cual dará un error si utilizamos un editor(Netbeans) por lo cual solo veremos lo que indica el error y no sugerirá colocar los métodos abstractos, y aceptaremos la propuesta esto nos generar el código faltante, esta únicamente modificaremos windowsClosing(Windows Event e) y colocaremos un JOptionPane.showConfirmDialog para preguntar, o si lo deseamos podemos personalizar a un más utilizando un JOptionPane.showOptionDialog.

            @Override

            public void windowClosing(WindowEvent e) {
                int Confirmar= JOptionPane.showConfirmDialog(JL,"¿Realmente deseas cerrar?","Cerrar",JOptionPane.YES_NO_OPTION);
                if (JOptionPane.OK_OPTION==Confirmar){
                cerrar();
                }
            }
_______________________________________________
¿Como creas mensajes de texto en java?
Para esta tarea utilizamos JOptionPane esta tiene muchas variantes, las cuales veremos a continuación (ver código). con esto podemos enviar mensajes de confirmación, incluso pedir información con JOptionPane.showInputDialog o personalizar con JOptionPane.showOptionDialog, su aplicación es meramente sintáctica, por lo que la forma mas fácil de aprender a utilizarlas es la practica,
_______________________________________________

    public  void cerrar(){
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

Para tener una idea mas general presentare JOptionPane, para poder practicar y ver varias opciones que ofrece esta librería. Lo puedes visualizar descargando el código



__________________________________________________________________________
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.*;

/**
 *
 * @author Marco
 */
public class FormularioDeseaCerrar extends JFrame implements ActionListener{
    JButton JB1, JB2, JB3, JB4;
    JLabel JL;
    public  void cerrar(){
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
FormularioDeseaCerrar(){
    super("¿Desea cerrar?");
    JPanel Jp= new JPanel();
    this.add(Jp);
    JB1=new JButton("Mensaje");
    Jp.add(JB1);
    JB2=new JButton("Mensaje de entrada");
    Jp.add(JB2);
    JB3=new JButton("Mensaje de combo");
    Jp.add(JB3);
    JB4=new JButton("Confirmación");
    Jp.add(JB4);
    JL= new JLabel("Etiqueta                         ");
    Jp.add(JL);
    Jp.setLayout(new FlowLayout());
    JB1.addActionListener(this);
    JB2.addActionListener(this);
    JB3.addActionListener(this);
    JB4.addActionListener(this);
     this.setVisible(true);
     this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//El boton cerra no hara nada(no cierra)
     this.setLocationRelativeTo(null);//Centra el formulario en la pantalla
    //Lo siguiente sera para modificar el comportamiento para cerrar el formulario y lanzar nuestra ventana de forma modal
     this .addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                int Confirmar= JOptionPane.showConfirmDialog(JL,"¿Realmente deseas cerrar?","Cerrar",JOptionPane.YES_NO_OPTION);
                if (JOptionPane.OK_OPTION==Confirmar){
                cerrar();
                }
            }

            @Override
             public void  windowClosed(WindowEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
             public void  windowIconified(WindowEvent e) {
            //    throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
             public void  windowDeiconified(WindowEvent e) {
              //  throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
             public void  windowActivated(WindowEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
             public void  windowDeactivated(WindowEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }
        });
    this.pack();
}
     public static void   main(String[] args) {
        new FormularioDeseaCerrar();
    }

    @Override
    public void  actionPerformed(ActionEvent e) {
        if (e.getSource()==JB1){
        int seleccion = JOptionPane.showOptionDialog(this,"Selecciona una opción","Selecciona",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null,new Object[]{"Aceptar","No","Cancelar"},"Aceptar");    
         this .setTitle(null);
        switch (seleccion){
            case 0:
               JL.setText("Selecciono Aceptar");
                break;
            case 1:
                JL.setText("Seleccion No");
                break;
            case 2:
                JL.setText("Selecciono Cancelar");
                break;
        }
        }
        if (e.getSource().equals(JB2)){
            String Texto = JOptionPane.showInputDialog(this,"Por favor ingrese sus datos",JOptionPane.QUESTION_MESSAGE);
            JL.setText(Texto);
        }
        if (e.getSource().equals(JB3)){
            Object Texto1 = JOptionPane.showInputDialog( this ,"Seleccione una opcion", "Selección",JOptionPane.QUESTION_MESSAGE,null,new Object[]{"Opcion 1","Opcion 2","Opcion 3"},"Opcion 1");
            JL.setText(Texto1+"");
        }
        if (e.getSource().equals(JB4)){
            int confirmado = JOptionPane.showConfirmDialog( this ,"¿Lo confirmas?");
            if (JOptionPane.OK_OPTION == confirmado)
                JL.setText("Confirmado");
            else
                JL.setText("No borrare nada");
        }
    }
}
__________________________________________________________________________

La aplicación ya en ejecución.





No hay comentarios:

Publicar un comentario