Alguem tem algum exemplo de como colocar uma imagel de fundo em um JDesktopPane como se fosse um papel de parede de uma aplicação MDI.
JDesktopPane
12 Respostas
Demys, eu fiz isso numa aplicação que eu desenvolvi. A minha classe é a seguinte:
import java.awt.Graphics;
import java.awt.MediaTracker;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
public class DecoratedDesktopPane extends JDesktopPane {
private static final long serialVersionUID = -8687762508784540862L;
private ImageIcon image;
private MediaTracker tracker;
public DecoratedDesktopPane(String caminhoImagem) {
image = new ImageIcon(this.getClass().getResource(caminhoImagem));
tracker = new MediaTracker(this);
tracker.addImage(image.getImage(), 0);
try {
tracker.waitForID(0);
} catch (InterruptedException exception) {
exception.printStackTrace();
} // Finaliza o bloco try/catch.
} // Finaliza o construtor de objetos da classe JDecoratedDesktopPane.
public void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
// Desenha a imagem e a centraliza no componente.
graphics.drawImage(image.getImage(),
this.getWidth()/2 - image.getImage().getWidth(this)/2,
this.getHeight()/2 - image.getImage().getHeight(this)/2,
this.getBackground(), this);
} // Finaliza o método paintComponent.
} // Finaliza a classe DecoratedDesktopPane.
E para chamar a classe faça da seguinte forma:
DecoratedDesktopPane desktopPane = new DecoratedDesktopPane("/images/logo.jpg");
Ou seja, ao invés de chamar JDesktopPane, você começa a chamar DecoratedDesktopPane.
Espero ter ajudado.
Qualquer dúvida é só entrar em contato.
RicardoLuis copiei sua classe e em um JFrame adicionei um Jpanel. Nesse Jpanel estou querendo adicionar o JDesktopPane, porém não está aparecendo nada.
Bom se vc puder me ajudar…? :!:
Eu fiz diferente do que foi mostrado. Eu criei uma classe que implementa Border e recebe um BufferedImage pelo construtor. Depois no paintBorder eu uso o drawImage para por a imagem na área correta.
Depois disso é só adicionar esse Border em qualquer componente que eu queira. No caso eu usei no JDesktopPane.
Eu fiz diferente do que foi mostrado. Eu criei uma classe que implementa Border e recebe um BufferedImage pelo construtor. Depois no paintBorder eu uso o drawImage para por a imagem na área correta.Depois disso é só adicionar esse Border em qualquer componente que eu queira. No caso eu usei no JDesktopPane.
Amigo, posta o código para nós darmos uma olhada.
Obrigado
Nesse código que eu mandei, para adicionar a imagem, eu criei um pacote dentro da minha aplicação onde ficavam todos os arquivos de imagem, pois ao criar o JAR, eles já estariam encapsulados.
Tente fazer isto que com certeza irá funcionar.
Qualquer dúvida é só perguntar.
Estamos ai para ajudar.
Amigo, você sabe como eu faço para chamar um JInternalFrame apenas uma vez, ou seja, instanciá-lo apenas uma vez?
Caso ele já tenha sido instanciado, e se estiver atrás de outros JInternalFrame seja trazido para a frente dos outros JInternalFrame, ou se ele estiver minimizado seja maximizado, ou recuperado?
E se ainda não foi instanciado e acrescentado no JDesktopPane que seja feita uma instancia do objeto?
Obrigado!!
PS.: Eu consegui instanciar a classe, e acrescentar a imagem de fundo.
Bom, vamos por partes:
De uma olhada sobre o padrão de projeto conhecido com Singleton. De acordo com ele, quando um objeto é Singleton quer dizer que só existe apenas uma instância deste objeto na aplicação.
Existe o método setSelected(); Nele você seleciona o JInternalFrame e o deixa como o ativo e na frente dos demais. Caso você queira que ele vá para a frente mas não seja o selecionado você pode utilizar o método toFront();
Em relação ao minimizado eu não sei te dizer se setSelected faz isso por você, mas de uma olhadinha na documentação do Java em relação a JInternalFrame que com certeza você solucionará esta dúvida sua.
Espero ter ajudado
Qualquer dúvida é só perguntar.
Existe alguma forma de fazer isso sem implementar esta classe? tipo
Jalgumacoisa.algumacois (caminha da imagem) ?
Voce pode usar uma classe pronta como a classe JImagePanel que o ViniGodoy aqui do forum postou.
E nao é dificil implementar esta classe. Mas é mais interessante carregar um BufferedImage no lugar desse ImageIcon.
Amigo obrigado pela dica mas, como faço para importa-la para meu projeto? (esta aula eu faltei, rsrsr0
um abraço…
Baixe a classe copie para seu projeto e use. Simples assim.
Olá galera, blz??
olha só…to com o mesmo problema:"Não consigo colocar imagem de fundo no meu jDesktopPane"
e assim, ja fiz de todas as formas que vcs falaram: copiei a classe pronta do ViniGodoy, tentei sobreescrever o método paintComponent e nada…não dá certo…
a minha imagem ta dentro da pasta do JAr e mesmo assim não compila…dá o mesmo erro que o amigo acima descreveu…
alguem sabe oq posso fazer???
obrigado!