- 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.
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.
Recibe notificaciones por correo
6 Comentarios
Escribir Comentarioesto es exactamente lo que quería
Responderel problema que tenía era que no le agregaba a los textfield los listeners
Gracias!
De nada... cualquier otra duda no dudes en comentar, saludos!
Responderme 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í :
Responderif(!USR.getText().equals("tabla usuario campo nombre") && !PASS.getText().equals("tabla usuario campo password")){
jInternalFrame marco = true;
} else {
jInternalFrame marco = false;
Disculpa la demora pero google tenía problemas en la plataforma y no pude dejarte la respuesta al comentario...
ResponderBueno, 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!
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???,
ResponderMe 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)
Bueno, como veras en esta línea "add(PANEL);" es un panel, así que tienes 2 opciones, o lo cierras o lo ocultas:
ResponderPANEL.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!!
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