java - JPanel 动画背景

标签 java swing animation background jpanel

这是一个非常普遍的问题,但是我应该如何为 JPanel 添加动画背景。我希望背景位于所有面板组件和图形的后面。现在,我有两个单独的类(一个用于主面板,另一个用于背景)。背景类使用 repaint() 来动画网格在屏幕上移动。我试图使主面板背景透明,但这并没有让我有任何进展。

更多信息: 我的主面板是 CardLayout 的一部分,其中有许多不同的类。因此,当我将主面板添加到主框架时,我正在执行 frame.getContentPane().add(cards, BorderLayout.CENTER)

cards 是一个 JPanel,它充当主面板以及主面板内所有面板的容器。

有人可以帮我获得面板动画背景吗?

最佳答案

您可以使用Toolkit.getImage()加载动画图像,然后在容器的paintComponent中绘制图像。确保设置了ImageObserver(不为空),以便正确更新动画帧。有关如何加载、观察和更新图像的详细信息,请参阅 How Images are Loaded Java AWT 引用中的附录。

这是一个简单的例子:

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

class AnimatedPanelDemo {
    static 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);
        }
    }

    private static void createAndShowUI() {
        try {
            JFrame frame = new JFrame("Image");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);

            Image image = Toolkit.getDefaultToolkit().getImage(new URL(
                    "http://duke.kenai.com/iconSized/duke.running.gif"));

            ImagePanel imagePanel = new ImagePanel(image);

            imagePanel.add(new JLabel("Some label"));
            frame.add(imagePanel);
            frame.setSize(100, 100);
            frame.setVisible(true);
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowUI();
            }
        });
    }
}

关于java - JPanel 动画背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940328/

相关文章:

java - 如何通过JAVA的PREFUSE可视化工具包显示节点的矩形形状?

java - 说唱 : How to access Object in ViewPart

java - 使用 Lambda 旋转字符串

java - JMenuItem 没有被键盘回车键激活

javascript - jQuery 的宽度动画隐藏了溢出,尽管它是可见的

jquery - knockout : fade in after fading out something else

java - 在两个 Java 组件之间发送消息

java - 自定义文本字段 UI 外观和感觉

java - 在不引用 JPanel 本身的情况下处理多个 UI JPanel 中的 Swing 操作

javascript - 如何用javascript制作动画