java如何将JFrame移动到特定位置比使用setLocation()将其“传送”更顺畅?
我正在尝试建立一个方法“move()”,当我用这个方法移动一个JFrame时,我可以用它来设置从开始位置到结束位置的动画。setLocation(intx,inty)方法。我尝试了下面的方法,它将帧放在了正确的位置,但问题是动画首先在x轴上下降,然后才在y轴上下降,但我的目标是使它看起来像是到目标点的对角线运动。我知道这是因为第一个forLoops,因为它们不具备将setLocation方法的过程分解为单个部分的正确条件,但我完全不知道如何解决这个问题
public int currentX() {
return (int) frame.getLocation().getX();
}
public int currentY() {
return (int) frame.getLocation().getY();
}
public void move(int x, int y) {
for (int newX = currentX(); newX < x; newX++) {
frame.setLocation(currentX() + 1, currentY());
for(int newY = currentY(); newY < y; newY++) {
frame.setLocation(currentX(), currentY() + 1);
}
}
}
提前谢谢
# 1 楼答案
Swing是单线程的,您需要将
for-loop
从主线程移出。Swing也不是线程安全的,所以对UI状态的任何修改都应该在主线程(事件调度)的上下文中完成——catch 22——最简单的解决方案是使用SwingTimer
有关更多详细信息,请参见How to use Swing Timers
# 2 楼答案
第二个循环一直运行到完成,您需要同时移动帧,并且只在需要时增加
X
或Y