Disposition GridBagLayout : déprime inside ...

Disposition GridBagLayout : déprime inside ... - Java - Programmation

Marsh Posté le 20-05-2004 à 01:30:38    

Salut, je souhaite utiliser une disposition assez particulier de différents éléments grace à un layout GridBagLayout. Cela fait 2 jours que je suis dessus a essayer diverses combinaisons mais à part un beau mal de crâne, en général je n'arrive pas à grand chose...
 
Je précise que j'inclue le Layout dans un panneau à onglets JTabbedPane().
 
Voila ce que je souhaiterai faire :
http://www.centralfr.com/JBs/layout.jpg
 
Voila ce que j'ai expérimenté et qui me place les éléments un peu n'importe ou dans le panel (genre généralement c'est centré et ca n'occupe pas toute la place dispo à l'ecran, il m'est impossible d'agir la dessus :():
 

Code :
  1. public QUEST_Editing(String id)
  2.     {
  3.         gbc = new GridBagConstraints();
  4.         super.setLayout(new GridBagLayout());
  5.         gbc.gridx = 0;
  6.         gbc.gridy = 0;
  7.         gbc.fill = GridBagConstraints.HORIZONTAL;
  8.         gbc.anchor = GridBagConstraints.NORTHWEST;
  9.         gbc.weightx = 100;
  10.         super.add(label, gbc);
  11.         gbc.gridy++;
  12.         super.add(text, gbc);
  13.         gbc.gridx = 0;
  14.         super.id = id;
  15.         gbc.gridy++;
  16.         super.add(answerlabel, gbc);
  17.         answers = new Vector();
  18.     }
  19.     public void addAnswer(String id, String text, int num_quest) {
  20.         CheckBox toAdd = new CheckBox(id, text);
  21.         answers.add(toAdd);
  22.         gbc.gridy++;
  23.         super.add(new JLabel(num_quest+". " ),gbc);
  24.         gbc.gridx++;
  25.         super.add(toAdd, gbc);
  26.         gbc.gridx = 0;
  27.     }


 
Voila ce que j'obtiens :
http://www.centralfr.com/JBs/result.jpg
PS : tous les éléments figurant dans ma dispo ci-dessus ne sont pas présents dans le code.


Message édité par JBs le 20-05-2004 à 01:33:01
Reply

Marsh Posté le 20-05-2004 à 01:30:38   

Reply

Marsh Posté le 20-05-2004 à 01:43:46    

Peut être serait-il plus simple d'utilise des sous panels ... Enfin du moins c'est quelque chose que j'ai essayé aussi mais j'arrive une fois de plus à un résultat qui n'est pas extra : si je redimensionne ma fenetre, tous les éléments bougent avec, se recentrent au lieu de rester strictement alignés a gauche ... Enfin bref, pas gégé. Si quelqu'un pouvait m'indiquer comment faire pour les docker de maniere définitive et indépendante du redimensionnement de ma fenetre, je suis preneur !
 
J'ai aussi le probleme du second panel qui s'affiche uniquement de maniere centrée ...
 
Voila le code :

Code :
  1. public MCQ_Editing(String id)
  2.     {
  3.         gbc = new GridBagConstraints();
  4.         super.setLayout(new GridBagLayout());
  5.         gbc.gridx = 0;
  6.         gbc.gridy = 0;
  7.         gbc.fill = GridBagConstraints.HORIZONTAL;
  8.         gbc.anchor = GridBagConstraints.EAST;
  9.         super.id = id;
  10.         answers = new Vector();
  11.        
  12.         UpperPane = new JPanel();
  13.         QuestionPane = new JPanel();
  14.        
  15.         //Config. of the Upper Panel
  16.         UpperPane.setLayout(new GridLayout(3,1));
  17.         UpperPane.setPreferredSize(new Dimension(600,60));
  18.         UpperPane.add(label);
  19.         UpperPane.add(text);
  20.         UpperPane.add(answerlabel);
  21.         super.add(UpperPane, gbc);
  22.        
  23.         //Config. of the Middle Panel (Questions)
  24.         QuestionPane.setLayout(new GridBagLayout());
  25.         QuestionPane.setPreferredSize(new Dimension(600,350));
  26.         QuestionPane.setAlignmentX(0);
  27.         QuestionPane.setAlignmentY(0);
  28.        
  29.         gbd = new GridBagConstraints();
  30.         gbd.gridx = 0;
  31.         gbd.gridy = 0;
  32.         gbd.fill = GridBagConstraints.HORIZONTAL;
  33.         gbd.anchor = GridBagConstraints.EAST;
  34.         gbc.fill = GridBagConstraints.BOTH;
  35.         gbc.gridwidth = GridBagConstraints.REMAINDER;
  36.         gbc.gridy++;
  37.         super.add(QuestionPane, gbc);
  38.        
  39.        
  40.        
  41.     }
  42.     public void addAnswer(String id, String text, int num_quest) {
  43.         CheckBox toAdd = new CheckBox(id, text);
  44.         answers.add(toAdd);
  45.         gbd.gridy++;
  46.         QuestionPane.add(new JLabel(num_quest+". " ), gbd);
  47.         gbd.gridx++;
  48.         QuestionPane.add(toAdd, gbd);
  49.         gbd.gridx = 0;
  50.     }


 
Voila ce que j'obtiens (sans redimensionnement de fenetre)
http://www.centralfr.com/JBs/result1.jpg
Avec un redimensionnement :
http://www.centralfr.com/JBs/result2.jpg
 
PS : je suis assez novice en java :D

Reply

Marsh Posté le 20-05-2004 à 01:48:01    

Il est un peu tard, là..
 
Juste une remarque : Est-ce que tu as essayé en JTable?
Là tu es en train de réinventer la poudre, c'est pas étonnant que tu déprimes..
Le BagLayout vaut mieux bien avoir compris les layout AWT pour jouer avec : le point critique c'est le setPreferedSize de chacun de tes composants.
J'imagine que tu connais le  tuto de SUN, il est assez bien fait (sinon fais-le!).
 
Mais bon.. A mon avis => JTable.

Reply

Marsh Posté le 20-05-2004 à 08:57:07    

Merci Seabee, j'v aller jeter un petit coup d'oeil a ca !
 
Et non, je ne connais pas le Tuto SUN.
 
Est ce qu'il est possible de faire des Tables dans les champs de laquelle on met des composant TextArea, des CheckBox, Boutons, Labels ... (l'exemple que j'ai vu, montre uniquement des structures type tableur)
 
Je pense qu'un probleme va toujours se poser : la disposition dans le Panel : comment docker définivement un Panel en haut à droite ? Et que celui ci ne bouge plus jamais meme en cas de redimentionnement de la fenetre ?


Message édité par JBs le 20-05-2004 à 09:09:46
Reply

Marsh Posté le 20-05-2004 à 09:11:19    

http://java.sun.com/docs/books/tut [...] g/TOC.html
 
la partie gridbag :
http://java.sun.com/docs/books/tut [...] idbag.html
 
Il faut un peu de temps pour appréhender la chose, mais c'est d'une logique implacable.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 20-05-2004 à 09:15:26    

JBs a écrit :


Je pense qu'un probleme va toujours se poser : la disposition dans le Panel : comment docker définivement un Panel en haut à droite ? Et que celui ci ne bouge plus jamais meme en cas de redimentionnement de la fenetre ?

en le mettant dans une case qui peut s'agrandir, en le calant en haut à gauche avec les contraintes kivonbien, avec des preferedSize kivonbien (si tu ne les mets pas, ça dépend du layout et des widgets internes au panel, c'est peut-être ce que tu veux).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 20-05-2004 à 09:49:05    

Merci pour les adresses nraynaud :jap:
 

nraynaud a écrit :

en le mettant dans une case qui peut s'agrandir, en le calant en haut à gauche avec les contraintes kivonbien, avec des preferedSize kivonbien (si tu ne les mets pas, ça dépend du layout et des widgets internes au panel, c'est peut-être ce que tu veux).


 
Euh quelles sont ces contraintes ? Car comme tu peux le voir dans mon 2eme code, j'en ai utilisé qques unes (donc le setPreferredSize) mais cela n'empeche pas aux JPanels internes de se ballader librement en se centrant au tomatiquement en ca de redimensionnement de la fenetre.
 
Pour ce qui est des composants internes et bien :
JTabbePane -> GridbagLayout ->  
  JPanel 1 -> TextArea / Labels
  JPanel 2 -> Labels / Text Area / CheckBoxes / Boutons

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed