2012-01-09 142 views
6

我想實現以下加載動畫用的Java Swing:的Java Swing加載動畫

enter image description here

圓的面積順時針旋轉。

什麼是做的最好辦法?

非常感謝。

+0

交換一組精靈可以爲此工作。當然,加載必須在後臺線程中完成,例如由SwingWorker提供的後臺線程。 – 2012-01-09 03:17:34

+0

另請參閱此[問與答](http://stackoverflow.com/questions/6238037/how-do-i-align-this-text-correctly)。 – trashgod 2012-01-09 03:38:26

回答

3

這可以通過自定義組件或自定義圖標繪製,使用常規Java2D電話。對我來說,它看起來像一個Arc2D與相當厚BasicStroke繪製與GradientPaint

可替換地,從Inkscape中(或其它圖形程序)出口幀並加載它們爲圖像。

9

只需使用一個ImageIcon和GIF格式的動畫。請參閱ImageIcon中的setImageObserver

加載圖標可以使用各種在線發電機如AjaxLoad的進行。

+0

非常好!有用! – drzymala 2012-09-12 16:50:10

6

希望這對它來說還不算太晚。

我設法讓gif動畫我的JPanel裏面是這樣的:

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

這種方法的幾點:
1.圖像文件是罐子內;
2. ImageIO.read()返回一個BufferedImage,它不更新ImageObserver;
3.查找捆綁在jar文件中的圖像的另一種方法是要求Java類加載器(加載程序的代碼)獲取文件。它知道事情在哪裏。

因此,通過這樣做,我能夠在我的JPanel中獲得我的動畫gif,並且它像一個魅力一樣工作。

+1

動畫GIF是沒有選擇,因爲它缺乏良好和平滑的透明效果。 Spinner大多需要透明,背景100%透明,GIF不支持,而不會使動畫變得醜陋和像素化。它只適用於矩形邊框,而不會在對象之間褪色。所以......如何正確地做到這一點? APNG可以做到這一點,但是當然,沒有lib庫,Java不支持它。 – 2017-05-11 07:38:40