JDesktopPane

12 respostas
D

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.

12 Respostas

R

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.

NARLEY

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…? :!:

Thiagosc

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.

R

Thiagosc:
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

R

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.

R

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.

R

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.

cleyvison

Existe alguma forma de fazer isso sem implementar esta classe? tipo

Jalgumacoisa.algumacois (caminha da imagem) ?

Marky.Vasconcelos

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.

cleyvison

Amigo obrigado pela dica mas, como faço para importa-la para meu projeto? (esta aula eu faltei, rsrsr0

um abraço…

Marky.Vasconcelos

Baixe a classe copie para seu projeto e use. Simples assim.

D

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!

Criado 13 de agosto de 2006
Ultima resposta 7 de set. de 2009
Respostas 12
Participantes 8