Problema com manipulção de Gui's

6 respostas
P

Boa tarde a todos..
Estou eu mai um vez aqui pedindo a ajuda de vcs.
Dessa vez é o seguinte.
Estou fazendo um trabalho de conclusão de semestre e chegou em uma parte
que não consegui fazer de maneira alguma.. Eu não consegui encaixar a lógica ainda.

Bom vamos lá.

Nessa classe abaixo, que chamei de loja, criei basicamente duas Arrays como foi me pedido e os métodos necessários como
foi especificado pelo professor:

package pkgTP;
import java.util.ArrayList;

public class Loja {
	
	ArrayList<Cliente> cliente;
	ArrayList<Produto> produto;
	
	public Loja(){
		
		cliente = new ArrayList<Cliente>();
		produto = new ArrayList<Produto>();
	}
	

	
	public void cadastraCliente(Cliente cli){
		cliente.add(cli);
	}
	
	
	public void cadastraProduto(Produto pro){
		produto.add(pro);
	}
	
	public void excluirCliente(int t){
		cliente.remove(t);
		
	}
	
	public void excluirProduto(int t){
		produto.remove(t);
		
	}
	
	public void imprimeCliente(String nome){  
		for(int i = 0; i < cliente.size(); i++){  
		if(cliente.get(i).getNome().equalsIgnoreCase(nome)){  
		System.out.println(cliente.get(i));  
		break;  
			}  
		}  
	}  

}

Até ai tudo bem. Nessa próxima classe que está o meu problema:
É uma classe onde criei minha interface gráfica e estou pegando os dados do cadastro para passar para a classe
onde estao minhas ArrayList, vou mostrar a classe e abaixo explicarei o que não está dando certo:

package pkgTP;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class CadastraCliente extends JFrame implements ActionListener {
		
		
		private JLabel lnome, lfone, lcelular, lrua, lcpf, lnumero, lcomplemento, lcidade, 
		lbairro, lcep, luf, ldata_nascimento, obrig;
		
		private JTextField tnome, tfone, tcelular, trua, tcpf, tnumero, 
		   tcomplemento, tcidade, tbairro, tcep, tdata_nascimento, tuf;
		
		private JButton bcadastro, blimpar, bconsulta;
		
		private Loja loja = new Loja();
		

		
		public CadastraCliente(){
			super("NewOptionStore - Cadastro de Clientes");
			
			setSize(650,300);
			//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			getContentPane().setLayout(new GridLayout(1,1));
			JPanel pccli = new JPanel(null);

			bcadastro = new        JButton("Cadastrar");
			blimpar = new		   JButton("Limpar");
			
			lnome = new 		   	JLabel("*Nome:");
			lrua = new				JLabel("*Rua:");
			lfone = new            	JLabel("Fone:");
			lcelular = new         	JLabel("Cel:");
			lcpf = new				JLabel("*CPF:");
			lnumero = new          	JLabel("*Numero:");
			lcomplemento = new     	JLabel("Complemento:");
			lbairro = new          	JLabel("*Bairro:");
			lcidade = new          	JLabel("*Cidade:");
			lcep = new             	JLabel("CEP:");
			ldata_nascimento = new  JLabel("*Data de Nascimento:");
			luf = new				JLabel("*UF:");
			obrig = new				JLabel("*Campos com asterisco são de preenchimento obrigatório.");

			tnome = new 	    	JTextField();
			trua = new  	    	JTextField();
			tfone = new  	        JTextField();
			tcelular = new 	        JTextField();
			tcpf = new 			    JTextField();	
			tnumero = new 		    JTextField();
			tcomplemento = new 	    JTextField();
			tbairro = new 	  	  	JTextField();
			tcidade = new 	  	  	JTextField();
			tcep = new 		  	  	JTextField();
			tdata_nascimento = new 	JTextField();
			tuf = new				JTextField();
			
			getContentPane().add(pccli);
			
			pccli.add(bcadastro);
			pccli.add(blimpar);
			pccli.add(tnome);
			pccli.add(lrua);
			pccli.add(trua);
			pccli.add(tfone);
			pccli.add(tcelular);
			pccli.add(lnome);
			pccli.add(lfone);
			pccli.add(lcelular);
			pccli.add(lrua);
			pccli.add(tcpf);
			pccli.add(tnumero);
			pccli.add(lnumero);
			pccli.add(lcomplemento);
			pccli.add(tcomplemento);
			pccli.add(tbairro);
			pccli.add(lbairro);
			pccli.add(tcep);
			pccli.add(lcep);
			pccli.add(tcidade);
			pccli.add(lcidade);
			pccli.add(tdata_nascimento);
			pccli.add(ldata_nascimento);
			pccli.add(lcpf);
			pccli.add(obrig);
			pccli.add(tuf);
			pccli.add(luf);
			
			
			
			
			lnome.setBounds           (10,20,120,20);
			tnome.setBounds           (60,20,500,20);	
			trua.setBounds            (60,50,430,20);
			lrua.setBounds            (10,50,30,20);
			tnumero.setBounds         (560,50,80,20); 
			lnumero.setBounds         (500,50,120,20);
			lbairro.setBounds         (10,80,50,20);
			tbairro.setBounds         (60,80,130,20);
			lcomplemento.setBounds    (200,80,190,20);
			tcomplemento.setBounds    (300,80,130,20);
			lcidade.setBounds         (10,110,60,20);
			tcidade.setBounds         (60,110,300,20);
			lcep.setBounds            (370,110,120,20);
			tcep.setBounds        	  (410,110,120,20);
			tuf.setBounds			  (570,110,50,20);
			luf.setBounds			  (540,110,30,20 );
			lcpf.setBounds            (10,140,100,20);
			tcpf.setBounds            (60,140,130,20);
			ldata_nascimento.setBounds(200,140,150,20);
			tdata_nascimento.setBounds(330,140,150,20);
			tfone.setBounds           (60,170,130,20);
			lfone.setBounds           (10,170,120,20);
			tcelular.setBounds        (240,170,130,20);
			lcelular.setBounds        (200,170,120,20);
		
			bcadastro.setBounds       (90,210,120,20);
			blimpar.setBounds         (230,210,120,20);
			obrig.setBounds           (280,240,400,20);
			
			
			bcadastro.addActionListener(this);	
			blimpar.addActionListener(this);
		}
		
		public void actionPerformed(ActionEvent action){
			
			
			if(action.getSource()== bcadastro){
				
				Cliente cli = new Cliente();
				
				
				if(tnumero.getText().equalsIgnoreCase("") || tnome.getText().equalsIgnoreCase("") || trua.getText().equalsIgnoreCase("") || 
						tcpf.getText().equalsIgnoreCase("") || tbairro.getText().equalsIgnoreCase("") || tcidade.getText().equalsIgnoreCase("") || 
						tdata_nascimento.getText().equalsIgnoreCase("") || tuf.getText().equalsIgnoreCase("") ){
					JOptionPane.showMessageDialog(this, "Há campos de preenchimento obrigatório vazios!");
					return;
				}
				
				
				try{
					Integer.parseInt(tnumero.getText());
					
				}catch(NumberFormatException nf){
					JOptionPane.showMessageDialog(this, "Valor digitado no campo numero é um caracter inválido!");
					return;
				}
				
				
				cli.setNome(lnome.getText());
				cli.setEndereco(new Endereco(trua.getText(), tbairro.getText(), tcidade.getText(), tcomplemento.getText(),
								tcep.getText(), tuf.getText(), Integer.parseInt(tnumero.getText())));
				cli.setCpf(tcpf.getText());
				cli.setFone(tfone.getText());
			
				loja.cadastraCliente(cli);
				}
			
			else if(action.getSource() == blimpar){
				
				tnumero.setText(""); tnome.setText(""); trua.setText(""); tcpf.setText(""); tbairro.setText(""); tcidade.setText(""); 
				tdata_nascimento.setText(""); tuf.setText(""); tcelular.setText(""); tfone.setText(""); tcomplemento.setText(""); 
				tcep.setText("");
				}
			
			
		}
		

}

Aliás nessa classe atualmente está dando tudo certo, porém minha dúvida é a seguinte:

Como vcs podem ver, eu instanciei um objeto da classe Loja na Classe CadastraCliente, para que eu pudesse,
depois de coletar os dados através da interface, enviar o objeto Cliente para a classe loja através do método que está
na classe loja cadastracliente()

private Loja loja = new Loja();
loja.cadastraCliente(cli);

Essa parte, acho que minha lógica foi correta, porém ai que está.
Cadastrar clientes não é a única coisa que tenho que fazer, tbm preciso pesquisar por um cliente, excluir um clientes e
outras coisas mais, que serão botões em uma interface gráfica principal, ou seja, terei uma janela principal com esses
botoes e ao clicar neles, deverão abrir por exemplo a janela onde cadastrarei cliente.

Até essa parte eu consegui fazer com essa classe olhem:

package pkgTP;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;



public class Testes extends JFrame implements ActionListener {
	
	private JButton abr;
	
	public Testes(){
		super("Testes");
		JPanel cad = new JPanel(new GridLayout(1,1));
		getContentPane().add(cad);
		
		abr = new JButton("Cadastrar Clientes");
		cad.add(abr);
		
		abr.addActionListener(this);
		
		
	}

	
	public void actionPerformed(ActionEvent action) {
	
		if(action.getSource() == abr){
			
			CadastraCliente obj = new CadastraCliente();
			obj.setVisible(true);
			obj.setResizable(false);
		}
		
	}
		
		
			
		
	public static void main(String[] args) {
		Testes t = new Testes();
		t.setVisible(true);
		t.setLocation(200, 200);
		t.setSize(650,300);
		t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
	}

	

}

Nessa classe de testes, coloquei o botão cadastrar cliente e quando clico nele, abre a minha interface gráfica de cadastrar clientes e está dando tudo certo. Agora vem minha dúvida principal: Quando fui criar por exemplo uma classe que encontrasse clientes, não consegui achar um jeito de usar o objeto loja que instanciei na classe CadastraCliente, pois até onde eu sei, todos os dados que coleto no cadastro de clientes vão para essa instancia do objeto e então se eu instanciar outra loja em outra interface como fiz na CadastraCliente para poder por exemplo buscar algum cliente por nome, não daria certo, pois nesse objeto não haveria nenhum cliente cadastrado.. Bom eu penso assim. Não sei se estou certo e errado e é por isso que preciso da ajuda de vcs..

Sei que o por ficou meio grande, mas é que estou precisando mesmo de ajuda..

Espero muito que possa solucionar isso para mim..

Pois como dizem é buscando que se evolui.

Grato

Pablo

PS.. qualquer coisa pergutem Ok!

6 Respostas

douglaskd

você precisa usar banco de dados…

no seu código sempre que criar uma nova instância de loja, ela estará vazia.

drsmachado

Todo objeto instanciado será mantido na memória até que nenhuma thread o esteja solicitando, a partir daí o Garbage colector irá fazer seu trabalho.
Partindo desse príncípio, o que você precisa fazer é criar um método que permita percorrer os ArrayLists já instanciados, pois eles estão em memória.
O ideal, neste tipo de situação, como dito pelo douglaskd, seria utilizar um SGBD, porém, sei como os professores são criativos em problemas e sempre tendem a encontrar meios para que a lógia sobreponha a facilidade.

P

Boa tarde.
Meu professor ate falou que eu podia usar banco de dados,
porem ele disse que nao iria ensinar isso esse semestre, pois
deu como desculpa que nao daria tempo, entao nao tenho a minima
ideia de como usar o banco de dados. Sera que so ha essa maneira?

Grato

douglaskd

então, você pode salvar em arquivos…

ou pode instanciar loja no inicio do programa, fora do método…apenas 1 vês

porém, após fechar o programa todos os dados serão perdidos…acho que é desta maneira que seu professor pediu…

P

Mas em qual classe instanciar?
Grato

douglaskd

instancie a loja abaixo do main()

Criado 11 de novembro de 2010
Ultima resposta 12 de nov. de 2010
Respostas 6
Participantes 3