Como exibir uma imagem atualizando constantemente?

3 respostas
andre_teprom

Olá Pessoal,

Estou iniciando nos recursos gráficos do JAVA.
Apesar de já ter feito alguma coisa nessa ferramenta com BD, FTP e SSH, costumo tomar uma surra com o básico do Swing e AWT.

Gostaria de que minha aplicação fizesse uma leitura constante de uma imagem ( ex.: IMG.JPG) e atualizasse no JPanel.
Entretanto, o que tenho somente carrega pela 1a vez.
Porém, o arquivo JPG é atualizado constantemente, e eu gostaria que isso aparecesse na tela.

Alguem poderia ajudar enviando algo básico ?

Segue o código que já tenho :

import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Dimension;
import java.awt.Image;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class ImageInsert extends JPanel {

  public static void main(String[] args) {

	    JLabel LinhaLabel;  
	    ImagePanel panel = new ImagePanel(new ImageIcon("C:\\workspace\\1.jpg").getImage());

	    JFrame frame = new JFrame();
	    frame.getContentPane().add(panel);
	    frame.add(Box.createRigidArea(new Dimension(0, 0))); 
	    frame.setSize(640, 480);
	    frame.getContentPane();
	    panel.getContainerListeners();	  

	  
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    Container contentPane = frame.getContentPane();
    contentPane.add(new ImageInsert());

    extracted(frame);
  }
private static void extracted(JFrame frame) {
	frame.show();
}
}
           
class ImagePanel extends JPanel {

	  private Image img;

	  public ImagePanel(String img) {
	    this(new ImageIcon(img).getImage());
	  }

	  public ImagePanel(Image img) {
	    this.img = img;
	    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
	    setPreferredSize(size);
	    setMinimumSize(size);
	    setMaximumSize(size);
	    setSize(size);
	    setLayout(null);
	  }

	  public void paintComponent(Graphics g) {
	    g.drawImage(img, 0, 0, null);
	  }

	}

3 Respostas

ViniGodoy

Você precisa criar uma Thread, que irá constantemente chamar repaint().

O efeito fica meio ruim, com muito flickering. Se quiser algo mais profissional, dê uma estudada nos tutoriais de Java do Ponto V! e veja como fazemos animações para jogos.

andre_teprom

Olá Vinícius,

Dei uma olhada lá e o conteúdo é bem avançado. Realmente de alto nível.
Entretanto, eu precisava de algo bem simples, mas não encontro nenhum exemplo na web.

+++

andre_teprom

A saber,

Encontrei uma solução para o problema.
Entretanto, não vou poder utilizá-la, por não possuir o pacote Enterprise JavaBeans.

O livro Core Java vol. 2 / 8 Edition - Prentice Hall ( pag 702 ), faz referencia á um manipulador de eventos : PropertyChangeListener.
Com isso, acredito que poderia resolver o problema, mas acredito que deva haver um modo mais simples, pois tenho referencia de um programa que possui essa capacidade de refresh, sem ter usado esse ferramenta.

+++

Criado 27 de novembro de 2010
Ultima resposta 28 de nov. de 2010
Respostas 3
Participantes 2