JNumKeyboard

JNumKeyboard

Este es un teclado numérico para la digitacion de claves, de esta forma colocamos un grado de seguridad a nuestras aplicaciones, ya que se evita que si, dando un pequeño ejemplo un poco extremista, si alguien nos espía con algún keylogger, no podrá hacerlo con esta herramienta ya que no se digita la contraseña con el teclado normal, sino con el mouse.

Imágenes

Código

Clase Principal

package clases;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.*;

public class Principal extends JApplet{
 
 JTextField txtusu=new JTextField(10);
 JPasswordField txtclave=new JPasswordField(10);
 JPopupMenu pop;
 JNumKeyboard teclado;
 
 public Principal(){
 
  colocarSkin();
 
  JPanel pafuera=new JPanel();
  JPanel p=new JPanel(new GridLayout(2,2,0,0));
  pafuera.setPreferredSize(new Dimension(200,30));
  p.add(new JLabel("Usuario: "));
  p.add(txtusu);
  p.add(new JLabel("Clave: "));
  p.add(txtclave);
 
  txtclave.addFocusListener(new FocusListener(){

   @Override
   public void focusGained(FocusEvent arg0) {
    pop = new JPopupMenu();
    teclado=new JNumKeyboard(txtclave);
    pop.add(teclado);
    pop.setVisible(true);
    pop.setLocation(txtclave.getLocationOnScreen().x+112, txtclave.getLocationOnScreen().y-1);
   }

   @Override
   public void focusLost(FocusEvent arg0) {
    pop.setVisible(false);
   }
   
  });
 
  pafuera.add(p);
  add(pafuera);
 
 }
 
 public void colocarSkin(){
 try {
  UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (UnsupportedLookAndFeelException e) {
   e.printStackTrace();
  }
 }

}

Clase JNumKeyboard

package clases;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

public class JNumKeyboard extends JPanel {
 
 JPasswordField t;
 
 public JNumKeyboard(JPasswordField txt){
 
  t=txt;
 
  setLayout(new GridLayout(4,3,0,0));
 
  ActionListener accion=new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    JButton b=(JButton)e.getSource();
    t.setText(""+t.getText()+b.getText());
   }
   
  };
 
  for(int i=0;i<12;i++){
   if(i<9){
    JButton b=new JButton(""+(i+1));
    b.addActionListener(accion);
    add(b);
   }else{
    if(i==9){
     JButton b=new JButton("");
     b.setEnabled(false);
     add(b);
    }
    if(i==10){
     JButton b=new JButton("0");
     b.addActionListener(accion);
     add(b);
    }
    if(i==11){
     JButton b=new JButton("");
     b.setEnabled(false);
     add(b);
    }
   }
  }
 }

}

Al hacer clic sobre el campo de texto para digitar la contraseña se despliega una ventana emergente con botones, uno para cada dígito numérico. Al dar clic sobre el otro campo de texto esta ventana desaparece.

Descarga

Pueden descargar el proyecto completo desde aquí. Se incluyen archivos fuentes e imágenes.

Recuerden que pueden visitarnos en

Java Zone.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

siempre y cuando

Siempre y cuando esos botones sean la UNICA opción para teclear el password, puede ser bueno. A cambio de eso, tienes passwords numéricos, que son mucho más fáciles de crackear que passwords alfanuméricos.

Gracias por el consejo

Gracias ezamudio por el consejo, de todas formas ya estoy desarrollando una version alfanumerica, proximamente la veran aqui, tendre en cuenta para que no sea editable y solo acepte los caracteres ingresados por medio del JNumkeyboard.

Siempre es bueno tener a alguien con experiencia que evalue lo que haces, Gracias de nuevo ezamudio.

Imagen de juanluis

Oye muy bueno tu proyecto ese

Oye muy bueno tu proyecto ese me ayudará para mi sistema!!!