Hola a todos, lo que vamos a hacer ahora es un formulario de login (¿si saben lo que es “login”, no?) desarrollado totalmente en Java, y para validar el acceso haremos uso de una base de datos MySql.
Para empezar, contarte que para poder realizar este ejemplo necesitas lo siguiente:
- Una plataforma de desarrollo en Java: sea Eclipse, sea Netbeans, pero por favor para este ejemplo usa Eclipse. Estoy seguro que los que no usan cualquiera de las dos aplicaciones anteriormente descritas para programar en Java son gays, pero tienen el pene más grande y en su caso los ovarios bien puestos aquellos y aquellas que desarrollan con Eclipse.
- Gestor de base de datos MySql: No importa si formó parte de la instalación de AppServ, XAMPP, LAMPP, WAMPP, etc.; preferentemente quisiera que tuvieras instalado únicamente el gestor, pero estos funcionan y son totalmente válidos, así que no me quejo.
- Tu cerebro.
- No ser reguetonero ni escuchar mierda como Moderatto, Miranda!, Tony Dize, ADAMMO, Chino y Nacho, Erick Elera, Tommy Portugal, y todo cantante o grupo que produzca materia fecal en vez de música.
Bueno, yendo al grano, empezamos creando el proyecto en Eclipse (si ya tienes experiencia con Eclipse puedes saltarte este paso, pero si no la tienes y lo saltas morirás):
br />
Con el nombre: EjemploLogin (en realidad puede ser el nombre que ustedes quieran), luego hacemos click en “Finish” (por ahora no haremos click en el botón “Next >” porque por el momento no nos interesa).

Ahora bien, para poder realizar un buen trabajo necesitamos agregar un archivo .jar necesario para poder conectarnos al gesto MySql que tengamos instalado. En este caso hago uso del mysql-connector-java, el cual lo puedes descargar desde aquí.
Para agregar dicho conector primero haremos anti-click en el directorio de nuestro proyecto, y seleccionamos la opción “Build Path” y luego “Configure Build Path…”, de esta forma:
Se nos abrirá el siguiente cuadro de diálogo:

Seleccionamos la pestaña “Libraries” (por si no está seleccionada), y haremos click en el botón “Add External JARs…”, y luego exploramos hasta encontrar la ubicación del conector que acabamos de descargar, y le hacemos doble-click al archivo .jar.

De esta manera se añaden archivos .jar al proyecto. La finalidad de esto es obvia: sin este archivo no podríamos conectar a MySql, en otras palabras, lo que acabamos de agregar es un driver de conexión.
Muy bien, empezaremos luego a crear los paquetes necesarios para una mejor organización de nuestro código, separando de esta manera las clases de conexión y manejo de datos con las de interfaz gráfica de usuario, simplemente haciendo anti-click en el directorio “src” del proyecto, seleccionamos “New” y luego hacemos click en “Package”.
Así debe quedar.
Llegados hasta ahí, iremos a la consola o interfaz gráfica que tengamos para crear nuestra base de datos en MySql. El código es el siguiente:
Código:
CREATE DATABASE bd_samplelogin;
USE bd_samplelogin;
CREATE TABLE `tm_usuario` (
`tm_idusuario` int (11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
`tm_login` varchar (50),
`tm_password` varchar (38)
);
A la tabla “
tm_usuario” le añadirás los usuarios y las claves que te apetezcan.
Ahora bien, volviendo a Eclipse, agregamos al paquete
isma.db una clase para conectarnos a la base de datos:
Código:
package isma.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DbConnection {
static String bd = "bd_samplelogin";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost/" + bd;
Connection conn = null;
public DbConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
}
catch(SQLException e){
System.out.println(e);
}
catch(ClassNotFoundException e){
System.out.println(e);
}
}
public Connection getConnection(){
return conn;
}
public void desconectar(){
conn = null;
}
}
Y agregamos otra para interactuar con la tabla “tm_usuario”:
Código:
package isma.db;
import java.sql.*;
public class DbUsuario {
DbConnection cn;
public DbUsuario() {
cn = new DbConnection();
}
public Object[][] UsuarioAcceder(String login, String password){
int registros = 0;
try {
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +
" FROM tm_usuario");
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("cont");
res.close();
}
catch(SQLException e){
System.out.println(e);
}
Object [][] data = new Object[registros][3];
if (login.length() != 0 && password.length() != 0){
int usu_id;
String usu_login = "";
String usu_password = "";
try {
String strsql = "";
strsql = "SELECT * FROM tm_usuario WHERE tm_login = '" + login + "' AND tm_password = '" + password + "'";
PreparedStatement pstm = cn.getConnection().prepareStatement(strsql);
ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
usu_id = res.getInt("tm_idusuario");
usu_login = res.getString("tm_login");
usu_password = res.getString("tm_password");
data[i][0] = usu_id;
data[i][1] = usu_login;
data[i][2] = usu_password;
i++;
}
res.close();
}
catch(SQLException e){
System.out.println(e);
}
}
return data;
}
}
La clase “
DbUsuario” contiene (como podrán haber visto) una función llamada “
UsuarioAcceder”, la cual recibirá dos parámetros: el usuario y la clave de acceso.
Si el usuario y la clave no se encuentran al momento de realizarse la consulta, o los datos ingresados son incorrectos, o simplemente no existen en la base, por lo tanto al objeto de array bidimensional “data” no se le asignará valores, y si se les asignará cuando los datos sean correctos.
No hay mucho que comentar sobre el anterior código, salvo indicar que la consulta anterior a la del acceso sirve para definir la cantidad de ítems que contendrá inicialmente la variable “data”, ya que en Java los arrays de objetos deben ser inicializados antes de ser usados.
Definamos ahora la estructura del formulario principal (es decir, hacia donde queremos acceder). Para esto agregamos una clase en el paquete isma.gui. El formulario va a tener como aditivo a este ejemplo una barra de menú:
Código:
package isma.gui;
import java.awt.event.*;
import javax.swing.*;
public class frmMain extends JFrame {
private static final long serialVersionUID = 1L;
private JMenuBar barramenu;
public frmMain()
{
super("SISTEMA EJEMPLO LOGIN");
}
public void mostrarForm(boolean mostrar){
if (mostrar == true){
barramenu = new JMenuBar();
JMenu menuArchivo = new JMenu("Configuración y Mantenimiento");
menuArchivo.setMnemonic('C');
JMenuItem itemAcerca = new JMenuItem("Acerca de...");
itemAcerca.setMnemonic('A');
menuArchivo.add(itemAcerca);
itemAcerca.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evento)
{
JOptionPane.showMessageDialog(frmMain.this,
"Ejemplo Login",
"Acerca de", JOptionPane.INFORMATION_MESSAGE);
}
}
);
JMenuItem itemSalir = new JMenuItem("Salir");
itemSalir.setMnemonic('S');
menuArchivo.add(itemSalir);
itemSalir.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent evento)
{
System.exit(0);
}
}
);
barramenu.add(menuArchivo);
setJMenuBar(barramenu);
setSize(1022, 700);
setLocationRelativeTo(this.getParent());
setVisible(mostrar);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
}
La función “
mostrarForm” nos servirá para controlar cuando queremos que el formulario principal aparezca. En este caso es preciso que aparezca justo después de comprobar que los datos ingresados en el formulario de login sean correctos.
Ahora la estrella de este artículo:
Código:
package isma.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import isma.db.*;
public class frmLogin extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField txtusuario;
private JPasswordField txtpassword;
private JButton btnAceptar, btnCancelar;
private JLabel lblusuario, lblpassword;
private Container contenedor;
private GridLayout cuadricula1;
public frmLogin()
{
super("Acceso al Sistema");
cuadricula1 = new GridLayout(3, 3, 10, 10);
lblusuario = new JLabel("Usuario:");
lblpassword = new JLabel("Clave:");
txtusuario = new JTextField(10);
txtpassword = new JPasswordField(10);
btnAceptar = new JButton("Aceptar");
btnAceptar.setMnemonic('A');
ImageIcon imgAceptar = new ImageIcon("img/user_go.png");
btnAceptar.setIcon(imgAceptar);
btnCancelar = new JButton("Cancelar");
btnCancelar.setMnemonic('C');
ImageIcon imgCancelar = new ImageIcon("img/sign_cancel.gif");
btnCancelar.setIcon(imgCancelar);
contenedor = getContentPane();
contenedor.setLayout(cuadricula1);
contenedor.add(lblusuario);
contenedor.add(txtusuario);
contenedor.add(lblpassword);
contenedor.add(txtpassword);
contenedor.add(btnAceptar);
contenedor.add(btnCancelar);
btnAceptar.addActionListener(
new ActionListener()
{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent evento)
{
DbUsuario user = new DbUsuario();
frmMain principal = new frmMain();
String usuario;
String clave;
usuario = txtusuario.getText();
clave = txtpassword.getText();
try {
Object[][] itemUsuario = user.UsuarioAcceder(usuario, clave);
String x_iduser = itemUsuario[0][0].toString();
String x_user = itemUsuario[0][1].toString();
String x_pass = itemUsuario[0][2].toString();
if ((x_user != "") && (x_pass != ""))
{
JOptionPane.showMessageDialog( frmLogin.this,
"Bienvenido al sistema usuario: " + x_user + ", con id: " + x_iduser,
"Acerca de", JOptionPane.INFORMATION_MESSAGE );
principal.mostrarForm(true);
principal.setLocationRelativeTo(principal.getParent());
dispose();
}
}
catch(Exception e){
JOptionPane.showMessageDialog( frmLogin.this,
"Usuario o contraseña incorrecto",
"Acerca de", JOptionPane.ERROR_MESSAGE );
}
}
}
);
btnCancelar.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent evento )
{
System.exit(0);
}
}
);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setSize(300, 150);
setVisible(true);
setLocationRelativeTo(this.getParent());
}
}
Lo interesante de este formulario es lo siguiente:
- Importación del paquete “isma.db”: import isma.db.*;
- Los botones tienen imágenes vistosas como iconos.
- Las variables de usuario y contraseña que recogen los datos de la función “UsuarioAcceder” serán asignadas siempre y cuando se compruebe que la autenticación sea correcta.
Y para terminar, una clase que ejecute todo en el terminal principal:
Código:
package isma.gui;
import javax.swing.*;
public class EjemploLogin {
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
catch (Exception e){
System.out.println(e);
}
frmLogin aplicacion = new frmLogin();
aplicacion.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
}
}
Fíjense en la siguiente línea:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
Esto define el tema visual de la aplicación, es decir, tu aplicación en Java pasa de esto:

A esto:

Sin punto de comparación.
Si quieres puedes borrarlo (ojo: todo el try), pero sinceramente te habrás dado cuenta que queda estupendo.
Ahora sólo nos queda correr nuestra aplicación, para eso tecleamos Ctrl + F11:


Y eso ha sido todo damas y caballeros, muy pronto más ejemplos con Java, y muchas sorpresas.
Nota: Los iconos de los botones del formulario "frmLogin" se encuentran en el archivo descargable de la parte inferior de estas líneas.

Descargar ejemplo

Descargar Eclipse
¿Dudas? Escríbeme a lovelessisma@gmail.com
Me gusta:
Sé el primero en decir que te gusta esta post.
Muy agradecido por tu aporte, muy bien explicado. Muy seguramente estare haciendo unas preguntas en estos dias cuando lo implemente.
Gracias
Gracias pana..!!! me servirá de mucho este ejemplo…te agradezco si puedes seguir subiendo + ejemplillos….saludos desde venezuela..!!!
Si, al momento de crear la tabla de la base de datos experimentan problemas, deben sacar las cremillas de la sintaxis sql. Queda asi:
CREATE TABLE tm_usuario (tm_idusuario int (11) PRIMARY KEY NOT NULL AUTO_INCREMENT, tm_login varchar (50), tm_password varchar (38));
Muy buen aporte, me ayudo mucho, gracias!!
Muchisimas gracias.
Excelente tutorial, gracias por compartir
excelente .. gracias …
Como seria con postgressql. instente con eso pero me retorna contraseña incorrecta.
¿Sabes cuál es la contraseña de tu usuario Postgres? Sí la sabes, pruebas con ella y aun así no funciona, entonces indícame exactamente el código o el mensaje de error.
La contraseña es correcta, hace conexion cuando corro solo isma.db, pero cuando cargo el formulario de login, solo muestra contraseña incorrecta. Java: 1.7.0_03, parece que en btnaceptar me esta fallando algo pero no me salta errores.
este me aparese,
org.postgresql.util.PSQLException: ERROR: no existe la relación «l_usu»
Position: 30
porque hasta aqui llega bien.
while(res.next()){
usu_id = res.getInt(“l_idu”);
usu_login = res.getString(“l_usu”);
usu_password = res.getString(“l_pas”);
Revisa tu consulta, la estás haciendo de forma incorrecta. Si todavía no tienes idea postea tu código para verlo.
bueno parece que esta dando, no se como pero por el momento funciona. te quería hacer una consulta.
tengo un Jframe en el cual dentro tengo una toolbar e intento llamar a un jinternalframe lo jala pero cuando aparece me minimiza el jframe. y lo tengo maximizado por defecto. por decirlo mejor. que puede hacer para que se conserve maximizado.
te agradecería. gracias por la ayuda
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver me sale eso y no me kiero jakra los usuarios ni contras que tengo en mi base de datos