2012-01-09 14 views
6

Czy chciałbym zrealizować następujące animację ładowania z Java Swing:Java Swing Ładowanie Animacja

enter image description here

Krąg ma się kręcić w prawo.

Jaki byłby najlepszy sposób na zrobienie tego?

Dziękuję bardzo.

+0

Zamiana pęczków sprite'ów może na to wpłynąć. Oczywiście ładowanie musiałoby odbywać się w wątku tła, takim jak dostarczone przez SwingWorker. –

+0

Zobacz także [Q & A] (http://stackoverflow.com/questions/6238037/how-do-i-align-this-text-correctly). – trashgod

Odpowiedz

3

Można to narysować za pomocą niestandardowego komponentu lub niestandardowej ikony, używając standardowych połączeń Java2D. Dla mnie wygląda to jak Arc2D z dość grubym BasicStroke narysowanym za pomocą GradientPaint.

Alternatywnie, wyeksportuj ramki z Inkscape (lub innego programu graficznego) i załaduj je jako obrazy.

9

Po prostu użyj ImageIcon i animowanego gif. zobacz setImageObserver w ImageIcon.

Ładowanie ikon można wykonać za pomocą różnych generatorów internetowych, takich jak AjaxLoad.

+0

BARDZO ŁADNE! przydatny! – drzymala

6

Mam nadzieję, że nie jest za późno na to.

udało mi się uzyskać animowany gif wewnątrz moich JPanel w ten sposób:

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; 
} 

niektóre punkty tego podejścia:
1. Plik obrazu jest w słoiku;
2. ImageIO.read() zwraca obraz BufferedImage, który nie aktualizuje ImageObserver;
3. Inną alternatywą dla znajdowania obrazów dołączonych do pliku JAR jest pobranie programu ładującego klasy Java, kodu, który załadował program, w celu pobrania plików. Wie, gdzie są rzeczy.

W ten sposób udało mi się uzyskać animowany gif w moim JPanelu i zadziałało jak czar.

+1

animowany gif nie jest opcją, ponieważ nie ma dobrych i gładkich przezroczystych efektów. Spinner musi być przeźroczysty i mieć 100% przezroczystego tła, którego gify nie obsługują, bez brzydkiej animacji i piksela. Działa tylko dla prostokątnych granic i bez blaknięcia między obiektami. Więc ... jak to zrobić poprawnie? APNG może to zrobić, ale oczywiście Java nie obsługuje jej z użyciem bibliotek. –