¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)
Crear un panel de inicio de sesión en Java con Swing y MySQL

Crear un panel de inicio de sesión en Java con Swing y MySQL (código completo)

Anuncios
Publicidad

¿Quieres aprender a crear un formulario de inicio de sesión en Java conectado a una base de datos MySQL? 🔐
En este tutorial te enseño paso a paso cómo hacerlo con Java Swing, validando usuarios mediante conexión a una base de datos.

Este ejemplo práctico incluye:

  • Una interfaz gráfica con JFrame y JPanel.
  • Campos de texto para usuario, contraseña e ID.
  • Botones para guardar, comprobar y resetear.
  • Una clase de conexión a MySQL que gestiona usuarios.

Al final tendrás un sistema básico de login en Java totalmente funcional.


Requisitos previos

Antes de empezar asegúrate de tener instalado:

  • Java JDK (versión 8 o superior).
  • MySQL Server (con la base de datos tiendaonline).
  • Conector JDBC de MySQL (mysql-connector-java).
  • Un IDE como NetBeans, IntelliJ o Eclipse.

Código de la interfaz gráfica (Swing)

El siguiente código genera la ventana con los campos y botones necesarios.
⚠️ Importante: No borres los comentarios dentro del código, ya que explican el funcionamiento de cada sección.

package admin;

import conexion.ConexionBaseDeDatos;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class InterfazAdmin extends JFrame {
    // Constructor de la clase
    public InterfazAdmin()
            {
                // Título y tamaño de la ventana. La tercera línea permite decidir qué se hará al cerrar la ventana.
                setTitle("Panel de inicio de sesión");
                setSize(200, 400);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                
                // Añadimos una descripción con Jlabel
                JLabel primeraDescripcion = new JLabel(
                "<html>Proporciona el id que has recibido.<br>"
                + "Toca en el botón de comprobar, este botón permite verificar<br>"
                + "si ya existes en el sistema:<br><br></html>" // salto extra
                );

                JLabel segundaDescripcion = new JLabel(
                "<html>En caso de no existir el usuario,<br>"
                + "proporciona el nombre y la contraseña,<br>"
                + "toca en guardar.</html>"
                );
                
                // Campos de usuario, contraseña e id
                JTextField campoTextoUsuario = new JTextField();
                campoTextoUsuario.setPreferredSize(new Dimension(100,40));
                campoTextoUsuario.setBackground(Color.white);
                JPasswordField campoTextoContrasena = new JPasswordField();
                campoTextoContrasena.setPreferredSize(new Dimension(100,40));
                JTextField idUsuario = new JTextField();
                idUsuario.setPreferredSize(new Dimension(80,20));
                
                // Botones
                JButton botonGuardar = new JButton("Guardar");
                botonGuardar.setPreferredSize(new Dimension(100,40));
                JButton botonComprobar = new JButton("Comprobar");
                botonComprobar.setPreferredSize(new Dimension(100,40));
                JButton botonResetear = new JButton("Resetear");
                botonResetear.setPreferredSize(new Dimension(100,40));
               
               // Evento botón comprobar → verificar si existe en BD
               botonComprobar.addActionListener((e) -> {
                   // Variable para comprobar el id 
                   int id = Integer.parseInt(idUsuario.getText());

                   try {
                       if (ConexionBaseDeDatos.siUsuarioExiste(id)) {
                           JOptionPane.showMessageDialog(null, "El usuario existe en la base de datos");
                       }
                       else {
                           JOptionPane.showMessageDialog(null, "El usuario no existe en la base de datos");
                       }
                   } catch (SQLException ex) {
                       ex.printStackTrace();
                   }
               }); 

               // Evento botón guardar → validar en BD
               botonGuardar.addActionListener ((e) -> {
                   // Almacenamos el dato obtenido en el campo de textoUsuario.
                   String usuarioIngresado = campoTextoUsuario.getText();
                   // Hacemos lo mismo con la contraseña:
                   String contrasenaIngresada = new String (campoTextoContrasena.getPassword());
                    
                   try {
                       if (ConexionBaseDeDatos.conectarYguardarConsulta(usuarioIngresado, contrasenaIngresada))
                       {
                           JOptionPane.showMessageDialog(null, "Has guardado el usuario..");
                       }
                       else {
                           JOptionPane.showMessageDialog(null, "No has podido acceder");
                       }
                   } catch (SQLException ex) {
                       System.out.println("Error al conectar");
                   }
               });
            
               // Evento botón resetear → limpiar campos 
               botonResetear.addActionListener((e) -> {
                   campoTextoUsuario.setText("");
                   campoTextoContrasena.setText("");
                   idUsuario.setText("");
               });
        
               // Paneles
               JPanel contenedor = new JPanel();
               setSize(400, 400);
               JPanel contenedorDos = new JPanel();
               JPanel contenedorTres = new JPanel();
                
               contenedor.add(new JLabel("Usuario :"));
               contenedor.add(campoTextoUsuario);
               contenedor.add(new JLabel("Contraseña :"));
               contenedor.add(campoTextoContrasena);
                
               contenedorDos.add(botonGuardar);
               contenedorDos.add(botonResetear);
                
               contenedorTres.add(primeraDescripcion);
               contenedorTres.add(segundaDescripcion);
               contenedorTres.add(new JLabel("id de usuario: "));
               contenedorTres.add(idUsuario);
               contenedorTres.add(botonComprobar);
                
               add(contenedor,BorderLayout.CENTER);
               add(contenedorDos,BorderLayout.PAGE_END);
               add(contenedorTres,BorderLayout.PAGE_START);
            }

    public static void main(String[] args) {
        // invokeLater asegura que la creación de la ventana 
        // (InterfazAdmin) y todas las operaciones de Swing se 
        // ejecuten dentro del hilo especial de Swing (EDT). 
        SwingUtilities.invokeLater(() -> {
            InterfazAdmin admin = new InterfazAdmin();
            admin.setVisible(true);
        });
    }
}

Publicidad

Código de la conexión a MySQL

Aquí implementamos la clase que gestiona la base de datos.
Crea una tabla llamada usuarios en tu base de datos tiendaonline con las columnas id, usuario, contrasena.

package conexion;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ConexionBaseDeDatos {
    // Debes tener la base de datos creada con anterioridad.
    // Creamos una tabla usuarios con nombre usuario y contraseña.
   
    private static final String HOST = "localhost";         // IP o dominio del servidor MySQL
    private static final String PUERTO = "3306";            // Puerto (por defecto 3306)
    private static final String BASE_DATOS = "tiendaonline"; // Nombre de tu base de datos
    private static final String USUARIO = "root";           // Tu usuario de MySQL
    private static final String CONTRASEÑA = "1234";        // Tu contraseña de MySQL

    // Construcción dinámica de la URL de conexión
    private static final String URL = String.format(
        "jdbc:mysql://%s:%s/%s?useSSL=false&serverTimezone=UTC",
        HOST, PUERTO, BASE_DATOS
    );
   
    // este método permite insertar un usuario y una contraseña en la base de datos creada   
    public static String comandoInsert = "INSERT INTO usuarios (usuario, contrasena) VALUES (?, ?)";
    
    public static boolean conectarYguardarConsulta(String usuario, String constrasena) throws SQLException {
        try(Connection conexion = DriverManager.getConnection(URL,USUARIO,CONTRASEÑA);
            PreparedStatement consultaAenviar = conexion.prepareStatement(comandoInsert)) {
            
            consultaAenviar.setString(1, usuario);
            consultaAenviar.setString(2, constrasena);    
        
            int filas = consultaAenviar.executeUpdate();
            if (filas > 0) {
                System.out.println("Has insertado el usuario............"); 
                return true;
            }
        } catch(SQLException e) {
            e.printStackTrace(); 
            System.out.println("Error en la conexión o en la insercción");
        }     
        return false;
    }

    // Método para comprobar si el usuario existe por ID
    public static boolean siUsuarioExiste(int id) throws SQLException {
        String sql = "SELECT * FROM usuarios WHERE id = ?";
    
        try(Connection conexion = DriverManager.getConnection(URL,USUARIO,CONTRASEÑA);
            PreparedStatement prepararConsultaParaEnviar = conexion.prepareStatement(sql)) {
            
            prepararConsultaParaEnviar.setInt(1, id);
            
            try(ResultSet resultado = prepararConsultaParaEnviar.executeQuery()) {
                return resultado.next(); // True si encuentra el usuario
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}

Cómo probar el programa

  1. Crea la base de datos y tabla en MySQL:
CREATE DATABASE tiendaonline;
USE tiendaonline;

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario VARCHAR(30) NOT NULL,
    contrasena VARCHAR(30) NOT NULL
);
Crear un panel de inicio de sesión en Java con Swing y MySQL
Crear un panel de inicio de sesión en Java con Swing y MySQL

Estos usuarios y sus contraseñas han sido insertadas desde java:

Crear un panel de inicio de sesión en Java con Swing y MySQL
  1. Compila y ejecuta el programa desde tu IDE.
  2. Comprueba con el ID si el usuario ya existe. Si el usuario no existe debemos añadirlo.
  3. Introduce un usuario y contraseña, y pulsa Guardar.
  4. Usa Resetear para limpiar los campos.
Publicidad

Errores comunes con los que puedes encontrarte

  • SQLException: No suitable driver → No añadiste el conector mysql-connector-java.
  • Access denied for user 'root' → Usuario/contraseña incorrectos en la clase de conexión.
  • Tabla inexistente → Asegúrate de haber creado la tabla usuarios.

Con este código ya tienes un sistema de login en Java con Swing y MySQL totalmente funcional.
Puedes adaptarlo para proyectos más grandes, añadir validación avanzada, cifrar contraseñas con Hash (SHA-256 o BCrypt) e incluso gestionar roles de administrador y usuarios normales.

Pruebas:

Si el id es un 2, el usuario si existe:

Crear un panel de inicio de sesión en Java con Swing y MySQL

Si el usuario es 5, el usuario no existe:

Introducimos un usuario, Nacho y la contraseña 7778.

Crear un panel de inicio de sesión en Java con Swing y MySQL

Tabla:

Crear un panel de inicio de sesión en Java con Swing y MySQL

¿Quieres hacerlo ahora? → Calculadora de Notas en Java: Cálculo de Promedio, Nota Máxima y Mínima con Interfaz Gráfica

Te puede interesar:

Seguir leyendo:

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

Deja un comentario

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)
error: Content is protected !!
Scroll al inicio