2012-01-09 25 views
6

JavaのSwingのローディングアニメーション

これを行うにはどうすればよいでしょうか?

ありがとうございました。

+0

スプライトのスワッピングは、これを実行することができます。もちろん、SwingWorkerによって提供されるようなバックグラウンドスレッドでローディングを行う必要があります。 –

+0

この[Q&A](http://stackoverflow.com/questions/6238037/how-do-i-align-this-text-correctly)も参照してください。 – trashgod

答えて

4

Animated Iconクラスを使用すると、既存のアイコンを使用して独自のアニメーションを作成できます。

3

通常のJava2D呼び出しを使用してカスタムコンポーネントまたはカスタムアイコンを使用して描画できます。私にとってはGradientPaintで描かれたかなり厚いBasicStrokeArc2Dのように見えます。

また、Inkscape(または他のグラフィックスプログラム)からフレームをエクスポートし、画像としてロードすることもできます。

9

ImageIconとアニメーションGIFを使用してください。 ImageIconのsetImageObserverを参照してください。

アイコンをロードするには、AjaxLoadなどのさまざまなオンラインジェネレータを使用できます。

+0

非常に良い!有用! – drzymala

6

うまくいけば、それは遅すぎることはありません。

私はJPanelの内側にアニメーションGIFをこのように得ることができた:

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.画像ファイルがjarファイル内にあります。
2. ImageIO.read()はImageObserverを更新しないBufferedImageを返します。
3. jarファイルにバンドルされているイメージを見つけるもう1つの方法は、プログラムをロードしたJavaクラスローダーにファイルを取得することです。物事はどこにあるのか知っています。

これで私のアニメーションgifをJPanelの中​​に入れることができ、魅力的に機能しました。

+1

アニメーションGIFは、良いと滑らかな透明な効果が欠けているので、オプションはありません。スピナーは、アニメーションを醜く、ピクセル化することなく、ほとんど透明で、gifがサポートしない透明な背景が100%必要です。矩形の枠線とオブジェクト間のフェードがない場合にのみ機能します。だから...これを正しく行うには? APNGはそれを行うことができますが、もちろんJavaはそれをサポートしていません。 –