2017-09-20 11 views
0

J'essaye de créer un "gif" avec JFrame et JPanel et j'ai un problème en bouclant le "gif". Ceci est la partie du code qui fait le « gif »:Comment mettre le même JLabel deux fois

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]); 
     } 

Il fonctionne qu'une seule fois, mais quand je le débugger montre qu'il continue à fonctionner

+1

peut-être que j'ai mauvaise journée, mais ne comprends pas –

+0

Le titre et la question semblent complètement indépendants. Aussi, pourquoi devrait-il courir plus d'une fois? La boucle est exécutée une fois et après l'ajout et la suppression de toutes les étiquettes qu'elle termine. Si vous voulez qu'il s'exécute indéfiniment, entourez la boucle avec while (true) {} ou mieux encore (notTerminated) {}, vous pouvez donc définir notTerminated sur false, par exemple. en appuyant sur un bouton ... – tringel

+1

Tout d'abord, vous ne pouvez pas utiliser 'sleep()' dans l'application Swing. Si vous souhaitez fournir un délai, vous devez utiliser 'javax.swing.Tmer'. Voir [ici] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html) pour plus d'informations. Deuxièmement: vous ne pouvez pas placer un composant Swing deux fois. Si vous ajoutez une composante Swing pour la deuxième fois, elle sera supprimée de l'endroit où elle a été ajoutée la première fois. Si vous avez encore besoin d'aide, veuillez fournir un exemple exécutable ([SSCCE] (http://sscce.org)), afin que nous puissions également reproduire votre problème et déboguer la solution. –

Répondre

0

Vous devez ajouter

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

après

mainFrame.add(labels[i]); 

et après

mainFrame.remove(labels[i]); 

En outre, je voudrais vous recommander de lire à propos de Event Dispatcher Thread.