2009-04-16 9 views
0

Ce que je suis en train de achive est fondamentalement la « Enfermez dans » caractéristique de Netbeans lors de l'exécution:Comment joindre un composant à un autre conteneur lors de l'exécution?

Disons que j'ai cette hiérarchie de composants:

Container 
    Label 1 
    Label 2 
    Label 3 

Et je veux joindre Label 2 comme ceci:

Container 
    Label 1 
    Container 
     Label 2 
    Label 3 

Et je veux également le rétablir, c'est-à-dire que je veux "remonter" l'étiquette pour obtenir la hiérarchie d'origine.

EDIT: Le problème est qu'à l'exécution, je ne connais que Label 2. Tous les autres composants (frères et soeurs, parents, enfants) sont inconnus. Cela élimine la possibilité de simplement reconstruire la hiérarchie.

de couse je suis sûr que je peux trouver une façon d'obtenir cette fonctionnalité en parcourant les hiérarchies de composants, mais je me demande:

Y at-il une meilleure façon? Peut-être une sorte de classe d'utilité qui fournit cette fonctionnalité d'encapsulation?

EDIT 2: Comment puis-je obtenir les contraintes de disposition que le composant a été ajouté au conteneur à l'origine? J'ai besoin de cette information parce que le nouveau conteneur doit utiliser les mêmes contraintes. De même, lors de la restauration de la hiérarchie d'origine, le composant doit réutiliser ses anciennes contraintes.

Répondre

1

Container s sont Component s aussi bien, il est donc possible de joindre Container s dans Container s.

Alors, peut-être le premier état serait quelque chose le long de la ligne de (pseudo-code):

Container container1 = new Container(); 
Label label1 = new Label(); 
Label label2 = new Label(); 
Label label3 = new Label(); 
container1.add(label1); 
container1.add(label2); 
container1.add(label3); 

Pour effectuer la transition vers le deuxième état:

Container container2 = new Container(); 
container1.remove(label2); 
container2.add(label2); 
container2.add(container1); 

Maintenant, le label2 est déplacé dans container2 et ce conteneur lui-même est contenu dans container1.

Et pour revenir à l'état d'origine:

container2.remove(label2); 
container1.add(label1); 
container1.remove(container2); 

Modifier

Si tout ce que nous savons est label2 elle-même, qui est déjà dans certains Container, nous pouvons déterminer le parent Container en appelant la méthode de Component.

application que le code ci-dessus, remplacez la ligne pour faire container1 ce qui suit:

Container container1 = label2.getParent(); 

Si vous voulez obtenir les Component s qui ont lieu dans le Container, la méthode getComponents() peut être appelé afin de récupérer un tableau de Component s.

+0

Oh, je suis désolé, j'ai remarqué que ma question est très ambiguë. Je vais clarifier ... –

+0

OK, c'était beaucoup plus facile que je ne le pensais. Pour une raison quelconque, j'étais convaincu que je devais maintenir l'ordre original des enfants pour garder la disposition mais ensuite j'ai réalisé que la commande n'a rien à voir avec ça ... * doh *. –

+0

La commande visuelle des composants va être le travail du LayoutManager, qui est bien sûr un grand sujet en soi! – coobird

Questions connexes