2013-04-11 110 views
2

這是一個非常普遍的問題,但我應該如何爲JPanel添加動畫背景。我希望背景能夠落在所有面板的組件和圖形之後。現在,我有兩個單獨的課程(一個用於主面板,另一個用於背景)。背景類使用repaint()來動畫在屏幕上移動的網格。我試圖讓主面板背景透明,但是這並沒有讓我獲得任何地方。JPanel動畫背景

更多信息: 我的主面板是CardLayout的一部分,它有許多不同的類。因此,當我將主面板添加到主框架時,我正在做frame.getContentPane().add(cards, BorderLayout.CENTER)

cards是一個JPanel,它充當主面板和主面板內所有面板的容器。

任何人都可以幫助我獲得面板動畫背景嗎?

+0

如果有人能幫助我添加動畫背景類,整個JFrame的,這將極大地幫助。 – applemavs 2013-04-11 03:40:14

+0

這可以做你想做的事: http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html – ebolyen 2013-04-11 04:17:33

回答

2

您可以使用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(); 
      } 
     }); 
    } 
}