Oi pessoal,
Estava escrevendo uns programas aqui em casa quando lembrei de um recurso que sempre uso em meus programas: uma caixa de texto númérica. Onde o usuário apenas consegue digitar números e evitando assim tratamentos desnecessários. Pensei, então, em como fazê-lo em java, pois é possível fazer en Delphi/Vb criando um evento genérico que impede que caracteres fora so set [‘0’…‘9’,’,’] não sejam sequer mostrados. Descobri que em java eu, na verdade, deveria fazer uma classe que implementa KeyListener e passar para o JTextField (bem mais elegante). Implementei esta classe e fiquei com algumas dúvidas:
- Já existe esta implementação ou uma propriedade do JTextField para isso?
- O teste é feito com o código abaixo:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextField;
public class KeyAdapterNumeric implements KeyListener {
JTextField txt = null;
boolean isFloat = false;
public KeyAdapterNumeric(JTextField jTextField, boolean canBeFloat) {
super();
txt = jTextField;
isFloat = canBeFloat;
}
public void keyTyped(java.awt.event.KeyEvent evt) {
String tmp = txt.getText();
String newText = tmp + evt.getKeyChar();
System.out.println(newText); // só para debug
try {
if (isFloat) {
float f = Float.parseFloat(newText);
} else {
int i = Integer.parseInt(newText);
}
} catch (Exception e) {
evt.setKeyChar(KeyEvent.CHAR_UNDEFINED);
txt.setText(tmp); // devolve o antigo e ignora o novo
}
}
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
quando verifico se o texto é um float válido tenho que usar o float com . (ponto) e não , (vírgula). Como resolver isto?
- O Contructor recebe um objeto JTextField. Tentei passar JTextComponent para servir para outros TextFields (assim funciona só para JTextField) mas não consegui usar e me danei todo tentando fazer um casting válido (tipo getClass) mas nada funcionou. Qual superclasse eu devo passar como parâmetro?
Se alguém puder responder eu agradeço… 
