Buona sera ho un problema con una classe che fa muovere delle carte(immagini) lungo un pannello, ho creato un thread interno che passa al pannello le immagini e le fa muovere in diagonale, non capisco perche' arrivata alla fine la carta non resta sul pannello nonostante il repaint non viene usato alla fine dell'escursione.qualcuno puo' darmi delle delucidazioni?
grazie
codice:
package medium;
/**
* Visualizza delle immagini in sequenza, spostandole lungo l'asse x
*/
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.imageio.*;
import java.io.*;
@SuppressWarnings("serial")
class PannelloO extends JPanel{
Image correnteImg;
Image retro;
int x=0;
int y=50;
public PannelloO(){
super();
setBackground(Color.green);
this.setBorder(new EtchedBorder());
}
public void disegnastandard(){
correnteImg=retro;
repaint();
}
public void disegna(Image im,int i){
correnteImg=im;
if (i==40){
return;
}
repaint();
}
public void paint(Graphics g){
super.paint(g);
g.drawImage(correnteImg,x,y,null);
x=x+20;
y=y+10;
}
public void reset(){x=20;y=20;}
}
@SuppressWarnings("serial")
public class Sequenza extends JFrame{
PannelloO p;
Image []im=new Image[41];
Image retro;
JPanel south=null;
JButton start=null;
boolean inProgress=false;
public Sequenza(){
super("Sequenza Foto");
getContentPane().setLayout(new BorderLayout());
p= new PannelloO();
for (int i=1;i<=im.length;i++ ) {
try{
im[i] = ImageIO.read(new File("carte/b"+i+".jpg"));
}catch(Exception e){System.out.println(e);}
}
try{
retro = ImageIO.read(new File("carte/retro.jpg"));
}catch(Exception e){System.out.println(e);}
start=new JButton("start");
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
start();
}
});
south=new JPanel();
south.add(start);
add(p,BorderLayout.CENTER);
add(south,BorderLayout.SOUTH);
setSize(550,400);
setLocation(200,200);
setVisible(true);
}
public void start(){
if(inProgress)
return;
inProgress=true;
p.disegnastandard();
Thread runner=new Thread(){
public void run(){
for (int j=1;j<=im.length;j++){
Image g=im[j];
int i=1;
p.reset();
while (i<=40){
p.disegna(g,i);
i++;
try {
sleep(50);
} catch (Exception ex) {}
}
}
inProgress=false;
}
};
runner.start();//deve lasciare libero il thread che richiama paint...
}
public static void main(String[] args) {
Sequenza s = new Sequenza();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}