JTextField

Necesitado
14 de Noviembre del 2003
Hola,

Puedo tener un JTextField que solo me permita meter números. Por ejemplo, si tengo un campo edad, que si yo le meto: vcfsf, me de error, no tener que comprobar luego si lo que se ha metido es un numero o no.

Gracias por ayudarme.

profesorchiflado
14 de Noviembre del 2003
Utiliza KeyListener y comprueba que el carácter metido es válido en el rango qeu te interese.
Saludos.

Necesitado
14 de Noviembre del 2003
En primer lugar, gracias por tu ayuda. Eso estaba haciendo ahora, pero tengo un problema, con qué evento?

KeyTyped, KeyReleased, KeyPressed?

Y si quiero coger un número negativo? Tal y como lo estoy haciendo, en cuanto meto el - me dice que meta un número...

Gracias otra vez.

heihachi
14 de Noviembre del 2003
O prueba esto:

tField.setDocument(new javax.swing.text.DefaultStyledDocument(){
public void insertString(int offs, String str, javax.swing.text.AttributeSet a)throws javax.swing.text.BadLocationException{
if (str==null) str="";
char[] cadena=str.toCharArray();
for (int i=0;i<cadena.length;i++){
if (!Character.Digit(cadena[i])){
java.awt.Toolkit.getDefaultToolkit().beep();
return;
}
}
super.insertString(offs, str, a);
}});

Como desaparecen los espacios al inicio de linea no se entenderá nada, pero bueno...

Saludos!

<B>?</B>

heihachi
14 de Noviembre del 2003
Es Character.isDigit(...)

Necesitado
14 de Noviembre del 2003
Siento ser pesadito, parece algo super simple, pero no me funciona.... lo que hago es lo siguiente:

private void valorKeyTyped(java.awt.event.KeyEvent evt) {
if(evt.getKeyChar()!='-'){
try{
Integer aux = new Integer(valor.getText());
int d = aux.intValue();
}
catch(Exception e){
JOptionPane.showMessageDialog(this, "El campo debe ser un número", "ERROR", JOptionPane.ERROR_MESSAGE);
evt.consume();
valor.setText("");
}
}
}

¿Qué es lo que hago mal? Porque si empiezo a teclear - no pasa nada pero si después meto el 7 me da el error porque supongo que me hacer la prueba solo con el -

gracias otra vez.

profesorchiflado
14 de Noviembre del 2003
Estas seguro de que ese es el codigo que estas ejecutando? Porque el if de comparación entre un int y un char no debe compilar.
Por otra parte desde qué metodo llamas al llamado por ti valorKeyTyped?
Saludos.

Necesitado
14 de Noviembre del 2003
Sí, pero es que no me devuelve un int.. estoy usando evt.getKeyChar... me devuelve un char.

Antonio
14 de Noviembre del 2003
Siempre puedes coger y ponerle un oyente al JTextField y una vez que tienes el oyente cada vez que cabie le coges el 1º caracter por la derecha y lo conviertes a ASCII (creo que hay una funcion que te lo hace) y si el valor que te da no está comprendido entre el 48 y el 57 (creo q son los valores númericos) te salga el mensaje de error o directamente te borre el caracter :)

espero que lo entiendas

Necesitado
14 de Noviembre del 2003
Gracias, voy a ver si me sale.

Saludos.

profesorchiflado
14 de Noviembre del 2003
El metodo que tienes que usar es keyTyped y lo unico que tienes que hacer es que si para el primer carácter es un '-' se lo dejas y para el resto de casos que te muestre el error.
Saludos.