
Perguntaram-me como colocar uma imagem de fundo em um JPanel no Java Swing. As duas principais alternativas, pelo que vi, são utilizar uma JLabel com ícone personalizado, ou modificar o método paintComponent da classe JPanel. Preferi a segunda, e fiz uma classe para facilitar a utilização:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
public class JBackgroundPanel extends JPanel {
protected BufferedImage backgroundImage = null;
public JBackgroundPanel() {
super();
}
public JBackgroundPanel(BufferedImage backgroundImage) {
super();
setBackgroundImage(backgroundImage);
}
public JBackgroundPanel(URL url) throws IOException {
super();
setBackgroundImage(url);
}
public JBackgroundPanel(String resourceLocation) throws IOException {
super();
setBackgroundImage(resourceLocation);
}
public void setBackgroundImage(BufferedImage img) {
this.backgroundImage = img;
}
public void setBackgroundImage(URL url) throws IOException {
this.backgroundImage = ImageIO.read(url);
}
public void setBackgroundImage(String resourceLocation) throws IOException {
URL backgroundUrl = getClass().getResource(resourceLocation);
this.backgroundImage = ImageIO.read(backgroundUrl);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (backgroundImage != null) {
g.drawImage(backgroundImage, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
}
Você pode passar a imagem de fundo através de um dos métodos construtores, ou através do método setBackgroundImage (não se esqueça de chamar o método repaint, nesse caso). Tanto o método construtor quanto o setBackgroundImage vem em três versões:
// via BufferedImage
JBackgroundPanel panel = new JBackgroundPanel(ImageIO.read(getClass().getResource("/background.jpg")));
// via URL
JBackgroundPanel panel = new JBackgroundPanel(getClass().getResource("/background.jpg"));
// via String
JBackgroundPanel panel = new JBackgroundPanel("/background.jpg");
Se a imagem de fundo for ser trocada, dê preferência ao primeiro método, para não carregar a mesma imagem várias vezes desnecessariamente.
Evandro legal, mas esse código não está completo, está? O JButtonNext… Cheguei aqui pesquisando para tentar fazer uma ideia que tive em Java, mas conseguir parcialmente kkk… se puder visitar o meu blog seria bom… Quer compartilhar a ideia?
CurtirCurtir