2009-08-04 14 views
4

Le conteneur utilise un BorderLayout. J'ai un JPanel que j'ai ajouté au CENTRE. Cependant le JPanel n'a pas de nom de variable pour cela.Comment supprimer un composant de JFrame qui utilise BorderLayout

que je pouvais faire contents.remove (nameofPanel)

Mais depuis je l'ai ajouté comme celui-ci contents.add (nouveau CustomJPanel(), BorderLayout.CENTER);

Maintenant, j'essaye de supprimer le CustomJPanel actuel et d'en ajouter un nouveau.

Comment faire?

Répondre

5

Votre meilleur moyen est d'extraire l'appel du constructeur dans une variable nommée - probablement un champ, en fait - et ensuite réduire au cas précédent.

contents.add(new CustomJPanel(), BorderLayout.CENTER); 

devient

nameOfPanel = new CustomJPanel(); 
contents.add(nameOfPanel, BorderLayout.CENTER); 
6

Alors que la réponse de Carl est probablement le meilleur, une alternative moins agréable si pour une raison quelconque, vous ne pouvez pas modifier l'appel add original():

contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER)); 
contents.add(someNewPanel); 

Cependant, si vous pensez devoir le faire, vous pouvez prendre du recul et évaluer pourquoi vous essayez de le faire.

0

Je vous suggère fortement de déclarer une variable globale CustomJPanel, de l'instancier avec votre premier panneau, puis d'ajouter le panneau. Lorsque vous voulez l'enlever, vous utilisez le même objet. Ensuite, vous affectez le nouvel objet à la variable et l'ajoutez de la même manière.

Les objets anonymes sont corrects lorsque vous n'avez pas besoin de les consulter. Mais toi si. Vous devriez donc éviter d'utiliser la méthode anonyme.

Questions connexes