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:

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
4. Escolha Contêineres Swing:
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:
8. Com o painel recém adicionado selecionado, clique nas reticências da propriedade img:
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:
Dúvidas ou sugestões? Deixe seu comentário!
Autor da solução: Willian Bueno