[RESOLVIDO] Não executar focuslost de jtextfield quando clicar em um botão

3 respostas
filiperangel

Galera, como faço pra não executar o evento focuslost de um jtextfield quando eu clicar em um botão de fechar a janela.

Seguinte, tenho minha tela que o cara digita o código quando ele sair do campo eu faço uma verificação pra ver se o código existe, caso não exista eu exibo um joptionpane, até aí blz. O problema é que eu tenho um botão na janela utilizado pra dar um dispose nela, então quando clico nele o evento focuslost do jtexfield é executado, exibindo assim o Joptionpane novamente.

Tentei fazer uma verificação de qual objeto estava chamando o focuslost, mais já percebi que isso ta errado. Mas segue o meu código.

private void PerderFoco(java.awt.event.FocusEvent evt) {
    if (evt.getComponent() instanceof JTextField) 
    {
        try 
        {

            ServicoBDAO servico = new ServicoBDAO();
            JTextField tf = (JTextField) evt.getComponent();
            String zeros = "0000" + tf.getText().trim();
            tf.setText(zeros.substring(zeros.length() - 4));
            int codformatado = Integer.parseInt(tf.getText().trim());
            ResultSet rs = servico.selectCategoria(Integer.toString(codformatado), "1");
            if ((rs.next() == false) || (rs == null)) 
            {
                tf.setEnabled(true);
                rs.close();
                JOptionPane.showMessageDialog(null,"Código não Cadastrado","Atenção",JOptionPane.INFORMATION_MESSAGE);
            }
            else
            {
                jTextFieldNome.setText(rs.getString(2));
            }
        }
        catch (SQLException ex) 
        {
            Logger.getLogger(ValidarCodigoCategoria.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Obrigado galera…

3 Respostas

Zeed01

Boa tarde colegas !

Acho que você pode usar o evt.getOppositeComponent(), testei o código abaixo e parece que funciona.
Só tem que setar o actionCommand do botão Sair para “Sair”.

private void txtEnderecoCondominioFocusLost(java.awt.event.FocusEvent evt) {                                                
// TODO adicione seu código de manipulação aqui:
        if (evt.getOppositeComponent() instanceof JButton){
            JButton ss = (JButton) evt.getOppositeComponent();
            if (ss.getActionCommand().equals("Sair"))
                return;
        }
        JOptionPane.showMessageDialog(null, "2 " + evt.getOppositeComponent().getName());
    }

[]s

filiperangel

Zeed01, não me leve a mal cara, mais eu te amo.
Consegui resolver meu problema com sua dica, segue parte do meu código.

if (evt.getOppositeComponent() instanceof JButton)
    {
        return;
    }
    else
    {
        try 
        {

            ServicoBDAO servico = new ServicoBDAO();
            JTextField tf = (JTextField) evt.getComponent();
.
.
.
JOptionPane.showMessageDialog(null,"Código não Cadastrado","Atenção",JOptionPane.INFORMATION_MESSAGE);
.
.
.

Agradeço a todos e até a próxima…

leandrovrb

Realmente deu certo aqui com minha aplicação tambem!
Tanto nos JButton qto em sair da janela agora nao exibem a mensagem do focuslost.
Abaixo como ficou meu codigo:

private void tfCnpjCpfFocusLost(java.awt.event.FocusEvent evt) {
        if (evt.getOppositeComponent() instanceof JButton)
            return;
        else{

                ValidaCnpj cnpj = new ValidaCnpj();
                boolean validado=cnpj.validaCnpj(tfCnpjCpf.getText());
                if ((validado)||(validacaoCPF(tfCnpjCpf.getText())==true))
                { }
                else JOptionPane.showMessageDialog(null, "Cnpj ou CPF Invalido - Informe Corretamente o CPF ou CNP ou  Deixe Vazio");
            }
    }
Criado 1 de outubro de 2007
Ultima resposta 8 de ago. de 2011
Respostas 3
Participantes 3