JPanel com imagem de fundo

No inicio do ano de 2010 tive uma dificuldade em criar um JPanel com imagem de fundo em um game de xadrez em java, consegui resolver o problema alterando o método paintComponent(Graphics g) da classe JPanel.

As vezes quebramos muito a cabeça com pouca coisa, então resolvi disponibilizar meu JPanel personalizado que dá a opção de escolher uma imagem pelas propriedades do NetBeans, esse panel tem todas as propriedades de um panel normal, pois o mesmo extends da classe JPanel.

Antes de tudo é preciso adicionar o componente "uJPanelImagem",que está no .jar para download no fim do post , a paleta do NetBeans, para adicionar siga os passos descritos no post "Adicionando Componentes a Paleta do NetBeans".

Como utilizar uJPanelImagem?


  1. Escolha o componente UJPanelImagem.

  2. Selecione o mesmo para mostrar as propriedades
  3. Procure pela propriedade imagem e clique no botão a direita do nome.

  4. Escolha sua imagem.

  5. Pronto, agora você pode arrastar e redimensionar seu jPanel com imagem de fundo. Obs: se vc estiver utilizando uma imagem transparente, sete a opção opaque no panel.


   Download

O Leonardo preencheu um formulário de contato me procurando, mas não consegui encontrar o email para retornar, então segue abaixo o código da classe com algumas modificações.
Criei um método novo chamado setImagemUrl que ainda não testei mas acho que roda...rsrs

Se (der erro) então{
  É só não usar o método; \\a classe irá funcionar normalmente como antes
}

import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**
 *
 * @author Ugleiton
 */
public class UJPanel extends JPanel {
 private File imagemFile = null;
 private String imagemUrl = null;
 private Image imagem = null;
 public UJPanel() {
  super();
 }
 public UJPanel(LayoutManager lm) {
  super(lm);
 }
 public UJPanel(boolean bln) {
  super(bln);
 }
 public UJPanel(LayoutManager lm, boolean bln) {
  super(lm, bln);
 }
 @Override
 protected void paintComponent(Graphics g) {
  try {
   g.drawImage(imagem, 0, 0, this.getWidth(), this.getHeight(), this);
  } catch (Exception e) {
  } finally {
   super.paintComponent(g);
  }
 }
 public void setImagem(Image imagem) {
  this.imagem = imagem;
 }
 public void setImagemFile(File imagemFile) {
  try {
   this.imagemFile = imagemFile;
   if (imagemFile != null) {
    this.imagem = ImageIO.read(imagemFile);
   } else {
    imagem = null;
   }
  } catch (IOException ex) {
  }
 }
 public String getImagemUrl() {
  return imagemUrl;
 }
 public void setImagemUrl(String imagemUrl) {
  this.imagemUrl = imagemUrl;
  this.imagemFile = new File(this.imagemUrl);
  try {
   if (imagemFile != null) {
    this.imagem = ImageIO.read(imagemFile);
   } else {
    imagem = null;
   }
  } catch (IOException ex) {
  }
 }
 public File getImagemFile() {
  return imagemFile;
 }
 public Image getImagem() {
  return imagem;
 }
}


14 comentários:

Anônimo disse...

Muito bom eu estava com dificuldade nisso, e com esse componente ficou ficou perfeito, parabéns mesmo!!!, obrigado por compartilhar!

Anônimo disse...

Valeu!!!!
Muito bom...
Já estava desesperada aqui...
nada dava certo
Ficou perfeito...
muito obrigada!!!

Anônimo disse...

ta mas como se faz para salvar a imagem junto no classpath? pq senao ao compilar e salvar em outro pc o caminho é diferente..

vlw

Anônimo disse...

Muito Obrigada...
Didatico e de uma ajuda ....
Sem palavras.... Conhecimento tem seu valor, quando compartilhado...

Programador do Sertão disse...

RESPOSTA:
"ta mas como se faz para salvar a imagem junto no classpath? pq senao ao compilar e salvar em outro pc o caminho é diferente.."
pode colocar a imagem na pasta lib do projeto, externa ao src e chamar o método no contrutor assim:
uJPanel1.setImagemFile(new java.io.File("lib/imagem.jpg"));

Anônimo disse...

Parabéns meu amigo..

foi muito útil

Anônimo disse...

Parabéns !!!!!!
Muito Obrigado !!!!

Diego disse...

Boa tarde Amigo,

Quando executo o projeto a imagem não carrega, mas o panel ocupa o espaço.. Já tentei vários tipos de imagem

Ugleiton Menezes disse...

Diego, acho que seu problema pode estar relacionado a classpath.
Consulte o oráculo Google, talvez resolva.
;)

terrabyte disse...

Como você fez para adicionar a propriendade imagem do componente via as propriedades do netbeans? estou querendo configurar um jtable especial via tela gráfica, mais não sei como colocar isso no netbeans, tipo sei como inserir meu componente a paleta do netbeans mais não sei como colocar propridades dele na paleta de propriedades que aparece no netbeans como você fez com a propriedade imagem. Conto com usa ajuda.

Ugleiton Menezes disse...

terrabyte, já que vc está com seu componente pronto, é só fazer como está na classe acima:
Voce precisa criar um objeto (no meu caso foi o objeto imagemFile "linha 41")
Definir os metodos "get" e "set" desse objeto, e dentro do método "set" vc já aplicar as devidas alterações que esse objeto pode gerar na sua classe.

terrabyte disse...

Vc sabe como faço para quando clicar no botão ... das propriedades do netbeans abre uma janela igual a janela que é aberta para configurar a jtable, pois no meu caso é uma jtable personalizada, e quando clicar no botão ... via propriedade quero poder setar minhas configuraçãoes nessa tela personalizada, se souber de algum exemplo na internet e puder me passar tbm agradeço.

Ugleiton Menezes disse...

Amigo, não poderei te ajudar
Geralmente trabalho com algumas classes genéricas para tabelas, nunca pensei fazer algo para netbeans.

Anônimo disse...

Cara muito obrigada, você salvou minha vida!

Postar um comentário

Marcadores

Computação (8) Java (7) Musicas (4) Excel (2) Humor (2) IRPF (2) NetBeans (2) Textos (2) Curiosidades (1)

O que gostaria de ver aqui?