从 Java 中的另一个类调用重绘?

Rel*_*ual 5 java animation swing multithreading timer

我可能做错了,所以请善待。我正在开发一个 Java 游戏,我正处于测试角色移动/动画的阶段。

“人”可以在网格上左右上下移动。绘制网格的类是 gamePanel 类。按钮位于 gameControlPanel 类中。

我有一个按钮,可以在网格上生成一个人。然后我有一个按钮可以左右上下移动这个人。

当按下向上移动按钮时,它会从 person 类调用向上移动方法。(目前,我一次只测试一个“人”。)在该方法中是以下代码......

int move = 10;
while(move!=0)
{
    setTopLeftPoint(new Point((int)getTopLeftPoint().getX(),
                              (int)getTopLeftPoint().getY() - 3));

    try
    {
        Thread.sleep(300);
    } catch (InterruptedException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    move-=1;
}
Run Code Online (Sandbox Code Playgroud)

问题是我似乎无法从 Person 类中调用 gamePanel 类的重绘方法。为了解决这个问题,我在 gamePanel 类中创建了一个计时器,它每 20 毫秒重绘一次。

当我在人生成后按下向上按钮时,该按钮保持按下状态,直到完成 while 循环的循环,然后人的圆形表示显示在上面的网格方块中。

我会尽力回答有关此的任何问题。

Tom*_*ine 1

如果您想以一定的时间间隔重新绘制,javax.swing.Timer那么该课程可能适合您。在特定情况下,repaint您可以从非 EDT 线程调用它,但您可能会遇到困难,因为您现在正在处理多个线程。