1.) Niesom programator
2.) Nerobim z teba blbca
3.) Nevidim tvoj kod, takze neviem preco ti stvorec uskakuje, resp. zostava stara poloha (toto viem to je zrejme preto ze za kazdym kreslis a obsah sa nemaze, takze musis prekrit ten object co tam bol znova pozadim a az potom nakreslit novy).
4.) Bol to navod ako by som to robil ja, taky ze sa vyhnes zmienenym problemom. Lebo za kazdym kreslis, cely obrazok na obrazovku a nie len stvorec, cize tvoj povodny obrazok sa prekryje novym s rovnakou velkostou.
Ospravedlnujem sa ti, ak ta moj koment urazil. Tak teraz to skusim inak:
class MyCanvas extends JPanel{
// Ta affina transformacia sa hodi lebo mozes pouzivat zlozitejsie objekty,
// alebo presuvat viacero objektou, preto by som ju na tvojom mieste pouzil
Shape object;
Color objColor;
Dimension windowSize;
AffineTransform af;
Timer timer;
public MyCanvas(){
// kod
timer = new Timer(20, this);
timer.start();
}
@Override
public void paint(Graphics g){
update(g);
}
@Override
public void update(Graphics g){
Graphics2D g2d = (Graphics2D) g;
// Prekreslis cele okno napriklad na bielo, pripadne mozes len objekt
g2d.setColor(Color.WHITE);
g2d.drawRect(0,0, windwSize.width, windowSize.height);
// Nastavis farbu na farbu objektu
g2d.setColor(objColor);
g2d.draw(object);
}
// Event Timeru
public void actionPerformed(ActionEvent e){
object = af.createTransformedShape(object);
repaint();
}
}
Takze, asi budes musiet prekreslit za kazdym stary objekt pozadim a potom len updatnut JPanel. Na updatovanie existuje metoda repaint(), nemusis volat update(Graphics g).