[RESOLVIDO] Passar parâmetro entre JDialog

Procurei aqui no fórum e encontrei:

Porém, não consegui (ainda) usar/adaptar para o meu caso.

Tenho no meu projeto o seguinte:

  • Informa-se o login e senha em um LoginDialog;
  • clica-se em um JButton e faz-se a validação no BD (via DAO);
  • se ok --> ‘LoginDialog.setVisible(false)’ e ‘MainDialog.setVisible(true)’;
  • quero que aquele ‘login’ informado no ‘LoginDialog’ ([color=orange]agora não mais visível[/color]) - e que foi validado com sucesso - apareça em um ‘JLabel’ do ‘MainDialog’.

Criei o seguinte método no MainDialog:

 protected void pegaLogin() {
        loginDialog d = new loginDialog(null, true);
        if (!(d.isShowing())) { // tentei usar outros métodos boolean aqui. teria que ser semelhante ao alterarDados() do exemplo citado ?
        lblGetUser.setText((d.getNome())); // o método getNome está no LoginDialog (veja abaixo)
        System.out.print("login informado: " + d.getNome()); // para verificar a saída/resultado
        }
        d.dispose(); // já usei setVisible(true/false), não resolve
    }

Método no LoginDialog:

  public String getNome() {
        return (txtLogin.getText());
    }

Dúvidas:

  1. ao contrário do dispose(), o setVisible() oculta o conteiner, mas os ‘dados’ do objeto ainda ficam na memória, é isso ?

  2. coloquei o pegaLogin() no construtor do MainDialog, mas ao acessar o LoginDialog(), tem-se estouro da pilha (java.lang.StackOverflowError) relacionado ao BD.

  3. depois tentei usá-lo no método de validação na classe LoginDialog ‘usrDAO.isValidUserAndPassword’ (vide abaixo), mas sem sucesso;

 private void btLoginActionPerformed(java.awt.event.ActionEvent evt) {                                        

        try {
            boolean valid = usrDAO.isValidUserAndPassword(txtLogin.getText(), txtPassword.getText());
            if (!valid) {
            JOptionPane.showMessageDialog(this, "Login e/ou senha incorreto(s) !", "Login/Senha inválidos !", JOptionPane.ERROR_MESSAGE);
            return;
            }
            setVisible(false);
            g.setVisible(true);
            g.pegaLogin(); // local análogo ao do seu exemplo, ou seja, dentro de um 'ActionPerformed()'
            System.out.print(txtLogin.getText()); // é retornado apenas quando encerro o 'MainDialog'
        } catch (SQLException ex) {
            Logger.getLogger(loginDialog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                  
  1. por fim, coloquei o pegaLogin() em ‘loadInitialUsers()’ do MainDialog, mas não funcionou.

Alguém sabe ?

Quem quiser ver a solução, veja em http://www.coderanch.com/t/536083/GUI/java/Accessing-data-between-JDialogs#2432312