Noticias

* Completa este formulario para conocer los temas de tu interes, te tomará unos segundos.

* Contenido actualizado diariamente!!

* Nueva categoría JavaScript!, aprender javascript está en tus manos!

* Nueva categoría VB .Net!, aprender VB .NET fácilmente con franvarvil!

* Sigue a la página para seguir creciendo!!

sábado, 19 de enero de 2013

Java: Swing: JPasswordField

9 comentarios :
Introducción

Cuando vamos a escribir una contraseña o alguna otra palabra que deseamos que no aparezca visualmente en el campo sino más bien algún caracter (lo más común son unos puntitos), existe lo llamado JPasswordField. Es un campo de texto (como el JTextField) solo que cuando escribimos aparecerán los puntitos o el caracter que nosotros seleccionamos.

Desarrollo

Importamos la librería necesaria para utilizar el JPasswordField:

import javax.swing.JPasswordField;

Luego procedemos a crear nuestro método, el ejemplo que daré es de un Login o un área donde colocamos usuario y contraseña para ingresar a una cuenta.

// Espacio para ingresar la contraseña
 private JPasswordField jpfContrasenia() {
     // Se inicializa el Objeto
     JPasswordField contrasenia = new JPasswordField();
     // Asignamos posición y tamaño
     contrasenia.setBounds(200, 80, 150, 20);
     // Colocamos un símbolo personalizado(opcional)
     // Si no lo colocamos aparecen los puntitos predeterminados
     contrasenia.setEchoChar('+');
     // Le asignamos un texto emergente cuando nos posamos encima del objeto
     contrasenia.setToolTipText("Ingrese Contraseña");
     return contrasenia;
 }

Y con ese método creamos nuestro campo para una contraseña, coloqué un símbolo “mas” ( + ) solo para el ejemplo y para que se conozca el método para cambiar el símbolo pero esa característica es opcional, me gustan más los puntos tradicionales. Bueno luego creamos los JLabel y el JTextField para hacer nuestra ventana de “ingresar” y mi clase final quedaría así:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class Password extends JFrame {

    public Password() {
        add(ingresarUsuario());
        add(ingresarContrasenia());
        add(jtaUsuario());
        add(jpfContrasenia());
        inicializador();
    }

    // Inicializador de la Ventana
    private void inicializador() {
        setSize(400, 200);
        setLayout(null);
        setTitle("Login");
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    // Texto que indica donde va el nombre de Usuario
    private JLabel ingresarUsuario() {
        JLabel usuario = new JLabel("Nombre de Usuario: ");
        usuario.setBounds(30, 30, 200, 20);
        return usuario;
    }

    // Texto que indica donde va la contraña
    private JLabel ingresarContrasenia() {
        JLabel contrasenia = new JLabel("Contrasenia: ");
        contrasenia.setBounds(30, 80, 200, 20);
        return contrasenia;
    }

    // Espacio para ingresar el nombre de usuario
    private JTextField jtaUsuario() {
        JTextField usuario = new JTextField();
        usuario.setBounds(200, 30, 150, 20);
        usuario.setToolTipText("Ingrese Nombre de Usuario");
        return usuario;
    }

    // Espacio para ingresar la contraseña
    private JPasswordField jpfContrasenia() {
        // Se inicializa el Objeto
        JPasswordField contrasenia = new JPasswordField();
        // Asignamos posición y tamaño
        contrasenia.setBounds(200, 80, 150, 20);
        // Colocamos un símbolo personalizado(opcional)
        contrasenia.setEchoChar('-');
        // Le asignamos un texto emergente cuando nos posamos encima del objeto
        contrasenia.setToolTipText("Ingrese Contraseña");
        return contrasenia;
    }

    public static void main(String[] args) {
        new Password();
    }

}

Como nota, también se puede agregar a un JOptionPane, elementos como paneles, labels, entre otros, acá les dejo un ejemplo para un JOptionPane tipo password.

// Objeto que hará que aparezcan los puntitos en la contraseña en vez de
// los caracteres ingresados
JPasswordField pwd = new JPasswordField();


// Primero null, luego pwd que es nuestro objeto jpassfield acá
// puedes colocar paneles, label entre otros objetos, nombre del
// titulo de la ventana, tipo de botones, sin icono

JOptionPane.showConfirmDialog(null, pwd, "Enter Password",JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

Documentación: http://docs.oracle.com/javase/8/docs/api/javax/swing/JPasswordField.html

Conclusiones

No mostrar información sensible es un método para salvaguardar a los usuarios que utilicen la aplicación.

Tampoco es bueno exagerar y colocar todo con este tipo de elemento.

9 comentarios :

  1. Amigo no entiendo bien esto y lo necesito urgente para un proyecto. yo solo necesito q me lea la contraseña y salga con asteriscos, sin usuario ni nada de eso. me podrias dar el codigo solo para la contraseña? y me dices q es lo q tengo que crear en metodo y que es lo que va en el main? mira mi proyecto empieza asi:

    do{

    clave=Integer.parseInt(JOptionPane.showInputDialog("Ingrese la contraseña del programa"));

    if(clave!=333){
    errores=errores+1;
    JOptionPane.showMessageDialog(null, "Contraseña invalida", "Mensaje", JOptionPane.ERROR_MESSAGE, null);

    }
    if(errores==3){
    JOptionPane.showMessageDialog(null, "Cantidad maxima de intentos, Intente mas tarde");
    System.exit(0);
    }


    }while(clave!=333);


    if(clave==333){

    JOptionPane.showMessageDialog(null, "Bienvenido!)
    }

    ResponderEliminar
    Respuestas
    1. /* Contador de Errores */
      int errores = 0;
      /* Variable que guardará el valor de la clave ingresada */
      int clave = 0;
      /*
      * Objeto que hará que aparescan los puntitos en la contraseña en vez de
      * los caracteres ingresados
      */
      JPasswordField pwd = new JPasswordField();

      do {

      /*
      * Primero null, luego pwd que es nuestro objeto jpassfield acá
      * puedes colocar paneles, label entre otros objetos, nombre del
      * titulo de la ventana, tipo de botones, sin icono
      */
      JOptionPane.showConfirmDialog(null, pwd, "Enter Password",
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

      /*
      * Se obtiene el valor del objeto jpassfield y se compara con tu
      * contraseña
      */
      if (!pwd.getText().equals("333")) {
      errores = errores + 1;
      JOptionPane.showMessageDialog(null, "Contraseña invalida",
      "Mensaje", JOptionPane.ERROR_MESSAGE, null);
      /*se limpia el campo donde se escribe*/
      pwd.setText("");
      }
      if (errores == 3) {
      JOptionPane.showMessageDialog(null,
      "Cantidad maxima de intentos, Intente mas tarde");
      System.exit(0);
      }

      } while (!pwd.getText().equals("333"));

      /*Si sale del do-while es porque es igual a 333 por tanto no ocupa un if
      * de validación*/
      JOptionPane.showMessageDialog(null, "Bienvenido!");

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  2. Amigo muchas gracias! me sirvió de maravilla. me podes dar tu facebook, skype o donde te conectes? sos el unico que sabe explicar bien las cosas, en ninguna pagina entiendo nada

    ResponderEliminar
    Respuestas
    1. Se te agradecen esas palabras :D eso lo motiva a uno, y ya entendiste para que servía lo del if?? como borraste la pregunta, y que tal si tu me pasas tu facebook o skype y yo te agrego vale?

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Hola, porfa necesito ayuda. Estoy haciendo un programa que es un juego, pero necesito que un player ingrese un numero y este no se vea. como lo puedo hacer? a la vez este numero lo tengo que ocupar despues. Ayuda porfa

    ResponderEliminar
    Respuestas
    1. Que no sea vea el numero como tal, osea, que yo aprete por ejemplo el numero uno y que no me cuenta si en verdad lo escribí o no?

      Eliminar