Olá amigos desenvolvedores,
estou na luta tentando criar um JDesktopPane que altere seu background em tempo de execução (igual ao desktop do windows), pois eu consigo alterar o background desde que eu reinicie o programa, ou seja, se eu executar o sistema com a figura 1 como background e tentar alterar para figura 2 durante a execução, a mesma não ocorre, funcionando somente após eu iniciar o sistema novamente.
Esta é a classe do meu JDesktopPane
package gui.utils;
import controle.ControleArquivoPreferencias;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.JDesktopPane;
/**
*
* @author maycon
*/
public class MyDesktopPanel extends JDesktopPane {
private static final long serialVersionUID = 1L;
Image img;
public MyDesktopPanel() {
String path = new ControleArquivoPreferencias().getImagemDesktop();
try {
img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource(path), path));
this.repaint();
} catch (Exception e) {
}//do nothing
}
public MyDesktopPanel(String path) {
try {
img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource(path), path));
this.repaint();
} catch (Exception e) {
}//do nothing
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
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);
g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
g2d.dispose();
} else {
g2d.drawString("Imagem não encontrada", 50, 50);
}
}
}
Aqui é o método onde eu “tento” realizar a atualização do background em tempo de execução:
Eu recupero de um arquivo qual é a figura de background e tento atualizar o desktop a partir da última linha deste exemplo:
/**
* Armazena as preferencias definidas nos componentes da GUI
* @param comboTransacoes
*/
public void salvaPreferencias(JComboBox comboTransacoes, JComboBox comboImagem) {
/*Parametro de tempo de duracao dos registros de transacoes dos usuarios*/
arquivo.writeLine(pathArquivo, 0, comboTransacoes.getSelectedItem().toString());
/*Parametro da imagem de desktop*/
arquivo.writeLine(pathArquivo, 1, comboImagem.getSelectedItem().toString() + ".png");
//Carrega a nova imagem no desktop
FramePrincipal.desktopPanel = new gui.utils.MyDesktopPanel(comboImagem.getSelectedItem().toString() + ".png");
}
Obrigado.