Boa tarde.
Gostaria de saber como posso pegar 3 imagens e fazê-las aparecer uma seguida da outra utilizando o sleep, ou se haveria outra forma de fazer este efeito. A idéia é que estas 3 imagens fique em um looping até que eu clique em um botão, esta segunda parte creio que não terei grandes problemas, mas fazê-las aparecer uma após a outra é que está me dando trabalho, se alguém puder me ajudar agradeceria.
Imagens seguidas
C
5 Respostas
T
De fato, isso é meio chatinho porque o Swing não atualiza as imagens se você ficar esperando em um Thread.sleep. Lembre-se que o Swing só tem uma thread para pintar e atualizar tudo, portanto você não pode fazer nada demorado no Swing.
Em vez disso, você teria de usar um timer de x milissegundos para ficar trocando as imagens, até que você desligue o timer com o clicar do seu botão.
C
Mas este timer, não tem nada a ver com o valor que eu atribuo ao Sleep, qual método eu devo pesquisar ou estudar para aprender a fazer isso
Voce pdoe guardar as 3 imagens em um objeto que muda a imagem a cada x milesimos.
Nao é tão dificil.
Vou fazer uma classe para voce ver.
Da pra melhorar.
package mark.utils.swing.img;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class ImageLoopPanel extends JPanel implements Runnable {
private long tick;
private BufferedImage imgs[];
private int currentIndex;
private long lastTick;
public ImageLoopPanel(long tick, BufferedImage... imgs) {
this.tick = tick;
this.imgs = imgs.clone();
this.tick = tick;
currentIndex = 0;
setMinimumSize(new Dimension(imgs[0].getWidth(), imgs[0].getHeight()));
new Thread(this).start();
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
BufferedImage current = imgs[currentIndex];
g2d.drawImage(current, 0, 0, current.getWidth(), current.getHeight(),
null);
g2d.dispose();
}
public void run() {
while (true) {
updateTick();
repaint();
try {
Thread.sleep(tick);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void updateTick() {
long currentTick = System.currentTimeMillis();
if (currentTick - lastTick > tick)
currentIndex++;
lastTick = currentTick;
if (currentIndex == imgs.length)
currentIndex = 0;
}
}
E um teste.
public class Tests{
private static void testImageLoops() throws IOException {
File dir = new File("C:/imgs/");
File imgs[] = dir.listFiles();
ImageLoopPanel ilp = new ImageLoopPanel(10, load(imgs[0]), load(imgs[1]),
load(imgs[2]), load(imgs[3]), load(imgs[4]));
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.add(ilp);
ilp.setVisible(true);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static BufferedImage load(File f) throws IOException {
return ImageIO.read(f);
}
public static void main(String[] argss) throws Exception {
testImageLoops();
}
}
Criado 13 de abril de 2009
Ultima resposta 13 de abr. de 2009
Respostas 5
Participantes 3
Alura Sistemas operacionais: entenda seu conceito e suas funções Descubra o que são sistemas operacionais, suas funções e tipos. Aprenda tudo de forma clara e objetiva. Não perca tempo!
Casa do Codigo Orientacao a Objetos: Aprenda seus conceitos e suas... Por Thiago Leite e Carvalho — Casa do Codigo