JDesktopPane Imagem de fundo atualizando em tempo de execução [RESOLVIDO]

13 respostas
M

Boa noite pessoal :slight_smile:

Alguém saberia me explicar o que é preciso fazer para atualizar uma imagem no JDesktopPane em tempo de execução? Por exemplo eu tô com o programa aberto e o usuário quer colocar uma imagem no fundo então ele vai la e clica no menu pra alterar a imagem, seleciona a imagem mas ela não atualiza.

Carregar uma imagem na hora de abrir o sistema não é problema, o problema é carregar a imagem dentro do JDesktop em tempo de execução.

Brigado x]

13 Respostas

Marky.Vasconcelos

Como voce esta colocando essa imagem no JDesktopPane?

M

Tô colocando a imagem em um JLabel que carrego no JDesktop mas eu tento atualizar a imagem no JLabel e não consigo :X

Marky.Vasconcelos

Seria mais interessante sobreescrever o método paintComponent da seu JDesktopPane e desenhar a imagem por lá.

M

Encontrei algo sobre falando sobre isso :slight_smile:
Vô da uma olhada acho que entendi como fazê-lo :smiley:

Valeu pela respota.

M

Bom, eu consegui sobrescrever o método paintComponent do JDesktopPane até abre mostrando a imagem e tal, o problema agora é sobrescrevê-lo em tempo de execução. Eu tentei de um jeito aqui e nao deu muito certo a imagem só atualiza se minimizar e restaurar a janela :X

Como eu posso sobrescrever esse método em tempo de execução?

M
Sobrescrevi o método e ficou assim:
JDesktop = new JDesktopPane() {
            public void paintComponent (Graphics g){
                ImageIcon img = new ImageIcon("imagem.jpg");
                g.drawImage(img.getImage(),
                    this.getWidth()/2 - img.getImage().getWidth(this)/2,
                    this.getHeight()/2 - img.getImage().getHeight(this)/2,
                    null);

                super.paintComponent(g);
            }};

Mas como eu faço pra recarregar quando a imagem mudar?

Eu já tentei algumas maneiras:

Graphics g = PrincipalView.JDesktop.getGraphics();
        PrincipalView.JDesktop.update(g);
e
PrincipalView.JDesktop.repaint();

a primeira da certo na maioria das vezes mas tem hora que buga, a segunda nao faz nada.

Qual seria a maneira correta pra recarregar quando a "imagem.jpg" mudar?

Marky.Vasconcelos

Então… voce já pode deixar de usar ImageIcon.
Vou te passar um exemplo.

public class Main{
BufferedImage image;
JDesktopPane jdesktop;
public Main(){
image = ImageIO.read(new File("imagem.jpg");
jdesktop = new JDesktopPane() {
            public void paintComponent (Graphics g){
                super.paintComponent(g);
                Graphics2D g2d = (Graphics2D) g.create();
                g2d.drawImage(image,
                    this.getWidth()/2 - image.getWidth()/2,
                    this.getHeight()/2 - image.getHeight()/2,
                    null);
                g2d.dispose();
            }};
}
public void setImage(String image){
image = ImageIO.read(new File(image));
jdesktop.repaint();
}
}

Falta uns try/catchs para funcionar.

M

Valeu mano XD

Deu certinho aqui, desculpe a enxeção ^^

andresmafra

eae galeraaaaa!!! Aproveitando este tópico de imagens…

Pessoal estou com um problema, tenho um Jlabel com um tamanho pré-definido, e estou usando um JFileChooser para pegar a foto.
Quando eu a seleciono, gostaria que , não importando o tamanho dela, ficasse do tamanho do meu Jlabel Original!!

Mas, ou ela fica bem menor, ou fica muito grande!!

Como posso resolver isso??

existe algum método que pegue o tamanho do icone e formate de acordo com o tamanho do Jlabel???

Preciso disso urgente galera!!!

Valeusssss!!

Marky.Vasconcelos

Voce pode sobreescrever o método paintComponent como ele fez mas no lugar de colocar image.getWeight() e image.getHeigth() voce passa valores fixos que a imagem sera desenhada em uma escala menor.

andresmafra

Opaaa

cosegui cara!!

valeuss!

neeryck

andresmafra

Sempre que vc conseguir solucionar uma dúvida atravéz do GUJ, é interessante que post o código pois pode ser a dúvida de outras pessoas; assim evita-se novos posts com as mesmas dúvidas saca?

Um abraço!

THIAGOANALISTA

Estou precisndo da mesma coisa que vc fez, tem como vc postar seu código?

Criado 24 de maio de 2009
Ultima resposta 16 de set. de 2010
Respostas 13
Participantes 5