2010-10-29 25 views
7

¿Cómo poner el fondo de la imagen en JPANEL?JPanel con fondo de imagen

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

me gustaría utilizar un [JImagePanel] (https://github.com/dberm22/DBoard/blob/master/src/com/dberm22/utils/ JImagePanel.java). Debe hacer todo lo que necesite, – dberm22

Respuesta

2

Here's una explicación.

+0

Gracias por su ayuda :) – Jessy

4

Es probablemente más fácil de cargar el Image en un ImageIcon y mostrarlo en una JLabel, sin embargo:
Para directamente 'draw' la imagen al JPanel, reemplazar el método del JPanel paintComponent(Graphics) a algo como lo siguiente:

public void paintComponent(Graphics page) 
{ 
    super.paintComponent(page); 
    page.drawImage(img, 0, 0, null); 
} 

donde img es (posiblemente cargado a través de la llamada ImageIO.read()).

Graphics#drawImage es un comando muy sobrecargado que le permitirá ser muy específico sobre cómo, cuánto y dónde pintará la imagen para el componente.

También puede obtener 'fantasía' y escalar la imagen a su gusto con el método Image#getScaledInstance. Esto tomará un -1 para los parámetros width o height para mantener la relación de aspecto de la imagen igual.

Ponerlo en una forma más elegante:

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

gracias Reese – Jessy