LogIn en Java

   Ya varias veces me han preguntado como hacer LogIn en Java, o como validar 2 campos de texto para habilitar un botón (lo típico de un LogIn)... Bueno, ya que son muchos los que tienen esta duda explico como hay que hacer....
  • Creamos el panel principal.
  • Creamos los campos de texto.
  • Creamos el botón.
  • Lo agregamos todo a nuestro panel principal.  
  • Almacenamos en una variable el estado del botón (true o false).
  • Creamos un listener para los campos de texto.
  • Agregamos un listener para pasar el foco a cada uno de los componentes. 
  • Agregamos al listener la condición de si el campo esta vacío coloque verdadera la variable del botón (true) o de lo contrario no lo haga (false).
  • Validamos nuestro LogIn.
   Sí, se ve que son muchos pasos pero en realidad es algo muy sencillo de hacer, aquí un ejemplo básico de lo que es un LogIn en Java, la clase se llama "btn_login"

import javax.swing.*;
import java.awt.event.*;
@SuppressWarnings("deprecation")
public class btn_login extends JFrame {
 boolean boton=false;
 JPanel PANEL = new JPanel();
 JTextField USR = new JTextField(25);
 JPasswordField PASS = new JPasswordField(25);
 JLabel USER = new JLabel("Usuario");
 JLabel CLAVE = new JLabel("Clave");
  JButton BOTON = new JButton("Ok");

 public btn_login() {
  super("Login");
  setLocation(100,100);
  setSize(320,160);
  add(PANEL);
  PANEL.add(USER);
   PANEL.add(USR);
   PANEL.add(CLAVE);
   PANEL.add(PASS);
   PANEL.add(BOTON);
   BOTON.setEnabled(boton);
  USR.addKeyListener(new Comprobar());
  PASS.addKeyListener(new Comprobar());
  BOTON.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent evt){
    Validar();
   }
  });
  USR.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent evt){
    PASS.requestFocus();
   }
  });
  PASS.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent evt){
    if(boton)
     Validar();
    else
     USR.requestFocus();
   }
  });
  show();
 }

 public class Comprobar extends KeyAdapter {
  public void keyTyped ( KeyEvent evt ){
   if(!USR.getText().equals("") &&
   !PASS.getText().equals("")){
    boton=true;
    BOTON.setEnabled(boton);
   } else {
    boton=false;
    BOTON.setEnabled(boton);
   }

  }
 }

 void Validar(){
  JOptionPane.showMessageDialog(null,"Hay escrito algo "+
     "y procesas el LogIn");
 }

 public static void main(String[] arg) {
  JOptionPane.showMessageDialog(null,"Validando un login...\n");
  JOptionPane.showMessageDialog(null,"By Carlitox ("+
   "http://calitoxenlaweb.blogspot.com)");
  new btn_login();
 }
}

   Como dije es algo básico, lo mas importante son los listener del evento del teclado (los del tipo keyTyped) pues son los que evalúan si los campos estan vacíos para habilitar el botón o no cada vez que se presione una tecla.

6 Comentarios

Escribir Comentario
Anónimo
AUTOR
8 de septiembre de 2010, 19:31 delete

esto es exactamente lo que quería
el problema que tenía era que no le agregaba a los textfield los listeners
Gracias!

Responder
avatar
_CarlitoX_
AUTOR
8 de septiembre de 2010, 19:47 delete

De nada... cualquier otra duda no dudes en comentar, saludos!

Responder
avatar
Anónimo
AUTOR
2 de marzo de 2011, 11:51 delete

me puedes indicar como seria la sentencia para comprobar los valores de los jTextField contra los datos de una BD y si es así activar marcos internos. Desde ya muchas gracias. seria algo mas o menos así :

if(!USR.getText().equals("tabla usuario campo nombre") && !PASS.getText().equals("tabla usuario campo password")){

jInternalFrame marco = true;
} else {

jInternalFrame marco = false;

Responder
avatar
3 de marzo de 2011, 9:34 delete

Disculpa la demora pero google tenía problemas en la plataforma y no pude dejarte la respuesta al comentario...

Bueno, tendrías que hacerle un evento al botón, (enlace). Después, dentro del evento, hacer un ciclo repetitivo, lo que se conoce como while e ir comparando, ¿como?, simple.... Si usas MySQL lo mas simple y seguro es validar la conexión directa, en caso de que falle la conexión a la base de datos quiere decir que el usuario o la clave son inválidas y muestras un mensaje, algo así:

[dentro del evento]
String usuario = USR.getText();
String clave = PASS.getText();
try {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection(MySQL.URL,MySQL.USUARIO,MySQL.CLAVE);
if(conn!=null){
JOptionPane.showMessageDialog(null, "Entrando como "+usuario,"Entrando al Sistema",JOptionPane.INFORMATION_MESSAGE);
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Usuario o Clave Incorrecta","Error en el acceso",JOptionPane.ERROR_MESSAGE);
}

Ahora, también existe la forma básica y tradicional. Primero buscas el nombre de usuario, si existe buscas la contraseña, para validar utilizamos una variable booleana (true o false) y listo, por ejemplo:

[esto va dentro del evento]
String usuario = USR.getText();
String clave = PASS.getText();
boolean valido = false;
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection(MySQL.URL,MySQL.USUARIO,MySQL.CLAVE);
Statement stat = conn.createStatement();
ResultSet para_usuario = stat.executeQuery ("SELECT nombre FROM tabla_usuarios");
while (para_usuario.next()) {
if(usuario=para_usuario.getObject("nombre")){
ResultSet para_clave = stat.executeQuery ("SELECT clave FROM tabla_usuarios WHERE nombre='"+usuario+"'");
if(clave=para_clave.getObject("clave")){
valido=true;
}
}
}

Ya lo que nos queda es permitir el acceso dependiendo de si la variable es verdadera o false....

Para un mejor rendimiento te recomiendo la primera opción, siempre y cuando sepas utilizar el try-catch y manejar las conexiones directas a MySQL desde Java... Cualquier duda me comentas, saludos!

Responder
avatar
Anónimo
AUTOR
28 de noviembre de 2012, 14:12 delete

Después de haber programado el login después de que el login sea correcto y aparezcan las ventanas, como se cierra la ventana de login???,
Me explico corro el programa, aparece el login, lo introducusco
me aparece las demas ventanas que deberían de aparecer
(pero la ventana de logeo se queda abierta, como hago para que la ventana de logeo se cierre después de que el usuario y contraseña este bien escrito)

Responder
avatar
28 de noviembre de 2012, 14:26 delete

Bueno, como veras en esta línea "add(PANEL);" es un panel, así que tienes 2 opciones, o lo cierras o lo ocultas:

PANEL.setVisible(false); //oculto

PANEL.dispose(); //cerrado

Yo recomiendo ocultarlo y borrar el campo clave, así cuando lo muestres otra vez quedará grabado el nombre de usuario y no hay necesidad de escribirlo nuevamente.... Saludos!!

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon