2010-08-30 7 views
3

comment puis-je ajouter des composants dynamiquement dans un jpanel? Je dois ajouter un bouton quand je clique sur le bouton les composants doivent être ajoutés au JPanel. Ma question est que l'ajout d'un champ de texte et d'un bouton à jpanel quand je clique sur le bouton ajouter l'utilisateur peut cliquer sur le bouton ajouter un certain nombre de fois en fonction de ce que je dois les ajouter au jpanel. J'ai ajouté à scrollerpane à mon jpanel, et le gestionnaire de mise en page jpanel est défini sur null.ajouter des composants dynamiquement dans un JPanel

Répondre

5

Tout comme vous le faites toujours, sauf que vous devez appeler:

panel.revalidate(); 

lorsque vous avez terminé, puisque le conteneur est déjà réalisé.

+1

En effet (bien que je ne pense pas que 'repaint' est réellement nécessaire). Voir les documents d'API pour 'java.awt.Container.add'. –

+0

Avant j'ai toujours pensé que les deux méthodes étaient toujours utilisées ensemble, puisque je l'ai vu comme ça dans de nombreux exemples. Juste essayé moi-même et en effet, revalidant semble assez! merci pour ce conseil, vous avez raison. – crusam

+4

Dans ce cas simple "d'ajouter" un bouton, vous n'aurez généralement jamais besoin d'utiliser repaint(). Cependant, essayez un simple cas de "suppression" d'un bouton et cela ne fonctionnera pas. Dans ce cas, vous devez utiliser repaint(). Ma règle générale est de l'essayer d'abord avec revalidate(), si cela ne fonctionne pas, ajoutez un repaint(); – camickr

4

Utilisez un ActionListener, vous pouvez utiliser une classe anonyme comme ceci:

JPanel myJPanel = new JPanel(); 

... 

b = new Button("Add Component"); 
b.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     JLabel someLabel = new JLabel("Some new Label"); 
     myJPanel.add(someLabel); 
     myJPanel.revalidate(); 
    } 
}); 
+0

Vous devez revalider le conteneur (myJPanel) après avoir ajouté des composants si le conteneur a déjà été affiché. –

Questions connexes