restrigir JtextField para solo numeros

locojava2005
19 de Abril del 2009
quiero saber como hagó pa que un JTexfield solo me RECIBA numeros, osea cuando oprima una letra u otro caracter no se pinte..... he leido acerca de una clase que se llama JTextFormated... o algo ai creo que es para dar formato(mascara) a los JTextFields........ yo uso el netBeans4.0...

ironFinger
19 de Abril del 2009
Para que sólo permita escribir números en el jTextField:

jTextField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!((Character.isDigit(c) ||
(c == KeyEvent.VK_BACK_SPACE) ||
(c == KeyEvent.VK_DELETE)))){
getToolkit().beep();
e.consume();
}
}
});

Para que sólo permita escribir n caracteres en el jTextField (la n que pasamos como segundo parametro a limitador de caracteres es el número limite deseado):

jTextField4.setDocument(new LimitadorCaracteres(jTextField, n));

En donde la clase Limitador de caracteres es:

public class LimitadorCaracteres extends PlainDocument {

/**
* El editor del que estamos limitando caracteres.
*/
private JTextField editor;

/**
* Número máximo de caracteres que deseamos en el editor.
*/
private int numeroMaximoCaracteres;
/**
* Crea una instancia de LimitadorCaracteres.
*
* @param editor Editor en el que se quieren limitar los caracteres.
* @param numeroMaximoCaracteres Número máximo de caracteres que queremos
* en el editor.
*/
public LimitadorCaracteres(JTextField editor, int numeroMaximoCaracteres)
{
this.editor=editor;
this.numeroMaximoCaracteres=numeroMaximoCaracteres;
}

/**
* Método al que llama el editor cada vez que se intenta insertar caracteres.
* El método comprueba que no se sobrepasa el límite. Si es así, llama al
* método de la clase padre para que se inserten los caracteres. Si se
* sobrepasa el límite, retorna sin hacer nada.
*/
public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException
{
if ((editor.getText().length()+arg1.length())>this.numeroMaximoCaracteres){
// editor.setFocusable(false);// pasa al siguiente text field
return ;
}
super.insertString(arg0, arg1, arg2);
}



}

chuidiang
19 de Abril del 2009
Hola:

Tienes muchas posibilidades:

La más sencilla es usar un JFormattedTextField al que pases un MaskFormatter en el constructor que sólo admita números. Te lo pongo un poco de memoria, pero puede ser algo como esto

MaskFormatter mascara = new MaskFormatter("0123456789"); // Debes añadir ademas los signos de puntuacion y signos si quieres.
JFormatedTextField editor = new JFormattedTextField(mascara);

En http://chuidiang.blogspot.com/2005/04/validar-entradas-en-un-jtextfield.html tienes una lista con otras posibilidades y un link a un sitio donde lo explican con más detalle.

Se bueno.