Problema vector

6 respostas
N3kr0N

Olá pessoal, segue o código:

private void configuraListaRespostaTipoPonto() {

        PontoColeta pt = new PontoColeta(1, "ALT01");
        PontoColeta pt2 = new PontoColeta(2, "ALT02");
        RespostaSupervisionada rSuper1 = new RespostaSupervisionada();
        rSuper1.setDatahora(new Date(2009, 6, 23, 16, 07, 50));
        rSuper1.setResposta("Deu paw");
        rSuper1.setSigla("D.P.F.");

        RespostaSupervisionada rSuper2 = new RespostaSupervisionada();
        rSuper2.setDatahora(new Date(2007, 6, 30, 12, 07, 50));
        rSuper2.setResposta("SIM");
        rSuper2.setSigla("L.T.");

        RespostaSupervisionada rSuper3 = new RespostaSupervisionada();
        rSuper3.setDatahora(new Date(2008, 6, 03, 10, 07, 50));
        rSuper3.setResposta("NÃO TEM");
        rSuper3.setSigla("R.P.");


        List<RespostaSupervisionada> respostas = new ArrayList<RespostaSupervisionada>();
        respostas.add(rSuper1);
        respostas.add(rSuper2);
        respostas.add(rSuper3);
        
        AcompanhamentoTipo aTipo = new AcompanhamentoTipo(1, pt, respostas);
        AcompanhamentoTipo aTipo2 = new AcompanhamentoTipo(2, pt2, respostas);

        ArrayList<AcompanhamentoTipo> al = new ArrayList();
        al.add(aTipo);
        al.add(aTipo2);

        int count = 2;

        //estrutura de dados da tabela
        Vector dados = new Vector();//todos os dados da tabela
        Vector linha = new Vector();
        Vector linhaAux = new Vector();
        Vector headers = new Vector();//cabecalho da tabela

        headers.add("Ponto de Coleta");

        for(int i=0 ; i<count ; i++){
            AcompanhamentoTipo tipoPonto = al.get(i);
            List<RespostaSupervisionada> resp = tipoPonto.getRespostas();

            PontoColeta pTColeta = tipoPonto.getPontodecoleta();
            String nomePTColeta = pTColeta.getNome();

            linha.clear();
            linha.add(nomePTColeta);//adiciona na linha o ponto de coleta

            for( int j=0 ; j<resp.size() ; j++){
                RespostaSupervisionada rSup = resp.get(j);
                String date = rSup.getDatahora().toString();
                String resposta = rSup.getResposta();
                String sigla = rSup.getSigla();

                linha.add(resposta);//adiciona na linha resposta i
                linha.add(date);//adiciona na linha data i

                //cabecalho
                if(i==0){
                    headers.add(sigla);//adiciona o cabecalho a sigla da pergunta
                    headers.add("Data/Hora");//adiciona no cabecalho "Data/Hora"
                }
            }//end for

            linhaAux = linha;
            dados.add(linhaAux);//adiciona a linha criada a tabela de dados
            
        }//end for
        tableListaCadastrados.setModel(new javax.swing.table.DefaultTableModel(dados, headers));
        tableListaCadastrados.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        tableListaCadastrados.setSelectionMode(0);
    }

Esse método é responsável por preencher uma tabela, criei uns objetos somente para teste, e então fui rodar mas ele está colocando duas vezes um dos pontos, como o ponto ALT2, debugando vejo que ele adiciona ALT01 normalmente, mas depois, como um passe de mágica, ele coloca ALT2 duas vezes

qual meu erro? :oops:

6 Respostas

N3kr0N

ele tipo pega o último elemento acessado e substitui em todo o vector…
ideias?
deixa eu explicar melhor,
o há uma lista de Objetos AcompanhamentoTipo, e ele tem uma coleção de objetos RespostaSupervisionada
eh um simples for,

for(...){
        //acessa a lista de AcompanhamentoTipo
        for(...){
            //Acessa a lista de respostas

            //forma a linha, on linha é um vector
            //com linha.add()
        }
        dados.add(linha)
    }

mas o problema é que ele está botando no meu “Vector dados” um numero de dados.size() com o ultimo elemento da lista de al.get(al.size());
como em um passo de magica, pelo menos para mim…
alguem tem uma luz?

N3kr0N

Ae galera isso ai eh a saída em cada iteração

i: 0 j: 0 [ALT01, Deu paw, 23/07/2009 16:07] //primeiro objeto da lista de RespostaSupervisionada
i: 0 j: 1 [ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07]//segundo objeto da lista de RespostaSupervisionada
i: 0 j: 2 [ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]//terceiro objeto da lista de RespostaSupervisionada
[ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07] //a linha formada

[[ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]]//o vetor[][] dados

i: 1 j: 0 [ALT02, Deu paw, 23/07/2009 16:07]
i: 1 j: 1 [ALT02, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07]
i: 1 j: 2 [ALT02, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]
[ALT02, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]
[[ALT02, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07], [ALT02, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]]//o vetor dados, veja que ele  troca tudo
i: 2 j: 0 [ALT01, Deu paw, 23/07/2009 16:07]
i: 2 j: 1 [ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07]
i: 2 j: 2 [ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]
[ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]
[[ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07], [ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07], [ALT01, Deu paw, 23/07/2009 16:07, SIM, 30/07/2007 12:07, NÃO TEM, 03/07/2008 10:07]]//veja que ele novamente troca tudo

nada ate agora… afff :cry:

N3kr0N

se alguém poder me ajudar! Eu agradeceria muito! :stuck_out_tongue:
Ja tentei com ArrayList mas não sei bem como fazer esse cast pra Object[][] e ja tentei colocando direto. criando um DefaultTableModel
setando o model na tabela e adicionando por iteração em um vector e no final do for externo, ainda dentro dele, dando um addRow(vector linha);
mas nada…
se alguem tiver alguma luz… o código ta aqui http://pastebin.com/m4b18bb8b , coloquei aqui so para melhorar a visualização…
Obrigado!

N3kr0N

resolvido…
:oops:
merda minha
Problema: Não estava realocando o ponteiro da linha, fazendo com que todos os objetos linha tivessem seu conteúd modificado
Solução: Declarar Vector linha = new Vector() dentro do primeiro for :oops: :oops: :oops:
:stuck_out_tongue:
q merda…

Marck

Olá,

Vê se é isso que voce precisa:

/**
 *
 * @author marciliosouza
 */
public class Teste {


    public static void main(String [] args)
    {
        new Teste().createForm();
    }

        private JTable configuraListaRespostaTipoPonto() {

            PontoColeta pt = new PontoColeta(1, "ALT01");
            PontoColeta pt2 = new PontoColeta(2, "ALT02");
            RespostaSupervisionada rSuper1 = new RespostaSupervisionada();
            rSuper1.setDatahora(new Date(2009, 6, 23, 16, 07, 50));
            rSuper1.setResposta("Deu paw");
            rSuper1.setSigla("D.P.F.");

           RespostaSupervisionada rSuper2 = new RespostaSupervisionada();
           rSuper2.setDatahora(new Date(2007, 6, 30, 12, 07, 50));
           rSuper2.setResposta("SIM");
           rSuper2.setSigla("L.T.");

           RespostaSupervisionada rSuper3 = new RespostaSupervisionada();
           rSuper3.setDatahora(new Date(2008, 6, 03, 10, 07, 50));
           rSuper3.setResposta("NÃO TEM");
           rSuper3.setSigla("R.P.");

           List<RespostaSupervisionada> respostas = new ArrayList<RespostaSupervisionada>();
           respostas.add(rSuper1);
           respostas.add(rSuper2);
           respostas.add(rSuper3);

           List<RespostaSupervisionada> respostas2 = new ArrayList<RespostaSupervisionada>();
           respostas2.add(rSuper3);

           AcompanhamentoTipo aTipo = new AcompanhamentoTipo(1, pt, respostas);
           AcompanhamentoTipo aTipo2 = new AcompanhamentoTipo(2, pt2, respostas2);

           ArrayList<AcompanhamentoTipo> al = new ArrayList();
           al.add(aTipo);
           al.add(aTipo2);

           //estrutura de dados da tabela
           Vector dados = new Vector();//todos os dados da tabela
           Vector linha = new Vector();
           Vector headers = new Vector();//cabecalho da tabela

           headers.add("Ponto de Coleta");
           headers.add("Sigla");//adiciona o cabecalho a sigla da pergunta
           headers.add("Resposta");
           headers.add("Data/Hora");//adiciona no cabecalho "Data/Hora"

           for(AcompanhamentoTipo acompanhamento : al)
           {
               List<RespostaSupervisionada> resp = acompanhamento.getRespostas();
    
               for(RespostaSupervisionada resposta : resp)
               {
                   linha.add(acompanhamento.getPontodecoleta().getNome());
                   linha.add(resposta.getSigla());
                   linha.add(resposta.getResposta());
                   linha.add(resposta.getDatahora());

                   dados.add(linha);//adiciona a linha criada a tabela de dados
                   linha = new Vector();
               }
           }

           JTable jt = new JTable(dados, headers);
           return jt;
       }

        public void createForm()
        {
            JFrame j = new JFrame();
            j.setBounds(100, 100, 100, 100);

            JPanel jp = new JPanel();
            jp.add(configuraListaRespostaTipoPonto());
            j.add(jp);
            j.setVisible(true);

        }

}

Valeu

Marck

rss

era isso mesmo!
Não vi que voce já tinha resolvido, por isso postei!

Acho que se voce usar o for each fica mais limpo o código.

abraço!

Criado 27 de junho de 2009
Ultima resposta 29 de jun. de 2009
Respostas 6
Participantes 2