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: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:
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:
Dúvidas ou sugestões? Deixe seu comentário!
Autor da solução: Willian Bueno
14 Comentários
Prezados
Teria a possibilidade de incluir/trazer a imagem diretamente para o componente por meio de uma classe ao em vez de adicionar a paleta?
Boa noite!
Excelente dica!
Muito obrigado
Opa bom dia ! estou tendo o mesmo problema do Daniel, ao compilar o arquivo .jar a imagem não aparece.
Substitui o código do item 10:
new ImageIcon(“src/images/imagem_fundo.jpg”)
por este:
new ImageIcon(getClass().getResource(“/images/imagem_fundo.png”))
Muito Obrigada por compartilhar este artigo.
Muito bom o artigo. Entretanto as Imagens perdem as referencias e somem apesar das imagens estarem dentro do .jar no “src”. Só consigo vê-las se colocar o link deste do C:\ até o local da imagem no WINDOWS. Entretanto quando mudo de máquina as imagens logicamente não estão mais disponível e somem. É um problema pra achar a forma correta apesar das imagens estarem dentro do JAR.
´e colocar a past src no pasta dist
Precisei mexer em um projeto antigo e esse exemplo seu foi perfeito. Como eu preciso de um evento de troca de imagem dentro do JPanel, ao inves de fazer a parte 10 igual você, eu coloquei direto no código
imagemIcon.setImg(new ImageIcon(getClass().getResource(“/imagens/icon.png”)));
Muito bom. Obrigado, mano!
show! Obrigado!…. há tempos procurava por isso
nossa mas é PUNK esse java meu… puxa vida… no Delphi e no C# era mais facil de fazer essas coisas… vou tentar aqui… mas to levando muito tempo pra entender… obrigado pelas explicações!
Olá. O método sugerido funciona. Porém, ao gerar o código .JAR a imagem de fundo desaparece. Alguém sabe como solucionar o problema?
Boa tarde, não estou conseuindo colocar a imagem, ela não está aprecendo.
No passo 10, “Adicione o código a imagem não do site não está aparecendo.
Corrigi a imagem.