import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
*
* @author andreas
*/
public class Bolas extends JFrame implements MouseListener {
private int x1 = 0;
private int y1 = 0;
class AnimaBolasThread extends Thread {
private double x2;
private double y2;
public AnimaBolasThread(double x2, double y2) {
this.x2 = x2;
this.y2 = y2;
}
public void run() {
double deltaX = x2 - x1;
double deltaY = y2 - y1;
final double numSteps = 15;
double incStepX = Math.abs(deltaX) / numSteps;
incStepX *= deltaX > 0 ? 1 : -1;
double m = deltaY / deltaX;
double b = y1 - m * x1;
for (int i = 1; i < numSteps + 1; i++) {
x1 += incStepX;
double y = m * x1 + b;
y1 = (int) y;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
repaint();
}
});
try {
Thread.sleep(150);
} catch (InterruptedException ex) {
Logger.getLogger(Bolas.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
public Bolas() {
setSize(800, 800);
setLocation(100, 100);
addMouseListener(this);
setVisible(true);
}
public void paint(Graphics g) {
super.paintComponents(g);
g.setColor(Color.RED);
g.fillOval(x1, y1, 100, 100);
}
public static void main(String argv[]) {
Bolas c = new Bolas();
}
@Override
public void mouseClicked(MouseEvent e) {
(new AnimaBolasThread(e.getX(), e.getY())).start();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}