Table of Contents
Crear un panel de inicio de sesión en Java con Swing y MySQL (código completo)
¿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);
});
}
}
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
- 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
);

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



- Compila y ejecuta el programa desde tu IDE.
- Comprueba con el ID si el usuario ya existe. Si el usuario no existe debemos añadirlo.
- Introduce un usuario y contraseña, y pulsa Guardar.
- Usa Resetear para limpiar los campos.
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:



Si el usuario es 5, el usuario no existe:



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



Tabla:



¿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:





