gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:48:31 24 4
gpt4 key购买 nike

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

addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
if (moving) return;
moveImageTo(e.getX(), e.getY());
}
});

moveImageTo:

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

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

最佳答案

我猜您不想根据您的问题一步移动图像,而是希望在几毫秒内进行“平滑”移动 - 因此图像看起来是滑入位置而不是移入一去新的位置?在这种情况下,您需要决定此移动需要多长时间 - 例如500 毫秒以及您将执行此操作的步骤数 - 比如说 40 步。有了开始坐标(称为 startXstartY)和结束坐标(endXendY),那就很容易了计算每一步的运动(此代码将发生在您的 Runnable 类中,该类将在线程中运行):

...
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 );
}
}

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

关于java - 在Java中将图像移动到点(而不是拖动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6612674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com