2D-Grafik Background Image Klasse

JSCHLAG

Mitglied
Guten Morgen liebe User,

ich habe ein Problem. Unsere Informatiklehrerin hat uns ins kalte Wasser geschmissen und fordert uns auf ein Programm zu erstellen, in dem eine Klasse eine GUI und eine Klasse für das Hintergrund zuständig ist. Ich habe mir schon reichlich Beiträge dazu angeschaut, verstehe es trotzdem nicht, wie ich die Background Image Klasse programmieren soll und wie ich sie in die GUI Klasse integriere bzw auf die GUI daraufbekomme. Die GUI habe ich selber probiert zu programmieren:

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

public class PGUI extends JFrame {

public PGUI() {
super();
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 600;
int frameHeight = 600;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("PGUI");
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);

setVisible(true);
}

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

Würde mich auf hilfreiche Antworten freuen, da mir dieses Projekt sehr wichtig ist, da ich zurzeit auf 14pkt stehe.
 

JSCHLAG

Mitglied
@truesoul ich weiß ja wie man eine frame erstellt, wenn man das so behaupten kann. Ich verstehe nur nicht wie man eine Klasse zum Hintergundbild zeichnen programmiert und in die GUI einbindet.
 

truesoul

Top Contributor
Hallo.

Ja und warum googlest du nicht danach :) ?

Zum Beispiel nach: "java swing set background image" oder "java swing drawimage"

Grüße
 

JSCHLAG

Mitglied
Ich habe jetzt eine Background Image Klasse und eine GUI erstellt. Jedoch ist meine Frame unerklärlich klein und zeigt kein Bild an.

GUI Class: PGUI.java
Code:
import javax.swing.JFrame;

public class PGUI{
public PGUI() {
PWorld panell = new PWorld();
JFrame frame = new JFrame();
frame.getContentPane().add(panell);
frame.pack();
frame.setVisible(true);
}

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

Background Class: PWorld.java:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;

public class PWorld extends JPanel {
Image img;

public PWorld(){
img = Toolkit.getDefaultToolkit().createImage("/bilder/pbackground.jpg");
}

public void paint(Graphics g){
g.drawImage(img, 0, 0, null);
}
}
 
Zuletzt bearbeitet:

Robat

Top Contributor
1. paintComponent(Graphics g) überschreiben - nicht paint(Graphics g)
2. Du gibst deinem JFrame keine Größe mit. Hinweis: setSize(width,height)
3. Entweder machst du das pack() weg oder gibst deinem Hintergrund-Panel eine PreferredSize setPreferredSize(Dimension dim)
 

JSCHLAG

Mitglied
@Robat Schritt 2 und 3 haben perfekt geholfen. Jedoch verstehe ich nicht was du mit überschreiben meinst. Mir wird desweiteren kein Hintergrundbild angezeigt...

GUI Class: PGUI.java
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class PGUI{
        public PGUI() {
            PWorld panell = new PWorld();
            JFrame frame = new JFrame();
            frame.setSize(300,300);
            frame.getContentPane().add(panell, BorderLayout.CENTER);
            frame.setLocationRelativeTo(null);
           
            frame.setVisible(true);
        }
       
        public static void main(String[] args) {
            new PGUI();
        }
}

Background Class: PWorld.java:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;

public class PWorld extends JPanel {
    Image img;
   
    public PWorld(){
        img = Toolkit.getDefaultToolkit().createImage("/bilder/pbackground.jpg");
    }

    public void paintComponent(Graphics g){
        g.drawImage(img, 100, 100, null);
    }
}
 

Robat

Top Contributor
"Überschreiben" bedeutet in dem Fall dass du eine Methode aus der Mutterklasse nimmst und die konkrete Implementierung für diese Klasse änderst.
Und genau das ist dein Problem.
Du erbst von JPanel. Da JPanel selber von JComponent erbt (eine andere Klasse) hast du die Möglichkeit, Methoden aus dieser Klasse abzuändern.
In der Klasse JComponent gibt es eine Methode mit folgender Signatur: protected void paintComponent(Graphics g). Wenn du jetzt ein Hintergrundbild zeichnen willst musst du genau diese Methode überschreiben.
Bedeutet also du solltest protected statt public schreiben.

Außerdem muss die erste Zeile in der Methode wie folgt lauten:
Java:
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    // hier folgen deine Zeichnungen
}

Danach solltest du eigentlich auch in der Lage sein dein Hintergrundbild zu sehen.

Kleiner Tipp:
In Java gibt es so genannte Annotationen die einem in vielen Fällen das Leben erleichtern.
Wenn du vor eine Methode die überschrieben werden soll die Annotation @Override setzt dann schaut der Compiler für dich ob es in den Oberklassen eine Methode mit dieser Signatur gibt. So wirst du leichter auf Schreibfehler aufmerksam :)

Java:
@Override
protected void paintComponent(Graphics g) {
     super.paintComponent(g);
     // ...
}
 

JSCHLAG

Mitglied
@Robat erstmal vielen Dank für deine ausführliche Hilfe mit Erklärungen, jedoch wird mir noch immer kein Bild angezeigt...

GUI Class: PGUI.java
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class PGUI{
        public PGUI() {
            PWorld panell = new PWorld();
            JFrame frame = new JFrame();
            frame.setSize(300,300);
            frame.getContentPane().add(panell, BorderLayout.CENTER);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
       
        public static void main(String[] args) {
            new PGUI();
        }
}

Background Class: PWorld.java:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;

public class PWorld extends JPanel {
    Image img;
   
    public PWorld(){
        img = Toolkit.getDefaultToolkit().createImage("D:/WorkJava/Pou/bin/bilder/pbackground.jpg");
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 100, 100, null);
    }
}
 

Robat

Top Contributor
Wenn du nach dem Start die Größe des Fensters veränderst solltest du das Bild sehen.
Das liegt mMn an der Verwendung von Toolkit.getDefaultToolkit().createImage(..) welche, soweit ich weiß, das Bild in einem separaten Thread lädt.

Wenn du nicht zwingend auf diese Variante angewiesen bist würde ich dir empfehlen das Bild lieber über ImageIO.read(new File("your path")) zu laden.
Das passiert dann im selben Thread.
 

JSCHLAG

Mitglied
@Robat das
Code:
img = ImageIO.read(new File("D:/WorkJava/Pou/bin/bilder/as.jpg"));
gibt einen Fehler aus: Unhandled Exception type IOException.

Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class PWorld extends JPanel {
    Image img;
   
    public PWorld(){
        img = ImageIO.read(new File("D:/WorkJava/Pou/bin/bilder/as.jpg"));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, null);
    }
}
 

JSCHLAG

Mitglied
@truesoul vielen Dank:D. Das Try Catch bringt alles jetzt so wie ich will zum Laufen. Vielen Dank an alle die mir geholfen haben:p @Robat @VfL_Freak @truesoul .
GUI Class
Code:
import java.awt.BorderLayout;
import javax.swing.JFrame;

public class PGUI{
        public PGUI() {
            PWorld panell = new PWorld();
            JFrame frame = new JFrame();
            frame.setSize(900,900);
            frame.getContentPane().add(panell, BorderLayout.CENTER);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
       
        public static void main(String[] args) {
            new PGUI();
        }
}
BG Class
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class PWorld extends JPanel {
    Image img;
   
    public PWorld(){
        try{
            img = ImageIO.read(new File("D:/WorkJava/Pou/bin/bilder/pbackground.jpg"));}
        catch(IOException e){System.out.println(e.getMessage());}
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, null);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
Luk10 Überschneidung von Image und Background AWT, Swing, JavaFX & SWT 7
P [SWT] Background-Image skalieren statt kacheln AWT, Swing, JavaFX & SWT 2
A Background Image auf SWT Oberfläche legen AWT, Swing, JavaFX & SWT 3
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
ToBJo JavaFX "Blueprint" CSS Background AWT, Swing, JavaFX & SWT 4
vodkaz JButtonz Icon&Background AWT, Swing, JavaFX & SWT 3
F background bei JButton AWT, Swing, JavaFX & SWT 11
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
J JTextPane Background setzen AWT, Swing, JavaFX & SWT 6
Guybrush Threepwood JButton Background beim Klicken AWT, Swing, JavaFX & SWT 4
G Model,Listener und background jobs AWT, Swing, JavaFX & SWT 4
J JMenu unterschiedliche Background einstellen AWT, Swing, JavaFX & SWT 5
S TableCellRenderer: JLabel-Background in JPanel AWT, Swing, JavaFX & SWT 7
O JTable label background und selection AWT, Swing, JavaFX & SWT 3
T Pseudo-Transparenz für Applets -> Background grabben AWT, Swing, JavaFX & SWT 15
M JComboBox Selected-Background Farbe AWT, Swing, JavaFX & SWT 5
S noobfrage: background color wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
G background von JFrame funktioniert nicht AWT, Swing, JavaFX & SWT 9
G JFrame mit background bild -> verschiebt Buttons ? AWT, Swing, JavaFX & SWT 23
T Background Color JSpiner AWT, Swing, JavaFX & SWT 2
G TableCellRenderer Background variiert darstellen AWT, Swing, JavaFX & SWT 3
C Textfield Background auf Standard zurücksetzen AWT, Swing, JavaFX & SWT 2
S JTextArea background Transparent geht nicht AWT, Swing, JavaFX & SWT 23
A Probleme mit Windows Style (Background) AWT, Swing, JavaFX & SWT 4
G anfängerfrage:background und buttonimages AWT, Swing, JavaFX & SWT 3
R JButton background verdeckt gemaltes AWT, Swing, JavaFX & SWT 6
Z JPanels spiegeln und JLabel Background-color AWT, Swing, JavaFX & SWT 4
M JTable background AWT, Swing, JavaFX & SWT 2
saxman23 JLabel mit Background und Foreground setzen AWT, Swing, JavaFX & SWT 3
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben