创建一个漂亮的“载入中...”动画

17

可能是重复问题:
有没有比JProgressBar更好看的替代品?

我有一个需要几秒钟才能加载完的进程,我想在Java Swing中创建一个动画来表示它正在加载。

我想避免使用典型的进度条,而是使用像这样漂亮的现代无限进度效果:

infinite progress

我知道有类似的问题,但这严格涉及Java Swing。 是否有任何库或示例可供参考呢?


1
https://dev59.com/AXRB5IYBdhLWcg3wuZjo - Jim
3个回答

44

只需使用 ImageIcon它会自动播放gif图像动画。以下代码生成了此屏幕截图( ajax-loader.gif 是从 http://www.ajaxload.info/ 下载的):

screenshot

代码:

public static void main(String[] args) throws Exception {
    JFrame frame = new JFrame("Test");

    ImageIcon loading = new ImageIcon("ajax-loader.gif");
    frame.add(new JLabel("loading... ", loading, JLabel.CENTER));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

哎呀,没检查重复项 :P - dacwe
感谢提供代码。很抱歉重复发布! - Roman Rdgz
4
隐藏窗口菜单并使其透明怎么样?我认为这就是他的意思,而不仅仅是在窗口内显示图标。 - dendini

10

我建议在这种情况下使用玻璃面板。步骤如下:

  • 创建一个带有BorderLayoutJComponent。将一个包含您选择的动画.gif图标的JLabel添加到CENTER
  • (可选)重写paint(Graphics)方法,使您的GUI变得灰暗(或白色)。为了实现这一点,您需要绘制一个大小与组件相同的填充矩形,并用半透明颜色来填充矩形。
  • 将该组件作为应用程序根框架的玻璃面板添加。

这是一个很好的合并候选项,适用于duplicate - trashgod
2
添加一个小的代码示例? - dendini

3
当然可以。你可以使用工具AjaxLoad来生成一个动画图片,这个图片可以用在任何的图片/HTML容器中。

1
下投票者是否愿意分享他们的原因?鉴于问题中缺乏信息,这似乎是一个有效的答案。 - Andrew Thompson
不是下投票者,但可能无法在支持有限HTML但不支持Javascript的Swing组件中工作。可能是duplicate的合并候选项。 - trashgod
我对这个答案持怀疑态度,展示一些工作代码可能是合适的。 - dendini

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