¡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
Hablemos de informática
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.