Problemas com Actionlistener, como passar eventos entre classes?

0 respostas
I

Ola galera, estive passeando pelo forum e achei varios topicos sobre o assunto, mais ainda está confuso para mim
Estou fazendo uma aplicação MVC, nela eu tenho 4 camadas

Visão = com as GUI
Dominio = Com as classes de objeto
Controle = Controlar as ações entre os objetos e a visão
Dados = Esta somente é resposnsavel pea persistencia dos dados

Bom vamos ao meu problema, na verdade são dois, irei passar os codigos referente a uma parte do sistema.
Vamos lá

Eu tenho um frame principal chamado BancoGUI, esse possui a interface principal
Essa interface é feita com ajuda do NetBeans, então não posso modificar partes do codigo
da interface

Codigo BancoGUI:
package banco2f.Visao;

import java.awt.Component;
import banco2f.Controle.ClienteControle;


public class BancoGUI extends javax.swing.JFrame {

    /** Creates new form BancoGUI */
    public BancoGUI() {
        //inicia os elementos
        initComponents();
        //Centraliza a janela na tela do usuario
        this.setLocationRelativeTo(null);
        this.setTitle("Banco 2 F");
        //Adiciona a tela de cliente
        //exibe o form
        this.setVisible(true);
    }
    //esta classe trata os eventos em/para outras classes
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenuCliente = new javax.swing.JMenu();
        jMenuItemCadastro = new javax.swing.JMenuItem();
        jMenuConta = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton1MouseClicked(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 373, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 438, Short.MAX_VALUE)
        );

        jMenuCliente.setText("Cliente");

        jMenuItemCadastro.setText("Cadastro");
        jMenuCliente.add(jMenuItemCadastro);

        jMenuBar1.add(jMenuCliente);

        jMenuConta.setText("Conta");
        jMenuBar1.add(jMenuConta);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 130, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addGap(54, 54, 54))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton1))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
        ClienteControle frameCliente = new ClienteControle();
        this.jPanel1.add(frameCliente.frameCliente);
    }

    /**
    * @param args the command line arguments
    */

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenu jMenuCliente;
    private javax.swing.JMenu jMenuConta;
    private javax.swing.JMenuItem jMenuItemCadastro;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration

}

Tenho o controle desta GUI, fiz apenas para que todos tenham um controle
ela apenas inicia o BancoGUI

Codigo BancioControle
package banco2f.Controle;

//importações de pacotes
import banco2f.Visao.BancoGUI;

public class BancoControle {

    BancoGUI frameBanco = null;

    public BancoControle() {
       frameBanco = new BancoGUI();
    }


}

Tenho tambem um Dominio Banco, apenas apra ter um psvm

Codigo Banco

package banco2f.Dominio;
import banco2f.Controle.BancoControle;




public class Banco {



    public static void main (String [] args)
    {
        //inicia o Controle principal do sistema
        BancoControle controleBanco = new BancoControle();

    }

}

>>>Bom primeiro problema:

Eu tenho um menu Cliente->Cadastro, que eu quero que quando ele seja clicado
ele exiba no frame principal um ClienteGUI que é um InternalFrame
Seguem abaixo o codigo do ClienteGUI, bom no meu ver em não devo chamar o ClienteGUI
diretamente e sim chamar o ClienteControle, este deve iniciar o frame.
Porém a aplicação não responde ao clique do menu, eu fiz um teste utilizando um botão
dentro do frame e funcionou, tambem não sei se é o correto dar um import da camada controle na camada visão.
Ou seja é alguma coisa especifica do menu, estava vendo que é
nescessario utilizar ActionListener, mas não consegui saber como implementar o mesmo

CLiente GUI

package banco2f.Visao;


import banco2f.Controle.ClienteControle;

public class ClienteGUI extends javax.swing.JInternalFrame {

    /** Creates new form CLienteGUI */
    public ClienteGUI() {
        initComponents();
        this.setVisible(true);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanelEsquerdo = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jPasswordField1 = new javax.swing.JPasswordField();
        jLabelTelefone = new javax.swing.JLabel();
        jLabelSenha = new javax.swing.JLabel();
        jLabelNome = new javax.swing.JLabel();
        jButtonAlterarSenha = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jSeparator2 = new javax.swing.JSeparator();
        jTextFieldNome = new javax.swing.JTextField();
        jTextFieldCodigo = new javax.swing.JTextField();
        jLabelConta = new javax.swing.JLabel();
        jTextFieldTelefone = new javax.swing.JTextField();
        jSeparator3 = new javax.swing.JSeparator();
        jSeparator4 = new javax.swing.JSeparator();
        jLabelCodigo = new javax.swing.JLabel();

        setClosable(true);
        setResizable(true);

        jButton3.setText("Alterar");

        jButton4.setText("Procurar");

        jButton1.setText("Incluir");
        jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton1MouseClicked(evt);
            }
        });

        jButton2.setText("Excluir");

        jLabelTelefone.setText("Telefone");

        jLabelSenha.setText("Senha");

        jLabelNome.setText("Nome Completo");

        jButtonAlterarSenha.setText("Alterar Senha");

        jLabelConta.setText("Conta");

        jLabelCodigo.setText("Código");

        javax.swing.GroupLayout jPanelEsquerdoLayout = new javax.swing.GroupLayout(jPanelEsquerdo);
        jPanelEsquerdo.setLayout(jPanelEsquerdoLayout);
        jPanelEsquerdoLayout.setHorizontalGroup(
            jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelEsquerdoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelEsquerdoLayout.createSequentialGroup()
                        .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelTelefone)
                            .addComponent(jLabelCodigo)
                            .addComponent(jLabelNome))
                        .addGap(42, 42, 42)
                        .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextFieldCodigo, javax.swing.GroupLayout.DEFAULT_SIZE, 107, Short.MAX_VALUE)
                            .addComponent(jTextFieldNome)
                            .addComponent(jTextFieldTelefone, javax.swing.GroupLayout.PREFERRED_SIZE, 192, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanelEsquerdoLayout.createSequentialGroup()
                        .addGap(14, 14, 14)
                        .addComponent(jButton4)
                        .addGap(18, 18, 18)
                        .addComponent(jButton1)
                        .addGap(18, 18, 18)
                        .addComponent(jButton3)
                        .addGap(18, 18, 18)
                        .addComponent(jButton2))
                    .addComponent(jSeparator3, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
                    .addGroup(jPanelEsquerdoLayout.createSequentialGroup()
                        .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelSenha)
                            .addComponent(jLabelConta))
                        .addGap(86, 86, 86)
                        .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField2)
                            .addComponent(jPasswordField1, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonAlterarSenha))
                    .addComponent(jSeparator4, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
                    .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanelEsquerdoLayout.setVerticalGroup(
            jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelEsquerdoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCodigo)
                    .addComponent(jTextFieldCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelNome)
                    .addComponent(jTextFieldNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldTelefone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelTelefone))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelConta)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelSenha)
                    .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonAlterarSenha))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanelEsquerdoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4)
                    .addComponent(jButton1)
                    .addComponent(jButton3)
                    .addComponent(jButton2))
                .addGap(24, 24, 24))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelEsquerdo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelEsquerdo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        ClienteControle  cliente = new ClienteControle();
        cliente.IncluirCliente();
    }                                     


    //set e gets

    public String getNome(){
        return this.jTextFieldNome.getText();
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButtonAlterarSenha;
    private javax.swing.JLabel jLabelCodigo;
    private javax.swing.JLabel jLabelConta;
    private javax.swing.JLabel jLabelNome;
    private javax.swing.JLabel jLabelSenha;
    private javax.swing.JLabel jLabelTelefone;
    private javax.swing.JPanel jPanelEsquerdo;
    private javax.swing.JPasswordField jPasswordField1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JSeparator jSeparator3;
    private javax.swing.JSeparator jSeparator4;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextFieldCodigo;
    private javax.swing.JTextField jTextFieldNome;
    private javax.swing.JTextField jTextFieldTelefone;
    // End of variables declaration

}

Cliente Controle

package banco2f.Controle;

import banco2f.Dominio.Cliente;
import banco2f.Visao.ClienteGUI;
import banco2f.Dados.ClienteDados;

public class ClienteControle {

   public ClienteGUI frameCliente = null;
   private Cliente cliente = null;

    public ClienteControle()
    {
        frameCliente = new ClienteGUI();
        cliente = new Cliente();

    }

    public void IncluirCliente(){

        ClienteDados clienteDados = null;
        //Esta linha não funciona pois o jTextFieldNome é privado
        cliente.setNome(frameCliente.getNome());
        clienteDados = new ClienteDados();
        clienteDados.IncluirCLiente(cliente);
    }
}

>>Agora o segundo problema, o frame ClienteGUI, possui os botões para inserir edita e excluir clientes.
Se me ajudarem em somente dois exemplo eu saberei fazer o resto,
Bom para adicionar um cliente se digita nos campos e clica no botão Incluir, esse possui um evento
dentro do controle que executa o Controle.IncluirCliente()

Neste medoto eu utilizaria um objeto Cliente e colocaria os dados neste Objeto,
após isso eu devo passar este objeto como parametro para o ClienteDados, que se encarrega de gravar os dados no banco

cliente Dados
package banco2f.Dados;

import java.sql.*;
import banco2f.Dominio.Cliente;


public class ClienteDados {


     public void IncluirCLiente(Cliente cliente) {
         Connection con = ConectaBanco.getConnection();
         String sql = "INSERT INTO cliente (nome, telefone) VALUES (?,?)";
         try{
             //pretara um statement e executa logo apos
             PreparedStatement st = con.prepareStatement(sql);
             st.setString(1, cliente.getNome());
             //Tem que converter os valores para passar para uma string sql
             st.setString(2, Integer.toString(cliente.getTelefone()));
             int result = st.executeUpdate();
             String mensagem;
             //Verifica se o update foi realizado e envia uma janela de msg
             if(result == 1)
                 mensagem = "Cadastro efetuado com sucesso";
             else
                 mensagem = "Erro de gravação";
             System.out.println(mensagem);
             }
         catch(SQLException SqlE){
             SqlE.printStackTrace();

         }

     }

}

Bom como podem ver o metodo Incluir cliente possui uma linha

cliente.setNome(frameCliente.jTextFieldNome);

que se resume em uma tentativa frustrada de utilizar o campo nome do CLienteGUI para colocar o nome no objeto Cliente.
Já que os campos são todos privados. Bom eu criei até metodo set e get dentro do ClienteGUI, mas me falaram que
isso é errado que eu deveria novamente utilizar os ActionListeners

Outra coisinha dentro do mesmo seria fazer o inverso quero utilizar o metodo
Buscar cliente, que ativa um metodos Buscar entro do ClienteControle que por sua ver
utiliza um metodos do cliente Dados para buscar no banco retornando um Objeto cliente
que deverá preenchar os dados nos TextField, e tneho o mesmo problema de antes.

Sera que poderia me ajudar na forma correta de passar as menssagens entre os objetos??
Outra ajuda os imports estão corretos com o padrão MVC?, poie em controle eu importo dominio, visão e dados?
Não sei se isso esta correto.

Este codigo esta com um erro na hora de conectar no banco, que eu ainda não descobri, mas estou tentando resolver

Desculpem o tamanho dos codigos, mas eu não sabia o que colocar ou tirar e não achei função spoiler no forum

Agradeço desde já

Criado 23 de maio de 2010
Respostas 0
Participantes 1