一开始我想强调,我是Java的新手,我总是试着自己找到问题的答案,但有时我会到达死胡同,这就是为什么我想问你是否有这个想法。
我尝试制作纸牌游戏。我想做一个非常简单的事情(在我看来),就是将JLabel与一张卡片的图像从一个点移动到一个JPanel内部的另一个点,这是一个移动的延迟40ms创建一个"动画"处理卡。
然而,当我尝试这样做时,我得到了卡的重复,尽管我刷新了父JPanel。到目前为止,我一直在寻找答案如何做到这一点,对我来说没有任何作用。我试图用卡本身刷新JLabel,它的父JPanel也没有任何影响。
唯一的部分解决方案是重新绘制JPanel,这是使用JLabel的JPanel的父级,但它导致整个GUI的闪烁,这是不可接受的。只有这样,我在这里附上的图片中没有像这样的重复。
注意:我使用绝对布局,但是我知道它是多么不专业的事实。这只是因为我不知道如何使用其他经理来遵守我的其他布局。
我非常感谢您提供给我的任何提示或解决方案。
图像展示了我想要实现的目标
图像展示当前情况
public void moveCard()
{
// move the card to x = 0 (its destination) inside the parent panel
while (movedCard.getX() != 0)
{
// try to reach x = 0
// as the starting x cannot be divided through 20 it must subtract 21 once at the end
if (movedCard.getX() == 21)
{
movedCard.setLocation(movedCard.getX() - 21, movedCard.getY());
}
else
{
movedCard.setLocation(movedCard.getX() - 20, movedCard.getY());
}
// repaint the panel that the card is drawn on
movedCard.getParent().paintComponents(movedCard.getParent().getGraphics());
// wait until the card is moved for the next time
try
{
Thread.sleep(40);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
// set the location of the card to default
movedCard.setLocation(341, movedCard.getY());
}
}