Jtable

6 respostas
ken420

Tenho minhas linhas selecionadas em uma jtable

int[] selecao = tabelaOriginal.getSelectedRows();

preciso adiciona esta selecao em uma tabela

tabelaDestino.addRow(?????);//aqui ele pede um object tem como eu converter o (int[]selecao) em um object para passar as linhas selecionadas para a tabela destino?

Grato.

6 Respostas

ViniGodoy

O addRow serve para adicionar linhas de dados em uma tabela.

Você precisa:

a) Perguntar ao model da tabela que tem a seleção quais dados estão nessa tabela;

b) Fazer um for sobre todas as linhas;

c) Adiciona-las na tabela seguinte.

Você tem um model próprio, não tem? Ou está fazendo a besteira de usar o DefaultTableModel?

ViniGodoy

PS: Procure prestar atenção ao postar os títulos de seu tópico, e evite títulos com inteiros em letras maiúsculas. O ideal é que seu título seja mais descritivo, como por exemplo “Copiar linhas de um JTable para outro”.

Dê uma lida: http://www.istf.com.br/perguntas/

São regras de etiqueta básicas em qualquer fórum.

ken420

estou usando modelo proprio sim, tem algum exemplo?

ViniGodoy
Nesse caso, adicione um método no seu modelo para ler os dados selecionados:
public List<SuaClasse> get(int[] valores) {
   if (valores == null || valores.length == 0) 
      return Collections.emptyList();

   List<SuaClasse> retorno = new ArrayList<SuaClasse>();
   for (int valor : valores) {
      retorno.add(lista.get(valor));
   }
}
E outro para adicionar uma lista de dados:
public void addAll(List<SuaClasse> valores) {
   if (valores == null || valores.size() == 0) 
      return;

   int first = lista.size();
   for (SuaClasse valor : valores) {
      lista.add(valor);
   fireTableRowsInserted(first, first + valores.size());
}
Aí basta fazer, no seu JButton:
modelo2.addAll(modelo1.get(tabela1.getSelectedRows()));
ken420

Viny na minha modeltable suaclasse e lista ficaro sem origem suaclasse seria no caso customerbean? e lista? veja meu codigo se fis algo errado

package br.com.cart.model;
//imports
import br.com.cart.bean.CustomerBean;
import javax.swing.table.DefaultTableModel;
import java.text.SimpleDateFormat;
import java.util.List;

public class ModelTableCustomer extends DefaultTableModel {

    private List dados = null;
    SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");

    public ModelTableCustomer(List dados) {
        this.dados = dados;
    }

    @Override
    public int getColumnCount() {
        return 5;
    }

    @Override
    public int getRowCount() {
        if (this.dados == null) {
            return 0;
        } else {
            return this.dados.size();
        }
    }

    @Override
    public Object getValueAt(int row, int column) {
        CustomerBean cl = (CustomerBean) this.dados.get(row);

        Object retorno = null;
        if (column == 0) {
            retorno = cl.getId();
        } else if (column == 1) {
            retorno = cl.getName();
        } else if (column == 2) {
            retorno = cl.getDateI();
        } else if (column == 3) {
            retorno = cl.getDataN();
        } else if (column == 4) {
            retorno = cl.getEmpresa();
        }
        return retorno;
    }

    @Override
    public String getColumnName(int column) {
        String columnName = "";
        if (column == 0) {
            columnName = "Código";
        } else if (column == 1) {
            columnName = "Nome";
        } else if (column == 2) {
            columnName = "Data de Inc";
        } else if (column == 3) {
            columnName = "Dt Nascimento";
        } else if (column == 4) {
            columnName = "Empresa";
        }
        return columnName;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    public List<SuaClasse> get(int[] valores) {
        if (valores == null || valores.length == 0) {
            return Collections.emptyList();
        }

        List<SuaClasse> retorno = new ArrayList<SuaClasse>();
        for (int valor : valores) {
            retorno.add(lista.get(valor));
        }
    }

    public void addAll(List<SuaClasse> valores) {
        if (valores == null || valores.size() == 0) {
            return;
        }

        int first = lista.size();
        for (SuaClasse valor : valores) {
            lista.add(valor);
            fireTableRowsInserted(first, first + valores.size());
        }
    }
}

vlw por sua atenção!

ViniGodoy

Sim, SuaClasse seria o CustomBean e a lista seria o dados.

Uma coisa, por que seu List está sem o tipo List<CustomBean>?
Use os generics para tornar o código mais seguro e evitar os casts.

Criado 9 de outubro de 2011
Ultima resposta 9 de out. de 2011
Respostas 6
Participantes 2