JTextfield que aceita apenas números

É importante fazer com que a validação de dados digitado pelo usuário seja feita já no componente gráfico de forma a evitar dados inconsistente e falhas no sistema. Java dispões de diversos recursos para  isso, segue abaixo uma das formas de permitir que um componente texto (um JTextField no nosso caso) aceite apenas a entrada de números inteiros.


Classe OnlyNumberField.java


import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
* Restringe a digitação de apenas numeros em um componentes de texto como o JTextField
* Uso: setDocument(new OnlyNumberField());
* @author Eduardo Costa - www.dimensaotech.com
*
*/
public class OnlyNumberField extends PlainDocument
{

private int maxlength;

public OnlyNumberField(){}

public OnlyNumberField(int maxlength)
{
super();
this.maxlength = maxlength;
}

public void insertString(int offs, String str, AttributeSet a)
{
try
{
Integer.parseInt(str);
} catch (NumberFormatException ex)
{
str = "";
}
try
{
boolean fixedLengh = (!((getLength() + str.length()) > maxlength));
if (maxlength == 0 || fixedLengh)
super.insertString(offs, str, a);
} catch (BadLocationException e)
{
e.printStackTrace();
}
}

}

Classe TesteOnlyNumberField .java


import javax.swing.JFrame;
import javax.swing.JTextField;

public class TesteOnlyNumberField {

public static void main(String args[])
{
JTextField campoTexto = new JTextField();
campoTexto.setDocument(new OnlyNumberField());
JFrame f = new JFrame("Apenas Números");
f.getContentPane().add(campoTexto);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300,100);
f.setVisible(true);

}
}

Últimos 5 artigos de Eduardo Costa

Seja Social, Compartilhe!

Sobre Eduardo Costa

De Campinas-SP, bacharel em Sistema de Informação pela Anhanguera Educacional e pós graduado no curso de MBA em Gestão de Projetos e Metodologia do Ensino Superior. Atualmente trabalha como arquiteto e desenvolvedor Java em empresa de desenvolvimento de software de suporte a tomada de decisão, além de ministrar aulas de Orientação a Objeto, Linguagem Java e XML. Já atuou como líder técnico, coordenador de produto e analista de negócios.