[Resolvido] JDesktopPane atualização de background em tempo de execução

1 resposta
M

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.

1 Resposta

M

Resolvido:

Realizadas as devidas alterações, o código ficou assim:

/* 
 * To change this template, choose Tools | Templates 
 * and open the template in the editor. 
 */  
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();  
        this.setImgBackground(path);  
          
    }  
  
    public MyDesktopPanel(String path) {  
        this.setImgBackground(path);  
    }  
      
    public void setImgBackground(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);  
        }  
    }  
}
/** 
     * 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.setImgBackground(comboImagem.getSelectedItem().toString() + ".png");  
      
    }
Criado 6 de janeiro de 2012
Ultima resposta 6 de jan. de 2012
Respostas 1
Participantes 1