JPanel als HintergrundBild

Elyt

Mitglied
Hallo zusammen,
ich weiß, dass das ein sehr durchgekautes Thema ist und ja ich habe gesehen, dass es auch Beiträge dazu gab, jedoch hat mir keiner davon geholfen.
Und somit die Frage, wie setzte ich in meinem Code ein Bild als Hintergrund?

Java:
package gui;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

public class Brett extends JPanel {

  private ArrayList<Feld> alleFelder = new ArrayList<Feld>();
  private ArrayList<Feld> unverkaeuflicheFelder = new ArrayList<Feld>(); // Felder wie "Start" und Gemeinschaftskarten

  public ArrayList<Feld> getUnverkaeuflicheFelder(){
    return unverkaeuflicheFelder;
  }

  public ArrayList<Feld> getAlleFelder(){
    return alleFelder;
  }

  public Feld getFeldAtIndex(int location) {
    return alleFelder.get(location);
  }

  public Brett(int xCoord, int yCoord, int width, int height) {
    setBorder(new LineBorder(new Color(0, 0, 0)));
    setBounds(xCoord, yCoord, 1116, 1116);
    this.setLayout(null);
    initializeFelder();
  }

    JLabel lblMonopoly = new JLabel("MONOPOLY"){
      protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        AffineTransform aT = g2.getTransform();
        Shape oldshape = g2.getClip();
        double x = getWidth()/2.0;
        double y = getHeight()/2.0;
        aT.rotate(Math.toRadians(-35), x, y);
        g2.setTransform(aT);
        g2.setClip(oldshape);
        super.paintComponent(g);
      }
    };
    lblMonopoly.setForeground(Color.WHITE);
    lblMonopoly.setBackground(Color.RED);
    lblMonopoly.setOpaque(true);
    lblMonopoly.setHorizontalAlignment(SwingConstants.CENTER);
    lblMonopoly.setFont(new Font("Lucida Grande", Font.PLAIN, 40));
    lblMonopoly.setBounds(179, 277, 263, 55);
    this.add(lblMonopoly);
   
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
  }




}
 
Indem Du der Klasse eine Variable für z. B. ein BufferedImage spendierst und dieses Bild in paintComponent zeichnest.
 
Da gibts nix zu erklären, im einfachsten Fall:
Java:
public class Brett extends JPanel {
    private BufferedImage image;

    public Brett(BufferedImage imag) {
        if (image == null) {
            throw new IllegalArgumentException("image is required");
        }
        this.image = image;
    }

    public void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }
}
 
Da gibts nix zu erklären, im einfachsten Fall:
Java:
public class Brett extends JPanel {
    private BufferedImage image;

    public Brett(BufferedImage imag) {
        if (image == null) {
            throw new IllegalArgumentException("image is required");
        }
        this.image = image;
    }

    public void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }
}
Und an die Stelle („Image is required“) kommt dann mein Bild ?
 
Nein, beim Erzeugen des Bretts gibst Du dem Konstruktor das Bild als Argument mit.

Z. B.
Java:
BufferedImage image = ImageIO.read(getClass().getResource("images/spielbrett.png"));
Brett brett =new Brett(image);
 
Nein, beim Erzeugen des Bretts gibst Du dem Konstruktor das Bild als Argument mit.

Aber was ist denn jetzt an diesem Code falsch:
Java:
package gui;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

public class Brett extends JPanel {
 
  private bufferedImage image = ImageIO.read(getClass().getResource("images/Spielfeld.png"));;
  private ArrayList<Feld> alleFelder = new ArrayList<Feld>();
  private ArrayList<Feld> unverkaeuflicheFelder = new ArrayList<Feld>(); // Felder wie "Start" und Gemeinschaftskarten
 
  public ArrayList<Feld> getUnverkaeuflicheFelder(){
    return unverkaeuflicheFelder;
  }
 
  public ArrayList<Feld> getAlleFelder(){
    return alleFelder;
  }
 
  public Feld getFeldAtIndex(int location) {
    return alleFelder.get(location);
  }

  public Brett(int xCoord, int yCoord, int width, int height) {
    setBorder(new LineBorder(new Color(0, 0, 0)));
    setBounds(xCoord, yCoord, 1116, 1116);
    this.setLayout(null);
    initializeFelder();
  }
 
  public Brett(BufferedImage image) {
        if (image == null) {
            throw new IllegalArgumentException("image is required");
        }
        this.image = image;
    }

    public void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }
    
    

    JLabel lblMonopoly = new JLabel("MONOPOLY"){
      protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        AffineTransform aT = g2.getTransform();
        Shape oldshape = g2.getClip();
        double x = getWidth()/2.0;
        double y = getHeight()/2.0;
        aT.rotate(Math.toRadians(-35), x, y);
        g2.setTransform(aT);
        g2.setClip(oldshape);
        super.paintComponent(g);
      }
    };
    lblMonopoly.setForeground(Color.WHITE);
    lblMonopoly.setBackground(Color.RED);
    lblMonopoly.setOpaque(true);
    lblMonopoly.setHorizontalAlignment(SwingConstants.CENTER);
    lblMonopoly.setFont(new Font("Lucida Grande", Font.PLAIN, 40));
    lblMonopoly.setBounds(179, 277, 263, 55);
    this.add(lblMonopoly);
    
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
  }




}
 
1. hast Du zweimal paintComponent in der Klasse
2. musst Du den Konstruktor in Deinen "integrieren", sprich: Deinen um den Parameter erweitern.
 

Zurück
Oben