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); } }

Rispondi quotando