Ajuda: Caminho percorrido... Como apresentar? trajectoria de um objecto! [RESOLVIDO]

Boas, eu tou fazendo um programa que tem as coordenadas em q uma pessoa esteve de 5 em 5 minutos e das 8 as 24h … E queria representar graficamente esse trajecto, de todas elas para verificar quando se encontram e agir depois de acordo com os seus perfis (mas isso n interessa para esta parte do prog). Eu usei um JPanel e desenhava sempre todos eles primeiro as 8:00, depois as 8:00 e as 8:05, depois as 8:00, 8:05 e 8:10, depois as 8:00, 8:05, 8:10 e 8:15 e etc etc etc ate as 24, ora bem isto fica muito pesado… Eu queria saber se tem ideias para implementar este tipo de aplicacao ou se o JPanel n e adequado ou se existe um modo de acrescentar os novos pontos ao desenho em vez de os redesenhar todos de cada vez…

Brigadão a todos…

Já agora coloco a classe DesenhaMundo que é o JPanel q e sempre desenhado e tambem o metodo que o chama na janela principal…


 public DesenhaMundo (Vector pdas, Relogio r, int s)
    {
        this.pdas=pdas;
        this.r = r;
        this.r_paint = new Relogio();
        this.old_r_paint = new Relogio();
        this.sel = s;
        bigger_X=0;
        bigger_Y=0;
        for(int i=0;i<pdas.size();i++)
        {
            if(((Pda) pdas.elementAt(i)).pos.getX(r.getHora(), r.getMinuto())>bigger_X)
                bigger_X = ((Pda) pdas.elementAt(i)).pos.getX(r.getHora(), r.getMinuto());
            if(((Pda) pdas.elementAt(i)).pos.getY(r.getHora(), r.getMinuto())>bigger_Y)
                bigger_Y = ((Pda) pdas.elementAt(i)).pos.getY(r.getHora(), r.getMinuto());

        }
        area = new Dimension(bigger_X*40+200, bigger_Y*40+200);
        this.setPreferredSize(area);


    }

    public void paint(Graphics g)
    {
        super.paintComponent(g);
       
        for(int i=0;i<pdas.size();i++)
        {

            do
            {
                    if  (((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(), r_paint.getMinuto()) >=0 )
                    if  (((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(), r_paint.getMinuto()) >=0 )
                    if(((Pda) pdas.elementAt(i)).getPerfil().getSexo().equals("Masculino"))


                    {
                        g.setColor(Color.blue);
                        if (((Pda) pdas.elementAt(i)).enviou_msg)
                            g.setColor(Color.orange);

                        if (((Pda) pdas.elementAt(i)).recebeu_msg)
                            g.setColor(Color.green);

                        g.fillOval(((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(),r_paint.getMinuto())*40+1,
                                ((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(),r_paint.getMinuto())*40+1,14,14);
                        g.setColor(Color.black);
                        if (i == sel)
                        {
                            g.setColor(Color.yellow);
                            g.drawLine(((Pda) pdas.elementAt(i)).pos.getX(old_r_paint.getHora(),old_r_paint.getMinuto())*40+7,
                                ((Pda) pdas.elementAt(i)).pos.getY(old_r_paint.getHora(),old_r_paint.getMinuto())*40+7,
                                ((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(),r_paint.getMinuto())*40+7,
                                ((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(),r_paint.getMinuto())*40+7);
                        }else
                        {
                            g.drawLine(((Pda) pdas.elementAt(i)).pos.getX(old_r_paint.getHora(),old_r_paint.getMinuto())*40+7,
                                ((Pda) pdas.elementAt(i)).pos.getY(old_r_paint.getHora(),old_r_paint.getMinuto())*40+7,
                                ((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(),r_paint.getMinuto())*40+7,
                                ((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(),r_paint.getMinuto())*40+7);
                        }
                        g.setColor(Color.white);
                        g.drawString(Integer.toString(((Pda) pdas.elementAt(i)).getNum()),
                                ((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(),r_paint.getMinuto())*40+1,
                                ((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(),r_paint.getMinuto())*40+14);
                        old_r_paint.setMinuto(r_paint.getMinuto());
                        old_r_paint.setHora(r_paint.getHora());
                        r_paint.avancaRelogio();
                    }
                    else
                    {

                        g.setColor(Color.pink);
                        if (((Pda) pdas.elementAt(i)).enviou_msg)
                            g.setColor(Color.orange);

                        if (((Pda) pdas.elementAt(i)).recebeu_msg)
                            g.setColor(Color.green);

                        g.fillOval(((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(),r_paint.getMinuto())*40+1,
                                ((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(),r_paint.getMinuto())*40+1,14,14);
                        g.setColor(Color.black);
                        g.drawString(Integer.toString(i),
                        ((Pda) pdas.elementAt(i)).pos.getX(r_paint.getHora(),r_paint.getMinuto())*40+1,
                        ((Pda) pdas.elementAt(i)).pos.getY(r_paint.getHora(),r_paint.getMinuto())*40+14);
                        old_r_paint.setHora(r_paint.getHora());
                        old_r_paint.setMinuto(r_paint.getMinuto());
                        r_paint.avancaRelogio();
                   }
            } while(!r_paint.mesmoTempo(r));
            r_paint.reset();
            old_r_paint.reset();
        }

    }
 public void iniciaGrafSim()
       {

           Vector sel_pdas = new Vector();
           for (int i=0; i< lista.getSelectedValues().length ; i++)
           {
               sel_pdas.add(lista.getSelectedValues()[i]);
           }
           tempo.setText(r.getHora()+" : "+r.getMinuto());
           tempo.repaint();
           DesenhaMundo d = new DesenhaMundo(sim.getPdas(), r, seleccionado);
           //DesenhaMundo d = new DesenhaMundo(sel_pdas, r, seleccionado);
           scroll_image = new JScrollPane(d);
            pane.add(scroll_image,"Center");
            //Simula o mundo n vezes
            for (int i=1; i<cfg.NUM_HORAS*(60/cfg.PASSO_HORARIO); i++)
            {
                pane.remove(scroll_image);
                sim.simulaMundo(r.getHora(), r.getMinuto());
                r.avancaRelogio();
                tempo.setText(r.getHora()+" : "+r.getMinuto());
                tempo.repaint();
                d = new DesenhaMundo(sim.getPdas(), r, seleccionado);
                //d = new DesenhaMundo(sel_pdas, r, seleccionado);

           scroll_image = new JScrollPane(d);
           

           pane.add(scroll_image,"Center");
           j.setVisible(true);

          //Pausa entre redesenhos
       /*    if(slider.getValue()==-500)
           {
               while(slider.getValue()==-500);
           }
           else
           {
               // int start = (int) System.currentTimeMillis();
               // while(((int) System.currentTimeMillis()) < start + 2000);//Math.abs(slider.getValue())*10);
               try {
                   Thread.sleep(2000);//;currentThread().(2000);
               } catch (InterruptedException e) {
                   e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
               }
           }*/

        }
    }

Nota, ainda me falta implementar tambem a pausa entre os desenhos, mas nisso pensarei depois de por isto a funcionar bem, entretanto queria era desenhar isto da melhor forma possivel… Mas ja agora fica aqui a ideia para quem kiser dar a sua opiniao acerca da pausa, tambem e bem vinda :smiley:

Obrigado desde já :slight_smile:

Usei uma BufferedImage … e fui chamando o repaint()…