2017-09-20 75 views
0

我试图用JFrame和JPanel创建一个“gif”,我有一个循环“gif”的问题。 这是做了“GIF”的部分代码:如何把相同的JLabel两次

JFrame mainFrame = new JFrame("main"); 
    mainFrame.setSize(newWidth, newHeight); 
    mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     for (int i = 0; i < labels.length; i++) { 
      mainFrame.add(labels[i]); 
      mainFrame.setVisible(true); 
      TimeUnit.SECONDS.sleep(delay); 
      mainFrame.remove(labels[i]); 
     } 

它只运行一次,但是当我调试它表明,它一直运行

+1

也许我有糟糕的一天,但不明白 –

+0

标题和问题似乎完全无关。另外,为什么这个运行不止一次?循环运行一次,并在它添加并删除它终止的所有标签之后运行。 如果您希望它无限期运行,请使用while(true){}或更好的while(notTerminated){}环绕循环,以便您可以将notTerminated设置为false,例如通过点击一个按钮... – tringel

+1

首先,你不能在Swing应用中使用'sleep()'。如果你想提供延迟,你应该使用'javax.swing.Tmer'。有关更多信息,请参阅[此处](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)。其次:不能将一个Swing组件放置两次。如果第二次添加Swing组件,它将从第一次添加Swing组件的位置移除。如果您仍然需要帮助,请提供一个可运行的示例([SSCCE](http://sscce.org)),因此我们也可以重现您的问题并调试解决方案。 –

回答

0

您需要添加

mainFrame.revalidate(); 
mainFrame.repaint(); 

mainFrame.add(labels[i]); 

mainFrame.remove(labels[i]); 

此外,我想推荐您阅读约Event Dispatcher Thread