Ajuda com Jtable

Bom galera boa tarde estou com a seguinte dificuldade tenho uma Jtable e tenho que preenche-la com um arquivo texto, fiz um abstract table model e as informaçoes da tablea estao divididads por virgula, meu codigo

[code]public class Tabela extends AbstractTableModel{
//O nome das colunas da sua tabela
private String [] colunas = {“Nome”,“Email”,“Interesse”};
//O que vai ser preenchido em cada coluna
ArrayList colecao = new ArrayList();
//Essa parte teremos que olhar como vai ser a separaçao dos atributos
public Tabela(){
File ArqTxt = new File(“C://lista.txt”);
FileInputStream fi = null;
try {
fi = new FileInputStream(ArqTxt);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String readLine = “”;
String conteudo = “”;
Scanner scan = new Scanner(fi);
while (scan.hasNext()) {
readLine = scan.next();

        conteudo += readLine;
    }
}
//Conta o numero de linhas
public int getRowCount() {
    return colecao.size();
}
//Conta o numero de colunas
public int getColumnCount() {
    return colunas.length;
}

//Pega o nome das colunas
@Override
public String getColumnName(int column) {
    return colunas[column];
}
//retorna de os objetos que voce quer em cada linha
public Object getValueAt(int rowIndex, int columnIndex) {
     
    if(columnIndex == 0)
    {
        
    }
    if(columnIndex == 1)
    {
        
    }else{

    }
}
//Lista os objetos e da refresh na table
public void listar()
{
   
    fireTableDataChanged();
}

}
[/code]

Você deve separar as coisas:

  1. Crie uma classe chamada Contato, com os campos nome, interesse e email;
  2. Crie um método estático nessa classe, que retorne uma lista de contatos a partir do arquivo;
  3. Crie um TableModel que liste uma lista de contatos. Esse aqui lista livros, é só adaptar:
    http://www.guj.com.br/posts/list/132698.java#714736

[quote=ViniGodoy]Você deve separar as coisas:

  1. Crie uma classe chamada Contato, com os campos nome, interesse e email;
  2. Crie um método estático nessa classe, que retorne uma lista de contatos a partir do arquivo;
  3. Crie um TableModel que liste uma lista de contatos. Esse aqui lista livros, é só adaptar:
    http://www.guj.com.br/posts/list/132698.java#714736[/quote]

Cara eu consegui aqui so to com uma duvida besta por exemplo qdo eu cadastro eu quero q a tabela atualiza como eu faria isso?

estou chamando esse metodo listar so que ele nao esta funcionando pq?

aqui esta meu codigo e ele esta funcionando

[code]public class Tabela extends AbstractTableModel{
//As colunas da sua tabela
private String [] colunas = {“Nome”,“Celular”,“Interesse”};
//O que vai ser preenchido em cada coluna
ArrayList nome = new ArrayList();
ArrayList email = new ArrayList();
ArrayList interesse = new ArrayList();

public Tabela(){
	File ArqTxt = new File("C://lista.txt");
	FileInputStream fi = null;
	
	try {
		fi = new FileInputStream(ArqTxt);
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	String readLine = "";
	String conteudo = "";
	Scanner scan = new Scanner(fi);
    while (scan.hasNext()) {
    	readLine = scan.next();
    	String b[] = readLine.split(",");
        nome.add(b[0]);
        email.add(b[1]);
        interesse.add(b[2]);
    }
}
//Conta o numero de linhas
public int getRowCount() {
    return nome.size();
}
//Conta o numero de colunas
public int getColumnCount() {
    return colunas.length;
}

//Pega o nome das colunas
@Override
public String getColumnName(int column) {
    return colunas[column];
}
//retorna de os objetos que voce quer em cada linha
public Object getValueAt(int rowIndex, int columnIndex) {
     
    if(columnIndex == 0)
    {	for(int i=0; i<nome.size();i++){
    		return nome.get(i);
    }
    }if(columnIndex == 1){
    	for(int i=0; i><nome.size();i++)
    	return email.get(i);
    }else
    {	for(int i=0; i><nome.size();i++)
    	return interesse.get(i);
    }
    return null;

}
public void listar(){
	fireTableDataChanged();
}

}[/code];

Seu model não deveria ter 3 ArrayLists, só 1. É melhor você criar uma classe que contenha essas 3 informações.

Aí, basta adicionar no model um método de add, e usar o fireTableRowsInserted para dizer que uma linha foi adicionada:

No caso do seu model, ficaria assim:

public void add(String nome, String celular, String email) { this.nome.add(nome); this.celular.add(celular); this.email.add(email); fireTableRowsInserted(nome.length()-1, nome.length()-1); }

No seu form, chame esse método.

Mas aconselho fortemente a não trabalhar com 3 arraylists, e sim fazer uma classe, e trabalhar com uma lista só.

[quote=ViniGodoy]Seu model não deveria ter 3 ArrayLists, só 1. É melhor você criar uma classe que contenha essas 3 informações.

Aí, basta adicionar no model um método de add, e usar o fireTableRowsInserted para dizer que uma linha foi adicionada:

No caso do seu model, ficaria assim:

public void add(String nome, String celular, String email) { this.nome.add(nome); this.celular.add(celular); this.email.add(email); fireTableRowsInserted(nome.length()-1, nome.length()-1); }

No seu form, chame esse método.

Mas aconselho fortemente a não trabalhar com 3 arraylists, e sim fazer uma classe, e trabalhar com uma lista só.[/quote]

Ta mas que tipo de lista eu iria trabalhar pra fazer a contagem das linhas?

Só estou falando para vc criar uma classe assim:

[code]public class Contato {
private String nome;
private String email;
private String celular;

public Contato(String nome, String email, String celular) {
this.nome = nome.
this.email = email;
this.celular = celular;
}
public String getNome() { return nome; }
public String getCelular() { return celular; }
public String getEmail() { return email; }

public static List carregarDoArquivo(String nomeArquivo) {
//Aqui vc põe o código que lê os contatos do arquivo txt e gera a lista de contatos.
}
}
[/code]

E, depois, no seu TableModel, você cria um único

List<Contato> contatos = new ArrayList<Contato>();

Ao invés de 3 listas.

Entendi bacana =) é agora c ta usando OO,mas é que estou fazendo algo bem simples mesmo, mas aquele metodo fireTableRowsInserted(nome.length()-1, nome.length()-1); ele faz update toda vez q adicionar?

Com aquele método vc avisa a tabela que uma linha foi adicionada naquela posição. E aí ela desenhar aquela linha.

Cara muito obrigado mesmo pela ajuda =)

Cara vc me ajudou bastante mas surgiu algums duvidas bestas minha classe table model ficou assim

[code]public class Tabela extends AbstractTableModel{
//As colunas da sua tabela
private String [] colunas = {“Nome”,“Celular”,“Interesse”};
//O que vai ser preenchido em cada coluna
ArrayList colecao = new ArrayList();
ArrayList nome = new ArrayList();
ArrayList email = new ArrayList();
ArrayList produto = new ArrayList();
Contato contato = new Contato();

public Tabela(){
colecao = (ArrayList) contato.carregarDoArquivo();
}

public void add(String nome, String produto, String email) {
this.nome.add(nome);
this.produto.add(produto);
this.email.add(email);
fireTableRowsInserted(nome.length()-1, nome.length()-1);
}

//Conta o numero de linhas
public int getRowCount() {
    return nome.size();
}
//Conta o numero de colunas
public int getColumnCount() {
    return colunas.length;
}

//Pega o nome das colunas
@Override
public String getColumnName(int column) {
    return colunas[column];
}
//retorna de os objetos que voce quer em cada linha
public Object getValueAt(int rowIndex, int columnIndex) {
    contato = colecao.get(rowIndex);
    if(columnIndex == 0)
    {
       return contato.getNome();
    }if(columnIndex == 1){
       return contato.getEmail();
    }else
    {   return contato.getProduto();
    }
}

}[/code]

e ja a minha classe contato ficou assim

[code]public class Contato {
private String nome;
private String email;
private String produto;

public Contato(){

}

public Contato(String nome, String email, String produto) {
this.nome = nome;
this.email = email;
this.produto = produto;
}
public String getNome() { return nome; }
public String getProduto() { return produto; }
public String getEmail() { return email; }

public static List carregarDoArquivo() {
File ArqTxt = new File(“C://lista.txt”);
FileInputStream fi = null;
List lista = new ArrayList();
try {
fi = new FileInputStream(ArqTxt);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String readLine = “”;
String conteudo = “”;
Scanner scan = new Scanner(fi);
int cont=0;
while (scan.hasNext()) {
readLine = scan.next();
cont++;
String b[] = readLine.split(",");
Contato c = new Contato(b[0], b[1], b[2]);

        lista.add(c);
      /*  System.out.print(interesse);
         System.out.print(nome);
          System.out.print(email);*/
    }
 return lista;

}
public void add(String nome,String email,String produto) throws IOException{
File Arqtxt = new File(“C://lista.txt”);
FileInputStream fis = null;
try {
fis = new FileInputStream(Arqtxt);
} catch (FileNotFoundException ex) {
Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
}
String readLine="";
String conteudo="";
Scanner scan = new Scanner(fis);
while (scan.hasNext()) {
readLine = scan.next();
conteudo += readLine +"\r\n";
}

    conteudo += nome+","+email+","+produto;

    FileOutputStream fo = null;
    try {
        fo = new FileOutputStream(Arqtxt, false);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        fo.write(conteudo.getBytes());
    } catch (IOException ex) {
        JOptionPane.showInputDialog(null,"Erro na hora de gravar");
        Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
    }

}

}[/code]

so que ta dando erro… ve se fiz as alteraçoes como voce sugeriu?
continua nao atualizando a tabela