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!!!
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);
}
}
}
é 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
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.
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.
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.