Imagem no JDesktopPane com probelma ao chamar as JInternalFrame

Estou fazendo uma pesquisa e estou com dificuldades em resolver. Meu problema é: Quero colocar uma imagem de fundo em uma JDesktopPane.
Já vi alguns posts aqui, porém não consegui implementar nenhum com sucesso, apenas um, porém estou com um certo problema devido a um auto implement que o NetBeans faz naqueles espaços não editáveis.
Essa é minha classe que realiza a inserção da imagem no jDesktopPane:

[code]public class backGround extends JFrame{

private static Image img;
JDesktopPane desk;

public backGround(JFrame frame,JDesktopPane desk) {
    try{  
        img = javax.imageio.ImageIO.read
    (new java.net.URL(getClass().getResource("wall.png"), "wall.png")); 
    
   }catch(Exception e){
   }
    desk = new JDesktopPane(){
     
     @Override
     public void paintComponent(Graphics g){  
       super.paintComponent(g);  
       if(img != null){  
           g.drawImage(img, 0,0,this.getWidth(),this.getHeight(),this);  
           //g.drawString("Background Carregado com Sucesso!!!", (this.getWidth()/2), (this.getHeight()/2) );  
       }else  
           g.drawString("Image not found", 50,50);            
     }   
 };
 
 frame.getContentPane().add(desk);        
 //frame.setSize(img.getWidth(null),img.getHeight(null));     
 frame.setVisible(true);     
 // Comando para que o programa execute maximizado
 frame.setExtendedState(this.getExtendedState()|principal.MAXIMIZED_BOTH);
}     

}[/code]
Chamada:

Essa classe funciona, ela consegue colocar a imagem no fundo da tela. Porém, ocorre algo muito estranho, simplesmente minhas outras telas que chamo para dentro do JdesktopPane, uso as JInternalFrame, não aparecem mais, a impressão que tenho é que elas ficam abertas em memória porém não visam visíveis.
Esse é meu método que chama as minhas JInternalFrame.

[code]public void addTelaDesk(JInternalFrame tela){
for (JInternalFrame jInternalFrame : jDesktopPane1.getAllFrames()) {
// se uma janela semelhante estiver aberta
if(jInternalFrame.getClass().toString().equalsIgnoreCase(tela.getClass().toString())){

        jInternalFrame.moveToFront(); // traz janela para frente para facilitar a escolha              
        Object[] opções = {"OK"};  
        int qst = JOptionPane.showOptionDialog(null, "ESSA TELA JÁ ESTÁ ATIVA","Erro de abertura",  
                      JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE,null,opções,opções[0]);  
        // se utilizar a aberta retorna e não abre outra,  
        // caso contrário sai do for e abre outra igual  
        if(qst == 0){                 
            return;  
        }else if(qst == 1){                 
            break;  
        }         
    }         
}         
jDesktopPane1.add(tela); //adiciona na tela      
tela.setVisible(true); // seta visivel  
tela.moveToFront(); 
}[/code]

Chamada:

NewJInternalFrame j = new NewJInternalFrame(); addTelaDesk(j);
Fazendo alguns testes percebi que o netBeans gera automaticamente este bloco aqui:

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) );
Que inclusive ele é protegido pelo betBeans, estou fazendo edição direto no arquivo .java.
Só mexendo neste bloco é que meu método funciona:

NewJInternalFrame j = new NewJInternalFrame(); addTelaDesk(j);
Fazendo alguns testes percebi que o netBeans gera automaticamente este bloco aqui:

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); //getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) );
Ai fazendo mais alguns testes consegue abrir as telas e mantendo a imagem, porém desta forma:
https://onedrive.live.com/redir?resid=16d41565280f44a7%21517

As JInternalFrame somente são abertas neste espaço em branco.
A impressão que tenho é que este bloco faz o redimensionamento da área do desktopPane e sobrescreve o meu método. Preciso achar um jeito de manipular esse código ou achar uma outra solução para inserir a imagem ou chamar as telas.
Espero ajuda de vocês. Abraço.

O problema é que o Java não suporte a janelas MDI de verdade. Os JInternalFrames são desenhados pelo JDesktopPane. Sobrescrever o paintComponent irá simplesmente remover esse comportamento.

Talvez trocar a linha:

Para a última linha do seu paintComponent resolva o problema. Mas eu recomendo fortemente que você não sobrescreva o JDesktopPane. Melhor ainda, que nem sequer use esse componente já que os JInternalFrames também são para lá de bugados.

[quote=ViniGodoy]O problema é que o Java não suporte a janelas MDI de verdade. Os JInternalFrames são desenhados pelo JDesktopPane. Sobrescrever o paintComponent irá simplesmente remover esse comportamento.

Talvez trocar a linha:

Para a última linha do seu paintComponent resolva o problema. Mas eu recomendo fortemente que você não sobrescreva o JDesktopPane. Melhor ainda, que nem sequer use esse componente já que os JInternalFrames também são para lá de bugados.[/quote]

Como você recomenda que faça para colocar imagem de fundo da aplicação? Direto na JFrame ? Ai As outras telas que for chamar, uso todas como JFrame? O Problema é que gostaria de deixar as telas presar dentro da aplicação, para que não fique bagunçado. Entende? Tem como fazer isso sem usar JInternalFrame?

Recomendo que não invente moda. Geralmente isso faz um comportamento difícil de garantir em multiplataforma.

Se você realmente precisa fazer isso, tente com um JLabel, como demonstrado aqui:
http://www.guj.com.br/java/6992-adicionar-uma-imagem-de-fundo-em-um-jdesktoppane#148634