Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88

    splash screen java 1.4

    Salve a tutti,
    ho un applicazione che quando compie determinate azioni impiega un pò di tempo.
    Partite dalla premessa che che nn voglio usare la progress bar.
    Ho visto che esistono degli spashscreen (purtroppo però io uso la SE 1.4) o delle imaggini che si piazzano in sovraimpressione rispetto all'applicazione. qualcuno sa dirmi come realizzarle?

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

    Re: splash screen java 1.4

    Originariamente inviato da draghe
    ho un applicazione che quando compie determinate azioni impiega un pò di tempo.
    Partite dalla premessa che che nn voglio usare la progress bar.
    Ho visto che esistono degli spashscreen (purtroppo però io uso la SE 1.4) o delle imaggini che si piazzano in sovraimpressione rispetto all'applicazione. qualcuno sa dirmi come realizzarle?
    Tecnicamente per uno "splash screen" basterebbe un JWindow (finestra che non ha alcun bordo, titolo decorazioni varie) della dimensione "giusta" per contenere ad esempio un JLabel che mostra un ImageIcon.
    Oppure ancora il JWindow che contiene un TuoPannello (estendi JPanel) che disegna direttamente sul suo Graphics un Image.
    Insomma, un JWindow che contiene qualcosa nel suo content pane.

    JWindow però non sarebbe "modale" rispetto al resto della tua interfaccia grafica. Quindi sarebbe discutibile. Ma potresti fare una cosa equivalente con JDialog che può essere "modale".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88

    Re: Re: splash screen java 1.4

    Originariamente inviato da andbin
    JWindow però non sarebbe "modale" rispetto al resto della tua interfaccia grafica. Quindi sarebbe discutibile. Ma potresti fare una cosa equivalente con JDialog che può essere "modale".
    Che vuoi dire con "nn sarebbe modale"

    Cmq io ho scritto questo codice... però ho dei problemi con la visualizzazione di una gif animata che rimane ferma

    codice:
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.MediaTracker;
    
    import javax.swing.JPanel;
    import javax.swing.JWindow;
    
    
    public class SplashScreen extends JPanel {
    
    	final String imagePath = "C://workspace//resources//loader3.gif";
    	Image img;
    		
    		  public SplashScreen() {
    			    img = MyImage.getImage("loader3.gif");
    			    
    			    
    			    loadImage(img);
    			  }
    
    			  private void loadImage(Image img) {
    			    try {
    			      MediaTracker track = new MediaTracker(this);
    			      track.addImage(img, 0);
    			      track.waitForID(0);
    			    } catch (InterruptedException e) {
    			      e.printStackTrace();
    			    }
    			  }
    
    			  protected void paintComponent(Graphics g) {
    			    setOpaque(false);
    			    g.drawImage(img, 0, 0, null);
    			    super.paintComponent(g);
    			  }
    			  
    					
    	public static void main(String[] args) {
    		JWindow bar = new JWindow();
    		SplashScreen back = new SplashScreen();
    		bar.getContentPane().add(back);
    		bar.setSize(500, 250);
    		bar.setVisible(true);
    		
    	}		
    }

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

    Re: Re: Re: splash screen java 1.4

    Originariamente inviato da draghe
    Che vuoi dire con "nn sarebbe modale"
    Una dialog si dice "modale" se blocca l'input alle altre finestre della applicazione.
    Prendi ad esempio un qualunque software come il blocco note di Windows, Wordpad o altro ed usa il menù File -> Apri (o quello che è). Ti apre di certo una dialog di selezione dei file. Nel resto della interfaccia grafica (la finestra sottostante) non puoi fare nulla finché non chiudi la dialog. Questo è il "modale".

    Originariamente inviato da draghe
    Cmq io ho scritto questo codice... però ho dei problemi con la visualizzazione di una gif animata che rimane ferma
    Innanzitutto non fare setOpaque() nel paintComponent e invoca il super.paintComponent come minimo prima di fare i tuoi disegni.

    Per quanto riguarda la animazione: non so cosa sia quel MyImage.getImage ma di sicuro hai usato il Toolkit per caricare la immagine (perché la gestione delle GIF animate è implicita).
    Il Toolkit carica le immagini in maniera asincrona, se vuoi puoi attendere il completamento con MediaTracker ma visto che la immagine la disegni poi tu non ce ne sarebbe bisogno.

    Ti basta usare

    g.drawImage(img, 0, 0, this);

    Per far sì che non solo non serva il preloading (perché la immagine si aggiorna man mano) ma anche per gestire la animazione.

    Quel 'this' fa sì che il tuo pannello diventi un "observer" per ricevere le notifiche di aggiornamento della immagine. E questo serve per le gif animate!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88
    Ho fatto le modifche che mi hai consigliato ma l'immagine nn viene caricata.
    Riesci a dirmi dove sbaglio?
    quella classe MyImage è una classe accessoria che nn fa altro che recuperare l'immagine con Toolkit.

    codice:
    public class SplashScreen extends JPanel {
    
    	Image img;
    		
    		  public SplashScreen() {
    			    img = MyImage.getImage("loader3.gif");
    			    
    			  }
    
    
    			  protected void paintComponent(Graphics g) {
    			    super.paintComponent(g);
    			    g.drawImage(img, 0, 0, this);
    			  }
    			  
    					
    	public static void main(String[] args) {
    		JDialog bar = new JDialog();
    		SplashScreen back = new SplashScreen();
    		bar.getContentPane().add(back);
    		bar.setSize(500, 250);
    		bar.setVisible(true);
    		
    	}		
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da draghe
    quella classe MyImage è una classe accessoria che nn fa altro che recuperare l'immagine con Toolkit.
    Se hai usato alla fin fine un qualcosa del tipo:

    toolkit.getImage(nome)

    dove nome alla fin fine risulta quel "loader3.gif" beh, sappi che loader3.gif è riferito alla directory corrente. Quale sia nel tuo caso non lo so .... dipende da come/da dove avvii la applicazione e pertanto potrebbe non essere appropriata (la directory "corrente" intendo).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88
    perfetto, ora la classe SplashScreen funziona, carico la gif in una finestra di tipo JWindows.

    il problema è che integrando questo componente nella mia applicazione quando lancio quest'ultima compare la finestra dello splashscreen ma nn viene riprodotta l'immagine al suo interno.

    da cosa può dipendere?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88
    nessuno mi sa dare un'indicazione?

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.