Ajuda com o JTextField

Pessoal preciso de um help aqui básico!! Vejam esse método:

[code]public void validaTexto() {
String txt1 = txtData.getText(), txt2 = txtNum.getText();

if (txt2.length() > 3) {
	JOptionPane.showMessageDialog(this, "O campo do número sorteado só pode ter 4 caracteres!!!\nEx.: 9999","Atenção...",JOptionPane.ERROR_MESSAGE);
	return;
}

if (txt1.length() > 10) {
	JOptionPane.showMessageDialog(this, "O campo da data deve conter o formato de dd/mm/aaaa","Atenção...",JOptionPane.ERROR_MESSAGE);
	return;
}

}[/code]

Bom, funciona perfeitamente no event KeyPressed, mas ele permite o caracter sair no Jtexfield, por exemplo, quando deu o limite e aparece a mensagem, o caracter que o usuario digitar, vai sair no jtext, a mensagem só esta servindo de alerta porque mesmo assim ele nào barra de ser digitado!!! Lembro no Delphi que quando eu queria impedir de digitar, era algo assim, KeyCode = 0, era algo assim, dae eu fazia a validação e se retornasse erro, o keycode seria 0, ou nulo!!! No Java como eu faria isso?! Tem como usar o KeyEvent.VK_null por exemplo?!?! Ou tem alguem método pra validar o tamanho de caracteres no JTextField?!

Obrigado

Fala Pilantra!!!

Olha… o objeto JTextField possui um método que permite dizer se ele deve ou não ser editável…

JTextField meuCampo = new JTextField();

meuCampo.setAccessible(false);

Abraços!!

Mas tipow, se for que eu to pensando, eu poderia usar esse método se retornasse maior de 3 caractéres é isso?! Dae o text fica não acessivel

Essa é uma idéia… se bem que deve haver um jeito melhor. Swing não é minha especialidade. =(

Mas cara, não deu certo, e olhei no Java Api e não existe esse método pro JTextField!!!

Veja:

bash-3.00$ javac BichoCadastro.java BichoCadastro.java:305: cannot find symbol symbol : method setAccessible(boolean) location: class javax.swing.JTextField txtNum.setAccessible(false); ^ BichoCadastro.java:310: cannot find symbol symbol : method setAccessible(boolean) location: class javax.swing.JTextField txtData.setAccessible(false); ^ 2 errors

O método correto é:

txtNum.setEnabled(false);

Dê uma olhada no Java Api nas classes javax.swing.text.MaskFormatter e javax.swing.JFormattedTextField. Veja o exemplo abaixo:

MaskFormatter formato = new MaskFormatter("####");
JFormattedTextField tf = new JFormattedTextField(formato);
tf.setColumns(4);

Passei como parâmetro para o MaskFormatter 4 # (sustenidos), vc não conseguirá digitar no TextField mais do que 4 digitos.

Acho que o que vc quer é isso.

Boa sorte!

[quote=“ayronmax”]Dê uma olhada no Java Api nas classes javax.swing.text.MaskFormatter e javax.swing.JFormattedTextField. Veja o exemplo abaixo:

MaskFormatter formato = new MaskFormatter("####");
JFormattedTextField tf = new JFormattedTextField(formato);
tf.setColumns(4);

Passei como parâmetro para o MaskFormatter 4 # (sustenidos), vc não conseguirá digitar no TextField mais do que 4 digitos.

Acho que o que vc quer é isso.

Boa sorte![/quote]

Ow cara, boa ideia ein!! valeu!!! vou fazer aki!!!

Obrigado

Po legal, funciono perfeitamente, inclusive vou adotar esse TextField pra usar diariamente :lol:

Só tem um problema, eu deixei o botão Inserir, em modo Default, o usuário precisa dar dois enters pra acionar o botão!!! Por que será!?

Cara, eu não sei, mas vou dar uma olhada e se eu descobrir eu te digo.