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
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
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
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á