Java - manejo del buffer para el teclado

 
Vista:

manejo del buffer para el teclado

Publicado por Webness (57 intervenciones) el 21/07/2005 19:04:01
hola, tengo un JTextField el cual estoy validando cada vez que presiono una letra, ejemplo quiero que ese JTextField solo reciba numeros, entonces cada vez que digite una tecla voy a varificar si es o no un numero, lo estoy haciendo en el metodo keyReleased(KeyEvent e), pero ahora kiero hacerlo en el metodo keyPressed(KeyEvent e), pero resulta que el valor contenido en el JTextField no toma la ultima tecla digitada si trabajo en el metodo keyPressed(KeyEvent e), este valor de JTextField se actualiza cuando suelto la tecla. Entonces necesito saber como borrar de memoria la ultima tecla Undida, para que nunca se muestre en el JTextField, porque como lo estoy haciendo en el metodo keyReleased(KeyEvent e), me la muestra y despues la borra, yo no kiero que se muestre... creo que se hace con algo del Buffer o que y como se hace ?

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:manejo del buffer para el teclado

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 22/07/2005 02:49:26
Hola, no se si lo que estes haciendo sea muy eficiente, pero te recomiendo q utilices este codigo que hace un tiempo lo implemente ...

import javax.swing.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class JTexto extends JTextField {

int cant,f=0,tipo;
int conComa=0;

public JTexto(int tip, int cols) {
super(cols);
cant = cols;
tipo = tip;
}

public JTexto(int cols) {
super(cols);
cant = cols;
tipo = 0;
}

protected Document createDefaultModel() {
return new validarDocument();
}

public class validarDocument extends PlainDocument {

public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {

if (str == null) return;

int j=0;

char[] caracter = str.toCharArray();
char[] retorno = new char[caracter.length];

//general
if(tipo==0)
for (int i = 0; i < retorno.length; i++) {
retorno[j++] = caracter[i];
}

//enteros
if(tipo==1)
for (int i = 0; i < retorno.length; i++) {
if (Character.isDigit(caracter[i]))
retorno[j++] = caracter[i];
}
//caracteres
if(tipo==2)
for (int i = 0; i < retorno.length; i++) {
if (Character.isLetter(caracter[i])||(caracter[i]==' ')||(caracter[i]=='-'))
retorno[j++] = caracter[i];
}
//fechas
if(tipo==3)
for (int i = 0; i < retorno.length; i++) {
if (Character.isDigit(caracter[i])||(caracter[i]=='_')||(caracter[i]=='/')||(caracter[i]=='-'))
retorno[j++] = caracter[i];
}
//numeros reales
if(tipo==4){
for (int i = 0; i < retorno.length; i++) {
if (Character.isDigit(caracter[i])){

retorno[j++] = caracter[i];

}
else if(caracter[i]=='.'){
if(conComa==0){
retorno[j++] = caracter[i];
conComa=1;
}
}
}
}

if(f==cant){
f = getValor().length();

}
if((f>=0) &&(f<cant))
super.insertString(offs, new String(retorno,0,j), a);

f = getValor().length();
}
}

public String getValor(){
return getText();
}

public void setText(String text){
super.setText(text);
}
}

Espero te sirva ... SALUDOS WVA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar