gpt4 book ai didi

java - 在 Swing 中显示动画 BG

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:40 24 4
gpt4 key购买 nike

动画(循环)GIF 可以显示在 JLabel 或 HTML 中(在像 JEditorPane 这样的格式化文本组件中)并被视为循环。

但是要加载图像作为容器的背景进行绘制,我通常会使用 ImageIO.read()Toolkit.getImage()(后者当我怀念上个千年时)。两种加载图像的方法都不会产生循环图像,它通常只是第一帧。

如何为背景加载动画图像?

例如

最佳答案

要获得用于自定义绘画的循环(动画)GIF,一个技巧是使用 ImageIcon 加载它。虽然从问题中列出的两种方法之一返回的图像是静态的,但从 ImageIcon 获得的图像是动画的。

下面的代码将添加 50 个按钮,然后在 'zooming stars' 动画 GIF1 的帧之后不久将其作为 BG。 ImagePanel 会将图像拉伸(stretch)到面板的大小。

  1. 它基于这张图片。

Zooming Stars GIF

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.net.URL;

class ImagePanel extends JPanel {

private Image image;

ImagePanel(Image image) {
this.image = image;
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image,0,0,getWidth(),getHeight(),this);
}

public static void main(String[] args) throws Exception {
URL url = new URL("http://i.stack.imgur.com/iQFxo.gif");
final Image image = new ImageIcon(url).getImage();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("Image");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationByPlatform(true);

ImagePanel imagePanel = new ImagePanel(image);
imagePanel.setLayout(new GridLayout(5,10,10,10));
imagePanel.setBorder(new EmptyBorder(20,20,20,20));
for (int ii=1; ii<51; ii++) {
imagePanel.add(new JButton("" + ii));
}

f.setContentPane(imagePanel);
f.pack();
f.setVisible(true);
}
});
}
}

关于java - 在 Swing 中显示动画 BG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com