Bonjour,
J'ai un JPanel avec un FlowLayout que je remplis de JLabel. Les labels sont bien répartis dans toute la place disponible. Ce panel est dans un GridBagLayout. Donc dans certains cas, il n'y a pas assez de place pour tout afficher et j'ai donc décider de mettre un JScrollPane (en fait un Jidesoft.SimpleScrollPane).
Problème, le FlowLayout n'utilise maintenant plus tout la hauteur disponible, puisque le viewport du scrollpane lui donne une largeur infinie pour se peindre. Tous mes labels sont donc sur une seule ligne.
Je voudrais que le layout continue à utiliser toute la hauteur possible et dépasse de la largeur du viewport uniquement si nécessaire.
Dans un 1er temps j'ai écrit un nouveau LayoutManager basé sur le FlowLayout qui utilise la dimension du viewport comme base plutôt que la largeur du panel. C'est une 1ère approximation de ce que je veux en final qui fonctionne comme je m'y attendais. Les labels sont uniquement disposés sur la largeur du viewport, et dépassent verticalement si nécessaire.
Seul problème dans cette 1ère version est que la scrollbar horizontale apparaît toujours, car le panel semble avoir conservé la même largeur que si tous les labels étaient mis l'un à côté de l'autre.
D'où ma question dans chaîne du layout des composants:
comment est déterminée la largeur du panel ? Est-ce que cela a avoir avec les méthodes preferredLayoutSize(Container target) et minimumLayoutSize(Container target) ?
(Est-ce qu'il existe une doc qui explicite un peu cette chaîne ? Je m'y perds...)
Merci,
Laurent
Partager