首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中将图像移动到点(而不是拖动)

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

Stack Overflow用户
提问于 2011-07-07 22:57:51
回答 2查看 1.8K关注 0票数 0

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

代码语言:javascript
复制
addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent e) {
        if (moving) return;
        moveImageTo(e.getX(), e.getY());
    }
});

The moveImageTo

代码语言:javascript
复制
public void moveImageTo(int x, int y) {
    moving = true;
    moveThread.start();
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-07 23:07:50

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

代码语言:javascript
复制
...
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 );
 }
}

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

票数 2
EN

Stack Overflow用户

发布于 2011-07-07 23:09:39

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6612674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档