Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Inserire gif in una Java application

    salve a tutti il mio problema consiste nel non riuscire ad importare una gif animata in un JPanel (tengo a sottolineare che non si tratta di un'applet). L'ho presa da file con la libreria IO.file ma ovviamente mi mostra solo il primo frame dell'animazione
    AIUTOO! PLEASE!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Ho spostato la discussione nell'area più appropriata (vedi il Regolamento).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ok scusa, ero convinto che già fossi nella sezione Java

    Possibile che nessuno riesce a rispondermi??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Inserire gif in una Java application

    Originariamente inviato da vsilver17
    salve a tutti il mio problema consiste nel non riuscire ad importare una gif animata in un JPanel (tengo a sottolineare che non si tratta di un'applet). L'ho presa da file con la libreria IO.file ma ovviamente mi mostra solo il primo frame dell'animazione
    Dovresti specificare bene:
    a) Come hai caricato la immagine (con javax.imageio.ImageIO? Con un ImageIcon? Tramite Toolkit di AWT?)
    b) Dove/come hai visualizzato la immagine (ImageIcon su una JLabel? Disegno diretto su un Graphics in un "tuo" componente?)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    L'immagine l'ho caricata con l' ImageIO
    <CODE>
    f=new File(s);
    Image immagine;
    if(f.exists()){
    try{
    immagine=ImageIO.read(f);
    }catch(IOException io){
    System.out.println("Problema nel referenziare l'immagine");
    immagine=null;
    }
    <CODE>

    L'animazione la voglio far vedere direttamente dentro il JPanel quindi la dovrei chiamare nel paintComponent, ma non so credo che si debba usare la drawImage...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da vsilver17
    L'immagine l'ho caricata con l' ImageIO
    No, ImageIO non ti permette di caricare gif animate. Devi usare o il Toolkit di AWT o ImageIcon (che internamente usa Toolkit). Ma visto che poi disegni un Image, meglio Toolkit.

    Originariamente inviato da vsilver17
    L'animazione la voglio far vedere direttamente dentro il JPanel quindi la dovrei chiamare nel paintComponent, ma non so credo che si debba usare la drawImage...
    Se la vuoi disegnare tu su un Graphics, sì devi usare drawImage(). Con una nota importante: i drawImage() hanno un parametro ImageObserver. Come "observer" devi passare il componente stesso su cui stai disegnando, altrimenti animazione ... nada!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ok, col toolkit funzia ma la vedo ma va troppo veloce. Potresti darmi qualche consiglio su come mettere un timer o roba del genere per farla andare più piano?

    codice:
    tiroGif=Toolkit.getDefaultToolkit().getImage("grafica/img/PannelloGioco/dadi/tiroDadi.gif");
    
    
    public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		g.drawImage(sfondo, 0, 0, null);
    		g.drawImage(tiroGif, 30, 30, this);
    	}

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da vsilver17
    ma la vedo ma va troppo veloce.
    Ma giusto per sapere: è più veloce rispetto a come la mostrerebbe un qualunque visualizzatore di immagini (es. un browser, ACDSee o altro software)? O è proprio veloce di per sé la animazione???

    Originariamente inviato da vsilver17
    Potresti darmi qualche consiglio su come mettere un timer o roba del genere per farla andare più piano?
    Non lo so nemmeno io .... perché passando quel 'this' il tuo componente fa solo da "observer" ... è qualcun'altro che si occupa di far "avanzare" la animazione e di notificare l'observer quando deve aggiornare la visualizzazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Ho fatto una prova e in effetti l'animazione va fluida:
    basta aggiungere un imageUpdate che sarebbe il metodo invocato dall'observer del drawImage e mettere uno sleep:

    codice:
    public boolean imageUpdate( Image img, int flags, int x, int y, 
    			int w, int h ) 
    	{
    		try {
    			Thread.currentThread().sleep(10);
    		} catch (InterruptedException e) {}
    		repaint();
    		return true;
    	}
    Ora rimane un problema.....come faccio a richiamare l'animazione solo alla pressione di un tasto, dato che il comando si trova dentro il paint??

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da vsilver17
    basta aggiungere un imageUpdate che sarebbe il metodo invocato dall'observer del drawImage e mettere uno sleep:
    Non mi sembra una buona soluzione mettere uno sleep lì ... ed è una cosa che personalmente non farei mai.
    Se vuoi rallentare la animazione, cambia il frame rate della gif .... non andare a smanettare con sleep o altro!!!

    Originariamente inviato da vsilver17
    Ora rimane un problema.....come faccio a richiamare l'animazione solo alla pressione di un tasto, dato che il comando si trova dentro il paint??
    Il drawImage() però lo fai tu .... e potresti farlo solo se una certa variabile booleana è true.
    Inizialmente è false .... premi un pulsante e la variabile la fai diventare true.
    Ma fai la cosa in modo "pulito" ... "incapsula" questa logica nel tuo pannello, mettendo ad esempio dei metodi startAnimazione() e stopAnimazione().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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