2013-04-11 3 views
2

Это действительно общий вопрос, но как добавить анимированный фон для JPanel. Я хочу, чтобы фон был за всеми компонентами панели и графикой. Сейчас у меня есть два отдельных класса (один для главной панели, а другой для фона). В фоновом классе используется repaint() для анимации сетки, движущейся по экрану. Я попытался сделать основной фон панели прозрачным, но это никуда меня не достало.JPanel Анимированный фон

Дополнительная информация: Моя основная панель является частью CardLayout, и в ней много разных классов. Поэтому, когда я добавляю свою основную панель в свою основную рамку, я делаю frame.getContentPane().add(cards, BorderLayout.CENTER)

cards является JPanel, который выступает в качестве контейнера для основной панели и всех панелей внутри основной панели.

Может кто-нибудь помочь мне в получении анимированного фона панели?

+0

И если кто-нибудь может помочь мне добавить анимированный фон класс ко всему JFrame, что помогло бы безмерно. – applemavs

+0

Это может сделать то, что вы хотите: http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html – ebolyen

ответ

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(); 
      } 
     }); 
    } 
} 
Смежные вопросы