[Layout]Meilleur choix pour une collection de JscrollPane en simple colonnes de hauteur fixe
Le
Daniel Moyne

Bonjour,
j'ai un JPanel dans lequel je veux placer une collection de JScrollPanes qui
contiennent chacun un JTree ; je veux que ces objets utilisent toute la
largeur du JPanel mais qu'ils soient de hauteur fixe.
J'ai pensé à GridLayout avec une seule colonne, mais si dans ce cas tous les
objets sont bien positionnés en une seule colonne, ils occupent toute la
hauteur du JPanel et donc se voient attribuer une hauteur variable ; par
exemple si je diminue la hauteur du JPanel tous les JScrollPanes reduisent
leur hauteur (identique) ; cela ne me convient pas !
Question : avec ce type de layout peut-on en plus imposer une hauteur fixe
pour chaque objet JScrollPane.
NetBeans propose en interne un layout qui bizarrement n'apparaît pas en
"Design", qui utilise un GroupLayout et qui correspond parfaitement à ce que
veux au final, mais apparemment complexe de mise en oœuvre ; ils procèdent
ainsi :
GroupLayout layout = new javax.swing.GroupLayout(JPanel);
JPanel.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jScrollPane,.
et quelque chose d'analogue avec :
layout.setVerticalGroup();
Désolé il m'est difficile de tout écrire ici.
Dans ce cas, contrairement au GridLayout, l'ajout du composant par
addComponent est très bizarrement placé ! ; mon problème est que surtout je
veux manipuler dynamiquement ces JScrollPanes : les placer où je veux par
rapport aux autres, les enlever, et les permuter ; l'alternative Netbeans me
semble difficile à utiliser dynamiquement car elle semble supposer tous les
composants connus !
Des idées ; merci.
j'ai un JPanel dans lequel je veux placer une collection de JScrollPanes qui
contiennent chacun un JTree ; je veux que ces objets utilisent toute la
largeur du JPanel mais qu'ils soient de hauteur fixe.
J'ai pensé à GridLayout avec une seule colonne, mais si dans ce cas tous les
objets sont bien positionnés en une seule colonne, ils occupent toute la
hauteur du JPanel et donc se voient attribuer une hauteur variable ; par
exemple si je diminue la hauteur du JPanel tous les JScrollPanes reduisent
leur hauteur (identique) ; cela ne me convient pas !
Question : avec ce type de layout peut-on en plus imposer une hauteur fixe
pour chaque objet JScrollPane.
NetBeans propose en interne un layout qui bizarrement n'apparaît pas en
"Design", qui utilise un GroupLayout et qui correspond parfaitement à ce que
veux au final, mais apparemment complexe de mise en oœuvre ; ils procèdent
ainsi :
GroupLayout layout = new javax.swing.GroupLayout(JPanel);
JPanel.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jScrollPane,.
et quelque chose d'analogue avec :
layout.setVerticalGroup();
Désolé il m'est difficile de tout écrire ici.
Dans ce cas, contrairement au GridLayout, l'ajout du composant par
addComponent est très bizarrement placé ! ; mon problème est que surtout je
veux manipuler dynamiquement ces JScrollPanes : les placer où je veux par
rapport aux autres, les enlever, et les permuter ; l'alternative Netbeans me
semble difficile à utiliser dynamiquement car elle semble supposer tous les
composants connus !
Des idées ; merci.
Daniel Moyne
Si on besoin est très complexe (qu'est ce que "les placer où je v eux
par rapport aux autres ?"), tu peux définir ton propre gestionnaire de
placement, spécifique à cette fenêtre (c'est pas si méc hant que
ça :) ) .
layout.setHorizontalGroup(layout.createParallelGroup(...addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jScrollPane,....
Le placement fais intervenir simplement l'ordre.
Daniel Moyne
Est-ce que Box ne te permet pas de faire ce que tu veux ? Je ne sais
pas si les composants vont toute prendre la largeur (Ã voir), mais ils
seront au moins placés l'un en dessous de l'autre sans être dà ©formés
comme dans un GridLayout.
layout.setHorizontalGroup(layout.createParallelGroup(...addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jScrollPane,....
je vais essayer ; merci.
Je ne fais ici qu'un retour d'expérience mais, selon moi, le plus simpl e
et d'utiliser un GridBagLayout.
- Il n'est pas si compliqué que cela.
- Pas trop gourmand non plus.
- Il permet un tas de chose du plus simple au plus complexe.
Je n'ai utilisé de Layout plus "simple" que pour des "morceaux"
d'interface vraiment très simple (JPanel de JButton GridLayout).
Interface contenant un barre d'outils flottante (BorderLayout prévu par
Swing) etc.
Dès qu'une interface dépasse le simplisimme, les GridBagLayout sont l a
réponse.
ce que je veux c'est placer mes jScrollPanes dans un seule colonne de
hauteur fixe avec une largeur = largeur du Panel ; avec GridLayout je peux
mettre mes jScrollPanes avec des espaces entre eux mais je voudrais aussi un
espace à droite et à gauche de chaque jScrollPane ; je vais essayer avec
GridBagLayout.