JPanel



  • hallo
    ich habe eine kleine animation die bis anhin in auf einem JFrame aufgesetzt war. Jetzt möchte ich es aber auf einem JPanel ablaufen lassen und habe den code dementsprechend angepasst. aber irgendwie scheint es nicht ganz zu klappen. es zeigt mir nichts an (nur grauer hintergrund, müsste eigentlich schwarz sein).
    wo liegt der fehler??

    public class Intro
        extends JPanel {
    
      private Image[] m_oImage;
      private int m_iActImage;
      private JProgressBar m_oProgress;
    
      public static final int NUMBER_OF_IMAGES = 19;
      private static int IMAGE_RATE = 100;
    
      public Intro() {
        m_oProgress = new JProgressBar(JProgressBar.HORIZONTAL,0,NUMBER_OF_IMAGES);
        //this.getContentPane().add(m_oProgress,"South");
        add(m_oProgress,"South");
        m_oProgress.setBackground(Color.black);
        m_oProgress.setStringPainted(true);
        setVisible(true);
        //addWindowListener(new WindowClosingAdapter());
      }
    
      public void startAnimation() {
    
        MediaTracker mt = new MediaTracker(this);
        Toolkit tk = getToolkit();
    
        //Bilder laden
        m_oImage = new Image[NUMBER_OF_IMAGES];
    
        for (int i = 1; i <= NUMBER_OF_IMAGES; ++i) {
          m_oImage[i - 1] = tk.getImage("seq/s00" + i + ".gif");
          mt.addImage(m_oImage[i - 1], 0);
          m_iActImage = -i;
          repaint();
          try {
            mt.waitForAll();
          }
          catch (InterruptedException e) {
            System.err.println(e);
          }
        }
    //Animation beginnen
        m_iActImage = 0;
        while (m_iActImage < NUMBER_OF_IMAGES) {
          repaint();
          m_iActImage = (m_iActImage + 1) ;//% 98;
          try {
            Thread.sleep(IMAGE_RATE);
          }
          catch (InterruptedException e) {
            System.err.println(e);
          }
        }
        try {
            Thread.sleep(1000);
          }
          catch (InterruptedException e) {
            System.err.println(e);
          }
      }
    
      public void paint(Graphics g)
      {
        super.paint(g);
    
        if (m_iActImage < 0) {
          m_oProgress.setValue(-m_iActImage);
        } else {
          if(m_oImage != null)
          g.drawImage(m_oImage[m_iActImage],0,0,this);
        }
      }
    
    }
    

    hier rufe ich das intor auf

    Intro a = new Intro();
        a.setBounds(100,100,755,500);
        a.setBackground(Color.black);
        getContentPane().add(a);
        a.setVisible(true);
        a.startAnimation();
    


  • Versuchs doch einfach mal mit paintComponent anstatt mit paint... Das sollte helfen.


Anmelden zum Antworten