Dúvida sobre manipular o foco na saída do TextField

5 respostas
A

Tenho esse trecho de código onde preciso que a regra é, se eu digitar 3 ou menos
caracteres ele retorna para a TextField. Só que emito uma mensagem
para o usuário. O Problema:

A mensagem aparece mais que uma vez antes de voltar para a TextField, muito incomodo essa situação.
Detalhe, existe outra forma de controlar isso, diferente da que eu estou tentando?

tfNome.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { //adicionar sua verificação aqui if(tfNome.getText().length()< 4) JOptionPane.showMessageDialog(null, "Aceita acima de 2 caracteres"); tfNome.setText(""); tfNome.grabFocus(); } });

Agradeço a atenção dos colegas. :wink:

5 Respostas

HenriqueBR

Olá,

Aqui não apareceu não, somente uma vez a mensagem.

Você tem outro Listener nesse objeto tfNome ?

A

HenriqueBR:
Olá,

Aqui não apareceu não, somente uma vez a mensagem.

Você tem outro Listener nesse objeto tfNome ?

Sim tenho mais que um Listener. Mas valeu a ajuda, achei um jeito, inclusive que força o usuário a digitar o Nome que é necessário.

tfNome.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { //adicionar sua verificação aqui if(tfNome.getText().length()< 4 && tfNome.getText().length() != 0) JOptionPane.showMessageDialog(null, "Aceita acima de 3 caracteres"); tfNome.setText(""); tfNome.grabFocus(); } });

A

Armando Pereira:
HenriqueBR:
Olá,

Aqui não apareceu não, somente uma vez a mensagem.

Você tem outro Listener nesse objeto tfNome ?

Sim tenho mais que um Listener. Mas valeu a ajuda, achei um jeito, inclusive que força o usuário a digitar o Nome que é necessário.

tfNome.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { //adicionar sua verificação aqui if(tfNome.getText().length()< 4 && tfNome.getText().length() != 0) JOptionPane.showMessageDialog(null, "Aceita acima de 3 caracteres"); tfNome.setText(""); tfNome.grabFocus(); } });

Nossa, tô ficando xarope, não deu certo não…
Realmente o outro Listener atrapalha :?

A

Armando Pereira:
Armando Pereira:
HenriqueBR:
Olá,

Aqui não apareceu não, somente uma vez a mensagem.

Você tem outro Listener nesse objeto tfNome ?

Sim tenho mais que um Listener. Mas valeu a ajuda, achei um jeito, inclusive que força o usuário a digitar o Nome que é necessário.

tfNome.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { //adicionar sua verificação aqui if(tfNome.getText().length()< 4 && tfNome.getText().length() != 0) JOptionPane.showMessageDialog(null, "Aceita acima de 3 caracteres"); tfNome.setText(""); tfNome.grabFocus(); } });

Nossa, tô ficando xarope, não deu certo não…
Realmente o outro Listener atrapalha :?

Henrrique, tenho outros Listener, mas ainda não tenho para o mesmo objeto. Então, por que acontece essa repetição de mensagem?

ViniGodoy

Não use eventos para tratar isso. Prefira um InputVerifier:
http://docs.oracle.com/javase/7/docs/api/javax/swing/InputVerifier.html

class LengthVerifier extends InputVerifier {
         public boolean verify(JComponent input) {
             JTextField tf = (JTextField) input;
             return tf.getText().lenght() == 3;
         }
     }

Uso:

seuTextField.setInputVerifier(new LenghtVerifier());
Criado 15 de fevereiro de 2013
Ultima resposta 15 de fev. de 2013
Respostas 5
Participantes 3