刷新Swing GUI

时间:2012-05-23 18:47:31

标签: java swing user-interface repaint

我有一块包含瓷砖的瓷砖,瓷砖包含障碍物。障碍物可以是几种类型之一(墙壁,激光,......)。

每一轮比赛我都会执行棋盘,这可以解决所有的障碍。一旦障碍物被执行并且某些内容发生了变化,就会通知GUI并刷新受影响的磁贴。

在图形用户界面中,图块是包含重叠图像(JLabel)的OverLayLayout,因此所有重叠图像都是可见的。

现在的问题是,当我执行它们时,它会变得很快,你不会发生任何事情。例如。你没有看到激光束出现,播放器会被损坏,但你没有看到它发生......

所以我试着让游戏等待,例如500ms所以用户可以看到GUI更新。我尝试过(但可能做错了):定时器,摇摆器,倒计时器......但我似乎无法让它起作用。 有想法该怎么解决这个吗?或者也许是等待的替代方案?

提前致谢!

更新 执行中的执行如下所示:

Iterator<Obstacle> it = obstacles.iterator();
while (it.hasNext())
    it.next().execute(this);

CountDownLatch countDown = new CountDownLatch(1);
setChanged();
notifyObservers(countDown);
countDown.await();

GUI板的更新功能(通知)如下所示:

final CountDownLatch countDown = (CountDownLatch) arg;
SwingUtilities.invokeLater(new Runnable(){
   public void run() {
      try {
        updateUI();
        wait(500);
      } catch (InterruptedException ex) { }
            countDown.countDown();
   }
});

1 个答案:

答案 0 :(得分:4)

如果没有看到您的代码,很难确定问题;我怀疑你是在阻止事件派遣线程。

此基于图块的game使用javax.swing.Timer的实例来制作游戏动画。按 A 启用动画,然后单击自由方块以查看效果。您可以调整游戏方法。