JDesktopPane com fundo dinâmico

Bom dia pessoal!

Gostaria de pedir um auxílio a vocês. Criei uma classe no meu projeto que insere uma imagem no JDesktopPane. Essa imagem muda cada vez que o usuário entra no sistema.

Só que gostaria de fazer algo como acontece no Windows 7, ou seja, fazer com que depois de abrir o sistema a imagem do JDesktopPane mude a cada 3 minutos por exemplo.

Como poderia fazer isso? Abaixo segue a minha classe que insere a imagem no JDesktopPane e faz com que ela se altere a cada logon.

Aguardo uma ajude vocês. Obrigado!

package GUI;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import static java.lang.Thread.sleep;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import java.util.Random;

class BackgroundedDesktopPane extends JDesktopPane { 
    
        private Image img;
        
        Toolkit kit = Toolkit.getDefaultToolkit();  
        Dimension tamTela = kit.getScreenSize();  
  
        //Pegando a largura total da tela  
        int larg = tamTela.width;  
  
        //Pegando a altura total da tela  
        int alt = tamTela.height;  
  
        int minhaLargura= larg; 
        int minhaAltura = alt-150;
        
        
        public BackgroundedDesktopPane() { 
            Random gerador = new Random();
           
            int numero = gerador.nextInt(19);
            try {  
                img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource("wallpapers/wallpaper"+numero+".jpg"), "wallpaper"+numero+".jpg"));
                
            } catch (Exception ex) {  
            }
            
            
        }
        
        
        @Override  
        public void paintComponent(Graphics g) {  
            super.paintComponent(g);
            
            if (img != null) {  
                //Dimension dimension = this.getSize();  
                //int x = (int)(dimension.getWidth() - img.getWidth(this)) / 2;  
                //int y = (int)(dimension.getHeight() - img.getHeight(this)) / 2;  
  
                //g.drawImage(img, x, y, img.getWidth(this), img.getHeight(this), this);
                //Mandando o JFrame utilizar suas dimensões  
                //setSize(minhaLargura,minhaAltura);
                g.setColor(Color.WHITE); // define a cor de fundo branco
                g.fillRect(0, 0, getWidth(), getHeight()); // define a cor de fundo branco
                g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);                
                              
                //g.dispose();  
            } else {  
                g.drawString("Imagem nao encontrada", 50, 50);  
            }
        }      

Para chamar essa classe, vou em “personalizar código” do JDesktopPane e insiro a seguinte linha:

 panel = new BackgroundedDesktopPane(); 

onde panel é o nome do JDesktopPane.

Use um Timer do Swing:

Mas ViniGodoy, minha dúvida é como faço para recarregar esse JDesktopPane. Tentei de várias formas, mas não recarrega. Tentei usar thread para chamar o método novamente a cada minuto, mas foi em vão. Poderia me dar uma luz de como faço para recarregar o método e fazer o wallpaper mudar a cada minuto? Muito obrigado.

Não precisa recarregar. Você só vai alterar a imagem img e chamar o comando repaint().

Dê uma olhada, isso aqui pode te inspirar:

ViniGodoy, olhei o código e estou na dúvida se é isso mesmo que devo implementar. Tenho uma pasta com 30 imagens. Queria que ao abrir o sistema a imagem do JDesktopPane mudasse automaticamente a cada 1 minuto, como se fosse a area de trabalho do windows 7 que muda o wallpaper a cada tempo específico determinado pelo usuário.
Queria que a imagem mudasse sem que o usuário precise fazer isso, que fosse automático.
Achava que nesse caso deveria era tipo recarregar o método que insere a imagem para que ele mudasse e inserisse uma nova em tempo de execução a cada minuto. É viável fazer da forma que está nesse código que você enviou considerando que são várias imagens?
Não sei se estou conseguindo expressar direito o que procuro. Desculpa por tantos questionamentos rs.

[quote=marcusvinicius]ViniGodoy, olhei o código e estou na dúvida se é isso mesmo que devo implementar. Tenho uma pasta com 30 imagens. Queria que ao abrir o sistema a imagem do JDesktopPane mudasse automaticamente a cada 1 minuto, como se fosse a area de trabalho do windows 7 que muda o wallpaper a cada tempo específico determinado pelo usuário.
Queria que a imagem mudasse sem que o usuário precise fazer isso, que fosse automático.
Achava que nesse caso deveria era tipo recarregar o método que insere a imagem para que ele mudasse e inserisse uma nova em tempo de execução a cada minuto. É viável fazer da forma que está nesse código que você enviou considerando que são várias imagens?
Não sei se estou conseguindo expressar direito o que procuro. Desculpa por tantos questionamentos rs.[/quote]

É viável sim.

Estou começando Java agora e sinceramente não está muito fácil entender como eu adaptaria isso ao meu código já criado acima.

Quase deixando do jeito que já montei (imagem alterando só ao fazer logon) =/

Quebrando a cabeça aqui rs

Achei que isso era algo mais simples de resolver, talvez recarregando o método através de thread com sleep de um minuto por exemplo, mas parece que é bem mais complicado que isso.

Não precisa recarregar. Você só vai alterar a imagem img e chamar o comando repaint().

Dê uma olhada, isso aqui pode te inspirar:


[/quote]

ViniGodoy, tava tentando entender e implementar esse código que você passou. Aí deu certo. Você fez pra duas imagens e tenho uma pasta com cerca de 30 imagens que gostaria de ficar alternando como você fez. Poderia me ajudar a adaptar o código desse link que você passou para fazer com todas essas imagens? Estou tentando mas não estou conseguindo.

Obrigado!

E aí galera! Alguém que possa me ajudar? =)