# Hintergrundbild an JFrame anpassen



## krafta (2. Jun 2006)

Hallo Leute. Kannn mir jemand bitte sagen wie man ein Hintergrundbild an ein JFrame anpassen kann? Das Hintergrundbild ist B 3072 Pixel x H 2304 Pixel. Mein JFrame ist auf Vollbild gestreckt und ich möchte eben das sich das Hintergrundbild sich ebenfalls auf die Monitrogröße anpasst. Vielen Dank für die Antworten im Voraus!
Hier der Code:


```
import javax.swing.*;
import java.awt.event.*;

public class Entry
extends JFrame
{
  public Entry()
  {
    super("simply Organizer v 1.0");
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    JLabel label = new JLabel(new ImageIcon("Background.jpg"));
    JPanel panel = new JPanel();
    panel.add(label);
    this.getContentPane().add(panel);
    pack();

  }

  public static void main(String[] args)
  {
    Entry wnd = new Entry();
    wnd.setExtendedState(MAXIMIZED_BOTH); 
    wnd.setLocationRelativeTo(null); 
    wnd.setVisible(true);
    wnd.setResizable(true);
  }
}
```


----------



## André Uhres (2. Jun 2006)

krafta hat gesagt.:
			
		

> Hallo Leute. Kannn mir jemand bitte sagen wie man ein Hintergrundbild an ein JFrame anpassen kann? ..




```
//package schnipsel3;
/*
 * Hintergrund.java
 */
import java.awt.*; 
import java.io.*; 
import javax.imageio.*; 
import javax.swing.*; 
public class Hintergrund extends JPanel  { 
    private Image image; 
    public Hintergrund() { 
        setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize()); 
        try{ 
            image = ImageIO.read(new File("Background.jpg")); 
        } catch(IOException ex){ 
            System.out.println( ex.getMessage() ); 
        } 
        int w = getPreferredSize().width; 
        int h = getPreferredSize().height; 
        int wI = image.getWidth(null); 
        int hI = image.getHeight(null); 
        double f = (double)w/(double)h; 
        double fI = (double)wI/(double)hI; 
        if( f >= fI ) setScaledSize(-1,h); 
        else          setScaledSize(w, -1); 
    } 
    public void setScaledSize(int w, int h){ 
        image = image.getScaledInstance(w, h, Image.SCALE_SMOOTH); 
        repaint(); 
    } 
    public void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        g.drawImage(image,0,0,null); 
    } 
}
```


----------



## Tukuan (4. Jul 2006)

Hallo André Uhres

Dies scheint genau das zu sein, was ich gesucht hab...
Leider fällt mir die Anwendung schwer, da ich noch ein ziemlicher Anfänger bin...

Kannste mir helfen?
Wie ruf ich Hintergrund auf bzw. binde es richtig ein.

Schon mal vielen Dank
Gruß
Tukuan


----------



## Brainiac (4. Jul 2006)

```
public class FrameMitHintergrund extends JFrame {
private Hintergrund hinterrgrund = new Hintergrund();
    public FrameMitHintergrund() {
        setSize(500,500);
        setContentPane(hintergrund);
        pack();
    }

    public static void main(String[] args) {
        new FrameMitHintergrund().setVisible(true);
    }
}
```


----------



## André Uhres (4. Jul 2006)

Tukuan hat gesagt.:
			
		

> ..Wie ruf ich Hintergrund auf bzw. binde es richtig ein..




```
//package schnipsel;
/*
 * HintergrundDemo.java
 */
import java.awt.*;
import javax.swing.*;
public class HintergrundDemo extends JFrame {
    public HintergrundDemo() {
        super("Hintergrund Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        hg = new Hintergrund();
        getContentPane().add(hg);
    }
    private Hintergrund hg;
    private JButton bt;
    public static void main(String args[]) {new HintergrundDemo().setVisible(true);}
}
```


----------



## Tukuan (6. Jul 2006)

Probiere ich heute/morgen mal aus...

Gruß
Tukuan


----------



## Gast (14. Dez 2006)

mmmh irgendwie hab ich Probleme jetzt Buttons usw auf das Hintergrundbild zu legen. 
Jemand nen Tip oder besser noch nen Beispiel?


----------



## André Uhres (14. Dez 2006)

hg.add(new JButton("Test"));
(siehe oben "HintergrundDemo")


----------



## maddin28 (9. Apr 2007)

Moin! Ich nutze die oben gepostete Hintergrund Klasse, was soweit auch klappt. Ich hab das Ding ein klein wenig verändert, sodass der Klasse im Konstruktor das Hintergrundbild übergeben wird, anstatt es in der Klasse zu laden. 
Soweit sogut. Aus einem Applet werden beliebig viele Instanzen von einem JFrame aufgerufen. Mein Problem ist jetzt, dass beim Öffnen des ersten JFrames  alles wunderbar klappt. Das Hintergrundbild wird angezeigt. Wenn ich aber dann ein zweites JFrame öffne, dann wird das Hintergrundbild nicht angezeigt. Erst wenn ich das JFrame vergrößere oder verkleinere, dann wird das Bild gezeichnet. Das Problem tritt wie gesagt, bei jedem JFrame auf, nur nicht beim ersten! (wobei es sich immer um das selbe Fenster handelt). 

```
Hintergrund hintergrund = new Hintergrund(ImgHintergrund);
setContentPane(hintergrund);
```


----------



## André Uhres (10. Apr 2007)

maddin28 hat gesagt.:
			
		

> ..Das Problem tritt wie gesagt, bei jedem JFrame auf, nur nicht beim ersten! ..


Ich kann dein Problem leider nicht nachvollziehen. 
Ein KSKB wäre hilfreich (siehe dazu "Lies mich" hier links nebendran).


----------

