2010-11-08 4 views
3

Je souhaite ajouter un nombre de JButtons à un JPanel en utilisant une boucle For. Lorsque l'utilisateur appuie sur un bouton, le code suivant est exécuté:Ajouter JButtons à JPanel

for (i = 0; i < 10; i++) 
{ 
    JButton aButton = new JButton(); 
    mainPanel.add(aButton); 
    mainPanel.revalidate(); 
    mainPanel.repaint(); 
    System.out.println("Added: " + (i + 1) + "buttons"); 
} 

Cependant, quand j'appuie sur le bouton, pas JButton sont ajoutés à la JPanel, mais le programme imprime le nombre approprié de boutons qui devraient être ajoutés.

Je ne sais pas ce que le problème est ici =/

+1

Quel gestionnaire de layout utilisez-vous? – aioobe

+0

Essayez 'invalidate' au lieu de' revalidate' et 'repaint' - et y a-t-il une raison pour laquelle vous ne pouvez pas faire cela à la fin de la boucle? – sje397

+0

Vous ne devez pas valider et repeindre votre panneau chaque fois que vous ajoutez un bouton, mais seulement après avoir ajouté tous vos boutons. Valider et peindre une fenêtre GUI est généralement coûteux. –

Répondre

2

J'ai résolu mon problème. J'utilise NetBeans et apparemment Free Layout ne fonctionne pas, donc je mets la disposition de JPanel en Grid Layout et voila, les boutons apparaissent

+2

Vous ne voulez toujours pas appeler la méthode repaint à l'intérieur de la boucle for. Il n'y a aucune raison de repeindre le panneau dix fois. –

+0

Merci. Repeira en dehors de la boucle – Flynn

0

J'utiliser ce qui suit.

for (i = 0; i < 10; i++) { 
    mainPanel.add(new JButton("Button text")); 
    System.out.println("Added: " + (i + 1) + "buttons"); 
} 

mainPanel.invalidate(); 
mainPanel.repaint(); 
+0

Si vous avez besoin d'invalider et de repeindre, vous faites très probablement quelque chose de mal? – willcodejavaforfood

+0

Tout ce dont vous avez besoin est revalidate(). Cela provoquera l'appel du gestionnaire de disposition. – camickr

Questions connexes