Hintergrundbild

Hallo,

nachfolgender Code funktioniert

	Container panel1 = getContentPane();
	panel1.setLayout(new BorderLayout());
	panel1.setBackground(new Color(210,225,226));

jetzt würde ich aber gerne anstelle der Color ein Hintergrundbild setzen (z.B. jpg).
aber nicht!! mittels Jlabel (das funktioniert auch bei mir)

irgendwie bekomme ich das nicht hin, wenn jemand eine Lösung hat, wäre ich dankbar!

Gruß Gü

Das funktioniert nicht, da die Methode ein Objekt vom Typ Color erwartet. Ein jpeg ist ja kein Color Objekt. In diesem fall gehts nur über verschachetlung von JComponents wie z.B. mit dem JLabel.

API Doc der setBackground

hmmm irgendwie muß das doch gehen?!!?

ich habe schon öfter Programme gesehen die z.B. auf einem “Bild” jede Menge Labels oder Buttons verteilen und dieses verdecken. Je mehr Elemente dann entfernt werden desto mehr sieht man dann von dem Bild.
Wie machen die das denn?

Gruß gü

Ja mit Komponten aber eben nicht mit setBackground aus vorgenannten Gründen.

ich würde mal vermuten über ein JLayeredPane
aber auch hier kommt das Bild auf ein Label

und die andern Komponenten die sonst auf dem Panel verteilt würden werden dann auf dem Label verteilt??

“Das funktioniert bei mir nicht” ist keine sinnvolle Beschreibung. Wie auch immer, du kannst in das ContentPane einfach eine Component legen, die ein Hintergrundbild malt (und auf diese Component dann z.B. noch andere GUI-Components legen). Ein Beispiel:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class BackgroundImageComponentExample
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
    
    private static void createAndShowGUI()
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        BufferedImage image = createDummyImage();
        BackgroundImageComponent container = new BackgroundImageComponent(image);

        container.add(new JButton("This is a button"));
        
        f.getContentPane().add(container);
        f.setSize(300,300);
        f.setVisible(true);
    }
    
    private static BufferedImage createDummyImage()
    {
        int w = 300;
        int h = 300;
        BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_ARGB);
        Graphics g = image.createGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, w, h);
        g.setColor(Color.RED);
        for (int y=0; y<h; y+=20)
        {
            g.drawString("This is an image", 20, y);
        }
        g.dispose();
        return image;
    }
    
}


class BackgroundImageComponent extends JPanel
{
    private Image image;
    public BackgroundImageComponent(Image image)
    {
        this.image = image;
        setOpaque(false);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        super.paintComponent(g);

    }
}

ok danke,

werde mich damit auseinander setzen, leider komme ich erst morgen oder Samstag dazu. Ich melde mich dann.

Gruß Gü

Könnte eventuell auch nützlich sein: http://tips4java.wordpress.com/2008/10/12/background-panel/

Gruß,
André

Also vielen dank nochml,

habs ausprobiert Marco13, es funktioniert bestens!!
genau das habe ich gesucht.

Gruß Gü