Se puede realizar animacion en java utilizando el objeto Timer el cual realiza operaciones cada cierto tiempo indicado por un temporizador. En este caso la operacion a realizar sera la de presentar en pantalla una secuencia de imagenes JEPG las cuales simular la animación.
La animación consiste en una japo comiendo, ayudandose de un jSlider se podra tambien acelerar o retardar la secuencia de imagenes
El proyecto consta de un JFrame con la siguiente distribucion de objetos
De una clase, la encargada de la animación animationclass.java, esta clase consiste en extender la propiedad jLabel y de añadirle un Timer, el cual es el encargado de la animacion.
El codigo de la clase animationclass.java es:
import java.awt.Dimension;
import java.util.Timer;
import javax.swing.*;
import java.awt.*;
import java.util.TimerTask;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class animationclass extends javax.swing.JLabel {
private Timer tiempo ;
private TimerTask task;
private int speed = 60;
private int frame=0;
boolean run = false;
//se crea el objeto y se redimensiona al tamaño del contenedor
public animationclass(Dimension d){
this.setSize(d);
}
//coloca una imagen en el objeto jlabel
public void setimage(int n){
this.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/japo_" + n + ".jpg")));
}
//coloca la velocidad en la variable
public void setvelocidad(int v){
this.speed= v;
}
//para la animacion
public void startAnimation() {
run=true;
tiempo = new Timer();
task = new TimerTask() {
public void run() {
frame++;
if (frame<=10){
setimage(frame);
}
else{frame=0;}
}
};
//se inicia la animacion
System.out.println("Se inicia la animacion");
tiempo.schedule(task,0,speed);
}
//detiene la animacion
public void stopAnimation() {
tiempo.cancel();
task.cancel();
run=false;
System.out.println("La animacion fue detenida");
}
}
El funcionamiento de la clase animationclass.java es la de crear un jLabel, otorgarle mediante el constructor el tamaño del contenedor (jPanel) donde se lo colocara, el metodo setimage coloca mediante la propiedad seticon una imagen (de las 10 que se encuentran el package IMG) en el jlabel, el metodo encargado de la animacion es startAnimation(), el cual crea el timer correspondiente el cual ira incrementado la variable frame y hara un llamado al metodo setimage(), para actualizar la imagen del jLabel.
La aplicación terminada
El siguiente video muestra el resultado del proyecto, asi como tambien el diseño realizado con netbeans
Excelente aporte! Estuve mucho tiempo buscando algo como esto para incluir una pequeña animación sin necesidad de componentes extras (flash, flex, etc.).
ResponderEliminarGracias a este ejemplo pude hacerlo en minutos, en mi caso simplemente adaptando el código para que se ejecute una sola vez la secuencia.
Saludos,
kbza
Hola, gracias, estuve todo el dia buscando algo para rotar de imagenes, y al fin lo encontre gracias a ti.
ResponderEliminarde nada
ResponderEliminarHola disculpa q te moleste por si alcazo no tienes uno igual pero para rotar una imagen mediante matrices en netbeans 7.3
ResponderEliminarHola! Primeramente felicitarte por las explicaciones y por tu buen blog.
ResponderEliminarUna consulta, como puedo hacer que se mueva de manera mucho mas lenta?
Mas o menos 5-10 segundos por imagen