2012-03-29 99 views
6

Cómo ocultar los caracteres usando showInputDialog del panel JOption. Por ejemplo: JOptionPane.showInputDialog ("Introduzca su nombre:").Ocultar datos usando JOptionPane

Quiero ocultar caracteres cuando el usuario está dando su nombre. Estaba en el medio de la aplicación. Si puedo ocultar esos personajes, mi trabajo se hace. No quiero usar JPasswordField ya que requiere un formulario para mantener esa etiqueta (JPasswordField).

+0

De modo que cuando el usuario escribe los caracteres no aparecen en el campo de texto? Simplemente permanece en blanco? – Adam

+0

Solo tenga cuidado de no confundir a sus usuarios. Si comienza a escribir, los usuarios esperan algún tipo de comentario. Tener una caja que no muestra ningún comentario puede ser confuso. – BlueFish

Respuesta

3
public static String getName() { 
    JPasswordField jpf = new JPasswordField(24); 
    JLabel jl = new JLabel("Enter Your Name: "); 
    Box box = Box.createHorizontalBox(); 
    box.add(jl); 
    box.add(jpf); 
    int x = JOptionPane.showConfirmDialog(null, box, "Name Entry", JOptionPane.OK_CANCEL_OPTION); 

    if (x == JOptionPane.OK_OPTION) { 
     return jpf.getText(); 
    } 
    return null; 
    } 
+0

: ¿Podría decirme más sobre Box ... – user10101

+0

Lea http://docs.oracle.com/javase/6/docs/api/javax/swing/Box.html –

1

Puede usar un JPasswordField, que reemplaza los caracteres por '*' de forma predeterminada.

Es posible que desee leer esto:

Why does JPasswordField.getPassword() create a String with the password in it?

Y si usted está buscando una alternativa a JPasswordField, es posible que desee leer esto:

Is there an alternative to JPasswordField?

+0

Si uso JPasswordField, me hace crear crear un formulario. No quiero hacer eso, ¿hay alguna manera de usar el panel de JOPtion? – user10101

+0

@ user10101 'JOptionPane' puede mostrar' Component's, por lo que no necesita crear 'JFrame' o' JDialog' (supongo que eso es lo que quiere decir con "form") para usar un campo de contraseña. – lhballoti

+0

exactamente, JOptionPane puede mostrar Componente, pero ¿cómo oculto los datos que está ingresando en el panel JOption ??? – user10101

1

Aquí hay una solución que usa JOptionPane para mostrar un JPasswordField que imprime espacios en blanco como el usuario tipos.

Realmente todo lo que desea colocar en su código es el método showPasswordPrompt(), pero el código incluye un método main() que le permite probar fácilmente cómo se ve el diálogo.

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

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPasswordField; 

public class JOptionPaneTest 
{ 
    public static String showPasswordPrompt(Component parent, String title) 
    { 
     // create a new JPasswordField 
     JPasswordField passwordField = new JPasswordField(); 
     // display nothing as the user types 
     passwordField.setEchoChar(' '); 
     // set the width of the field to allow space for 20 characters 
     passwordField.setColumns(20); 

     int returnVal = JOptionPane.showConfirmDialog(parent, passwordField, title, JOptionPane.OK_CANCEL_OPTION); 

     if (returnVal == JOptionPane.OK_OPTION) 
     { 
      // there's a reason getPassword() returns a char[], but we ignore this for now... 
      // see: http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords 
      return new String(passwordField.getPassword()); 
     } 
     else 
     { 
      return null; 
     } 
    } 

    public static void main(String[] args) 
    { 
     final JFrame frame = new JFrame(); 
     final JButton button = new JButton("Push Me For Dialog Box"); 

     button.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       String password = showPasswordPrompt(frame, "Enter Password:"); 

       button.setText(password); 
      } 
     }); 

     frame.add(button); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 
} 
Cuestiones relacionadas