Buon giorno a tutti. Eccomi nuovamente a chiedere il vostro aiuto per la risoluzione di un problema.
Nel mio programma vorrei fare in modo che, quando si schiaccia un bottone, 5 immagini si "stampino" sul JPanel nel quale sono alloggiate con un piccolo ritardo. Inoltre mi piacerebbe che una volta schiacciato il bottone questo meccanismo (stampa con ritardo delle immagini) si ripetesse per tre volte. Ecco che cosa ho pensato di fare io
codice:
import javax.swing.*;
import java.awt.*;
import java.util.*;
public class BackgroundPanel extends JPanel
{
private Image im1;
private Image[] d;
private int n1,n2,n3,n4,n5,height,width;
private Graphics f;
private MyThread th;
public BackgroundPanel(int n1, int n2, int n3, int n4, int n5)
{
//aggiungo immagine
Toolkit t= Toolkit.getDefaultToolkit();
im1 = t.getImage("tavolo.jpg");
d = new Image[6];
d[0] = t.getImage("dice1.png");
d[1] = t.getImage("dice2.png");
d[2] = t.getImage("dice3.png");
d[3] = t.getImage("dice4.png");
d[4] = t.getImage("dice5.png");
d[5] = t.getImage("dice6.png");
MediaTracker m1= new MediaTracker(this);
m1.addImage(im1, 1);
m1.addImage(d[0], 2);
m1.addImage(d[1], 3);
m1.addImage(d[2], 4);
m1.addImage(d[3], 5);
m1.addImage(d[4], 6);
m1.addImage(d[5], 7);
try
{
m1.waitForAll();
}
catch (InterruptedException e)
{
}
width=756;
height=817;
}
public void paintComponent (Graphics g)
{
super.paintComponent(g);
int x,y;
x=120;
y=350;
g.drawImage(im1, 0, 0,width,height,null);
g.drawImage(d[n1], x, y,null);
g.drawImage(d[n2], 2*x, y,null);
g.drawImage(d[n3], 3*x, y,null);
g.drawImage(d[n4], 4*x, y,null);
g.drawImage(d[n5], 5*x, y,null);
}
public Image ReturnIm1()
{
return (im1);
}
public void Repaint()
{
int i;
for(i=0; i<3; i++)
{
th = new MyThread();
th.start();
try
{
Thread.sleep(100);
n1=(int)(6*Math.random());
n2=(int)(6*Math.random());
n3=(int)(6*Math.random());
n4=(int)(6*Math.random());
n5=(int)(6*Math.random());
height=this.getHeight();
width=this.getWidth();
this.repaint();
}
catch (InterruptedException e)
{
th.setStop(true);
}
}
}
}
Ecco il codice della classe che estende il Thread:
codice:
public class MyThread extends Thread
{
private boolean stop=false;
public void run()
{
for(int i=1; true; i++)
{
if (stop) return;
}
}
public void setStop(boolean val)
{
stop=val;
}
}
Quando schiaccio il bottone le immagini vengono stampate sul JPanel con un piccolo ritardo ma il procedimento non viene ripetuto 3 volte. O meglio io non riesco a vedere che le immagini vengono ridisegnate per 3 volte.