2012-01-09 8 views
6

vorrei realizzare il seguente animazione di carico con Java Swing:Java Swing Caricamento Animazione

enter image description here

Il cerchio deve girare in senso orario.

Quale sarebbe il modo migliore per farlo?

Grazie mille.

+0

Scambiare un gruppo di folletti potrebbe funzionare per questo. Ovviamente il caricamento dovrebbe essere fatto in un thread in background, come quello fornito da SwingWorker. –

+0

Vedere anche questo [Q & A] (http://stackoverflow.com/questions/6238037/how-do-i-align-this-text-correctly). – trashgod

risposta

4

È possibile utilizzare la classe Animated Icon per creare la propria animazione utilizzando l'icona esistente.

3

Questo potrebbe essere disegnato con un componente personalizzato o un'icona personalizzata, utilizzando le normali chiamate Java2D. Per me sembra uno Arc2D con uno spessore abbastanza elevato, BasicStroke disegnato con uno GradientPaint.

In alternativa, esportare i fotogrammi da Inkscape (o altri programmi di grafica) e caricarli come immagini.

9

Basta usare un ImageIcon e una gif animata. vedere setImageObserver in ImageIcon.

Le icone di caricamento possono essere create utilizzando una varietà di generatori online come AjaxLoad.

+0

MOLTO BELLO! utile! La gif animata – drzymala

6

Speriamo che non sia troppo tardi per questo.

sono riuscito ad ottenere la gif animata all'interno del mio JPanel in questo modo:

private JPanel loadingPanel() { 
    JPanel panel = new JPanel(); 
    BoxLayout layoutMgr = new BoxLayout(panel, BoxLayout.PAGE_AXIS); 
    panel.setLayout(layoutMgr); 

    ClassLoader cldr = this.getClass().getClassLoader(); 
    java.net.URL imageURL = cldr.getResource("img/spinner.gif"); 
    ImageIcon imageIcon = new ImageIcon(imageURL); 
    JLabel iconLabel = new JLabel(); 
    iconLabel.setIcon(imageIcon); 
    imageIcon.setImageObserver(iconLabel); 

    JLabel label = new JLabel("Loading..."); 
    panel.add(iconLabel); 
    panel.add(label); 
    return panel; 
} 

Alcuni punti di questo approccio:
1. Il file di immagine è all'interno del vaso;
2. ImageIO.read() restituisce una BufferedImage, che non aggiorna ImageObserver;
3. Un'altra alternativa per trovare immagini raggruppate nel file jar è chiedere al caricatore di classi Java, il codice che ha caricato il programma, di ottenere i file. Sa dove sono le cose.

Così facendo sono riuscito a ottenere la mia gif animata all'interno del mio JPanel e ha funzionato come un fascino.

+1

non è un'opzione, perché manca di effetti trasparenti buoni e uniformi. Uno spinner deve per lo più essere trasparente e con uno sfondo trasparente al 100%, che le gif non supportano, senza rendere brutto e pixellato l'animazione. Funziona solo per i bordi rettangolari e senza sbiadire tra gli oggetti. Quindi ... come farlo correttamente? APNG potrebbe farlo, ma ovviamente Java non lo supporta con le librerie. –