Swing Hintergrundbild in einen JFrame einfügen

H

Hanna

Gast
Hallo,
ich versuche schon den ganzen Tag einem einfachen JFrame ein Hintergrundbild zu verpassen.

Meine JFrame-Klasse:

Java:
 public class MainFrame extends JFrame implements WindowListener, ActionListener{
public MainFrame() {
	super("Heading");
	setSize(493, 370);
	setVisible(true);
	addWindowListener(this);
	setLayout(new GridLayout(1, 1));
	
	BackgroundPanel PBackground = new BackgroundPanel(new BorderLayout());
	Graphics g = (Graphics) getGraphics();
	PBackground.paint(g);
	
        PBackground.setVisible(true);
	PBackground.add(new JLabel("lala"), BorderLayout.PAGE_START);
	
	add(PBackground);
}
}

Meine BackgroundPanel-Klasse:


Java:
public class BackgroundPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private Image img;
	
	public BackgroundPanel(LayoutManager layout) {
		super(layout);
		img = Toolkit.getDefaultToolkit().getImage(/...bild.jpg);
		
	}
	
	public void paint(java.awt.Graphics g) {
		super.paint(g);
		g.drawImage(img, 0, 0, this);
	}

}


Also das hab ich mir irgendwie aus tausend verschiedenen Foreneinträgen zusammengesucht und mit allen möglichen Prozeduren rumprobiert aber es kam einfach nix bei raus... ich glaub dass ich auch das mit dem paint(g) noch nicht richtig verstanden habe... oder kann das sein dass ich vielleicht noch so eine Art AD-ON brauche, dass mein Programm überhaupt Grafiken anzeigen kann? Ich weiß echt nicht mehr was ich noch probieren soll, bitte helft mir weiter... :)
 

Fab1

Top Contributor
In deiner Version würdest du eh mehrere Compiler Fehler bekommen. Ich hab dir mal eine kleine Version zusammengebaut, wie man das umsetzen könnte.

In meinem Fall liegt das Bild direkt in dem src Ordner.

Ich hab beide Klassen in eine File gepackt, musst du halt dann einfach wieder trennen. :)

Schöne Grüße

Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JavaSchulung extends JFrame {
	public JavaSchulung() {
		super("Heading");

		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		BackgroundPanel backgroundPanel = new BackgroundPanel();
		add(backgroundPanel);

		setSize(backgroundPanel.getBackgroundImage().getWidth(backgroundPanel),	backgroundPanel.getBackgroundImage().getHeight(backgroundPanel));
	}

	public static void main(String[] args) {
		new JavaSchulung();
	}
}

class BackgroundPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private Image img;

	public BackgroundPanel() {

		try {
			img = ImageIO.read(getClass().getResource("gamePanel.jpg"));
			System.out.println("Picture loaded.");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("Picture was not found.");
		}
	}

	@Override
	protected void paintComponent(Graphics g) {
		// TODO Auto-generated method stub
		super.paintComponent(g);
		g.drawImage(img, 0, 0, this);

	}

	public Image getBackgroundImage() {
		return img;
	}

}
 

André Uhres

Top Contributor
Der Aufruf
Code:
setVisible(true)
auf dem JFrame sollte immer erst zum Schluss kommen, wenn der ganze JFrame fertig aufgebaut ist, sonst kann es passieren, dass Teile davon nicht angezeigt werden!

Variablennamen werden immer mit kleinem Anfangsbuchstaben geschrieben:
Code:
PBackground -> pBackground

Den folgenden Code solltest Du löschen:
Java:
Graphics g = (Graphics) getGraphics();//hat hier keine Daseinsberechtigung
pBackground.paint(g);//paint wird niemals direkt aufgerufen!
pBackground.setVisible(true);//nicht verkehrt, aber überflüssig

Die
Code:
getImage
Methode vom
Code:
Toolkit
ladet das Bild nicht sofort! Das Bild laden wir am einfachsten so:
Java:
ImageIcon imageIcon = new ImageIcon(getClass().getResource("bild.jpg"));
img = imageIcon.getImage();
Der Aufruf
Code:
getClass().getResource(..)
ist notwendig, wenn das Bild später zusammen mit der Anwendung in eine jar-Datei gepackt werden soll.

Siehe auch Malen in Swing Teil 1: der grundlegende Mechanismus

Gruß,
André
 

André Uhres

Top Contributor
H

Hanna

Gast
Ok, ich habs jetzt mal so gemacht wie Fab1 es gemacht hat, war die erste Antwort und hat sogar funktioniert :) DANKE!!! Nur jetzt hab ich ein neues Problem... :
Ich hab jetzt auf dieses Bild-Panel noch Buttons draufgelegt und die transparent gemacht. das funktioniert auch, nur leider nur manchmal! Das heißt ich lasse mein Programm laufen und die Buttons werden angezeigt, ich beende das Programm und starte es neu und die Butons fehlen (ohne dass ich irgendwas im Code verändert habe). u.s.w.
Ist da einfach nur mein Computer mit der Anzeige überfordert (wobei ich mir das nicht vorstellen kann, soo heftig ist das ja auch nicht...) oder kann das auch am Code liegen?
 

Fab1

Top Contributor
Ich denke das Problem ist, dass setVisible(true) zu früh aufgerufen wird.

Ich denke darauf spekuliert L-ectron-X auch, würde ich zumindest so aus der Frage deuten. :)

Falls das der Fall sein kann, kannst du, falls du den Code von mir nicht groß verändert hast, den JFrame mal so aufrufen.

Java:
public static void main(String[] args) {
        new JavaSchulung().setVisible(true); // Statt JavaSchulung dein Klassenname
    }

Dadurch werden die Komponenten erst alle geladen und anschließend wird erst das Fenster angezeigt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 1
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
snipesss Hintergrundbild in JOptionPane.showInputDialog? AWT, Swing, JavaFX & SWT 4
M Hintergrundbild wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
L [Slick2d] Sidescroller/Hintergrundbild sehr langsam AWT, Swing, JavaFX & SWT 3
O Vollbildmodus mit Hintergrundbild AWT, Swing, JavaFX & SWT 8
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
Mr. Pink AWT Anzeigeproblem JPanel/Hintergrundbild AWT, Swing, JavaFX & SWT 1
T Hintergrundbild in JTextPane fixieren AWT, Swing, JavaFX & SWT 2
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2
SexyPenny90 Hintergrundbild mit Swing AWT, Swing, JavaFX & SWT 3
C Eigenes Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 6
P AWT Hintergrundbild in Hauptframe AWT, Swing, JavaFX & SWT 3
J Hintergrundbild für JFrame AWT, Swing, JavaFX & SWT 6
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
F Hintergrundbild im Frame AWT, Swing, JavaFX & SWT 11
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
N AWT Hintergrundbild AWT, Swing, JavaFX & SWT 2
R 2D-Grafik Hintergrundbild für JFrame AWT, Swing, JavaFX & SWT 4
E JButton mit hintergrundbild AWT, Swing, JavaFX & SWT 4
J Swing Hintergrundbild auf einem JFrame AWT, Swing, JavaFX & SWT 7
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
B Wie ein Hintergrundbild einfügen??? AWT, Swing, JavaFX & SWT 18
I JPanel mit Hintergrundbild, setOpaque AWT, Swing, JavaFX & SWT 10
C Label Hintergrundbild mit Text AWT, Swing, JavaFX & SWT 6
S Applet - Aerger mit dem Hintergrundbild - JLabel und JTextfield AWT, Swing, JavaFX & SWT 7
F hintergrundbild für jtable als jscrollpane AWT, Swing, JavaFX & SWT 10
J Hintergrundbild des JFrames lässt Textboxen verschwinden? AWT, Swing, JavaFX & SWT 4
H hintergrundbild fixieren AWT, Swing, JavaFX & SWT 3
N Swing Hintergrundbild in einer JScrollpane AWT, Swing, JavaFX & SWT 2
dl85hej Hintergrundbild AWT, Swing, JavaFX & SWT 2
C JPanel mit Hintergrundbild AWT, Swing, JavaFX & SWT 30
U JList mit Hintergrundbild hinterlegen und noch ne Frage AWT, Swing, JavaFX & SWT 4
C Hintergrundbild ohne Repaint AWT, Swing, JavaFX & SWT 9
G Jpanel mit Hintergrundbild füllen? AWT, Swing, JavaFX & SWT 6
G 2x JPanel im JScrollPane (Hintergrundbild in JScrollPane) AWT, Swing, JavaFX & SWT 9
E JPanel mit Hintergrundbild AWT, Swing, JavaFX & SWT 10
hdi panel hintergrundbild falsch implementiert ? AWT, Swing, JavaFX & SWT 9
Kidao Das Hintergrundbild überdeckt die Swing-Komponente AWT, Swing, JavaFX & SWT 5
C JdesktopPane Hintergrundbild AWT, Swing, JavaFX & SWT 6
N Hintergrundbild setzen AWT, Swing, JavaFX & SWT 4
L Frame mit Hintergrundbild? AWT, Swing, JavaFX & SWT 4
S JTextPane mit Hintergrundbild AWT, Swing, JavaFX & SWT 9
K Hintergrundbild an JFrame anpassen AWT, Swing, JavaFX & SWT 9
U bewegtes Hintergrundbild AWT, Swing, JavaFX & SWT 2
G Hintergrundbild auf JFrame oder JPanel AWT, Swing, JavaFX & SWT 3
F Text besser lesbar über Hintergrundbild AWT, Swing, JavaFX & SWT 6
G Hintergrundbild für JPanel AWT, Swing, JavaFX & SWT 4
S Hintergrundbild an Größe des JFrames anpassen AWT, Swing, JavaFX & SWT 4
G Problem mit Menü/Button auf Hintergrundbild AWT, Swing, JavaFX & SWT 10
D JTable - Hintergrundbild in Cell AWT, Swing, JavaFX & SWT 6
M Hintergrundbild und grafischer Button (Transparenz Probleme) AWT, Swing, JavaFX & SWT 3
H Hintergrundbild im Panel verschwindet sofort AWT, Swing, JavaFX & SWT 6
B Problem mit Hintergrundbild AWT, Swing, JavaFX & SWT 12
I Hintergrundbild bei awt container AWT, Swing, JavaFX & SWT 9
E hintergrundbild einfügen!! AWT, Swing, JavaFX & SWT 2
MiMa Reaktion auf einen SplitScreenTrenner? AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
P Wie lese ich einen jRadioButton aus? AWT, Swing, JavaFX & SWT 21
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
S Swing GANZE Row auf einen Schlag einfärben AWT, Swing, JavaFX & SWT 2
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
L Wie realisiere ich einen Controller AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
F JavaFX Erstelle einen Wald AWT, Swing, JavaFX & SWT 6
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
M JavaFX Wie füge ich zu einer WebEngine einen Flash Player hinzu AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Mit Java in der GUI einen Belegungsplan einfügen AWT, Swing, JavaFX & SWT 23
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben