Question

Je dois créer un formulaire plutôt volumineux avec de nombreux contrôles. Les commandes sont divisées en commandes / paramètres de base et en commandes / paramètres étendues . L’utilisateur peut décider s’il souhaite consulter uniquement les contrôles de base ou les contrôles de base et étendus.

J'ai abandonné tous les contrôles étendus sur leur propre fichier JPanel afin de pouvoir basculer facilement entre les deux vues en affichant ou en masquant ce panneau.

Actuellement, j'utilise GroupLayout et les contrôles de différents panneaux ne sont pas alignés:

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

Malheureusement, j'ai maintenant trouvé le moyen de & "synchroniser &"; les dispositions des deux panneaux (sauf l'utilisation d'AbsoluteLayout et des coordonnées de contrôle fixes)

  • Y a-t-il un moyen d'y parvenir?
  • Ma conception est-elle défectueuse?

MODIFIER: s'il est possible, j'aimerais conserver le responsable de GroupLayout.

Était-ce utile?

La solution

Pour autant que je sache, aucun Swing LayoutManager (de JRE ou de source ouverte) ne peut s’étendre sur plusieurs panneaux.

Je travaille actuellement sur une telle fonctionnalité (que j'ai appelée " synchronisation des dispositions ") pour mon DesignGridLayout , mais ce n'est pas quelque chose de facile à mettre en œuvre (j'ai commencé il y a environ 2 semaines et je ne vois toujours pas exactement si et quand j'aurai quelque chose d'intéressant, mais j'ai toujours grand espoir pour cela ;-))

Une option à vérifier serait d’ajouter tous les composants au même panneau (avec un seul GroupLayout ensuite) et de les masquer / les afficher en fonction du choix de l’utilisateur. Espérons que GroupLayout adaptera la taille à la situation (après avoir appelé pack ()).

Si GroupLayout se comporte bien, il vous suffira alors d'appeler pack () à chaque fois que l'utilisateur modifiera sa sélection pour afficher / masquer les champs étendus.

Sinon, vous devez définir manuellement la taille de votre panneau à chaque fois que l'utilisateur modifie sa sélection.

Autres conseils

Le moyen le plus simple (bon) de le faire est probablement d’ajouter tous les composants au panneau principal. Définissez les sous-panneaux sur non-opaques et ajoutez-les également au panneau principal. Le panneau principal nécessite l’extinction du dessin optimisé.

Une autre technique consiste à ajouter un composant espaceur. Dans le panneau inférieur, ajoutez un composant dans la même colonne que les étiquettes, qui extrait dynamiquement le composant width de ses différentes méthodes de taille à partir des étiquettes du haut. Faites la même chose en sens inverse du panneau supérieur.

Je pense qu’il n’ya aucun moyen de le faire avec les gestionnaires de disposition standard. Vous devrez probablement écrire votre propre gestionnaire de disposition, mais cela ne devrait pas être trop difficile si vous sous-classez GroupLayout.

Vous pouvez utiliser GridLayout au lieu de GroupLayout, qui vous donnera un espacement uniforme entre les colonnes

Si vous souhaitez les conserver dans des panneaux distincts avec des dispositions distinctes:

Parcourez toutes les étiquettes que vous ajoutez et recherchez la largeur maximale préférée pour chacune d'elles. Itérez une seconde fois et définissez la taille préférée avec la hauteur préférée de chaque étiquette, mais la largeur maximale.

Telle est l'explication de cet GridLayout . . Cela définira chaque composant à la taille souhaitée. Avec l’objet GridData, vous pouvez spécifier l’ordre des composants.

Exemples

 alt text
(source: sun.com )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top