2011-02-01 15 views
6

¿Cómo puedo desactivar la entrada de cualquier símbolo, excepto los dígitos a JTextField?Deshabilitar la entrada de algunos símbolos a JTextField

+0

posible duplicado de [Java JTextFields] (http://stackoverflow.com/questions/4442004/java-jtextfields) – jjnguy

+0

posible duplicado de [¿Hay alguna manera de aceptar sólo valores numéricos en un JTextField?] (http://stackoverflow.com/questions/1313390/is-there-any-way-to-accept-only-numeric-values-in-a-jtextfield) –

+0

Suena como si un JSpinner * pudiera * ser lo que el usuario de hecho necesita aquí. –

Respuesta

19

Opción 1) cambiar su JTextField con un JFormattedTextField, así:

try { 
    MaskFormatter mascara = new MaskFormatter("##.##"); 
    JFormattedTextField textField = new JFormattedTextField(mascara); 
    textField.setValue(new Float("12.34")); 
} catch (Exception e) { 
    ... 
} 

opción de entrada 2) del usuario de captura de teclado, así:

JTextField textField = new JTextField(10); 
textField.addKeyListener(new KeyAdapter() { 
    public void keyTyped(KeyEvent e) { 
     char c = e.getKeyChar(); 
     if (((c < '0') || (c > '9')) && (c != KeyEvent.VK_BACK_SPACE)) { 
     e.consume(); // ignore event 
     } 
    } 
}); 
2

How to Use Formatted Text Fields

amountField = new JFormattedTextField(NumberFormat.getIntegerInstance()); 

También puede crear su propio formato de personalizar.

0

Puede añadir una costumbre KeyListener que intercepta las pulsaciones de teclas y no propagar pulsaciones de teclas no válidas a la JTextField.

+0

cuando uso keylisteners, el símbolo aparecerá en el campo y luego se eliminará. Pero solo quiero que aparezca el símbolo si es un símbolo de dígito – maks

+0

Si su oyente consume el 'KeyEvent', entonces el campo nunca lo oirá. Veo que dacwe ha agregado solo un ejemplo. – Qwerky

2

Sólo consumen todos los caracteres que no está un dígito como este:

public static void main(String[] args) { 
    JFrame frame = new JFrame("Test"); 

    frame.add(new JTextField() {{ 
     addKeyListener(new KeyAdapter() { 
      public void keyTyped(KeyEvent e) { 
       if (!Character.isDigit(e.getKeyChar())) 
        e.consume(); 
      } 
     }); 
    }}); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 
+1

Eso no funcionará, por ejemplo, pegar. También depende de cómo el PL & F implemente el 'JTextField' - no funcionaría para un' JComboBox' (¡probablemente!). –

+0

Buen punto Tom. Lo mantendré aquí para referencia! – dacwe

2

Para un mejor usuario experiencia

Otros han mencionado el uso de JFormattedTextField o KeyListeners para evitar la entrada de datos no válidos, pero desde el punto de vista de la usabilidad Me resulta muy molesto empezar a escribir en un campo y no ocurre nada.

Para proporcionar una mejor experiencia de usuario, puede permitir que el usuario ingrese valores no numéricos en el campo, pero use un validador para proporcionar comentarios al usuario y deshabilite el botón de enviar.

0

Esto funcionó para mí. Echar un vistazo.

public void keyTyped(KeyEvent e) 
{ 

    char c = e.getKeyChar(); 

    if (!((c >= '0') && (c <= '9') ||  
    (c == KeyEvent.VK_BACK_SPACE) || 
    (c == KeyEvent.VK_DELETE))) { 

     getToolkit().beep(); 

     e.consume(); 

    } 

} 
Cuestiones relacionadas