【问题标题】:Java Swing Loading AnimationJava Swing 加载动画
【发布时间】:2012-02-05 16:47:16
【问题描述】:

我想用java swing实现如下加载动画:

圆必须顺时针旋转。

最好的方法是什么?

非常感谢。

【问题讨论】:

  • 交换一堆精灵可以解决这个问题。当然,加载必须在后台线程中完成,例如 SwingWorker 提供的线程。
  • 另见Q&A

标签: java swing animation loading jlabel


【解决方案1】:

只需使用 ImageIcon 和动画 gif。请参阅 ImageIcon 中的 setImageObserver

可以使用各种在线生成器制作加载图标,例如AjaxLoad

【讨论】:

    【解决方案2】:

    希望现在还为时不晚。

    我设法通过这种方式在我的 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()返回一个BufferedImage,不更新ImageObserver;
    3. 另一种查找捆绑在 jar 文件中的图像的方法是询问 Java 类加载器(加载程序的代码)来获取文件。它知道东西在哪里。

    因此,通过这样做,我能够在我的 JPanel 中获得我的动画 gif,它就像一个魅力。

    【讨论】:

    • 动画 gif 是没有选择的,因为它缺乏良好和平滑的透明效果。微调器主要需要透明且具有 100% 透明背景,这是 gif 不支持的,不会使动画变得丑陋和像素化。它仅适用于矩形边框并且不会在对象之间褪色。那么......如何正确地做到这一点? APNG 可以做到,但如果没有库,Java 当然不支持它。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      这可以使用自定义组件或自定义图标绘制,使用常规的Java2D 调用。对我来说,它看起来像是一个 Arc2D 和一个相当厚的 BasicStrokeGradientPaint 绘制的。

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

      【讨论】:

        猜你喜欢
        • 2014-09-07
        • 1970-01-01
        • 2014-04-20
        • 2023-03-22
        • 2012-04-24
        • 2015-11-20
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多