Loop ao tentar impedir um JTextField de ficar em branco!

6 respostas
MarcioProgramador

Estou criando um programa para cadastrar pessoas em eventos no lugar onde eu trabalho! Estou desenvolvendo uma classe que vai conter uns codigos que posso querer reaproveitar posteriormente. Estou escrevendo um codigo para impedir que um campo que foi declarado como not null no banco seja deixado em branco na interface. Estou usando este código… porém esta dando loop… alguem pode me ajudar a entender pq? eu nao gostaria q o texfield ficasse em brancoo… a seguir o codigo.:

public void verificarCampoVazio(JTextField txtVerificar)
    {
       
        if(txtVerificar.getText().isEmpty())
        {
            JOptionPane.showMessageDialog(null,"Campo "+txtVerificar.getName()+" não pode ficar vazio!","Atenção!",JOptionPane.INFORMATION_MESSAGE);
            txtVerificar.requestFocus();
        }

esse metodo eu chamei dentro do evento focusLost… onde estou fazendo errado??? obrigadoo!!!

6 Respostas

mauqz

Cara, não consigo te afirmar com toda certeza a fonte do erro, pois estou sem java aqui pra testar :frowning:
Mas sugiro que tu valide esse tipo de coisa no momento em que for salvar, informando ao usuário todos os campos que ele deixou de preencher.(Já pensou ele ter q fechar cerca de 30 pop-ups em um cadastro maior?)

manolimars

e aí blz, teria como colocar a parte do código que chama este método?

[]'s

MarcioProgramador

Eu estou colocando o código dentro de um evento focusLost como eu disse anteriormente vou colocar o código completo!

public void verificarCampoVazio(JTextField txtVerificar)   
    {   
         
        if(txtVerificar.getText().isEmpty())   
        {   
            JOptionPane.showMessageDialog(null,"Campo "+txtVerificar.getName()+" não pode ficar vazio!","Atenção!",JOptionPane.INFORMATION_MESSAGE);   
            txtVerificar.requestFocus();   
        }

ai eu coloco ele dentro do frame, através desse código :

private void txtParticipanteFocusLost(java.awt.event.FocusEvent evt)
{
  new Metodo().verificarCampoVazio(txtParticipante);
}

Na verdade eu não gostaria que ele exibisse só no final os campos não preenchidos! Acho que seria mais interessante informar logo ao usuário que ele deixou um campo vazio, já que o cadastro não é tão grande assim! Valeu!

MarcioProgramador

Alguma sugestão???

E
public void verificarCampoVazio(JTextField txtVerificar)  
     {  
          
         if(txtVerificar.getText().isEmpty())  
         {  
             JOptionPane.showMessageDialog(null,"Campo "+txtVerificar.getName()+" não pode ficar vazio!","Atenção!",JOptionPane.INFORMATION_MESSAGE);  
             txtVerificar.requestFocus();  
         }

Amigo, se você puser esse código no focusLost, você vai ter problemas, porque após mostrar o JOptionPane, e você invocar requestFocus, você vai acabar invocando o evento focusLost. Por isso, vai ficar em loop mesmo.

Você pode fazer o seguinte:

Você pode pegar a borda de todos os JTextFields que estão incorretos, mudar a cor dessa borda ( e talvez o fundo ) para vermelho, e mostrar um JOptionPane no final de tudo, quando for salvar. Quando o usuário preencher direitinho, volte a cor da borda (e do fundo) para a cor normal.

MarcioProgramador

Olá a todos novamente.... não consegui parar o loop... mas ao invés disso mudei a programação do metodo pra percorrer todo o frame em busca de um textfield em branco. Caso encontre, ele pinta o txtfield de vermelho caso nao ele fica branco! abaixo o código :

public void varrerComponentesEmBuscaDeCampoEmBranco(JFrame frame) {
        Object object[] = frame.getContentPane().getComponents();

        for (int i = 0; i < object.length; i++) {
            JTextField[] field = new JTextField[object.length];
            if (object[i] instanceof JTextField) {
                field[i] = (JTextField) object[i];
            }
            if (object[i] instanceof JTextField) {
                field[i] = (JTextField) object[i];
                if (field[i].getText().isEmpty()) {
                   field[i].setBackground(Color.red);
                } else {
                    field[i].setBackground(Color.white);
                    
                }
            }
            
        }
        
    }

Seguindo a sugestão do entanglement... acho q ficou ate mais interessante mesmo... mas ainda continuo com a dúvida do loop :?

Criado 24 de novembro de 2009
Ultima resposta 25 de nov. de 2009
Respostas 6
Participantes 4