Hintergrundbild einfügen

Timinio31

Neues Mitglied
Hey,
ich bin Programmier Anfänger und tue mich echt schwer zum Start, weshalb ich euch nach lang Probieren nach Hilfe frage.
Kontext: Ich möchte ein kleines Spiel Programmieren, Klassen wie Player etc. stehen, jedoch möchte ich testen, ob die auch wirklich funktionieren,
weshalb ich ein Fenster mit einem Hintergrund erstellen wollte, mit dem ich das testen kann.
Problem an der ganzen Sache ist, dass ich nur das Fenster geöffnet bekomme, aber kein Zugriff auf den Hintergrund des Fensters.
Nach vielen hin und her ist das der Code, der übrig geblieben ist.

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


public class field extends JFrame {

public field(){
JLabel back = new JLabel(new ImageIcon("Ground.jpeg"));
JFrame field = new JFrame();
field.setSize(960,530);
field.add(back);
field.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
field.setVisible(true);
field.setLocationRelativeTo(null);

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

-> Ich würde mich sehr über jede Hilfe bezüglich des Codes, wie auch, wie man hier ein Beitrag gestaltet, freuen.

Mfg Timinio
 
Ich würde da die ContentPane setzen mit einer Pane, die schnell geschrieben ist.

Da reicht schon etwas wie:
Java:
try {
    final Image backgroundImage = ImageIO.read(new File(...));
    
    setContentPane(new JPanel(new BorderLayout()) {
        @Override public void paintComponent(Graphics g) {
            g.drawImage(backgroundImage, 0, 0, null);
        }
    });
} catch (IOException e) {
    throw new RuntimeException(e);
}

Das kann man aber auch noch beliebig anpassen je nach Anforderung. So hat Graphics.drawImage mehrere überladene Varianten, so dass Du das Bild auch vergrößert/verkleinert darstellen könntest. (Ein Vorteil gegenüber dem Ansatz mit dem JLabel, das diese Freiheiten nicht gewährt.)

Diese Minimale Variante kommt übrigens von https://stackoverflow.com/a/19714066/11484412 - ich selbst hätte sowas in eine eigene Klasse ImagePanel oder so gepackt mit Konstruktor, der das Image / InputStream / Path nehmen könnte.
Und wenn man dann nach und nach mehr Funktionalität brauchtm, jat man einen Ort wo man das gezielt einbauen kann.
 

Zurück
Oben