2011-07-27 34 views
3

我在Java中工作使用JWindows显示图像的Swing ...我使不同的JLabels包含我想要显示的图像.. Im删除以前添加的组件并添加新的组件在同一的JWindow。该问题如下..如何实现睡眠以显示图像的幻灯片

代码工作完全没有睡眠功能显示。我可以显示所有在不同的窗口或事件完成时相同的Windows。但是,当我用睡觉,什么都没有得到,在此期间显示的图像...

有什么办法来实现对图像的延迟像幻灯片放映,并在延迟之前画图像?

  getContentPane().remove(startLabel); 
      getContentPane().add(recordLabel1, "Center"); 
      setVisible(true); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel1); 
       getContentPane().add(recordLabel2, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel2); 
       getContentPane().add(recordLabel3, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel3); 
       getContentPane().add(recordLabel4, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel4); 
       getContentPane().add(pausedLabel, "Center"); 
       setVisible(false); 
+0

编辑:我试图改变一个固定的JLabel中的图像,而不是添加或删除组件...没有工作! –

+0

编辑:我也试着切换包含不同的图像有形和无形的许多不同的层叠窗口......没有工作! –

+2

什么答案下面不解释也是为什么什么也没有发生。这是因为你的代码在Swing事件线程中运行,当你睡觉时,你暂停该线程。虽然需要线程来更新和显示Swing组件,所以睡眠时不会发生任何事情。 –

回答

8

这是使用Swing Timers的好时机。

您应该:

  • 储存您的标签/图片在一个阵列,而不是在不同的变量
  • 设置计时器,在上面
  • 在计时器事件教程指出,刚刚通过旋转你的标签阵列

所有你需要的是在你的班级里有一个额外的成员,它存储了你当前显示的图片号码。当计时器火灾,使用该成员从窗格中删除当前项目,增加它(模你必须元素的总数),并插入新的。

+1

用于'javax.swing.Timer'的+1;另见['ImageLabelPanel'](http://stackoverflow.com/questions/3078178/jpanel-in-puzzle-game-not-updating/3078354#3078354)。 – trashgod