OVH Cloud OVH Cloud

[SWING] question de layout.

3 réponses
Avatar
Rémi Cocula
Bonjour ,

je débute en swing alors forcément je suis empêtré dans les layout managers.
Je voudrais faire une grille tout à fait classique à 2 colonnes mais avec
des colonnes de largeur différentes.

+-------------+--------------------------------------+
| label_long | text field |
| ------------+--------------------------------------|
| label | text field |
+-------------+--------------------------------------+

J'ai essayé d'utiliser un GridLayout mais visiblement on ne peut pas faire
en sorte que les colonnes ait une largeur différente.

Comment faut-il que je m'y prenne ?
Avez vous un exemple de code ?

3 réponses

Avatar
Braim
Bonjour ,

je débute en swing alors forcément je suis empêtré dans les layout managers.
Je voudrais faire une grille tout à fait classique à 2 colonnes mais avec
des colonnes de largeur différentes.

+-------------+--------------------------------------+
| label_long | text field |
| ------------+--------------------------------------|
| label | text field |
+-------------+--------------------------------------+

J'ai essayé d'utiliser un GridLayout mais visiblement on ne peut pas faire
en sorte que les colonnes ait une largeur différente.

Comment faut-il que je m'y prenne ?
Avez vous un exemple de code ?





Soit tu utilises un SpringLayout soit un GridBagLayout.

--
_________________
Braim
http://www.braim.be

Avatar
Jocelyn
Salut,
Je ne connais pas le SpringLayout (qui a ete ajoute en 1.4), mais bien
le GridBagLayout :).
Typiquement si tu utilises ce dernier, tu obtiendras le resultat en
jouant sur les poids des colonnes. Par exemple, si tu donnes un poids de
0 aux cellules de la premiere colonne et un poids de 1 aux cellules de
la 2eme, tes 2 labels seront colles a gauche et meme si tu agrandis ta
fenetre, ils ne bougeront pas, seule la 2eme colonne s'elargira.
Si tu veux en savoir plus, je te conseille
http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html
qui est court et suffisamment explicite.


Bonjour ,

je débute en swing alors forcément je suis empêtré dans les layout
managers.
Je voudrais faire une grille tout à fait classique à 2 colonnes mais avec
des colonnes de largeur différentes.

+-------------+--------------------------------------+
| label_long | text field |
| ------------+--------------------------------------|
| label | text field |
+-------------+--------------------------------------+
J'ai essayé d'utiliser un GridLayout mais visiblement on ne peut pas
faire
en sorte que les colonnes ait une largeur différente.

Comment faut-il que je m'y prenne ?
Avez vous un exemple de code ?





Soit tu utilises un SpringLayout soit un GridBagLayout.




Avatar
James Kanze
Rémi Cocula wrote:

je débute en swing alors forcément je suis empêtré dans les
layout managers. Je voudrais faire une grille tout à fait
classique à 2 colonnes mais avec des colonnes de largeur
différentes.


+-------------+--------------------------------------+
| label_long | text field |
| ------------+--------------------------------------|
| label | text field |
+-------------+--------------------------------------+


J'ai essayé d'utiliser un GridLayout mais visiblement on ne
peut pas faire en sorte que les colonnes ait une largeur
différente.


Qu'est-ce qui détermine les deux largeurs ? La plupart du temps,
je m'en sors avec deux GridLayout dans un BorderLayout. Quelque
chose du genre (dans le composant) :

! setLayout( new BorderLayout ) ;
! JPanel labels = new JPanel() ;
! labels.setLayout( new GridLayout( 0, 1 ) ) ;
! JPanel text = new JPanel() ;
! text.setLayout( new GridLayout( 0, 1 ) ) ;
! labels.add( new JLabel( "label_long" ) ) ;
! text.add( new JTextField( "text field" ) ) ;
! labels.add( new JLabel( "label" ) ) ;
! text.add( new JTextField( "text field" ) ) ;
! // ...
! add( labels, BorderLayout.WEST ) ;
! add( text, BorderLayout.CENTER ) ;

En général, dans un BorderLayout, WEST, CENTER et EAST auront la
même hauteur. Les GridLayout s'occupent des hauteurs des
éléments ; dans la mésure où les panel avec les GridLayout ont
la même hauteur et le même nombre d'éléments, chaque élément
aurait la même hauteur. Les panels dans WEST et/ou EAST auront
la largueur nécessaire, et la panel dans CENTER en aura la
reste ; c'est lui qui variera lorsqu'on change la largeur.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34