Olá pessoal! :thumbup:
Estou tentando verificar se o usuário digita texto no campo de texto, pois ele só deve colocar números. Então tentei isso:
package testes;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class EventoUpdate extends JFrame
{
public JTextField tfCampo;
public static void main(String[] args)
{
EventoUpdate eu = new EventoUpdate();
eu.setVisible(true);
}
public EventoUpdate()
{
setLayout(null);
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Evento Uptade");
setLocationRelativeTo(null);
setResizable(false);
//****
tfCampo = new JTextField();
tfCampo.setBounds(100,120,100,25);
getContentPane().add(tfCampo);
tfCampo.addCaretListener(new javax.swing.event.CaretListener() {
public void caretUpdate(javax.swing.event.CaretEvent e) {
{
if (tfCampo.getText().length()>0)
{
String idade = "";
int tamanhoIdade=0;
try
{
Integer.parseInt(tfCampo.getText());
}
catch(Exception ex)
{
tamanhoIdade = tfCampo.getText().length();
idade = tfCampo.getText();
tfCampo.setText("");
}
}
}
}
});
}
}
Esse é um exemplo do que tento fazer. É só copiar e rodar, dão uma olhada no erro que dá, isso era para funcionar.
Toda vez que o usuário digita um carácter ele verifica se é uma letra e se for ele remove a última digitada.
Você não pode chamar o método setText() dentro do evento CaretListener, pois isso causaria outro evento CaretListener.
Neste caso acho que você deveria usar o evento keyReleased.
Dá uma olhada nas alterações que fiz no código:
package testes;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class EventoUpdate extends JFrame implements KeyListener {
public JTextField tfCampo;
public static void main(String[] args) {
EventoUpdate eu = new EventoUpdate();
eu.setVisible(true);
}
public EventoUpdate() {
setLayout(null);
setSize(300, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Evento Uptade");
setLocationRelativeTo(null);
setResizable(false);
//****
tfCampo = new JTextField();
tfCampo.setBounds(100, 120, 100, 25);
getContentPane().add(tfCampo);
tfCampo.addKeyListener(this);
}
public void keyReleased(KeyEvent e) {
if (tfCampo.getText().length() > 0) {
String idade = "";
int tamanhoIdade = 0;
try {
Integer.parseInt(tfCampo.getText());
} catch (Exception ex) {
tamanhoIdade = tfCampo.getText().length();
idade = tfCampo.getText();
tfCampo.setText(tfCampo.getText().substring(0, tfCampo.getText().length()-1));
}
}
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
}
Uma sugestão para facilitar o seu trabalho e criar o mesmo “efeito” é utilizar um Document.
Dê uma olhada nesse artigo:
http://www.guj.com.br/java.artigo.29.1.guj
Meus cumprimentos !!
Só mais uma sugestão Ferreira. Caso vc tenha a necessidade de utilizar mais campos com a validação somente dígitos.
Nos aki criamos esta classe que herda de “jTextField” mas que não permite a entrada de dados que não sejam números.
Você pode usa-lá no lugar do JText…
Bom então segue aí …
[code]
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
}[/code]
Gostei da sua idéia aguiaMem,importei a classe NumberField, troquei os meus JTextField por NumberField, rodo e não dá erro mas também não mudou nada.