Olá galera… .estou tentdo um problema com meus ouvintes de tela aqui e gostaria da ajuda do pessoal do fórum!!!
Tipo galera… eu construi uma tela TelaExcluirMercadoria, e também tenho outras telas como TelaCadMercadoria e tals… Construi um método para setar os ouvintes das telas jogando para o meu ControleMercadoria que está tratando as minhas telas!!!
Os ouvintes da TelaCadMercadoria estão ótimos… só que os ouvintes da outra tela TelaExcluirMercadoria não estão funcionando!!!
Segue o código do ControleMercadoria():
package controle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import modelo.Mercadoria;
import visao.TelaCadMercadoria;
import visao.TelaConsultaMercadoria;
import visao.TelaExcluirMercadoria;
import dao.DAOFactory;
import dao.DAOMercadoria;
public class ControleMercadoria implements ActionListener {
DAOFactory df=DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
DAOMercadoria dao = df.getDAOMercadoria();
private TelaCadMercadoria telaCadMercadoria=null;
private Vector <Mercadoria> vetor;
private DefaultTableModel tabelaModel;
private String[] campos = {"Tipo","Descrição","Codigo","Quantidade","Preço de Compra","Preço de Venda","Data de cadastro do produto"};
private String codigo;
TelaConsultaMercadoria telaConsultaMercadoria ;
TelaExcluirMercadoria telaExcluirMercadoria;
Mercadoria mercadoria = new Mercadoria();
public ControleMercadoria (TelaCadMercadoria telaCadMercadoria, TelaExcluirMercadoria telaExcluirMercadoria){
this.telaCadMercadoria = telaCadMercadoria;
this.telaExcluirMercadoria = telaExcluirMercadoria;
telaExcluirMercadoria.setOuvinte(this);
telaCadMercadoria.setOuvinte(this);
}// fim do construtor
public void actionPerformed(ActionEvent evt) {
String comando = evt.getActionCommand();
if (comando.equals("cadastrar")){
if (telaCadMercadoria.verificaCampos(telaCadMercadoria.getCamposOk())){
try {
Mercadoria mercadoria = new Mercadoria();
telaCadMercadoria.getDadosGerais(mercadoria);
dao.cadastrar(mercadoria);
JOptionPane.showMessageDialog(null,"Mercadoria cadastrada com sucesso!","Mercadoria cadastrada",JOptionPane.PLAIN_MESSAGE);
telaCadMercadoria.limpaCampos();
}
catch (Exception e){
JOptionPane.showMessageDialog(null,"Erro durante a gravação da nova mercadoria :" +e,"ERRO",JOptionPane.ERROR_MESSAGE);
}
}
else
JOptionPane.showMessageDialog(null,"Os campos sinalizados com * são de preenchimento obrigatório!", "ATENÇÂO", JOptionPane.WARNING_MESSAGE);
}
else
if (comando.equals("limpar")){
telaCadMercadoria.limpaCampos();
}
else
if (comando.equals("consultar")){
TelaConsultaMercadoria telaConsultaMercadoria = new TelaConsultaMercadoria();
telaConsultaMercadoria.setSize(475,590);
telaConsultaMercadoria.setLocation(200,200);
telaConsultaMercadoria.setResizable(false);
telaConsultaMercadoria.setVisible(true);
}
else
if (comando.equals("sair")){
telaCadMercadoria = new TelaCadMercadoria();
telaCadMercadoria.dispose();
}
if (comando.equals("excluir")){
mercadoria.setCodigo(JOptionPane.showInputDialog(null,"Digite o número do código da mercadoria: ","Excluir Mercadoria",JOptionPane.QUESTION_MESSAGE));
codigo = mercadoria.getCodigo();
mercadoria = dao.consultar(mercadoria);
if (mercadoria.getCodigo()!= null){
TelaExcluirMercadoria telaExcluirMercadoria = new TelaExcluirMercadoria();
telaExcluirMercadoria.setSize(300,300);
telaExcluirMercadoria.setLocation(200,200);
telaExcluirMercadoria.setResizable(false);
telaExcluirMercadoria.setVisible(true);
}// fim do if primeiro interno
else
JOptionPane.showMessageDialog(null,"Mercadoria não cadastrada!!","ERRO",JOptionPane.ERROR_MESSAGE);
}//fim do tratamnte do excluir (pelo menu Excluir mercadoria da telaCadMercadoria)
if (comando.equals("bCancelar")){
telaExcluirMercadoria = new TelaExcluirMercadoria();
telaExcluirMercadoria.dispose();
}
else
if (comando.equals("bExcluir")){
Object [] opcoes = {" Sim "," Não "};
int n = JOptionPane.showOptionDialog(null, "Você tem certeza de que deseja excluir o cliente selecionado?", "Confirmar Exclusão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);
if (n==0){
String x = codigo;
mercadoria.setCodigo(codigo);
telaExcluirMercadoria = new TelaExcluirMercadoria();
dao.excluir(mercadoria);
JOptionPane.showMessageDialog(null,"Mercadoria excluída com sucesso!","Exclusão de mercadoria",JOptionPane.INFORMATION_MESSAGE);
telaExcluirMercadoria.dispose();
}
else
telaExcluirMercadoria.dispose();
}// fim do tratamento do bExcluir
}// fim do ActionPerformed
//dadosMercadorias
public String[][] dadosMercadorias(Vector<Mercadoria> vetor){
int tam=0;
tam = vetor.size();
String[][] dMercadoria = new String[tam][7];
for(int z=0;z < tam;z++){
dMercadoria[z][0] = vetor.get(z).getTipo();
dMercadoria[z][1] = vetor.get(z).getDescricao();
dMercadoria[z][2] = vetor.get(z).getCodigo();
dMercadoria[z][3] = vetor.get(z).getQuantidade();
dMercadoria[z][4] = vetor.get(z).getPrecoCompra();
dMercadoria[z][5] = vetor.get(z).getPrecoVenda();
dMercadoria[z][6] = vetor.get(z).getData();
}//fim do for
return dMercadoria;
} //fim do dadosUsuarios
//dadosEmVetor
public Vector<Mercadoria> dadosEmVetor(){
dao.resultDados();
vetor = new Vector<Mercadoria>(30,10);
try{
String resultDados[][] = dao.getDados();
int tam = resultDados.length;
for (int i=0; i<tam; i++){
String tipo = resultDados[i][0];
String descricao = resultDados[i][1];
String codigo = resultDados[i][2];
String quantidade = resultDados[i][3];
String precoCompra = resultDados[i][4];
String precoVenda = resultDados[i][5];
String data = resultDados[i][6];
Mercadoria mercadoria = new Mercadoria();
mercadoria.setTipo(tipo);
mercadoria.setDescricao(descricao);
mercadoria.setCodigo(codigo);
mercadoria.setQuantidade(quantidade);
mercadoria.setPrecoCompra(precoCompra);
mercadoria.setPrecoVenda(precoVenda);
mercadoria.setData(data);
vetor.add(mercadoria);
}//fim do for
}//fim do try
catch(Exception e){
JOptionPane.showMessageDialog(null,"Erro durante a gravação dos dados no vetor :"+e.getStackTrace(),"ERRO",JOptionPane.ERROR_MESSAGE);
}
return vetor;
}//fim do método dadosEmVetor
public DefaultTableModel getTabelModelConsulta(){
dadosEmVetor();
String dMercadoria[][] = dadosMercadorias(dadosEmVetor());
tabelaModel = new DefaultTableModel(dMercadoria,campos);
return tabelaModel;
}
public String[][] filtraConsulta(int caso, int tam){
try{
Vector<Mercadoria> vetor = new Vector<Mercadoria>(30,10);
Vector<Mercadoria> vetorAux = new Vector<Mercadoria>(30,10);
vetor = dadosEmVetor();
String aux = null;
//o primeiro for roda nos objetos<Alunos> do vetor
//o for interno roda no campo nome<String> dos objetos<Alunos> do vetor
for(int k=0;k < vetor.size();k++){
//testa se o dado no vetor é maior ou igual que o que você está consultado
//se for menor não entra na consulta.
if((vetor.get(k).getDescricao().length()) >= (tam)){
switch(caso){
case 1:
aux = vetor.get(k).getDescricao().substring(0,TelaConsultaMercadoria.txtConsulta.getText().length());
break;
case 2:
//aux = vetor.get(k).getDescricao().substring(0,FClienteAlterar.tTitulo.getText().length());
break;
case 3:
//aux = vetor.get(k).getDescricao().substring(0,FClienteExcluir.tTitulo.getText().length());
break;
}//fim do switch
switch(caso){
case 1:{
if(TelaConsultaMercadoria.txtConsulta.getText().equalsIgnoreCase(aux)){
vetorAux.add(vetor.get(k));
}//do if interno
break;
}//fim do caso 1
/*
case 2:{
if(telaAlterarMercadoria.tTitulo.getText().equalsIgnoreCase(aux)){
vetorAux.add(vetor.get(k));
}//fim do if interno
break;
}//fim do caso 2
case 3:{
if(telaExcluirMercadoria.tTitulo.getText().equalsIgnoreCase(aux)){
vetorAux.add(vetor.get(k));
}//fim do if interno
break;
}//fim do caso 3
*/
}//fim do switch
}//fim do if externo
}//fim do for
//transforma o vetor em dados
String[][] d = dadosMercadorias(vetorAux);
return d;
}//fim do try
catch(StringIndexOutOfBoundsException e){
JOptionPane.showMessageDialog(null, "Erro durante a filtragem da consulta :"+e,"ERRO",JOptionPane.ERROR_MESSAGE);
return null;
}//fim do catch
}//fim do metodo filtra consulta
public void atualiza(){
dao.resultDados();
tabelaModel.setDataVector(dadosMercadorias(dadosEmVetor()),campos);
tabelaModel.fireTableStructureChanged();
}
}// fim da classe
Agora o código da minha TelaExcluirMercadoria ():
package visao;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import controle.ControleMercadoria;
public class TelaExcluirMercadoria extends JFrame{
private JPanel pnl1,pnl2,pnl3;
private JLabel lblDescricao,lblTipo;
private JButton btnExcluir,btnCancelar;
private JTextField txtDescricao,txtTipo;
Container c;
private String tipo,descricao;
TelaExcluirMercadoria telaExcluirMercadoria ;
TelaCadMercadoria telaCadMercadoria;
public TelaExcluirMercadoria (){
super ("Exclusão de mercadoria");
//ControleMercadoria controle = new ControleMercadoria(telaCadMercadoria,telaExcluirMercadoria);
c = getContentPane();
c.setLayout(new BorderLayout());
pnl1 = new JPanel();
pnl1.setLayout(new FlowLayout(0));
lblTipo = new JLabel ("Tipo da mercadoria :");
txtTipo = new JTextField(20);
txtTipo.setEditable(false);
pnl1.add(lblTipo);
pnl1.add(txtTipo);
pnl2 = new JPanel();
pnl2.setLayout(new FlowLayout(0));
lblDescricao = new JLabel("Descrição da Mercadoria :");
txtDescricao = new JTextField(30);
txtDescricao.setEditable(false);
pnl2.add(lblDescricao);
pnl2.add(txtDescricao);
pnl3 = new JPanel();
pnl3.setLayout(new FlowLayout(0));
btnExcluir = new JButton("Excluir");
btnExcluir.setActionCommand("bExcluir");
btnExcluir.setIcon(new ImageIcon("excluir.gif"));
btnExcluir.setToolTipText("Clicando aqui você estará excluindo a mercadoria do estoque definitivamente!!");
btnCancelar = new JButton ("Cancelar");
btnCancelar.setActionCommand("bCancelar");
btnCancelar.setIcon(new ImageIcon("icCancelar.png"));
btnCancelar.setToolTipText("Clicando aqui você não exclui a mercadoria e retorna ao menu principal!");
btnCancelar.setDefaultCapable(true);
pnl3.add(btnExcluir);
pnl3.add(btnCancelar);
c.add(pnl1,BorderLayout.NORTH);
c.add(pnl2,BorderLayout.CENTER);
c.add(pnl3,BorderLayout.SOUTH);
//btnExcluir.addActionListener(controle);
//btnCancelar.addActionListener(controle);
}// fim do construtor
public void setOuvinte (ActionListener controle){
btnExcluir.addActionListener(controle);
btnCancelar.addActionListener(controle);
}
public JTextField getTxtTipo() {
return txtTipo;
}
public void setDados(String tipo, String descricao){
this.tipo = tipo;
this.descricao = descricao;
}
}
Como devem perceber em alguns comentários, estava tentando fazer com uma espécie de classe interna anônima para tratar os eventos… mas tive problemas na hora de excluir pois quando criava um objeto da TelaExcluirMercadoria ela criava também uma nova instância do controle e eu perdia os dados que coletei lá!!!
Me ajuda ae pessoaaaaaaaaaaal!!!