Como fazer um programa parar e esperar por um evento de JButton

Estou tendo um problema com eventos, eu possuo um formulário JFrame(Janela) e dois formlários JPanel(Painel1 e Painel2) e os dois foram adicionados a Janela . A idéia é simples:

1º) Exibir o Painel1 pedindo para o usuário inserir uma palavra, e logo em seguida apertar um botão(“ok”) informando que a palavra foi digitada.

2º) Chamar um método “get” do formulário Painel1, que retorna a palavra digitada.

3º) Deixar Painel1 invisível, passar a palavra como argumento do construtor de Painel2, que informa a palavra digitada e tornar Painel2 visível.

O PROBLEMA: A aplicação não espera o usuário inserir a palavra.

Sendo que o método “get” é executado sem que o usuário tenha inserido a palavra, logo a string que vai ser exibida é “”(nenhuma). Penso que este problema pode ser resolvido travando a execução do programa enquanto o usuário não aperta o botão “ok”. Mas não sei se isso é possível.

Desde já agradeço.

(editei o código e deixei somente as parte que considerei relevantes, estou usando netbeans)

FORMULÁRIO jFRAME(Janela)

package TesteGuiUI;

public class Janela extends javax.swing.JFrame {

    /** Creates new form Janela */
    public Janela() {
        initComponents();
        this.setSize(400,400);


    }

    public void inicio()
    {
        painel1 = new Painel1();
        painel1.setVisible(true);
        add(painel1);

        /************************************************/
        //o programa deveria esperar o usuário entrar com o valor
        /****************************************************/
        
        palavra = painel1.get();//chamada ao método "get"
        painel1.setVisible(false);

        painel2 = new Painel2(palavra);
        painel2.setVisible(true);
        add(painel2);

    }

    .
    .
    .

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Janela janela = new Janela();
                janela.setVisible(true);
                janela.inicio();
            }
        });
    }

    Painel1 painel1;
    Painel2 painel2;
    String palavra;
    // Variables declaration - do not modify
    // End of variables declaration

}

[b]FORMULÀRIO jPANEL(Painel1)[\b]

package TesteGuiUI;


public class Painel1 extends javax.swing.JPanel {

    /** Creates new form Painel1 */
    public Painel1() {
        initComponents();
        setBounds(0,0,300,300);

    }

   .
   .
   .

    //ONDE O EVENTO DO BOTÃO É TRATADO
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        palavra = jTextField1.getText();
    }                                        

    public String get()//MÉTODO "GET"
    {
         return(palavra);
    }

    String palavra;
    Painel2 painel2;
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   

}

(não coloquei o código do Painel2 pois este apenas exibe a palavra que foi passada como argumento ao seu construtor)

Da forma como está realmente não vai aguardar.

Sugiro que você crie um WindowListener para a janela e aguarde ela ser desativada para fazer o get.

Obrigado, vou tentar a sua idéia

ao meu ver.
vc deveria tirar o painel 2 deste método…
pq eh o inicio do GUI


ai vc colocaria o resto… numa função que seria chamada no evento do botao.

mas se quiser fazer assim.
coloque um While.

um atributo boolean que é setado quando o ok for precionado…

entao while(!botaoPress) {}

quando clicar ele sai do while…