Visualizzazione dei risultati da 1 a 2 su 2
  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

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    39
    codice:
    package medium;
    /**
     * Visualizza delle immagini in sequenza, spostandole lungo l'asse x e y equando
     * ogni immagine, mediante un Thread, arriva all'ultima posizione passa l'immagine al bottone tramite 
     * gli observer
     */
    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.*;
    import java.util.Observable;
    import java.util.Observer;
    
    
    
    
    
    
    @SuppressWarnings("serial")
    class PannelloO extends JPanel implements Observer{
         public Osservabile obser;
        private JButton j;
        Image correnteImg;
        Image retro;
        int x=0;
        int y=50;
        public PannelloO(){
           super();
           j=new JButton();
           
           
           
            j.setIcon(new ImageIcon("carte/retro.jpg"));
            j.setBorderPainted(false);
            j.setBounds(800, 800, 0, 0);
            
            j.setContentAreaFilled(false);
            j.setEnabled(true);
            
            this.add(j);
            
            setBackground(Color.green);
            this.setBorder(new EtchedBorder());
     
        }
        
        
        public void disegna(Image im,int i){
            correnteImg=im;
            
            
            repaint();
        }
        
        public void paint(Graphics g){
            super.paint(g);
            g.drawImage(correnteImg,x,y,this);
            
            x=x+20;
            y=y+10;
        }
        public void reset(){x=20;y=20;}
        @Override
        public void update(Observable o, Object arg1) {
            obser=(Osservabile)o;
            Image g=obser.getImage();
            ImageIcon ic=new ImageIcon(g);
            j.setIcon(ic);
            
            
        }
    }
     
    
    
    @SuppressWarnings("serial")
    public class Sequenza extends JFrame{
        PannelloO p;
        Osservabile model;
        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();
             try{
                 retro = ImageIO.read(new File("carte/retro.jpg"));
             }catch(Exception e){System.out.println(e);}
             
             
             model=new Osservabile(retro);
             model.addObserver(p);
             p.update(model, null);
             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);}
             }
             
             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;
            
            
            
            Thread runner=new Thread() { 
            public void run(){
                Image g=null;
                 for (int j=1;j<=im.length;j++){
                    g=im[j];
                     int i=1;
                    p.reset();
                    
                     while (i<=40){
                        if(i==40){
                            model.setImage(g);
                            
                        }
                          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);
               
        }
    }
    
    
    package medium;
    
    
    import java.awt.Image;
    import java.util.Observable;
    
    
    /**
     * Classe Observable 
     * 
     *
     */
    public class Osservabile extends Observable {
    
    
        Image i;
        public Osservabile(Image i){
            this.i=i;
        }
        public synchronized Image getImage(){return i;}
        public synchronized void setImage(Image g) {
            i=g;
            setChanged();
            notifyObservers();
        }
    }


    ho risolto il problema utilizzando Observer e observable. Ogni volta che l'immagine arriva alla fine dell'escursione tramite thread viene mandata attraverso gli osservatori ad un bottone .Solo che il bottone non riesco ad inserirlo dove voglio io nel Pannello0.come faccio ad inserire un bottone dentro un pannello nella posizione che voglio io? se uso setLayout(null); in Pannello0 non mi fa vedere il bottone. Avete qualche suggerimento?
    Ultima modifica di breathex; 10-05-2017 a 19:28

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 © 2024 vBulletin Solutions, Inc. All rights reserved.