lunes, 27 de mayo de 2024


Capítulo Nº 6

 

Cómo hacer el diálogo usuario

y contraseña en Java

 

 6.1. USUARIO Y CONTRASEÑA

Toda aplicación  debe contar con una función que permita ingresar con seguridad al sistema y cuidar de que usuarios no autorizados puedan ingresar a la misma. Por eso es típico implementar la muy conocida caja de diálogo donde se exija ingresar con un usuario y contraseña.

En esta sección se ilustrará con detalle cómo construir una ventana o caja de diálogo donde el usuario deba colocar su nombre de usuario y una contraseña para poder ingresar al sistema.

 6.2. ARCHIVOS NECESARIOS

 Antes de crear la clase se debe tener a la mano los archivos de imágenes que darán cierta vistosidad a la ventana. Más adelante, en este curso, se utilizará el archivo de base de datos que conecte con la clase, y de acuerdo al usuario y contraseña, permita ingresar al sistema.

 6.3. CREACIÓN DE LA CLASE Password.java

Para mostrar en pantalla la ventana o diálogo, como se muestra en la figura mostrada abajo, es necesario construir una clase llamada "Password.java" y utilizar algunos métodos como setBounds, setResizable y setLayout.

  


setResizable: Para manejar si la ventana se puede maximizar o no.

setBounds (x,y,Largo,Ancho): Para ubicar los elementos en el formulario.

setLayout: Para anular el gestor de diseño por defecto.

 

Password.java

 

//***************************************************************************************

//**** Universidad Nacional Sistema de Inscripción Regular (UNSIR 3.0.0)             ****

//****                                                                               ****

//**** CLASE: Password (Para crear el diálogo que sirve para ingresar usuario y      ****

//**** contraseña de acceso)                                                         ****

//****                                                                               ****

//**** AUTOR: CARLOS CÓRDOVA - CC DESARROLLO DE SOFTWARE 2007-2024                   ****

//***************************************************************************************

 

//***************************************************************************************

// Paquetes de la librería estándar de clases de Java que se usarán en esta clase

//***************************************************************************************

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

//***************************************************************************************

// Inicio Clase Password (Clase principal)

//***************************************************************************************

 

public class Password extends JFrame implements ActionListener

{

   //*** Se asigna a la variable curDir la ruta actual de nuestra carpeta de trabajo

   String curDir = System.getProperty("user.dir");

   //*** Se asigna al objeto ImageIcon el archivo "Usuarios.gif" que está en nuestra carpeta de trabajo

   ImageIcon imagen = new ImageIcon(curDir+"/Usuarios.gif");

    //*** Se asignan a los objetos la imagen, etiquetas, cajas de texto y botones

   JLabel EtiquetaImagen = new JLabel(imagen);

   JLabel EtiquetaInUsuario = new JLabel("Usuario :");

   static TextField CajaTextoInUsuario = new TextField(11);

   JLabel EtiquetaInContrasena = new JLabel("Contraseña :");

   static TextField CajaTextoInContrasena = new TextField(11);

   JButton BotonAceptar = new JButton("Aceptar");

   JButton BotonCancelar = new JButton("Cancelar");

   //*** Se define el método principal "main" de la Clase Password

   public static void main(String[] args)

   {

      //*** Se define el aspecto de ventanas propio del sistema operativo (windows, Mac, Linux, etc.)

      try

      {

         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

      }

         catch (Exception e)

      {

         e.printStackTrace();

      }

      //*** Se ejecuta el constructor Password de la clase Password

      new Password();

   }  

   //*** Inicio del constructor Password

   public Password()

   {

      //*** Se define el título y tamaño de la ventana

      setTitle("Usuario y contraseña");

      setBounds( 0, 0, 280, 210 );

      setResizable(false);

      //*** Se cambia el icono de la ventana por el archivo "UN.gif" que está en nuestra carpeta de trabajo

      setIconImage (new ImageIcon(curDir+"/UN.gif").getImage());

      //*** Se definen tipo de carácter, teclas calientes y Tools-tips para etiquetas, cajas de texto

      //*** y botones del diálogo o ventana

      CajaTextoInUsuario.setText("");

      CajaTextoInContrasena.setEchoChar('*');

      BotonAceptar.setMnemonic('A');

      BotonAceptar.setToolTipText("Ingresar usuario...");

      BotonCancelar.setMnemonic('C');

      BotonCancelar.setToolTipText("Cancelar y salir");

      //*** Se ubican los elementos en el formulario utilizando el método setBounds (x,y,Largo,Ancho)

      // NOTAS: Para usar el método setBounds y ubicar los elementos donde nos plazca, debemos tomar en cuenta:

      // 1.- Anular el gestor de diseño por defecto -> setLayout(null)

      // 2.- Ubicar el elemento -> elemento.setBounds (x,y,a,b)

      // 3.- Agregar al formulario o dialogo el elemento -> add.(elemento)

      //*** Anulamos el Gestor de Diseño

      setLayout(null);

      //*** Damos cooordenadas a los elementos y los agregamos al diálogo

      EtiquetaImagen.setBounds(35,20,32,32);

      add(EtiquetaImagen);

      EtiquetaInUsuario.setBounds(35,65,80,20);

      add(EtiquetaInUsuario);

      CajaTextoInUsuario.setBounds(147,65,90,20);

      add(CajaTextoInUsuario);

      EtiquetaInContrasena.setBounds(35,95,80,20);

      add(EtiquetaInContrasena);

      CajaTextoInContrasena.setBounds(147,95,90,20);

      add(CajaTextoInContrasena);

      BotonAceptar.setBounds(35,135,90,22);

      add(BotonAceptar);

      BotonCancelar.setBounds(147,135,90,22);

      add(BotonCancelar);

      //*** Se centra el diálogo en la pantalla

      Dimension pantalla, cuadro;

      pantalla = Toolkit.getDefaultToolkit().getScreenSize();cuadro = this.getSize();

      this.setLocation(((pantalla.width - cuadro.width)/2),(pantalla.height - cuadro.height)/2);

      //*** Se muestra el diálogo

      setVisible(true);

      //*** Eventos producidos por los botones de la ventana

      addWindowListener(new WindowAdapter()

      {

         public void windowClosing(WindowEvent e)

         {

         //*** Se ejecuta el método CierraVentana

         CierraVentana();

         }

      });

      BotonAceptar.addActionListener(new ActionListener()

      {

         public void actionPerformed(ActionEvent evt)

         {

         //*** Aquí se coloca la función que produzca el evento luego de pulsar el botón "Aceptar"   

         }

      });

      BotonCancelar.addActionListener(new ActionListener()

      {

         public void actionPerformed(ActionEvent evt)

         {

          //*** Se ejecuta el método CierraVentana

          CierraVentana();

         }

      });

   }

   //*** Fin del constructor Password

   //*** Se definen los métodos necesarios para abrir y cerra el diálogo

   public void actionPerformed(ActionEvent e)

   {

      Object s = e.getSource();

   }

   //*** Clase JRootPane para detectar pulsaciones del teclado

   protected JRootPane createRootPane()

   {

      JRootPane rootPane = new JRootPane();

      KeyStroke stroke1 = KeyStroke.getKeyStroke("ESCAPE");

      KeyStroke stroke2 = KeyStroke.getKeyStroke("ENTER");

      //*** Acción para cerrar la ventana pulsando la tecla "ESC"

      Action SalirEscape = new AbstractAction()

      {

         public void actionPerformed(ActionEvent actionEvent)

         {

          //*** Se ejecuta el método CierraVentana

          CierraVentana();

         }

      } ;

      InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

      inputMap.put(stroke1, "ESCAPE");

      rootPane.getActionMap().put("ESCAPE", SalirEscape);

      //*** Acción para transferir el foco pulsando la tecla "ENTER" como si fuera la tecla TAB

      Action EnterFoco = new AbstractAction()

      {

         public void actionPerformed(ActionEvent actionEvent)

         {

            if(getFocusOwner() instanceof JButton)

            {

               Component boton = getFocusOwner();

               ((JButton)boton).doClick();             

            }

            else if(getFocusOwner() instanceof TextField)

            {

               getFocusOwner().transferFocus();

            }

         }

      } ;

      InputMap inputMap2 = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

      inputMap2.put(stroke2, "ENTER");

      rootPane.getActionMap().put("ENTER", EnterFoco);

      return rootPane;

   }

   //*** Método para cerrar la ventana y salir

   public void CierraVentana()

   {

      setVisible(false);

      dispose();

      System.exit(0);

   }

}

//***************************************************************************************

// Fin Clase Password (Clase principal)

//***************************************************************************************

 

Al compilar y ejecutar esta clase en Java, se mostrará por pantalla lo siguiente: