ArrayList de Objetos e JTable[RESOLVIDO]

6 respostas
M

Pessoal, estou com uma dúvida, e não sei por onde começar.

Peguei essa classe aqui no fórum que manipula um modelo pra JTable, mas no meu arraylist eu tenho vários objetos do mesmo tipo e no método addRow ele tem como argumentos:
public void addRow( String [] dadosLinha){
		getLinhas().add(dadosLinha);
		int linha = getLinhas().size()-1;
		fireTableRowsInserted(linha,linha);
		return;
	}
Não sei como eu posso adicionar meus objetos na JTable. Essa é a minha classe de onde tento adicionar os objetos:
public void preencheTabela(){
        ArrayList lista = main.listaTodos();
        String[] cabecalho = {"CODIGO","NOME","ENDERECO","D.NASC."};

        ModeloTabela mo = new ModeloTabela(lista, cabecalho);
        
        jtPesquisarDizimistas.setModel(mo);
    }
Esta classe, peguei aqui no fórum.
package visao;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.table.AbstractTableModel;


public class ModeloTabela extends AbstractTableModel{

	private ArrayList linhas = null;
	private String [] colunas = null;
	

	
	public ModeloTabela(ArrayList dados, String[] colunas){
		setLinhas(dados);
		setColunas(colunas);
	}

	
	public int getColumnCount() {
        return getColunas().length;
    }

	
	public int getRowCount() {
        return getLinhas().size();
    }

	
	public Object getValueAt(int rowIndex, int columnIndex) {
		// Obtem a linha, que é uma String []
		String [] linha = (String [])getLinhas().get(rowIndex);
		// Retorna o objeto que esta na coluna
		return linha[columnIndex];
	}

	public String[] getColunas() {return colunas;}
	public ArrayList getLinhas() {return linhas;}
	public void setColunas(String[] strings) {colunas = strings;}
	public void setLinhas(ArrayList list) {linhas = list;}

	
	public void setValueAt(Object value, int row, int col){
		// Obtem a linha, que é uma String []
		String [] linha = (String [])getLinhas().get(row);
		// Altera o conteudo no indice da coluna passado
		linha[col] = (String)value;
		// dispara o evento de celula alterada
		fireTableCellUpdated(row,col);
	}
	
	
	public void addRow( String [] dadosLinha){
		getLinhas().add(dadosLinha);
		// Informa a jtable de que houve linhas incluidas no modelo
		// COmo adicionamos no final, pegamos o tamanho total do modelo
		// menos 1 para obter a linha incluida.
		int linha = getLinhas().size()-1;
		fireTableRowsInserted(linha,linha);
		return;
	}

	
	public void removeRow(int row){
		getLinhas().remove(0);
		// informa a jtable que houve dados deletados passando a
		// linha reovida
		fireTableRowsDeleted(row,row);
	}

	
	public boolean removeRow(String val, int col){
		// obtem o iterator
		Iterator i = getLinhas().iterator();
		int linha = 0;
		// Faz um looping em cima das linhas
		while(i.hasNext()){
			// Obtem as colunas da linha atual
			String[] linhaCorrente = (String[])i.next();
			linha++;
			// compara o conteudo String da linha atual na coluna desejada
			// com o valor informado
			if( linhaCorrente[col].equals(val) ){
				getLinhas().remove(linha);
				// informa a jtable que houve dados deletados passando a
				// linha removida
				fireTableRowsDeleted(linha,linha);
				return true;
			}
		}
	
		return false;
	}

	
	public String getColumnName(int col){
		return getColunas()[col];
	}
}

6 Respostas

F

Olha aqui!

http://www.guj.com.br/posts/list/116038.java

Att.

Marco A.

M

Mas nesse código do cara ai, cade o método de addRows?

F

O código do “cara aí” é meu… rsrsrs

Pra que vc quer o método AddRow?

Tá tudo no código, nem precisa alterar nada (a não ser o seu bean)

Qualquer coisa retorna

Abraço

M.A.

M
fanama:
O código do "cara aí" é meu... rsrsrs

Pra que vc quer o método AddRow?

Tá tudo no código, nem precisa alterar nada (a não ser o seu bean)

Qualquer coisa retorna

Abraço

M.A.

Afi é mesmo!!!! Faltou pensar um pouquinho :lol:
public void preencheTabela(){
        //Retorna um array com todos os objetos do banco.
        ArrayList lista = main.listaTodos();

        //Esse aux deve ter vários vetores de String.
        ArrayList aux = new ArrayList();

        //Cabecalho da tabela.
        String[] cabecalho = new String[] {"CODIGO","NOME","ENDERECO","D.NASC."};

        int i = 0;
        while(i < lista.size()){

            novoDizimista = new Dizimista();
            novoDizimista = (Dizimista) lista.get(i);

            String codigo = String.valueOf(novoDizimista.getCodigo());
            String nome = novoDizimista.getNome();
            String end = novoDizimista.getEndereco();
            String data = novoDizimista.getData();

            //Dados que estarao na tabela.
            String[] dados = {codigo, nome, end, data};

            //Agora o aux tem varios vetores de String.
            aux.add(new String[]{codigo, nome, end, data});

            //Passando o conteudo e o cabecalho da tabela.
            ModeloTabela modelo = new ModeloTabela(aux, cabecalho);

            //Usando o modelo.
            jtPesquisarDizimistas.setModel(modelo);

            //Liberando objetos.
            modelo = null;
            novoDizimista = null;
            i++;
        }
    }
M

Galera, VALEU, me quebraram um galhão também…
Obrigado

V

Já que você venceu a primeira barreira, que é a de criar um TableModel próprio, faça um modelo que trabalhe diretamente com sua lista de Dizimista. Isso vai deixar o código mais claro e evitar casts. Veja um exemplo:
http://www.guj.com.br/posts/list/132698.java#714736

Não faz muito sentido usar um modelo como o que você postou, já que ele é uma cópia incompleta do DefaultTableModel. O default já é ruim, pior ainda usar uma versão inferior a ele, cuja manutenção ficará ainda por sua conta…

Criado 30 de janeiro de 2009
Ultima resposta 22 de set. de 2009
Respostas 6
Participantes 4