Array / list de objetos [RESOLVIDO]

Não… volte a sua classe de pessoa como estava e crie um

List<Pessoa> pessoas = new ArrayList<Pessoa>();

E daí no clique do botão fica do jeito que eu falei.

Blz… Mas não entendi como que vai ficar +/- o botão e a tabela…
pode me fazer um previewzinho ae? :stuck_out_tongue:

Já voltei a classe pessoa pra como tava e criei o

List<Pessoa> pessoas = new ArrayList<Pessoa>(); 

Por enquanto o botão tá assim:

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) { Pessoa m = new Pessoa(); m.setnome(tfNome.getText()); m.setrua(tfRua.getText()); m.setbairro(tfBairro.getText()); m.setcidade(tfCidade.getText()); m.setuf((String) cbUf.getSelectedItem()); }

Não entendi o que você quis fazer com isso:

listaPessoas.add(m); //Inclui num List.  

A lista fica na classe Pessoa…

E depois de incluir as coisas no

List<Pessoa> pessoas = new ArrayList<Pessoa>(); Como vou diferenciar se é nome, endereço, etc?

Pense um pouco. A sua classe está dizendo que uma pessoa tem vários nomes e endereços. E para cada nome dela, ela responderia num endereço diferente. Bizarro, não?

Se você disser: “Não, mas minha classe pessoa é só um módulo que gerencia os dados de pessoas”. Então, você deixou de usar OO, e está usando análise estruturada, já que o seu foco agora é nos dados, e não nos tipos de dados.

Para o tipo pessoa ser forte, ele deve representar uma única pessoa, como você já havia feito no primeiro post. Se você quiser criar uma lista de pessoas, crie um

List<Pessoa> pessoas = new ArrayList<Pessoa>();

Para obter uma pessoa da lista:

Pessoa p = pessoas.get(0); //obtém a pessoa no índice 0.

Para procurar por nome:

public Pessoa procurarPorNome(String nome) { for (Pessoa pessoa : pessoas) { if (pessoa.getNome().equals(nome)) { return pessoa; } } return null; }

Para definir a rua da pessoa 10:

pessoas.get(10).setRua("Rua dos bobos");

Para adicionar uma pessoa na lista:

Pessoa p = new Pessoa(); p.setNome("João da silva"); pessoas.add(p);

Para excluir todas as pessoas de uma determinada cidade da lista:

public void excluirPessoas(String cidade) { Iterator<Pessoa> it = pessoas.iterator(); while (it.hasNext()) { Pessoa pessoa = it.next(); if (pessoa.getCidade().equals(nome)) { it.remove(); } } }

E por aí vai…

1 curtida

Amigo, eu tenho um aplicativo aqui, algo parecido com o que voce deseja, ta “feito a facão”, se kiser dá uma conferida
os fontes tá dentro do .jar, na pasta “src”, pode extrair com Winrar ou executar direto, flw

http://uploaddearquivos.com.br/download/CadastroDeClientes.jar

O que eu estou fazendo de errado aqui?

[code]private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {
Pessoa p = new Pessoa();
p.setnome(“NOME”);
p.setrua(“RUA”);
p.setbairro(“BAIRRO”);
p.setcidade(“CIDADE”);
p.setuf(“UF”);

p.pessoas.add§;

list1.clear();
for (int i = 0; i< p.pessoas.size();i++) {
list1.add(p.pessoas.get(i).toString()); // obtém a pessoa no índice 1 e adiciona la list, só para teste…
}
} [/code]

Eu mandei compilar, e acho que é pq sempre tá dando Pessoa p = new Pessoa…
Então ele sempre vai "zerar" os dados

Cara, veja se é ± isso que voce procura, eu fiz um na corrida aki :lol:
se for isso, só lapidar pra usar

import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.*;

public class TesteArray implements ActionListener
{
    JFrame janela                       = new JFrame("Teste Array and JTable");
    DefaultTableModel modelo            = new DefaultTableModel();
    JTable tabela                       = new JTable(modelo);
    JScrollPane scrTabela               = new JScrollPane(tabela);
    Cliente cli;
    ArrayList<Cliente> listaClientes    = new ArrayList<Cliente>();//Cria um Array de Clientes
    JButton btnIncluir                  = new JButton("Incluir");
    JTextField cxNome                   = new JTextField("Nome");
    JTextField cxIdade                  = new JTextField("Idade");

    public TesteArray()
    {
        modelo.addColumn("Nome");   //Adiciona Coluna para Nome
        modelo.addColumn("Idade");  //Adiciona Coluna para idade

        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setLayout(null);
        janela.setSize(300, 300);
        janela.setLocationRelativeTo(null); //posiciona a janela no centro da tela

        btnIncluir.addActionListener(this);//adiciona evento para este botão
        btnIncluir.setBounds(210,15,70,20);
        janela.add(btnIncluir);

        scrTabela.setBounds(10, 60, 270, 200);
        janela.add(scrTabela);
        janela.setVisible(true);

        cxNome.setBounds(10, 10, 190, 20);
        janela.add(cxNome);

        cxIdade.setBounds(10, 35, 190, 20);
        janela.add(cxIdade);
    }

    public void actionPerformed(ActionEvent e)
    {
        cli = new Cliente(cxNome.getText(),cxIdade.getText()); //Cria um novo Cliente
        listaClientes.add(cli); // E Adiciona este Cliente no ArrayList

        int qtd = listaClientes.size();  //a variavel qtd recebe a quantidade de Clientes na lista
        cli = (Cliente)listaClientes.get(qtd-1); //cli recebe os dados do último Cliente Adicionado
        //Utilizei qtd-1 pelo motivo da quantidade começar em '1', em todos os demais indices começamos em '0'
        modelo.addRow(new Object[]{cli.nome,cli.idade}); //Adiciona uma nova linha na tabela com os dados de Cli, que recebeu os dados do Array
    }
}

class Cliente//Cria Classe de Cliente
{
    String nome=null;
    String idade=null;
    public Cliente(String n, String i)
    {
        this.nome=n;
        this.idade=i;
    }
}

Entendi…
Mas eu uso net beans… (arrasto componentes ;P)

Então não sei onde que vou colocar isso:

   ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();//Cria um Array de Clientes  

DefaultTableModel modelo = new DefaultTableModel(); JTable tabela = new JTable(modelo);
Seria antes ou depois do init components?
Como faço para utilizar eles no click do botão?
Vlws!

primeiro voce deve criar a classe Cliente certo?

 class Cliente//Cria Classe de Cliente  
 {  
     String nome=null;  
     String idade=null;  
     public Cliente(String n, String i)  
     {  
         this.nome=n;  
         this.idade=i;  
     }  
 } 

ArrayList<Cliente> listaClientes = new ArrayList<Cliente>(); DefaultTableModel modelo = new DefaultTableModel(); JTable tabela = new JTable(modelo);

isto voce coloca dentro do método

private void initComponents()

é que eu não uso o arrastar componentes, então não sei se estou falando o correto

Blz…
Ficou assim:

[code]private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {
cli = new Pessoa(tfNome.getText(),tfRua.getText(),tfBairro.getText(), tfCidade.getText(),(String) cbUf.getSelectedItem()); //Cria um novo Cliente
listaClientes.add(cli); // E Adiciona este Cliente no ArrayList

 int qtd = listaClientes.size();
 cli = (Pessoa)listaClientes.get(qtd-1);
 modelo.addRow(new Object[]{cli.getnome(),cli.getrua(),cli.getbairro(),cli.getcidade(), cli.getuf()});
 jTable1.setModel(modelo);

} [/code]

Se eu quiser mostrar todos os dados que tem na listaClientes como que eu faço?
(é pq eu não entendo como vai ficar guardado os clientes na lista… vai ficar do tipo pedro,ruatal,bairrotal,cidadetal,uftal?)

mas voce já estará mostrando os dados na tabela

note que voce precisa “desenhar” esta esta tabela na sua janela

modelo.setBounds(intX, intY, intLargura, intAltura);
nomeDoJFrame.add(modelo);

a tabela eu ja fiz…
fiz colocando ela no frame msmo…
Aparece os dados na tabela certinho…

Queria ver o list msmo…

não teria como “enxergar” o Array, a menos que voce coloque os dados do Array em uma tabela(caso que foi feito) ou num campo de texto msm, como um “JTextArea”

É porque eu fiz para excluir uma linha do Array…
E da tabela não excluiu, nem quando eu cadastro outro dado. (Ou seja, a tabela não pega os dados do array)
Então eu tenho que excluir a lista da tabela também:
Ae eu queria ver se o array estava certo

int k = jTable1.getSelectedRow(); //modelo.removeRow(k); listaClientes.remove(k);

na real o que está acontecendo:

quando se adiciona um Cliente na lista, adicionamos uma linha na tabela com aquele Cliente,
se excluir algum Cliente, a linha na tabela certamente continuará lá
e para inserir os dados na tabela, ela busca sim do Array
note:

int qtd = listaClientes.size();    //a variavel qtd recebe a quantidade de Clientes da lista  
cli = (Cliente)listaClientes.get(qtd-1); //cli recebe os dados do último Cliente Adicionado NO ARRAY
modelo.addRow(new Object[]{cli.nome,cli.idade});       //Adiciona uma nova linha na tabela com os dados de Cli, que RECEBEU os dados do Array

Não entendi muito bem esse:

cli = (Cliente)listaClientes.get(qtd-1);

cli recebe os dados do ultimo cliente inseridos na Lista
tanto que se não pegasse os dados da Lista poderia fazer de outras maneira de inserir na tabela

//adiciona o cliente diretamente sem buscar do Array
modelo.addRow(new Object[]{cli.nome,cli.idade});

// ou pode-se usar diretamente das TextField
modelo.addRow(new Object[]{texFieldNome.getText,textFieldIdade.getText()});

//caso queira, faça o seguinte teste
cli = (Cliente)listaClientes.get(3); //busca o cliente inserido na posição 3
modelo.addRow(new Object[]{cli.nome,cli.idade});
//aqui ele insere novamente o cliente da posição 3 na ultima linha tabela

mas dá uma olhada nos artigos do ViniGodoy, ele ensina a trabalhar com tabelas perfeitamente
http://www.guj.com.br/posts/list/100793.java
http://markytechs.wordpress.com/2009/05/29/objecttablemodel/

Bom dia.

Percebeu o que está fazendo nesta linha:

p.pessoas.add(p);

Você está dizendo que dentro do seu Objeto pessoas, já que p é uma instância do Objeto Pessoas, para que essa instância acesse um List dentro do Objeto pessoas cujo nome é pessoas e está adicionando a lista o seu Objeto Pessoa com os valores setados, não é estranho isso?

Seria isso:

[code]
//classe Pessoa

//atributos…
private List pessoas;[/code]

Era isso mesmo que desejava?
Senão, faça isso:

[code]List listPessoa = new ArrayList();
Pessoa p = new Pessoa();
p.setnome(“NOME”);
p.setrua(“RUA”);
p.setbairro(“BAIRRO”);
p.setcidade(“CIDADE”);
p.setuf(“UF”);

listPessoa.add§;

//imprime os valores , usando foreach
for(Pessoa pessoa : listPessoa){
System.out.println(pessoa.getNome());
System.out.println(pessoa.getRua);
System.out.println(pessoa.getBairro);
System.out.println(pessoa.getCidade());
System.out.println(pessoa.getUf);}[/code]

Só mais um detalhe, porque não cria um classe Endereço e associa um endereço a uma pessoa? Mais ou menos assim:

[code]
//Classe Endereço
//seus atributos/getters and setters

//Classe pessoa
//seus atributos
//associa um endereço a uma pessoa
Endereco endereco;
//getters and setters[/code]

Saco?
Abraços!

olá,

to meio amarrado aqui preciso de ajuda

tenho uma classe que se chama Agenda e tem um método buscar que retorna um tipo Contato(outra classe com gets e sets) segue:

public Contato buscar(String nome){
     return contato;
}

e tenho ou classe que se chama AgendaCore que tem um método buscaAgenda segue

public void buscarAgenda(String n) {
		List<Contato> list = new ArrayList<Contato>();
		for(Contato c: list){
			if(c.getNome().equals(n)){
				System.out.println(c.getNome());
				break;
			}	
		}
		a.buscar(n);
	}

não to conseguindo realizar a busca quando chamo o método buscarAgenda não retorna nada

ajuda ai por favor!

Me ajudou parça!

1 curtida