Ae galera, beleza??
Eu to desenvolvendo um aplicativo usando Swing que é basicamente uma bola andando pelo JPanel e gravando suas coordenadas nos vetores objX e objY (o primeiro pra coord x e o segundo pra coord Y).
O usuário vai seguir a bola com o ponteiro do mouse, e as coordenadas do movimento do mouse são gravadas em coordX e coordY.
Ao rodar, eu sigo a bola com o mouse e ao clicar em "Close" é exibida as coordenadas do movimento do mouse e do objeto. O problema é que ao comparar as coordenadas do mouse e do objeto, elas são bem diferentes mesmo que eu acompanhe a bola com o mouse de bem próximo. Eu imagino que o eixo [0,0] está deslocado para a bola, mas não sei como arrumar isso.
E outro probleminha é que as coordenadas do mouse param de ser gravadas no meio do caminho.. E não sei porque... Ainda sou iniciante em Swing e captar eventos do mouse..
Desculpem-me pelo post longo. :?
Segue abaixo o código do aplicativo.. Por favor dêem uma ajudinha.
Classe principal BounceThreadimport javax.swing.JFrame;
public class BounceThread {
public static void main(String[] args) {
JFrame frame = new BounceThreadFrame();
frame.setVisible(true);
}
}
public class BounceThreadFrame extends JFrame {
public BounceThreadFrame() {
setSize(800, 600);
setTitle("Bounce");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = getContentPane();
canvas = new JPanel();
contentPane.add(canvas, "Center");
JPanel p = new JPanel();
addButton(p, "Start", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Ball b = new Ball(canvas);
b.start();
}
});
addButton(p, "Close", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
canvas.setVisible(false);
System.exit(0);
}
});
contentPane.add(p, "South");
}
public void addButton(Container c, String title, ActionListener a) {
JButton b = new JButton(title);
c.add(b);
b.addActionListener(a);
}
private JPanel canvas;
}
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
public class Ball extends Thread {
public Ball(JPanel b) {
box = b;
}
public void draw() {
Graphics g = box.getGraphics();
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void move() {
if (!box.isVisible())
return;
Graphics g = box.getGraphics();
g.setXORMode(box.getBackground());
g.fillOval(x, y, XSIZE, YSIZE);
x += dx;
y += dy;
Dimension d = box.getSize();
if (x < 0) {
x = 0;
dx = -dx;
}
if (x + XSIZE >= d.width) {
x = d.width - XSIZE;
dx = -dx;
}
if (y < 0) {
y = 0;
dy = -dy;
}
if (y + YSIZE >= d.height) {
y = d.height - YSIZE;
dy = -dy;
}
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void run() {
try {
MouseHandler handler = new MouseHandler();
box.addMouseMotionListener(handler);
draw();
for (int i = 1; i <= 1000; i++) {
move();
sleep(5);
objX[i] = x;
objY[i] = y;
}
for (int a = 0; a < objX.length; a++)
System.out.println("["+coordX[a]+","+coordY[a]+"]"+" - "+"["+objX[a] + ", " + objY[a]+"]");
} catch (InterruptedException e) {
}
}
private class MouseHandler implements MouseMotionListener {
public void mouseMoved(MouseEvent e) {
saveCoord(e.getX(), e.getY());
}
public void mouseDragged(MouseEvent e) {
}
}
public void saveCoord(int x, int y) {
coordX[m] = x;
coordY[m] = y;
m++;
}
private int[] coordX = new int[1000000];
private int[] coordY = new int[1000000];
private int m = 0;
private JPanel box;
private static final int XSIZE = 50;
private static final int YSIZE = 50;
private int x = 0;
private int y = 0;
private int dx = 1;
private int dy = 1;
private int[] objX = new int[1001];
private int[] objY = new int[1001];
}
EDIT:
Eu limitei o movimento da bola pra 1000.
E o objetivo do aplicativo é fazer uma comparação entre as coordenadas x e y do mouse e do objeto, e calcular o quão bem o usuário seguiu a bola. E então dizer isso ao usuário num JDialog provavelmente.
.