Aines
18-04-2006, 12:56
Si dice flickering? Comunque intendo lo sfarfallio degli oggetti disegnati causato (penso) da continue chiamate al metodo repaint().
Spiego meglio.
L'applicazione disegna dei rettangoli colorati su un pannello (proprio un jPanel).
I rettangoli sono conservati in un array.
L'utente può cliccare su un rettangolo e trascinarlo, il codice è gestito in questo modo.
// Quando il mouse viene premuto sul pannello di disegno,
// cerca il giusto blocco nell'array, usando le coordinate
private void jPanel1MousePressed(java.awt.event.MouseEvent evt)
{
for(int i = 0; i < blockIndex; i++)
{
if(blockList[i].contains(evt.getX(), evt.getY()))
{
movingBlock = blockList[i];
blockSelected = true;
break;
}
}
}
// Quando il mouse si sposta, cambia le coordinate del blocco selezionato
private void jPanel1MouseDragged(java.awt.event.MouseEvent evt)
{
if(blockSelected)
{
movingBlock.setXY(evt.getX(), evt.getY());
this.repaint(); // ridisegna ogni cosa ogni volta che l'evento
// viene sparato
}
}
Mi pare proprio uno di quei problemi legati all'inesperienza....
Soluzioni brillanti? Grazie :D
Spiego meglio.
L'applicazione disegna dei rettangoli colorati su un pannello (proprio un jPanel).
I rettangoli sono conservati in un array.
L'utente può cliccare su un rettangolo e trascinarlo, il codice è gestito in questo modo.
// Quando il mouse viene premuto sul pannello di disegno,
// cerca il giusto blocco nell'array, usando le coordinate
private void jPanel1MousePressed(java.awt.event.MouseEvent evt)
{
for(int i = 0; i < blockIndex; i++)
{
if(blockList[i].contains(evt.getX(), evt.getY()))
{
movingBlock = blockList[i];
blockSelected = true;
break;
}
}
}
// Quando il mouse si sposta, cambia le coordinate del blocco selezionato
private void jPanel1MouseDragged(java.awt.event.MouseEvent evt)
{
if(blockSelected)
{
movingBlock.setXY(evt.getX(), evt.getY());
this.repaint(); // ridisegna ogni cosa ogni volta che l'evento
// viene sparato
}
}
Mi pare proprio uno di quei problemi legati all'inesperienza....
Soluzioni brillanti? Grazie :D