package frameanimazione;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;
public class MyPanelAnimazione extends JPanel implements Runnable {
private static final int WIDTH=400;
private static final int HEIGHT=300;
private static final long serialVersionUID = 1L;
private Image immagine;
private int x;
private int y;
private int dx;
private int dy;
private Thread animazione;
public MyPanelAnimazione() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setBackground(new Color(0xff, 0xff, 0xcc));
x = WIDTH / 2;
y = HEIGHT / 2;
dx = 1;
dy = 1;
immagine = Toolkit.getDefaultToolkit().getImage("palla.png");
animazione = new Thread(this);
animazione.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(immagine, x - immagine.getWidth(this) / 2,
y - immagine.getHeight(this) / 2, this);
}
public void stop() {
animazione = null;
}
public void eseguiAzione1() {
dx *= -1;
}
public void eseguiAzione2() {
dy *= -1;
}
@Override
public boolean imageUpdate(Image arg0, int infoFlags, int x, int y,
int width, int heignt) {
repaint();
return (infoFlags & ALLBITS) != ALLBITS;
}
@Override
public void run() {
while (Thread.currentThread() == animazione) {
x += dx;
y += dy;
if (x < immagine.getWidth(this) / 2) {
dx = 1;
} else if (x > WIDTH - immagine.getWidth(this) / 2) {
dx = -1;
}
if (y < immagine.getHeight(this) / 2) {
dy = 1;
} else if (y > HEIGHT - immagine.getHeight(this) / 2) {
dy = -1;
}
repaint();
try {
Thread.sleep(20);
} catch (Exception e) {
}
}
}
}