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
Obrigado desde já