在Java中将图像移动到点(而不是拖动)

在Java中将图像移动到点(而不是拖动),java,swing,graphics,Java,Swing,Graphics,我在JPanel中有一个小图像。当我单击面板时,图像必须移动到该点。 这是鼠标侦听器的代码(在构造函数中): 将图像移动到: public void moveImageTo(int x, int y) { moving = true; moveThread.start(); } 线程是个问题,因为我有开始位置(a)和结束位置(另一个),但我不知道如何计算移动的方向和步骤。我还认为线程必须在每一步调用paint(Graphics g)方法。有人有任何提示或链接吗?我猜你不想根据你

我在
JPanel
中有一个小图像。当我单击面板时,图像必须移动到该点。 这是鼠标侦听器的代码(在构造函数中):

将图像移动到

public void moveImageTo(int x, int y) {
    moving = true;
    moveThread.start();
}

线程是个问题,因为我有开始位置(a)和结束位置(另一个),但我不知道如何计算移动的方向和步骤。我还认为线程必须在每一步调用
paint(Graphics g)
方法。有人有任何提示或链接吗?

我猜你不想根据你的问题一步一个脚印地移动图像,而是想在几毫秒内“平滑”地移动——因此图像看起来是在滑动到位,而不是在新位置一步一步地移动? 在这种情况下,你需要决定这一移动需要多长时间——例如500毫秒,以及你要用多少步——比如说40步。 有了开始坐标(称之为
startX
startY
)和结束坐标(
endX
endY
),就很容易计算每一步的移动(该代码将发生在线程中运行的
Runnable
类中):

。。。
私有静态最终整数步长=40;
专用静态最终长间隔=500//毫秒
专用静态最终长步长_间隔=间隔/步长;
...
私人int stepX,stepY;
...
公共无效计算移动(){
stepX=(endX-startX)/STEPS;
stepY=(endY-startY)/步数;
}
...
公开募捐{
int currX=startX;
int currY=startY;
计算运动();
对于(int i=0;i

以上是一个非常粗略的示例,但它旨在向您展示如何在一个单独的线程中分步移动图像。

进入
run()
添加一种方法,每次刷新时将图像移动一组像素,直到达到
e.getX()
e.getY()
。试着找到一个好的px/s组合

你想从起点到点击点的移动动画吗?谢谢,这正是我想要的!
public void moveImageTo(int x, int y) {
    moving = true;
    moveThread.start();
}
...
private static final int STEPS = 40;
private static final long INTERVAL = 500;//msec
private static final long STEP_INTERVAL = INTERVAL / STEPS;
...
private int stepX, stepY;
...
public void computeMovement() {
 stepX = (endX - startX) / STEPS;
 stepY = (endY - startY) / STEPS;
}
...
public void run() {
 int currX = startX;
 int currY = startY;
 computeMovement();
 for( int i = 0; i < STEPS; i++ ) {
   currX += stepX;
   currY += stepY;
   //move image to (currX, currY)
   TimeUnit.MILISECONDS.sleep( STEP_INTERVAL );
 }
}