Como colocar uma imagem de fundo jPanel no Netbeans – [Java]

Uma das coisas mais frustrantes ao usar o Netbeans é descobrir que nas propriedades do jPanel não há uma propriedade background-image, e colocar uma imagem no fundo do componente, quase sempre te leva a dar uma busca no Google 🙂

De acordo com a própria documentação no site da IDE, isso ocorre porque o próprio componente Swing não da suporte a imagem de fundo:

Não há nenhum suporte direto para uma imagem de segundo plano do JFrame no GUI Builder, já que não há nenhum suporte direto para uma imagem de segundo plano do JFrame no Swing.

https://netbeans.org/kb/docs/java/gui-image-display_pt_BR.html

A solução é. usar o método paintComponent(), do próprio jPanel, fazendo assim:

1. Criar uma classe java Ex. PainelImagemFundo:

Criando a classe PainelImagemFundo

2. Estender a classe jPanel e sobrescrever o método paintComponent():

import java.awt.Graphics;
import javax.swing.ImageIcon;

/**
 * @author Willian Bueno
 */
public class PainelImagemFundo extends javax.swing.JPanel{
    
    private ImageIcon img;
    
    public PainelImagemFundo(){
       img = new ImageIcon();
    }
    
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        
        g.drawImage(img.getImage(), 0, 0, this.getWidth(), this.getHeight(), this);
        
    }
    
    public void setImg(ImageIcon img){
        this.img = img;
    }
    
    public ImageIcon getImg(){
        return this.img;
    }
    
}

3. Clique com o botão direito na classe PainelImagemFundo.java > Ferramentas > Adiciona à paleta

Adicionar painel a paleta

4. Escolha Contêineres Swing:5. A classe deve aparecer na lista de componentes:

6. Execute o projeto (F6). Atenção! se tentar adicionar o painel antes de executar o projeto você verá um erro informando que a classe não foi encontrada.

7. Adicione o painel ao jFrame:

Arrastando o painel para o projeto.

8. Com o painel recém adicionado selecionado, clique nas reticências da propriedade img:

9. Mude para código personalizado:

10. E adicione o código:

new ImageIcon("src/images/imagem_fundo.jpg")

11. Pronto! Agora só importe a classe: javax.swing.ImageIcon, na classe onde está usando o painel:

import javax.swing.ImageIcon;

12. Altere o tamanho e posição do jPanel e execute o projeto:

Imagem no fundo do jPanel.

Dúvidas ou sugestões? Deixe seu comentário!

Autor da solução: Willian Bueno




Compartilhar: