En este tutorial se muestran los pasos para crear
una animación sencilla utilizando Java2d y el IDE Netbeans. La animación
consistira en una pelota de futbol que se movera de un lado a otro de un
contenedor JPanel.
¿Que
necesitamos?
·
IDE netbeans 6.9 o superior
·
Conocimientos basicos sobre java
(Nivel Intermedio Chapi)
·
una imagen PNG de una pelota de
tamaño 50×50 pixeles
·
GANAS……………….. de aprender 
Proyecto.
1.
Crea un nuevo proyecto en netbeans, yo lo llame proyecto “jcbola”
, continuemos. Añade una
clase JFrame, llamala “interfaz.java”, añade tambien dos clases las cuales
debes llamar “pelota.java” y “panel.java”.
La
estructura de la interfaz comprende un objeto jmenu y dos submeus, jmenuitem1 y
jmenuitem2, ademas se coloca en el jframe un JPanel, puedes ver como queda en
la imagen siguiente:
url del video
Es
todo por el monento en la clase interfaz, el codigo restante lo escribiremos
mas adelante, ahora debemos añadir codigo al resto de las clases que creamos.
2.Continuamos
con la clase pelota.java, esta clase, como su nombre lo indica, es la
pelota de futbol en si, utiliza una imagen PNG de una pelota de futbol de
dimensiones 50×50 pixeles, esta imagen se encuentra en el mismo paquete que las
demas clases. El resto del código tanto los metodos y variables, esta en un
espanglish que creo que esta perfectamente entendible
Clase
pelota.java
package
jcbola;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class pelota {
private Image
balon;
//Coordenadas de la pelota
private int X;
private int Y;
private int
velocidad_X;
private int velocidad_Y;
private int limite_izquierda=0;
private int limite_derecha;
private int limite_superior=0;
private int limite_inferior;
public pelota(int x, int y) {
//coordenadas iniciales
this.X =
x; this.Y =
y;
//imagen de la pelota
balon = new ImageIcon(getClass().getResource("pelota.png")).getImage();
}
//dado las dimensiones del contendor
JPanel
public void LimitesXY(int width, int height) {
limite_derecha = width
- balon.getWidth(null);
limite_inferior = height - balon.getHeight(null);
}
//recalcula variables para dar la
sensacion de movimiento
public void move() {
//nueva posicion
X += velocidad_X;
Y += velocidad_Y;
//controla que la pelota no salga de
los limites del contenedor
if (X
< this.limite_izquierda)
{
X = 0;
velocidad_X = -velocidad_X;
} else if (X > limite_derecha) {
X =
limite_derecha;
velocidad_X = -velocidad_X;
}
if (Y < this.limite_superior) {
Y =
0;
velocidad_Y = -velocidad_Y;
} else if (Y > limite_inferior) {
Y
= limite_inferior;
velocidad_Y = -velocidad_Y;
}
}
public void setVelocidadXY(){
velocidad_X = getNumberRandom(4);
velocidad_Y = getNumberRandom(8);
}
public void dibujar(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(balon, X, Y, null);
}
//devuelve un número aleatorio entre 1
y MAX
private int getNumberRandom(int Max){
return (int) (Math.random()*Max+1);
}
}
3.
Nos toca ahora añadir el código necesario a nuestra clase panel.java, esta
clase se extiende de un JPanel y es aqui donde se realiza la animación, para lo
cual hacemos uso de un TIMER, este timer nos permite pintar el movimiento de la
pelota cada cierto tiempo ( 16 milisegundos). Esta clase, hace uso de la clase
anterior, pelota.java.
package jcbola;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.Timer;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class panel extends JPanel{
//instancia
a la pelota en posicion (X,Y) => (0,0)
private
pelota mipelota = new
pelota(0, 0);
private Timer timer;
//Constructor
public panel(Dimension d) {
this.setSize(d);
this.setPreferredSize(d);
this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
this.setBackground(new Color(0,255,0));
mipelota.LimitesXY(getWidth(),
getHeight());
//para
la animación
timer = new Timer(16, new ActionListener (){
public void actionPerformed(ActionEvent e) {
mipelota.move();
repaint();
}
});
}
//Controla el inicio y fin de la
animación
public void animar(boolean turnOnOff) {
if (turnOnOff) {
mipelota.setVelocidadXY();
timer.start();
} else {
timer.stop();
}
}
//pinta la animación
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
mipelota.dibujar(g);
}
}
4.
Más dificil no podia estar, porque ya terminamos
, solo nos falta
implementar estas clases en nuestra interfaz, vamos a la parte del codigo de
nuestra interfaz.java, añadimos el codigo :
//instancia a mi clase panel.java
panel mipanel;
/** Creates new form interfaz */
public interfaz() {
initComponents();
setTitle( "Java2D Animación by Mouse" );
setLocationRelativeTo(null);
//se crea instancia a panel de
animacion y se añade a la interfaz
mipanel=new panel( this.jPanel1.getSize() );
this.jPanel1.add(mipanel);
}
//esto para los eventos de los submenus
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
mipanel.animar(true);
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
mipanel.animar(false);
}
NOTA:
No copies y pegues el código, estudialo y ve donde va cada parte. Por demas
esta decir de que esta interfaz debes llamarlos desde la clase main.java.
Terminamos
el proyecto, compila y ejecuta el programa, te dejo tambien un video para que
hagas una comparación de tu trabajo.

