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