terça-feira, 9 de outubro de 2007

Imagem de fundo em um JDesktopPane

Um recurso bem legal do Swing é o JDesktopPane. Ele permite gerenciar múltiplas janelas em um mesmo JFrame, simulando um ambiente gráfico de sistema operacional.

Mas ambiente gráfico que é ambiente gráfico tem que ter um papel de parede! (alguns puritanos do IceWM comerão meu fígado)

Então, pra colocar o seu próprio plano de fundo em um JDesktopPane, aí vai o código:

Primeiro, criamos uma classe, que eu vou chamar de BackgroundedDesktopPane.
No meu exemplo, eu quero que o meu programa principal XXX.java tenha como plano de fundo a imagem "background.png":


class BackgroundedDesktopPane extends JDesktopPane {
Image img;

public BackgroundedDesktopPane() {
try {
java.net.URL caminho = XXX.class
.getResource("background.png");
img = javax.imageio.ImageIO.read(caminho);
} catch (Exception e) {}
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
if (img != null)
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
else
g.drawString("Imagem não encontrada", 50, 50);
}
}


Beleza. Isto feito, agora é só inserir um BackgroundedDesktopPane no seu JFrame:


final JDesktopPane desktopPane = new BackgroundedDesktopPane();
frame.getContentPane().add(desktopPane, BorderLayout.CENTER);


Nesse exemplo, a figura "background.png" deve ficar no mesmo diretório que o arquivo XXX.class. Se quiser colocar em outro diretório, é só colocar o endereço relativo a esta classe.

Adaptado do Fórum Java

Té mais o/

4 comentários:

Guivan disse...

Lindo, eu sempre quis fazer isso e nunca tinha achado =)

JMichael disse...

bacana d+, tava precisando disso.
show, vlw.,

ah, sera q tem como optimizar o carregamento da imagem?

vlw mesmo., grande post..

Anônimo disse...

ótimo código...

desculpa, mas o "frame" que encontra-se na linha dois depois do tratamento do código significa o que? eu coloquei um this, mas não funcionou, diz que a imagem não foi encontrada ..vc pode me ajudar sou iniciante. Obrigada.

miu disse...

=D