JPanel als HintergrundBild

Diskutiere JPanel als HintergrundBild im Java Basics - Anfänger-Themen Bereich.
Elyt

Elyt

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);
  }




}
 
mihe7

mihe7

Indem Du der Klasse eine Variable für z. B. ein BufferedImage spendierst und dieses Bild in paintComponent zeichnest.
 
Elyt

Elyt

Indem Du der Klasse eine Variable für z. B. ein BufferedImage spendierst und dieses Bild in paintComponent zeichnest.
Könntest du das eventuell nochmal etwas erklären oder so?

Ich hab leider gar keine Ahnung tut mir Leid... :confused:

Aber danke, dass du hilfst :)
 
Zuletzt bearbeitet:
mihe7

mihe7

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);
    }
}
 
Elyt

Elyt

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 ?
 
mihe7

mihe7

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);
 
Elyt

Elyt

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);
  }




}
 
mihe7

mihe7

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

JPanel als HintergrundBild

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben