Quiero hacer el campo de texto solo acepte numérico y la tecla de retroceso botón del usuario.

He añadido la función que uso para comprobar el código clave del usuario, pero no sé cómo detener la pulsación de la tecla caso, si el código de la tecla no es numérico.

¿Qué código tengo que añadir en la función de evitar que el evento??

 private void jTextField2KeyPressed(java.awt.event.KeyEvent evt)   
 {                                       

   if(!((evt.getKeyCode()==8) || (evt.getKeyCode()>48 && evt.getKeyCode()<57)))
   {
      //how to stop the key pressed event
   }
 }
  • trato de evt.consumen(); y de retorno; para detener el evento, pero no funciona
  • Mi sincera primera reacción: ¿por qué nadie parece recordar que un gran invento? LOS MOTORES DE BÚSQUEDA! Google tendría usted la solución adecuada, sin duda…
InformationsquelleAutor e-qi | 2011-11-29

6 Comentarios

  1. 4

    Intentar reemplazar keyTyped:

    @Override
    public void keyTyped(KeyEvent evt) {
        if (!Character.isDigit(evt.getKeyChar()) && !(evt.getKeyCode() == KeyEvent.VK_BACK_SPACE)) {
            evt.consume();
        }
    }

    Actualización:

    En caso de que desee pegar a no trabajar y hacer cumplir la entrada para ser escrito, puede utilizar el siguiente.

    @Override
    public void keyPressed(KeyEvent evt) {
        if(evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_V) {
            evt.consume();
        }
    }
    • -1, no uso KeyEvents. Esto no funcionará si el texto se pega en el campo de texto.
    • Gracias por el aviso.
  2. 2

    conjunto de la DocumentFilter de la PlainDocument del campo de texto.

    Ejemplo:

        PlainDocument document = new PlainDocument();
        document.setDocumentFilter(new DocumentFilter() {
    
            @Override
            public void insertString(FilterBypass fb, int offset, String text, AttributeSet attrs) throws BadLocationException {
                fb.insertString(offset, filter(text), attrs);
            }
    
            @Override
            public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
                fb.replace(offset, length, filter(text), attrs);
            }
    
            private String filter(String text) {
                StringBuilder builder = new StringBuilder(text);
                for (int i = 0; i < builder.length();) {
                    if (Character.isDigit(builder.charAt(i))) {
                        i += 1;
                    } else {
                        builder.deleteCharAt(i);
                    }
                }
                return builder.toString();
            }
        });
    
        JTextField field = new JTextField(document, null, 0);
    • +1, texto con formato de campo es probablemente más sencillo en este caso, pero siempre es bueno saber sobre un DocumentFilter.
  3. 0

    Me permito sugerir que usted vea si usted puede consumir keyPressed,KeyReleased, y KeyTyped eventos y ver si impiden la clave de llegar a su programa.

    Su programa, es probable que sólo mirando hacia fuera para 1 tipo de evento clave, pero tienes que averiguar cuál es y consumir dichos eventos.

  4. 0

    Usted podría intentar esto:

        private void txtDisplayKeyTyped(java.awt.event.KeyEvent evt) {                                          
    
    
        boolean valid = false; //some condition here
        if(!valid) evt.consume();
    }
  5. -2

    Ver Limitar el campo de texto de entrada para el valor numérico – creo que es exactamente lo que usted está buscando.

    Creo que la razón por la que su código no funciona es porque el si la afirmación es incorrecta y no es en realidad la captura no códigos numéricos. Aunque, no estoy seguro porque no he visto ni probado el código mí mismo, así que usted podría hacer algo de depuración si realmente quería, pero para ser honesto, las soluciones publicado aquí será más simple.

    • -1, que es muy antiguo código y que fue escrito para AWT no se moverá. Swing tiene un mejor soporte para este (ver otras respuestas en esta publicación). Ese código no trabajo para el pegado de texto.

Dejar respuesta

Please enter your comment!
Please enter your name here