• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

JAVA: Hintergrundbild auf Panel

geisi

Newbie
Wie kann man in JAVA auf einem JPanel ein Hintergrundbild einrichten? Habe es schon so versucht:
Code:
import java.awt.*;
import javax.swing.*;

/**
*
* @author Admin
*/
public class MitarbeiterPanel extends JPanel
{
    private Image img;
    /** Creates a new instance of MitarbeiterGUI */
    public MitarbeiterPanel()
    {
        super();
        img = Toolkit.getDefaultToolkit().getImage("D:\\mv_dateien\\background.jpg");
    }
   
    public void paint(java.awt.Graphics g)
    {
        super.paint(g);
        g.drawImage(img,0,0,this);
    }
}

aber dann wird das Bild über meine JButtons gezeichnet
 
OP
G

geisi

Newbie
wie ist das gemeint? ich soll statt der pain(Graphics g)-Methode die paintComponent(Graphics g)-Methode verwenden?
 

Zyrus

Newbie
Hallo,

hier mal etwas mehr Quellcode aus einem Projekt von mir:

Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

/**
 * BackgroundJPanel<br>
 * <br>
 * Ein Hingerund-JPanel für alle Fenster. In diesem Panel kann<br>
 * man ein Bild laden, dass gekachelt angezeigt wird (Grösse passt<br>
 * sich automatisch an.)<br>
 */

public class BackgroundJPanel extends JPanel
{
  /**
   * Konstruktor.
   */
  public BackgroundJPanel()
  {
  }

  /**
   * Wartet solange bis das Bild "image" geladen ist.
   *
   * @param image Bild das geladen werden soll
   * @return keine Ahnung :)
   */
  protected boolean waitForImage(Image image)
  {
    MediaTracker tracker=new MediaTracker(this);
    tracker.addImage(image,0);
    try
    {
      tracker.waitForAll();
    }
    catch(InterruptedException e)
    {
    }
    return (!tracker.isErrorAny());
  }

  /**
   * Liefert ein BufferedImage von dem Bild "imageFile" zurück.
   *
   * @param imageFile Dateiname des Bildes
   */
  protected BufferedImage getBufferedImage(String imageFile)
  {
    ImageIcon imageIcon=new ImageIcon(GfxLoader.class.getResource(imageFile));
    Image image=imageIcon.getImage();
    waitForImage(image);
    BufferedImage bufferedImage=new BufferedImage(image.getWidth(this),
                                                  image.getHeight(this),
                                                  BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d=bufferedImage.createGraphics();
    g2d.drawImage(image,0,0,this);
    return bufferedImage;
  }

  /**
   * Lädt das Bild "imageFile".
   *
   * @param imageFile Dateiname des Bildes
   */
  public void displayImage(String imageFile)
  {
    backgroundBufferedImage=getBufferedImage(imageFile);
    backgroundTexturePaint=new TexturePaint(backgroundBufferedImage,
                                            new Rectangle(0,0,
                                                          backgroundBufferedImage.getWidth(),
                                                          backgroundBufferedImage.getHeight()));
  }

  /**
   * Wird aufgerufen wenn das JPanel neu gezeichnet werden muss.
   */
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    Graphics2D g2d=(Graphics2D)g;
    g2d.setPaint(backgroundTexturePaint);
    g2d.fill(new Rectangle(0,0,getWidth(),getHeight()));
  }

  //Daten
  private BufferedImage backgroundBufferedImage;
  private TexturePaint  backgroundTexturePaint;
}

Die Klasse GfxLoader ist einfach nur eine leere Klasse die sich am
selben Ort wie die Bilder befindet (damit man die Bilder auch aus
einem jar-File laden kann).

Gruss, Zyrus
 
Oben