JImagePanel - Funciona uma única vez. PQ? [Resolvido]

Tenho uma classe que peguei aqui no site, senão me engano do vinygodoy… JImagePanel,
ela funciona beleza. Só que estou com problemas ao alterar a imagem… ela funciona só na primeira alteração, e não faço idéia pq não funciona na segunda… (quando tento utilizar o método setImg novamente)

Código:

private void setImg(String foto) { try { JPi = new JImagePanel(foto); } catch (Exception ex) { sst("Erro: "+ex); } JPi.setBounds(5,15,196,320); JPimg.add(JPi); JPimg.repaint(); }

abraços!

Não tem como você alterar a imagem. Que eu me lembre, fiz a classe para ser imutável.

Você deve criar um novo JImagePanel, ou altera-la para ser mutável.

Uma dica :frowning:

[code]import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**

  • A panel that contains a background image.

  • The background image is automatically sized to fit in the panel.
    */
    public class JImagePanel extends JPanel
    {
    BufferedImage background = null;

    /** Creates a new panel with the given background image.

    • @param img The background image. */
      public JImagePanel(BufferedImage img)
      {
      if (img == null)
      throw new NullPointerException(“Buffered image cannot be null!”);
      this.background = img;
      }

    /** Creates a new panel with the given background image.

    • @param img The background image.
    • @throws IOException, if the image file is not found.
      */
      public JImagePanel(File imgSrc) throws IOException
      {
      this(ImageIO.read(imgSrc));
      }

    /** Creates a new panel with the given background image.

    • @param img The background image.
    • @throws IOException, if the image file is not found.
      */
      public JImagePanel(String fileName) throws IOException
      {
      this(new File(fileName));
      }

    protected void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D)g.create();
    g2d.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), null);
    g2d.dispose();
    }
    }[/code]

A classe JImagePanel, do projeto Towel, permite que você altere como a imagem deve ser pintada em relação ao painel (centralizado, lado-a-lado ou redimensionada). E permite que você use esse painel como imagem de fundo: http://code.google.com/p/towel/

Bom, eu consegui de uma forma…

Removi do painel a instancia da imagem, e re-adicionei.

JPimg.remove(JPi); this.setImg("/root/Desktop/Fotos/mico-bb.jpg");

ai funcionou,
mas se tiver mais idéias… serão bem vindas!

abração!

[quote=ViniGodoy]Essa aqui é um ImagePanel mutável.
[/quote]

Obrigadão vini! :oops:

Oi, aproveitei a deixa e inclui mais um recurso no JImagePanel.
Já uma olhada, editei o post ali em cima e deixei o novo arquivo.

Poxa bacana,
mas o que eu posso fazer com este filltype ?
(desculpe a ignorancia)

Imagine que o panel é o desktop do Windows.

Se você põe uma imagem menor que o panel, e escolhe o fill type SIDE_BY_SIDE, a imagem vai ficar repetida diversas vezes. Se escolher CENTER, ela vai ficar no centro do painel, não será esticada. E resize é como antes, ela ficará do tamanho do Painel.

Valeu Vini !!!
vou testar

Como instanciar ?
JImagePanel jp = new JImagePanel.paintComponent(“imagens/logo3.jpg”);
// jp = jp.paintComponent(“imagens/logo3.jpg”);

Desculpa Vini :lol: , sou iniciante …

Não consegui …

Preciso de ajuda, de alguem …

Valeu

como faria para transformar isso num JavaBeans e usa-lo no NetBeans ?

se eu nao me engano o paintComponent eh padrao e é chamado automaticamente assim como o metodo paint().

Como eu faço para adicionar ela ao meu projeto? Tipo, adicionar ela no formulário.

Como adicionar esse JImagePanel no jInternalFrame?

Igual vc adicionaria um painel qualquer.

[quote=peerless]Bom, eu consegui de uma forma…

Removi do painel a instancia da imagem, e re-adicionei.

JPimg.remove(JPi); this.setImg("/root/Desktop/Fotos/mico-bb.jpg");

ai funcionou,
mas se tiver mais idéias… serão bem vindas!

abração![/quote]

Pimg.removeAll();
this.setImg(“seucaminho”);

Ola… tudo bem … Kara Sou Iniciante em Java … to usando o NetBeans 6.5 … vi essa classe JImagePanel … e é bem isso que eu estava procurando … mas não to conseguindo usa-la … tipo … como devo Instancia-la … ?? tipo sou bem leigo … desde ja agradeço … t+

[quote=ViniGodoy]Imagine que o panel é o desktop do Windows.

Se você põe uma imagem menor que o panel, e escolhe o fill type SIDE_BY_SIDE, a imagem vai ficar repetida diversas vezes. Se escolher CENTER, ela vai ficar no centro do painel, não será esticada. E resize é como antes, ela ficará do tamanho do Painel.[/quote]

[quote=lepopps]Ola… tudo bem … Kara Sou Iniciante em Java … to usando o NetBeans 6.5 … vi essa classe JImagePanel … e é bem isso que eu estava procurando … mas não to conseguindo usa-la … tipo … como devo Instancia-la … ?? tipo sou bem leigo … desde ja agradeço … t+

[quote=ViniGodoy]Imagine que o panel é o desktop do Windows.

Se você põe uma imagem menor que o panel, e escolhe o fill type SIDE_BY_SIDE, a imagem vai ficar repetida diversas vezes. Se escolher CENTER, ela vai ficar no centro do painel, não será esticada. E resize é como antes, ela ficará do tamanho do Painel.[/quote][/quote]

Eis o exemplo q o Vini postou algum tempo atrás (abaixo). Uma vez a classe JImagePanel criada, vc somente irá precisar de um Jframe com um JPanel para instancialá…

[code]image = ImageIO.read(new File(“caminhoDaImagem\imagem.jpg”));

    if (jPprincipal == null) jPprincipal = new JImagePanel(image);
        
    jPprincipal.setImage(image);
    seuJPanel.add(JPprincipal);
    seuJPanel.repaint();
    seuJPanel.validate();[/code]

pronto! com esse trecho de code vc consegue exibir seu arquivo/image, não se esqueça de criar uma variavel de instância do tipo JImagePanel…

private JImagePanel jPrincipal;

Um abraço!

galera estou fazendo uma palicação de processamento de imagens, preciso mostrar a imagem num jFrame qualquer, estou trabalhando com BufferedImage, alguem pode me esxplicar como faço pra exibir essa imagem com essa classe JImagePanel, ou se tem outra forma melhor?

Seguinte…

Criando o seu objeto BufferImage, crie também um objeto para armazena-lo… (do tipo JImagePanel, esta classe deverá ser mantida no mesmo pacote do seu projeto)

private JImagePanel JPImage = null;
private BufferImage im = null;

OK…

Agora…

a única coisa que vc deverá fazer é instanciar um JPanel e add os objetos neste JPanel… desta forma:


JPanel jPanel = new JPanel();

im = ImageIO.read(new File(caminhoDaImagem));

if (JPimage == null) JPimage = new JPImage(im);
            
JPimage.setImage(image);
jPanel.add(JPimage);
jPanel.repaint();
jPanel.validate(); 

Se tiver alguma dúvida, me envie uma MP!

Um abraço