JInternalFrame desaparece com Imagem em DesktopPane

5 respostas
mmenezes

Ola pessoal, to com um problema, estou add uma imagem no meu DesktopPane e ao fazer isso todos os meus jintenalframe que chamdo pelo o menu nao esta aparecendo parece qeu ele fica atras do desktop pane . por favor me ajude.

tenho esta classe

/*
 * DecoratedDesktopPane.java
 *
 * Created on 9 de Agosto de 2007, 16:09
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package util;
import java.awt.Graphics;
 import java.awt.MediaTracker;
 
 import javax.swing.ImageIcon;
 import javax.swing.JDesktopPane;
 
 public class DecoratedDesktopPane extends JDesktopPane {
 
 	
 
 	private ImageIcon image;
 	private MediaTracker tracker;
 
 	public DecoratedDesktopPane(String caminhoImagem) {
                System.out.println("" + 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.

chamo assim o deskopt

DecoratedDesktopPane desktopPane = new DecoratedDesktopPane("/imagens/marcadagua.jpg");

e ao clique do menu chamo o cara assim

if (frmAssArtigoProduto.getInstancia() == null){ 
            frmAssArtigoProduto ass = frmAssArtigoProduto.setInstancia();
            
            desktopPane.add(ass);
            Utilitarios.setLookandFellGLC(ass);
            ass.show();
                       
       }

obrifado pela ajuda

5 Respostas

E

cara…não sei se isso pode te ajudar mas certa vez eu estava fazendo um JPanel personalizado e ele tb escondia os componentes que estava add nele.

meu problema era o método paintComponent.

eu não estava chamando super.paintComponent.

tenta colocar essa chama no fim do método…não sei se vai dar certo mas tb não custa tentar…

public void paintComponent(Graphics 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);
super.paintComponent(graphics);
  

  
  	}

flws

mmenezes

cara nao deu certo nao , quando faco isso a imagem some e o jinternal frame nao aparece tbm.

mesmo assim obrigado pela ajuda

alguem mais sabe ai ?

mmenezes

fala meu chapa,
se vc estiver desenvolvendo pelo o net beans e colocou o codigo

DecoratedDesktopPane desktopPane = new DecoratedDesktopPane("/imagens/marcadagua.jpg");

na pos iniciallizacao do objeto, vai dar erro mermo pq ta criando um novo basta vc fazer em codigos personalizados codigos personalizados o seguinte

new DecoratedDesktopPane("/imagens/marcadagua.jpg");

caso noa seja em net beans o efeito eh o seguinte, na hora de inicializar os componentes initComponents() tem que se chamar o cara assim

desktopPane =  new DecoratedDesktopPane("/imagens/marcadagua.jpg");

simples assim …
abracos e ate a proxima

mmenezes

Funcionou Perfeito !

Brigado pela força .

:smiley:

J

ruby,

to tentando fazer o que vc fez ai em cima....colocar uma imagem personalizada no desktopPane. Mas não estou conseguindo...

usei a sua classe

import java.awt.Graphics;   
import java.awt.MediaTracker;   
  
import javax.swing.ImageIcon;   
import javax.swing.JDesktopPane;   
  
public class DecoratedDesktopPane extends JDesktopPane {   
  
       
  
    private ImageIcon image;   
    private MediaTracker tracker;   
  
    public DecoratedDesktopPane(String caminhoImagem) {   
                System.out.println("" + 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 na minha chamei assim

import java.awt.BorderLayout ;
import java.awt.Dimension ;
import java.awt.GridLayout ;

import javax.swing.ImageIcon ;
import javax.swing.JDesktopPane ;
import javax.swing.JFrame ;
import javax.swing.JInternalFrame ;
import javax.swing.JLabel ;
import javax.swing.JPanel ;
import javax.swing.JScrollPane ;
import javax.swing.JTable ;

public class Principal extends JFrame
{
    public Principal()
    {
	super("Monitoramento");   
		   
		setBounds(100,100,800,600);   
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
		   
		//JDesktopPane desktop = new JDesktopPane();
		 JDesktopPane desktop = new DecoratedDesktopPane("./imagen/cabecalho.jpg");  

		add(desktop);   
		
		JInternalFrame processado = new JInternalFrame("Processados", true, true, true, true);   
		JInternalFrame cancelado = new JInternalFrame("Cancelados", true, true, true, true);   
		JInternalFrame enviado = new JInternalFrame("enviados", true, true, true, true);   
		JInternalFrame monitor = new JInternalFrame("Monitor", true, true, true, true);   
		
                                //dentro desses métodos eu adiciono o componente de cada tela - ta funcionando
		criandoTelaMonitor(monitorSefaz);
		criandoTelaProcessado(cteProcessado);
		criandoTelaCancelado(cteCancelado);
		criandoTelaEnviado(cteEnviado);
		   
		processado.setBounds(10, 10, 750, 200);   
		cancelado.setBounds(10, 215, 300, 200);   
		enviado.setBounds(311, 215, 300, 200);  
		monitor.setBounds(612, 215, 150, 200);
		   
		desktop.add(processado);   
		desktop.add(cancelado);   
		desktop.add(enviado);   
		desktop.add(monitor);
	  
		processado.setVisible(true);   
		processado.setVisible(true);   
		enviadodo.setVisible(true);   
		monitor.setVisible(true);
		   
		setVisible(true);   


    }
}

e toda vez que tento, da esse erro

./imagen/cabecalho.jpg
Exception in thread "main" java.lang.NullPointerException
	at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
	at br.com.monitor.DecoratedDesktopPane.<init>(DecoratedDesktopPane.java:18)
	at br.com.monitor.client.Principal.<init>(Principal.java:26)
	at br.com.monitor.client.Principal.main(Principal.java:126)

e a imagem ta carregada dentro do meu lib...

mas não sei como resolver....pode me ajudar?

valeu

Criado 9 de agosto de 2007
Ultima resposta 26 de jan. de 2009
Respostas 5
Participantes 3