2010-10-29 11 views
7

Wie man Bildhintergrund auf JPANEL setzt?JPanel mit Bildhintergrund

JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
pDraw.setPreferredSize(new Dimension(600,600)); //size of the JPanel 
pDraw.setBackground(Color.RED); //How can I change the background from red color to image? 
+0

Ich würde verwenden eine [JImagePanel] (https://github.com/dberm22/DBoard/blob/master/src/com/dberm22/utils/ JImagePanel.java). Sollte alles tun, was Sie brauchen, – dberm22

Antwort

2

Here's eine Erklärung.

+0

Vielen Dank für Ihre Hilfe :) – Jessy

4

Es ist wahrscheinlich am einfachsten, die Image in eine ImageIcon zu laden und in einem JLabel zeigen jedoch:
Um direkt ‚zeichnen‘ das Bild auf die JPanel, überschreiben die paintComponent(Graphics) Methode des JPanel zu so etwas wie die folgenden:

wo img ist ein Image (möglicherweise über die ImageIO.read() Aufruf geladen).

Graphics#drawImage ist ein stark überladener Befehl, mit dem Sie sehr genau festlegen können, wie, wie viel und wo Sie das Bild an die Komponente malen.

Sie können auch 'Phantasie' und skalieren Sie das Bild zu Ihrem Angenehm mit der Image#getScaledInstance Methode. Dies erfordert einen -1 entweder für den width oder den height Parameter, um das Seitenverhältnis des Bildes gleich zu halten.

Putting es in einer Phantasie Art:

public void paintComponent(Graphics page) 
{ 
    super.paintComponent(page); 

    int h = img.getHeight(null); 
    int w = img.getWidth(null); 

    // Scale Horizontally: 
    if (w > this.getWidth()) 
    { 
     img = img.getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT); 
     h = img.getHeight(null); 
    } 

    // Scale Vertically: 
    if (h > this.getHeight()) 
    { 
     img = img.getScaledInstance(-1, getHeight(), Image.SCALE_DEFAULT); 
    } 

    // Center Images 
    int x = (getWidth() - img.getWidth(null))/2; 
    int y = (getHeight() - img.getHeight(null))/2; 

    // Draw it 
    page.drawImage(img, x, y, null); 
} 
+0

danke Reese – Jessy