Java Swing 加载动画

7
我想用Java Swing实现以下加载动画: enter image description here 圆形必须顺时针旋转。有什么最好的方法可以做到这一点吗?
非常感谢。

交换一堆精灵可能适用于此。当然,加载必须在后台线程中完成,例如SwingWorker提供的线程。 - Hovercraft Full Of Eels
请参考此问答 - trashgod
4个回答

9

只需使用ImageIcon和一个动画gif。在ImageIcon中查看setImageObserver

可以使用各种在线生成器(如AjaxLoad)来制作加载图标。


8
希望还不算太晚。我成功将动态gif图像嵌入到我的JPanel中:
```java ```
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()返回一个BufferedImage,它不会更新ImageObserver;
3. 查找打包在JAR文件中的图像的另一种选择是询问Java类加载器,即加载程序的代码,以获取文件。它知道物品的位置。

因此,通过这种方法,我可以将我的动态gif图像放在JPanel内,并且它可以完美地工作。


1
动画GIF不是一个好的选择,因为它缺乏良好和平滑的透明效果。旋转器大多需要是透明的,并且具有100%透明的背景,而GIF不支持此功能,否则会使动画变得丑陋和像素化。它只适用于矩形边框,并且在对象之间没有淡入淡出效果。那么...如何正确地做到这一点?APNG可以做到,但当然Java不支持它,除非使用库。 - M. H.

4
您可以使用Animated Icon类来创建自己的动画,使用现有的图标。

3

这个图形可以用自定义组件或自定义图标来绘制,使用常规的Java2D调用。在我看来,它看起来像一个带有相当粗的BasicStroke和一个GradientPaint绘制的Arc2D

或者,从Inkscape(或其他图形程序)导出帧并将其作为图像加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接