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:
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.
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]
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.