Visualizzazione dei risultati da 1 a 2 su 2

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    39

    problema carte in movimento

    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);
               
        }
    }
    Ultima modifica di LeleFT; 08-05-2017 a 11:51 Motivo: Aggiunti i tag CODE

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.