AWT BufferedImage wird nicht geladen

cool_brivk24

Mitglied
Hallöchen liebe Programmier:

Ich programmiere derweil eine Anwendung und möchte ein Bild laden. Natürlich ist das so einfach, dass Onkel Google eine Lösung hat. Doch nicht für mein Problem. Meine Inkompetenz hat zugeschlagen:

Ich habe eine extra Klasse ( Window.java ) in der ich mein Window programmiere. Ich habe auch ein HintergrundBild mit einem JLabel hinzugefügt ( Hatte erstmals nichts anderes auf dem ersten Blick gefunden ). Jetzt wollte ich ein Bild in der Mitte haben, dieses soll aber einzeln gezeichnet werden. Natürlich mit paintComponent. Doch:

Java:
package de.coolbrick.catan.gui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Window extends Component{
   private static final long serialVersionUID = 1L;
   
   
   JLabel map;
   Icon icon1;
   
   
   
   public Window() {
       JFrame jf = new JFrame();

       jf.setSize(900, 700);
       jf.setTitle("...");
       jf.setResizable(false);
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       jf.setLocationRelativeTo(null);
       jf.setBackground(new Color(0, 162, 232));
       
       
       
       icon1 = new ImageIcon("img/Map/FirstTestMap.png");
       map = new JLabel(icon1);
       
       
       jf.add(map);
       
  
       jf.setVisible(true);
       
       
           
       }


   public void paintComponent(Graphics g) {
       AffineTransform at = AffineTransform.getTranslateInstance(100, 100);
       BufferedImage area = LoadImage("img/Map/Area.png");
       
       Graphics2D g2d = (Graphics2D) g;
       
       g2d.drawImage(area, at, null);
   }
   
   BufferedImage LoadImage(String FilePath){
       
       BufferedImage img = null;
       
       try {
           img = ImageIO.read(new File(FilePath));
       } catch (IOException e) {
           e.printStackTrace();
           throw new RuntimeException("" + FilePath + " konnte nicht geladen werden!!!");
       }
       
       return img;
       
   }
   

   

}

Doch mein paintComponent wird nicht aufgerufen. (Die Klasse Window.java ist nicht meine Main Klasse)

Ich bin zu inkompetent um den Fehler zu finden.

Mfg
-cool_brick24
 

mihe7

Top Contributor
Annotiere mal Deine paintComponent-Methode mit
Code:
@Override
. Wenn Dir dann was auffällt, schau mal in die JavaDocs zu Component und JComponent ;)
 

cool_brivk24

Mitglied
Das steht ich solle "@Override" entfernen. Und wenn ich mir die JavaDocs anschauen möchte, steht da, dass diese nicht gefunden werden konnten. Außerdem hatte ich den Component versehentlich drinne gelassen.
 

mihe7

Top Contributor
Kurz: Du musst von JComponent ableiten (Component kennt kein paintComponent, daher wird es auch nicht aufgerufen).
 

cool_brivk24

Mitglied
Danke. Jetzt steht da nicht mehr "ich solle das "@Override" entfernen" aber das Bild wird immer noch nicht geladen.
Mein aktueller Stand:
Java:
package de.coolbrick.catan.gui;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Window extends JComponent{
   /**
    *
    */
   private static final long serialVersionUID = 1L;
   JLabel map;
   Icon icon1;
   
   
   
   public Window() {
       JFrame jf = new JFrame();

       jf.setSize(900, 700);
       jf.setTitle("Minecraft Catan");
       jf.setResizable(false);
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       jf.setLocationRelativeTo(null);
       jf.setBackground(new Color(0, 162, 232));
       
       
       
       icon1 = new ImageIcon("img/Map/FirstTestMap.png");
       map = new JLabel(icon1);
       
       
       jf.add(map);
       
       
       //Muss immer am Ende stehen
       jf.setVisible(true);
       
       
           
       }
   @Override
   public void paintComponent(Graphics g) {
       AffineTransform at = AffineTransform.getTranslateInstance(100, 100);
       BufferedImage area = LoadImage("img/Map/Area.png");
       
       Graphics2D g2d = (Graphics2D) g;
       
       g2d.drawImage(area, at, null);
   }
   
   BufferedImage LoadImage(String FilePath){
       
       BufferedImage img = null;
       
       try {
           img = ImageIO.read(new File(FilePath));
       } catch (IOException e) {
           e.printStackTrace();
           throw new RuntimeException("" + FilePath + " konnte nicht geladen werden!!!");
       }
       
       return img;
       
   }
   
   

}

Ich habe immer noch keine Ahnung.

Mfg
-cool_brick24

PS: Ich schreib in 20 Minuten zurück
 

mihe7

Top Contributor
Wenn Du keine Exception bekommst, probier mal
Java:
g.drawImage(area, 100, 100, null);
 

cool_brivk24

Mitglied
@mrBrown wie meinst du das genau? Ich erstelle ja in der Windows Klasse eine Methode, die ich in meiner Main Aufrufe mit
Java:
new Window();
oder
Java:
Window w = new Window();

@mihe7 der Code-Tag funktioniert leider auch nicht. Aber ich habe eine Idee woran das liegen könnte. Gibt es in Java eine Hintergrund Ebene? Denn es kann sein dass mein Jlabel im Vordergrund steht und das BuffereeImage im Hintergrund gezeichnet wird.

Mfg
-cool_brick24
 

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown wie meinst du das genau? Ich erstelle ja in der Windows Klasse eine Methode, die ich in meiner Main Aufrufe mit
Ja, du erstellst das Objekt - aber nur durchs erstellen wird das ja nicht einfach angezeigt.
Im Konstruktor erstellst du das JFrame, und auf diesem lässt du ein Label anzeigen, aber eben nicht dein Window-Objekt, welches dein Bild malen würde.
 

mihe7

Top Contributor
@cool_brivk24 was @mrBrown meint (und ich völlig übersehen habe :rolleyes:) ist, dass im Konstruktor theoretisch ein jf.add(this); fehlt. Allerdings ist es keine gute Idee, eine halbkonstruierte Komponente einem Container hinzuzufügen...
 

cool_brivk24

Mitglied
Okay, trozdem danke. Kann ich es vielleicht so machen?:
Java:
 //Window.java
@Override
public void paintComponent drawArea(Graphics g){
.......
}
//Main.java
Window w = new Window();
w.drawArea(g);
Ich vermute, dass das nicht funktioniert denn in der Funktion muss ich ja Graphics g angeben.

Trozdem vielen dank für die antworten. Ich probieres es weiter.

mfg

-cool_brick24
 

cool_brivk24

Mitglied
Ich habe es jetzt so gelöst wie mihe7 es gesagt hatte. Vielleicht ist dies ein Weg der micht weiterbringt. Naja, trozdem vielen dank an euch. Mein aktueller Stand der Dinge:
Java:
package de.coolbrick.catan.gui;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Window extends JComponent{
   /**
    *
    */
   private static final long serialVersionUID = 1L;
   
   
   
   
   public Window() {
       JFrame jf = new JFrame();

       jf.setSize(900, 700);
       jf.setTitle("MineCatan");
       jf.setResizable(false);
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       jf.setLocationRelativeTo(null);
       jf.setBackground(new Color(0, 162, 232));
       
       
       jf.add(this);
       
       
       
       
       //Muss immer am Ende stehen
       jf.setVisible(true);
       
       
           
       }
   @Override
   public void paintComponent(Graphics g) {
       BufferedImage map = LoadImage("img/Map/FirstTestMap.png");       
       BufferedImage area = LoadImage("img/Map/Area.png");

       
       Graphics2D g2d = (Graphics2D) g;
       
       g.drawImage(map, 0, 0, null);
       g.drawImage(area, (int) 7.5f, 30, null);
   }
   
   BufferedImage LoadImage(String FilePath){
       
       BufferedImage img = null;
       
       try {
           img = ImageIO.read(new File(FilePath));
       } catch (IOException e) {
           e.printStackTrace();
           throw new RuntimeException("" + FilePath + " konnte nicht geladen werden!!!");
       }
       
       return img;
       
   }
   
   

}

Mit dankbaren und freundlichen grüßen:

-cool_brick24

PS: Schönen Mittag noch
 

mihe7

Top Contributor
Das Problem ist, dass Deine Window-Objekte zu viel machen: Du versuchst, UI und Komponente zu vereinen.

Window soll, wenn ich es richtig verstehe, ein Anwendungsfenster aufbauen, dabei soll ein Panel verwendet werden, das im Hintergrund ein Bild anzeigt.
1. Der Bezeichner "Window" ist nicht gut -> zu allgemein.
2. Die Klasse Window kannst Du Dir ganz sparen

Du brauchst eher etwas in der Art (ungetestet):

Java:
public class ImagePanel extends JComponent {
    private BufferedImage backgroundImage;
    public void setBackground(BufferedImage img) {
        backgroundImage = img;
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Insets insets = getInsets();
        if (backgroundImage != null) {
            g.drawImage(backgroundImage, insets.left, insets.top, null);
        }
    }      
}

Java:
public class App {
    private void run() {
        BufferedImage area = loadImage("img/Map/Area.png"); 
        ImagePanel panel = new ImagePanel();
        panel.setBackground(area);
        // weitere Komponenten hinzufügen
        // panel.add(...) 
        JFrame frame = new JFrame();
        // frame konfigurieren...
        frame.add(panel);
        frame.setVisible(true);     
    }

    private BufferedImage loadImage(String path) {
        ...
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new App().run());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A 2D-Grafik BufferedImage wird nicht eingezeichnet AWT, Swing, JavaFX & SWT 3
Luma BufferedImage wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
M effizient mehrere BufferedImage in eines schreiben AWT, Swing, JavaFX & SWT 6
I Arbeitsspeicherverbrauch BufferedImage.TYPE_INT_RGB vs. TYPE_3BYTE_BGR AWT, Swing, JavaFX & SWT 6
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
I GEmaltes BufferedImage löschen AWT, Swing, JavaFX & SWT 3
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
S 2D-Grafik User-BufferedImage rotieren im Zentrum und ohne "anpassung" AWT, Swing, JavaFX & SWT 2
C Pixel-Rendering/Animation Performance in BufferedImage AWT, Swing, JavaFX & SWT 1
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
G Subimage von BufferedImage speichern AWT, Swing, JavaFX & SWT 4
D JPanel Graphic2D als BufferedImage Speichern AWT, Swing, JavaFX & SWT 5
D BufferedImage -> Feature Extraktion. Unterschiedliche BufferedImage imageTypes problem AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Shape aus BufferedImage "löschen" AWT, Swing, JavaFX & SWT 2
M 2D-Grafik LookupOp Operation auf BufferedImage AWT, Swing, JavaFX & SWT 7
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
P BufferedImage schlechte Qualität beim Abspeichern AWT, Swing, JavaFX & SWT 9
S BufferedImage als schwarz-weiß-Bild AWT, Swing, JavaFX & SWT 3
Luk10 BufferedImage[...].getData() vs BufferedImage.setRGB() AWT, Swing, JavaFX & SWT 2
D Schnelles kopieren von Pixeln in ein BufferedImage AWT, Swing, JavaFX & SWT 25
J Flackern wie mit BufferedImage beheben AWT, Swing, JavaFX & SWT 4
N Swing BufferedImage neu laden AWT, Swing, JavaFX & SWT 10
N 2D-Grafik BufferedImage, Line2D, Swing und die Probleme AWT, Swing, JavaFX & SWT 5
Luk10 BufferedImage auf ein anderes BufferedImage zeichnen AWT, Swing, JavaFX & SWT 6
P BufferedImage auf JPanel AWT, Swing, JavaFX & SWT 11
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
T BufferedImage bei paintComponent AWT, Swing, JavaFX & SWT 6
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
0x7F800000 2D-Grafik int[] zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 27
H 2D-Grafik BufferedImage aus Integer-Array AWT, Swing, JavaFX & SWT 3
Luk10 2D-Grafik BufferedImage sauber rotieren AWT, Swing, JavaFX & SWT 16
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
E BufferedImage Alphaknal ein- und ausblenden AWT, Swing, JavaFX & SWT 7
N BufferedImage zeichnen AWT, Swing, JavaFX & SWT 4
D BufferedImage Größe skalieren AWT, Swing, JavaFX & SWT 2
P Swing Vom BufferedImage bei paintComponent nur soviel zeichnen, wie nötig AWT, Swing, JavaFX & SWT 3
B 2D-Grafik BufferedImage Performance AWT, Swing, JavaFX & SWT 3
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
E AWT RenderedImage aus BufferedImage erzeugen, um Bild abzuspeichern? AWT, Swing, JavaFX & SWT 4
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
J AWT BufferedImage to 2DArray AWT, Swing, JavaFX & SWT 10
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
J JPanel in Bufferedimage AWT, Swing, JavaFX & SWT 3
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
B BufferedImage Builder AWT, Swing, JavaFX & SWT 15
F Transparentes BufferedImage über BufferedImage AWT, Swing, JavaFX & SWT 12
F Größe von BufferedImage ändern AWT, Swing, JavaFX & SWT 27
I Swing JComponent als BufferedImage speichern AWT, Swing, JavaFX & SWT 18
Dragonfire Swing Zoom-Vorgang optimieren [BufferedImage] AWT, Swing, JavaFX & SWT 2
2 Memory Leak mit BufferedImage !! AWT, Swing, JavaFX & SWT 15
X BufferedImage maximiert in JFrame anzeigen? AWT, Swing, JavaFX & SWT 2
R JPanel - BufferedImage - zeichnen großer Bilder AWT, Swing, JavaFX & SWT 2
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
R Zeichnen von Zahlen in BufferedImage AWT, Swing, JavaFX & SWT 6
G BufferedImage.getRGB() mit 3 int-Werten vergleichen AWT, Swing, JavaFX & SWT 2
G keine ScaledInstance von BufferedImage? AWT, Swing, JavaFX & SWT 6
S BufferedImage & Scaling: Altes Problem im neuen Gewand AWT, Swing, JavaFX & SWT 2
G zu viele/große BufferedImage führt zu Java heap space AWT, Swing, JavaFX & SWT 5
G BufferedImage und jpg --> maximale Qualität AWT, Swing, JavaFX & SWT 9
F HTML Text irgendwie auf BufferedImage bringen AWT, Swing, JavaFX & SWT 3
R BufferedImage Problem AWT, Swing, JavaFX & SWT 2
G Problem mit BufferedImage und imageIO AWT, Swing, JavaFX & SWT 2
S BufferedImage drehen AWT, Swing, JavaFX & SWT 3
? ActionListener auf BufferedImage AWT, Swing, JavaFX & SWT 11
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3
A Probelme mit großen BufferedImage in paintComponent AWT, Swing, JavaFX & SWT 7
B Farbtiefe eines BufferedImage verringern AWT, Swing, JavaFX & SWT 3
F ImageIcon -> BufferedImage AWT, Swing, JavaFX & SWT 2
T Performance Problem bei BufferedImage AWT, Swing, JavaFX & SWT 3
F Animiertes Gif als BufferedImage AWT, Swing, JavaFX & SWT 10
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
C Rotate BufferedImage --> Bild unvollständig AWT, Swing, JavaFX & SWT 5
U Streifen hinter bewegtem BufferedImage AWT, Swing, JavaFX & SWT 13
M BufferedImage skalieren AWT, Swing, JavaFX & SWT 6
T BufferedImage verkleinern Resultat ist zu pixelig. AWT, Swing, JavaFX & SWT 6
G Image Object speichern oder in ein BufferedImage umwandeln AWT, Swing, JavaFX & SWT 2
P Problem beim Zeichnen auf ein BufferedImage AWT, Swing, JavaFX & SWT 4
B BufferedImage aus einer Datei AWT, Swing, JavaFX & SWT 4
C Farben in BufferedImage ändern ? AWT, Swing, JavaFX & SWT 2
J Image to BufferedImage AWT, Swing, JavaFX & SWT 5
T BufferedImage kopieren AWT, Swing, JavaFX & SWT 3
T BufferedImage Farbe "Transparent" AWT, Swing, JavaFX & SWT 21
T BufferedImage + bestimmten bereich ausfüllen AWT, Swing, JavaFX & SWT 3
M BufferedImage Größe? AWT, Swing, JavaFX & SWT 10
U Löschen eines BufferedImage AWT, Swing, JavaFX & SWT 7
J Image aus BufferedImage ohne AWT AWT, Swing, JavaFX & SWT 5
V Image in BufferedImage AWT, Swing, JavaFX & SWT 3
J BufferedImage aus byte-Array erstellen AWT, Swing, JavaFX & SWT 3
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben