2017-09-20 139 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