Pessoal, eu tenho uma classe pessoa… Mas aqui só cabe 1 Pessoa… Para mim poder ter mais pessoas, eu preciso criar um Array ou uma lista de Objetos do tipo pessoa… [color=red]Como posso fazer isso?[/color]
Mas no meu exemplo, como faria para cada vez que eu clicar ir adicionando em uma posição?
Nakela parte:
private String strNome,strRua,strBairro,strCidade, strUf; //o que seria aki?
public void setnome(String strParametroNome) {
strNome = strParametroNome; // posição X
}
public String getnome() {
return strNome; // retornar a list inteira (vou colocar em uma tabela)
}
[code] 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());
listaPessoas.add(m); //Inclui num List.
});[/code]
PS: Não dê prefixos às suas variáveis com os tipos delas, exceto se elas forem componentes. Use:
String nome;
ao invés de
String strNome;
Essa notação aí é chamada de notação húngara. Ela era adotada antes das IDEs existirem, na época que programavamos em editores de textos rudimentares. E muitos adeptos já perceberam que ela traz mais mal do que bem. Aliás, não é à toa que a MS, principal difusora dessa cultura, abandonou-a totalmente no .Net.
[code]
public class Pessoa {
ArrayList nomes = new ArrayList();
ArrayList ruas = new ArrayList();
ArrayList bairros = new ArrayList();
ArrayList cidades = new ArrayList();
ArrayList ufs = new ArrayList();
////////////////////////////////////////////////////////////
public void setnome(String strParametroNome) {
nomes.add(strParametroNome);
}
public ArrayList getnome() {
return nomes;
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
public void setrua(String strParametroRua) {
ruas.add(strParametroRua);
}
public ArrayList getrua() {
return ruas;
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
public void setbairro(String strParametroBairro) {
bairros.add(strParametroBairro);
}
public ArrayList getbairro() {
return bairros;
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
public void setcidade(String strParametroCidade) {
cidades.add(strParametroCidade);
}
public ArrayList getcidade() {
return cidades;
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
public void setuf (String strParametroUf) {
ufs.add(strParametroUf);
}
public ArrayList getuf() {
return ufs;
}
////////////////////////////////////////////////////////////
}[/code]
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();
}
}
}
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
[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!
[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
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?)