[RESOLVIDO] Mostrar o login validado em outro JDialog

6 respostas
jMarcel

Pessoal,

Quero implementar o seguinte:

Tenho um JDialog1 para fazer login.

Após a validação do login/senha, o JDialog1 fica invisível e quero que o nome do login ora informado (e, claro, já validado) apareça no JLabelUser do JDialog2.

Agradeço pela ajuda.

6 Respostas

dpainformatica

Existem várias maneiras de se fazer, talvez essa não seja a mais elegante mais enfim :

aqui no JDialog1 que seria o login 
	
	você pode "recuperar o usuário"
	
	se a validação der certa você :
	//recupera o usuário 
	usuario.setUsuario(this.tfUsuario.getText());
	
	
   JDialog2 dialog = new JDialog2(null,true);

       
   //mostra o JDialog2
   dialog.setVisible(true);

   //chama o método que está no JDialog2, "enviando" o usuário
   dialog.RecebeUser(usuario);

   //fecha o JDialog1(Login)
   JDialog1.this.dispose();
        


//método que está no JDialog2, recebe o nome do usuário e "seta" no JTextField
 public void RecebeUser(Usuario user){
       
                   this.tfUsuario.setText(user.getUsuario());  
 
 }
jMarcel
dpainformatica:
Existem várias maneiras de se fazer, talvez essa não seja a mais elegante mais enfim :
aqui no JDialog1 que seria o login 
	
	você pode "recuperar o usuário"
	
	se a validação der certa você :
	//recupera o usuário 
	usuario.setUsuario(this.tfUsuario.getText());                      //de que forma declaramos o objeto usuario ?
	
	
   JDialog2 dialog = new JDialog2(null,true);
       
   //mostra o JDialog2
   dialog.setVisible(true);

   //chama o método que está no JDialog2, "enviando" o usuário   // já fiz isso de forma parecida, mas não funciona (vide abaixo)
   dialog.RecebeUser(usuario);

   //fecha o JDialog1(Login)
   JDialog1.this.dispose();                                            // não é viável manter JDialog visível após sua validação, mesmo porque ele é modal
        


//método que está no JDialog2, recebe o nome do usuário e "seta" no JTextField
 public void RecebeUser(Usuario user){
       
                   this.tfUsuario.setText(user.getUsuario());  
 
 }

É ? Então creio que essa não é uma dessas tantas maneiras... :lol:

Como eu já havia informado, após a validação o JDialog1 fica invisível.
No seu esboço, vc assume que os contêiners estão na mesma classe, o que, para essa regra de negócio específica, isso é totalmente inviável.

Deixe eu vos explicar melhor:
//Tenho duas classes distintas
//ao clicar no JButton em Jdialog1, tenho:

 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;
            }
            this.setVisible(false);  //ao contrário do dispose(), queremos os recursos do objeto ainda disponíveis
            JDialog2.setVisible(true);
        } catch (SQLException ex) {
            Logger.getLogger(loginDialog.class.getName()).log(Level.SEVERE, null, ex);
        }
    }          

 public String getNome() {             //método para recuperar o Login
        return (txtLogin.getText());
}
Já no JDialog2:
public JDialog2(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        JLabelLogin.setText(pegaLogin); // capturar o Login digitado no JDialog1 não mais visível
    }
protected String pegaLogin(JDialog1 d) throws InterruptedException {
        String str = null;
        JDialog1 d = new JDialog1(null, true);
        if (!(d.isShowing())) { // verifica se JDialog2 está visível
            str = (d.getNome()); //chama o método do JDialog1
        }
        d.setVisible(false);
        return (x);
    }

Obs.: não está funcionando.
Alguém sabe como fazer ?

Dê uma olhada aqui: [url]http://www.guj.com.br/java/238574-jframe-chamando-outro-jframe--passagem-de-parametros#1238320[/url]
[url]http://www.guj.com.br/java/55710-jdialog-devolvendo-valor-pra-jinternalframe#292687[/url]

Obrigado pela atenção !

dpainformatica

No seu esboço, vc assume que os contêiners estão na mesma classe, o que, para essa regra de negócio específica, isso é totalmente inviável.

Como assim na mesma classe ?

jMarcel
dpainformatica:
No seu esboço, vc assume que os contêiners estão na mesma classe, o que, para essa regra de negócio específica, isso é totalmente inviável.

Como assim na mesma classe ?

Desculpe, na verdade, como já informei, eu é quem não havia enunciado direito.

Então, eu estou com a mesma idéia que a sua (após a validação do login (com sucesso), salvamos o login e o recuperamos por algum método).

Veja se essa é a idéia que você quer me passar (coloquei o código completo das 2 classes, caso queira(m) executar e ver o resultado):

Para facilitar:
- LoginDialog: veja entre as linhas 15 a 29.
- RecebeDialog: veja a linha 11 e linhas 16 a 21.

package paramD;

import javax.swing.JOptionPane;

public class LoginDialog extends javax.swing.JDialog {

    public String str = null;

    public LoginDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        getRootPane().setDefaultButton(btOK);
    }

private void btOKActionPerformed(java.awt.event.ActionEvent evt) {
        if (!(txtSenha.getText()).equals("123")) {
            JOptionPane.showMessageDialog(this, "Senha inválida");
            return;
        }
        RecebeDialog rd = new RecebeDialog(null, true);
        rd.setVisible(true);
        getLogin();
    }

    public String getLogin() {             // método que retorna o que foi difgitado no campo txtLogin
        str = txtLogin.getText();
        System.out.print("LoginDialog: " + str + "\n"); // apenas para verificar a saída
        return str;
    }
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                LoginDialog dialog = new LoginDialog(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        txtLogin = new javax.swing.JTextField();
        btOK = new javax.swing.JButton();
        txtSenha = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Entrada");
        setBackground(new java.awt.Color(204, 255, 255));

        jPanel1.setBackground(new java.awt.Color(204, 204, 255));
        jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        txtLogin.setToolTipText("Digite 123 para validar...");

        btOK.setText("OK");
        btOK.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btOKActionPerformed(evt);
            }
        });

        txtSenha.setToolTipText("Digite 123 para validar...");

        jLabel1.setText("Login:");

        jLabel2.setText("Senha:");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btOK, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtLogin, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtSenha, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {txtLogin, txtSenha});

        jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2});

        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtLogin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(txtSenha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
                .addComponent(btOK)
                .addContainerGap())
        );

        jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {txtLogin, txtSenha});

        jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jLabel1, jLabel2});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(31, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(20, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-271)/2, (screenSize.height-189)/2, 271, 189);
    }// </editor-fold>

    // Variables declaration - do not modify
    private javax.swing.JButton btOK;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField txtLogin;
    private javax.swing.JTextField txtSenha;
    // End of variables declaration
}
Classe RecebeDialog:
package paramD;

/**
 *
 * @author F6750699
 */
public class RecebeDialog extends javax.swing.JDialog {

    public RecebeDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        pegaLogin();
        getRootPane().setDefaultButton(btVoltar);
    }

    public final void pegaLogin() {
        LoginDialog ld = new LoginDialog(null, true);
        String x = ld.getLogin();
        lblLogin.setText(x);
        System.out.print("RecebeDialog: " + x + "\n");
        }
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        btVoltar = new javax.swing.JButton();
        lblLogin = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Resultado");
        setBackground(new java.awt.Color(204, 255, 204));

        jPanel1.setBackground(new java.awt.Color(255, 255, 204));
        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel1.setText("Login digitado:");

        btVoltar.setText("Voltar");
        btVoltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btVoltarActionPerformed(evt);
            }
        });

        lblLogin.setText(" ");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lblLogin, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE))
                    .addComponent(btVoltar, javax.swing.GroupLayout.Alignment.TRAILING))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(lblLogin))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
                .addComponent(btVoltar)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(27, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(23, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-305)/2, (screenSize.height-154)/2, 305, 154);
    }// </editor-fold>

    private void btVoltarActionPerformed(java.awt.event.ActionEvent evt) {
      setVisible(false);
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btVoltar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel lblLogin;
    // End of variables declaration

}
dpainformatica

pensa assim:

você tem lá sua classe de usuário:

public class Usuario {

   private String usuario;
   private String senha;

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }  

}

tem seu JDialog Login:

public class Login extends javax.swing.JDialog {

   ........
nele você recupera o usuário pode colocar no evento ActionPerformed do botão logar 
       
           //aqui você recupera o usuário com set  enviando a String com o nome dele
           usuario.setUsuario(this.tfUsuario.getTex());
            
           //Instancia o Dialog2
           RecuperaLogin recupera = new RecuperaLogin(null,true);

           //mostra o Dialog2
           recupera.setVisible(true);  
  
          //chama o método que está no Dialog2, "enviando" o usuário  
          recupera.RecebeUser(usuario); 
  
           //Fecha o Dialog1
           Login.this.dispose();

Agora aqui o seu Dialog2 que vai mostrar o usuário que logou

public class MostraUsuario extends javax.swing.JDialog {


...........

//esse é o métod declarado no Dialog2 que vai ser chamado no Dialog1
//recebe o usuário e coloca em um JTextField
public void RecebeUser(Usuario usuario){

        //coloca o nome do Usuário em um JTextField
        this.tfUsuarioLogado.setText(usuario.getUsuario());
}



..................


}

É isso …

jMarcel

Quem tiver interesse na solução, acesse:
http://www.coderanch.com/t/536083/GUI/java/Accessing-data-between-JDialogs#2432312

Criado 26 de abril de 2011
Ultima resposta 29 de abr. de 2011
Respostas 6
Participantes 2