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
4 Comentários »
RSS feed para os comentários deste artigo.


Tu pode me dizer como vou usar a classe OnlyNumberField? Tipo, eu criei um JTextField em outra classe, como faço para que ele aceite só numeros? Como faço para ele mostrar uma janela na exception quando o usuário digitar um letra? Se poder responder o mais rápido possível seria muito bom mesmo cara.
Obrigado pelos espaço.
Responder
Eduardo Costa - Dimensão Tech Respondeu:
junho 13th, 2010 as 20:06:27
Para usar o OnlyNumberField em outro JTextField é só fazer:
seuTextField.setDocument(new OnlyNumberField());
Já quanto exibir uma mensagem para o usuário, não será necessário.. pois o JTextField não ira aceitar letras…
Responder
Rafael Respondeu:
novembro 28th, 2010 as 01:11:25
Ola Eduardo,
Seu codigo resolveu meu problema parcialmente.
Como faço para aceitar o caracter (.) tambem? Somente numeros e . ? Qual alteração deve ser feita?
Obrigado
Responder
Eduardo Costa - Dimensão Tech Respondeu:
novembro 28th, 2010 as 23:11:33
Pesquise por JFormattedField talvez ajude. []s