Á dias deparei-me com um problema, enquanto estava a programar. Queria por uma imagem de fundo num JPanel, mas por definição não existe nenhum método na classe JPanel do Swing que nos permita fazer isto. Então de muito pesquisar e usar bocadinhos de código que muitos sítios la consegui.
Para contornarmos esta situação temos que criar uma nova classe que estenda de JPanel, a fim de podermos modificar o método que vem por definição na mesma, que trata do preenchimento do fundo. O método responsável por isso no JPanel é o “paintComponent” que recebe como argumento um objeto “Graphic”. Esse objeto “Graphic” é responsável por criar uma imagem no fundo do JPanel.
Então a solução fica assim.
//Primeiro criamos a classe a estender de JPanel
class ImagePanel extends JPanel
{
//Criamos um atributo da classe da classe “Image”
private Image img;
//Criamos o construtor que recebe em argumento um objeto “Image” e um Dimension”
public ImagePanel(Image img, Dimension dim)
{
//Vamos associar o nosso atributo ao objeto que veio do argumento
this.img = img;
//Criamos um objeto “Dimension” que associamos ao que vem em argumento
Dimension size = dim;
//Definimos os tamanhos que vai ter o nosso painel, Preferencial, Mínimo e Máximo
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
//Aqui depende de cada um de vocês se querem ou não por Layout
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}
//Cosntroi se o método que vai substituir o “paintComponent” predefinido
public void paintComponent(Graphics g)
{
//Vai usando o objeto “Graphics” desenhar uma imagem no fundo do painel
//this.img é a imagem que vem do atributo que definimos e os outros parâmetros deixem //estar tal como esta que funciona na perfeição.
g.drawImage(this.img, 0, 0, null);
}
}
Agora só precisamos criar um objeto da classe que criamos e passar os argumentos definidos e assim obtemos o nosso JPanel com fundo.
Espero ter sido útil a explicação para vocês.
Alguma dúvida deixem em comentário.
