2012-01-09 140 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