FocusLost e ActionPerformed - Ordem de execução dos eventos

3 respostas
Suu

Pessoal bom dia,

Tenho uma aplicação que quando o usuário clica no botão uma ação para salvar os dados no banco é realizada, entretanto dependendo do campo que perder o foco(existem muitos campos na tela) essa ação pode ou não pode ser realizada e uma mensagem é exibida na tela.
Acontece que a ação de focusLost não é executada até o final para dai executar o evento de actionPerformed.
Abaixo coloquei um exemplo, onde eu preciso que o output seja :
Antes do JOptionPane
Após do JOptionPane
click botão

Entretanto atualmente o output fica:
Antes do JOptionPane
click botão
Após do JOptionPane

Obs: não dá pra tratar a JOptionPane no actionPerformed, esta já é uma aplicação "gigante" e teriamos que alterar muitas coisas para isto.

Alguém tem uma idéia de como consigo fazer com que o evento de focus lost seja executado até o final?

import javax.swing.JOptionPane;

public class Teste extends javax.swing.JFrame {

    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;

    public Teste() {

        jTextField1 = new javax.swing.JTextField("Retire o foco");
        jButton1 = new javax.swing.JButton("Clique");

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());

        jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {

            public void focusLost(java.awt.event.FocusEvent evt) {
                System.out.println("Antes do JOptionPane");
                JOptionPane.showMessageDialog(null, "teste");
                System.out.println("Após do JOptionPane");
            }
        });
        getContentPane().add(jTextField1);

        jButton1.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                System.out.println("click botão");
            }
        });
        getContentPane().add(jButton1);
        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Teste().setVisible(true);
            }
        });
    }
}

3 Respostas

guisantogui

tenho uma com foco que qdo eu clico em outro botão ele executa o evento da perda de foco antes!

vlw!

Suu

guisantogui

Não entendi sua resposta… O meu problema esta no fato de que quanto apresento o JOptionPane a ordem de execução se perde…

guisantogui

Humm … eu ainda estou testando aqui, e não estou usando JOptionPane!

Acho q naum vou poder te ajudar então :wink:

Mas vai postando ai, q se eu souber eu respondo! :smiley:

Criado 13 de maio de 2010
Ultima resposta 13 de mai. de 2010
Respostas 3
Participantes 2