JTextField que permita apenas números e virgula

Gostaria de fazer com que um JTextField aceite apenas numeros e virgula, alguem sabe como fazer isso.
Ja usei alguns metodos da classe KeyEvent como
e.setKeyCode( KeyEvent .VK_SPACE ), ele muda o keyCode mas escreve o caractere que foi digitado no JTextField.
Entenderam.

Você pode tambem subescrever, um metodo da classe ‘PlainDocument’ e criticar a digitação . segue um exemplo

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

public class jTextOnlyNumber extends JFrame{

JTextField txtJT;

public jTextOnlyNumber(){
setTitle(“TextField somente numeros”);

Container contentPane = getContentPane();
contentPane.setLayout(null);


txtJT = new JTextField();
txtJT.setDocument(new NumberDocument());

txtJT.setBounds(16, 24, 185, 25);

contentPane.add(txtJT);

setSize(250, 100);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });

}
public class NumberDocument extends PlainDocument{

public NumberDocument(){
	super();
	
}
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
	//permite apenas uma virgula
	if(str.equals(",")){
		if(txtJT.getText().indexOf(",")>-1)
			return;
		else	
			super.insertString(offset, str, attr);
			
			}
	if (str.codePointAt(0) < 48 || str.codePointAt(0) > 57)	return;
	super.insertString(offset, str, attr);
}

}

public static void main(String args[]){
jTextOnlyNumber jt = new jTextOnlyNumber();
}
}

da tambem para controlar o comprimento do string

Falou!?

Show essa maneira de validar os dados !!!
Valeu mesmo Elvis !!!
Abraços!!!
:smiley:

Para que quiser usar

package util;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class ValidadeCaracterUtil extends PlainDocument {
	
	private static final long serialVersionUID = 1L;
	private String invalidCharacters;
	
	public String getInvalidCharacters() {
		return invalidCharacters;
	}

	public void setInvalidCharacters(String invalidCharacters) {
		this.invalidCharacters = invalidCharacters;
	}

	public ValidadeCaracterUtil(String invalidCharacters){
		setInvalidCharacters(invalidCharacters);
	}


	public ValidadeCaracterUtil(){ 
		super(); 
	}
	
	public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException { 
		if(getInvalidCharacters().indexOf(str) >-1 ){ 
			return; 
		}else {
			super.insertString(offset, str, attr); 
		} 
	} 
}
1 curtida

é so usar mascara fera, que resolve teu problema ligerim, e você ainda escolhe a ordem, formato e onde os caractere poderão ou deverão aparecer vlw :wink:

Esse pessoal que não olha os tutorias antes de perguntar…
http://www.guj.com.br/java.tutorial.artigo.29.1.guj

Outra forma é usar um InputVerifier. Dá uma olhada no Javadoc dessa classe que ele explica como funciona.

1 curtida

PlainDocument e InputVerifier são as melhores soluções.Mas cada um tem suas limitações/problemas que devem ser observados(e contornados quando possível), como quando o usuário fizer um CopyNpaste. :wink:

para ViniGodoy

todo forum, se divide em 3 grupos, os que manjam muito, os que sabem algumas coisas, e os que não manjam muito!
o que me desagrada na verdade, é quando aparece uns caras nesse “meio”, querendo estar no nivel maior, mas não está, e ainda por cima, escolhe fazer escadinha em cima da maioria que precisa de ajuda, aparecendo no fim do filme sem acrescentar nada, e fazendo onda, mostrando, que além de não ser bom programador, tem problema de caráter!

Eu pedi ajuda uma vez só nesse forum, tive o azar de ser atendido por um camrada que tentou 3 vezes me resolver um pedaço de um códigozinho de iniciante em java, e na quarta que ele me procurou, teve a audácia de dizer “Eu não devia, mas vou te ajudar com esse trabalhinho de faculdade”.

O que me impressiona, é que esses caras, realmente acreditam que estão perto dos caras que manjam. isso que é o pior!! :!:

Oi markory.

Não entendi porque você resolveu descontar sua frustração em mim.
Eu sou autor de alguns posts realmente longos, explicando conceitos como esses aqui (existem muito mais exemplos):
http://www.guj.com.br/posts/list/51866.java#273052
http://www.guj.com.br/posts/list/55387.java#290673
http://www.guj.com.br/posts/list/55387.java#290673
http://www.guj.com.br/posts/list/74068.java#389435
http://www.guj.com.br/posts/list/104592.java#564414
http://www.guj.com.br/posts/list/57956.java#304723
http://www.guj.com.br/posts/list/52964.java#279083
http://www.guj.com.br/posts/list/52485.java#276120

Note que todos são voltados a iniciantes, vários deles eu mantenho uma longa discussão até que entendam o conceito corretamente. Também não lhe faltei com o respeito e, nem sequer lhe dirigi a palavra.

Por favor leia as regras do fórum:
http://www.guj.com.br/posts/list/39020.java

E tome atenção ao item:
“Você aceita não postar qualquer mensagem abusiva, obscena, invulgar, insultuosa, de ódio, ameaçadora, sexualmente tendenciosa ou qualquer outro material que possa violar qualquer lei em vigor.”

É uma boa prática consultar o material já disponível no fórum antes de postar uma dúvida, não é a toa que está pinado este tópico. Você pode encontrar a resposta de maneira mais imediata do que postando aqui e esperando horas ou dias por uma resposta. Além disso, você também poupa tempo de quem irá responder (novamente) a sua pergunta.

Se você está insatisfeito com a conduta de um usuário, por favor, entre educamente em contato com a moderação e relate o seu problema. Sair ofendendo pessoas que nada tem a ver com a sua rixa pessoal não é a melhor maneira de resolver sua questão.

MaskFormatter mask = new MaskFormatter();
mask.setValidCharacters("0123456789,"); // adicione os caracteres validos
JTextField field = new JFormattedTextField(mask);

Para entender mais consulte as classes MaskFormatter() e JFormattedTextField()

abraços.

1 curtida