2

これは非常に一般的な質問ですが、JPanel のアニメーション背景を追加するにはどうすればよいですか。背景をすべてのパネルのコンポーネントとグラフィックスの背後に配置したいと考えています。現在、2 つの個別のクラスがあります (1 つはメイン パネル用、もう 1 つは背景用)。バックグラウンド クラスは repaint() を使用して、画面上を移動するグリッドをアニメーション化します。メインパネルの背景を透明にしようとしましたが、うまくいきませんでした。

さらに詳しい情報: 私のメイン パネルは CardLayout の一部であり、さまざまなクラスが含まれています。メインパネルをメインフレームに追加するときは、frame.getContentPane().add(cards, BorderLayout.CENTER)

cardsメインパネルとメインパネル内のすべてのパネルのコンテナとして機能する JPanel です。

パネルのアニメーション化された背景を取得するのを手伝ってくれる人はいますか?

4

2 に答える 2

2

を使用Toolkit.getImage()して、アニメーション イメージをロードし、コンテナの にイメージを描画できますpaintComponentImageObserverアニメーション フレームを適切に更新するには、 が設定されている (null ではない)ことを確認してください。画像がどのように読み込まれ、観察され、更新されるかについては、 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();
            }
        });
    }
}
于 2013-04-11T04:23:42.987 に答える