IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[Layout] Empiler des composants...


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut [Layout] Empiler des composants...
    Salut !

    Je cherche un layout un peu spécial. Peut être pourrez vous m'aider ?

    Voila le topo :
    Je génère dynamiquement des Panels spéciaux (héritant d'un Panel que j'ai défini). Ces panels spéciaux comportent plus ou moins de composants et je n'ai aucun moyen de controler leur placement...

    Pour l'instant j'utilise un FlowLayout qui ne donne pas un rendu formidable. J'ai regardé les Layouts proposés par Java (bien sur !)...
    Mais je n'en trouve pas un qui pourrait empiler mes panels sans modifier leurs tailles.

    J'espère être assez clair...
    +++
    Ju

  2. #2
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Bon ben je m'auto-répond...

    En faisant des tests sous netbeans, je me suis rendu compte que le BoxLayout permet d'empiler des composants suivant l'axe X ou Y et ce, en conservant les proportions des Panels suivant leurs conception.

    Bon le seul problème est qu'il ne dispose que d'une colonne (ou ligne)...

    Mais je serai curieux de trouver un Layout qui fasse ce que je veux sans avoir à implémenter un placement manager...


    Voila !
    +++
    Ju

  3. #3
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Si j'ai bien compris ton problème : empiler des composants les uns au dessus des autres : tu peux faire un gridlayout de une colonne et "tonNombreDeComposants" lignes.
    Dans ce gridLayout, tu mettras des FlowLayout contenant tes composants ( 1 FlowLayout par composant ). Si tu veux les aligner par le centre, lorsque tu ajoute ton composant au flowlayout, tu lui fournis le parametre FlowLayout.CENTER.
    Remarque : cela est valable si tes composants ont la même hauteur : ils auront tous la taille du plus grand composant ( en hauteur toujours ). Pour éviter ça, plutot que d'utiliser un seul gridlayout, tu peux imbriquer plusieurs borderlayout les uns dans les autres en jouant sur les parties CENTER/SOUTH ou CENTER/NORTH.

    EDIT : honte sur moi je l'avais oublié celui-là le boxlayout...

  4. #4
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Yo !

    Eh ouais, c'est bien ca le problème, le grid layout propose de disposer tes composants sur plusieurs colonnes/lignes, mais les cellules du layout prennent automatiquement la taille du plus grand composant... Et la, c'est le drame car mes composants ont des tailles différentes...

    Pour l'instant ca sera le BoxLayout, mais je cherche toujours...

    Merci de t'être penché sur mon pb !
    +++
    Ju

  5. #5
    Membre habitué
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Points : 148
    Points
    148
    Par défaut
    Sachant que le meilleur layout à mon gout est le GridBagLayout utilisant des GridBagConstraint..


    Dans ce layout tu definis ta grille et tu remplis les cases avec les composants de ton choix .. Regarde l'API elle est bien faite (classe GridBagConstraint)


    A+

  6. #6
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Salut !

    Merci pour ta proposition, mais mes composants sont ajoutés dynamiquement. Je ne sais pas à l'avance combien il y en aura... Si je défini un gestionnaire de placement automatique (dans un futur proche je pense), j'utiliserai le GridBagLayout qui s'utilise un peu comme une table sous Gtk (Eh ouais j'suis documenté ).

    +++
    Ju

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Ca m'étonnerait qu'il y aie un layout pour empiler des composants, je pense que la meilleure des solutions est de recourir à un positionnement absolu

  8. #8
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Si tu fais référence au "AbsoluteLayout" proposé par NetBeans, je préfère garder mon BoxLayout. Il n'est pas proposé dans l'API Java... Et j'ai certaines règles à respecter...

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Par positionnement absolu, j'entends aucun layout et que tu positionnes toi meme chaque composant au pixels prets

  10. #10
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Ah ouais mais là c'est la misère... Ca revient à faire un gestionnaire de placement automatique dont je parlait plus haut. Et si je le fais je pense que le gridbaglayout sera le plus adapté...
    +++
    Ju

  11. #11
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    ohla ohla ohla ... vous partez dans kel délire là ? MDR ...
    et le CardLayout ? vous l'avez oublié ?? à mon avis il te donne exactement ce que tu veux

  12. #12
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Ca revient au même que le flowlayout... Il me semble qu'on s'égare alors je vais reprendre, j'ai utilisé TOUS LES LAYOUTS POSSIBLES et aucun ne permet les opérations suivantes de façon automatique (ie : le développeur n'a pas à spécifier quoi que ce soit) :

    Les composants s'imbriquent un peu comme dans "Tetris" (pour imager) sans qu'on ait besoin de leur spécifier une taille une hauteur et des positions en X et Y

    Le gridbaglayout permet cela : lorsque le développeur connait à l'avance les composants qu'il va poser.
    Le gridlayout : empile les composants dans X lignes et Y colonnes mais la taille de la cellule dépend du plus grand composant et les autres sont alors retaillés (ce qui est très moche)
    Le Box layout : résout en partie mon problème : il ajoute les composants suivant un axe (X ou Y) et garde leurs proportions...

    Je vais mettre le topic en résolu je pense...

    +++
    Ju

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Essaye de créer ton propre layout manager, je ne connaissais pas grand chose au layout il y a encore deux semaines et en trois jours j'en ai crée un.

    Regarde le chapitre sur les layout dans le java tutorial il est trés bien fait. Il faut faire une classe avec l'interface LayoutManager ou LayoutManager2

    En gros pour ton probléme il faudrais que le layout stocke les composants dans une hashtable dans la methode addLayoutComponent(Component comp, Object constr) avec un objet definissant leur taille.

    Ensuite dans LayoutContainer il faudra afficher tout les composants en se basant sur l'information de taille que tu auras fournie pour les décaler.

  14. #14
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Je ne m'etais pas penché sur le problème, mais ton analyse n'a pas l'air mal... Je vais me lancer là dedans !!!
    Merci !
    +++
    Ju

  15. #15
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Bon ben c'est résolu !

    En fait le GraphPaperLayout correspond tout à fait ce que je cherche... à quelques bidouilles près...

    Merci Sylvario !

    +++
    Ju

  16. #16
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    ahh moi j'avais pas compris, dsl.... sinon y'avait le GridLayout(0,1) => pas de limite de nb de lignes .. puis un : monJPanel.add(nouvoPanel, 0) ... voilou ... dsl de pas avoir compris ta question ^^

  17. #17
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Ca m'étonnerait qu'il y aie un layout pour empiler des composants, je pense que la meilleure des solutions est de recourir à un positionnement absolu
    Tout depend de ce que l'on entend par "empiler". Si c'est "a la Tetris", le BoxLayout est le plus adapte. Si c'est dans le sens d'empiler les un par dessus les autres (comme il a ete suggere avec un CardLayout) il faut utiliser un OverlayLayout, trop souvent oublie (il n'est d'ailleurs meme pas propose par la plupart des concepteurs visuels d'interfaces graphiques). Je ne l'ai jamais essaye mais il y a egalement le SpringLayout qui pourrait peut-etre te convenir.

  18. #18
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Ptite question Gfx : je n'ai jmais entendu parler de tous ces Layout ... (sauf les communs et le CardLayout que j'ai proposé ...) ... mais comment tu connais tous les autres ? Où peux-t-on trouver les Layout plus ou moins "officiels" qui sont développés ?

  19. #19
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Je n'ai cite que des layouts qui sont dans le JDK et j'ai tout simplement regarde la liste des classes du paquet java.awt en cherchant celles qui finissent par "Layout" :p

    Sinon tu peux chercher la session TS-3603 de JavaOne 2005. Le PDF est en ligne et tu peux meme aller sur le site de JavaOne pour suivre la presentation avec les slides + restranscription du texte + piste audio. Scott Violet, architecte de Swing, avait fait une heure sur les layouts. Il y presente certains layouts developpes par d'autres personnes. Il parle aussi de ceux du JDK, donnent des bons et mauvais exemples d'utilisation des layouts, etc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Layout et hauteur des composants
    Par Bernulf75 dans le forum JSF
    Réponses: 0
    Dernier message: 16/11/2013, 16h47
  2. Place des composants dans n'importe quel layout
    Par aliasjcdenton dans le forum Composants
    Réponses: 11
    Dernier message: 24/07/2011, 15h24
  3. Layout des composants sans utiliser Borland.jdbc
    Par POKOU dans le forum Débuter
    Réponses: 7
    Dernier message: 30/12/2010, 15h40
  4. Layout & couleur des composant
    Par bilelski dans le forum Java ME
    Réponses: 5
    Dernier message: 27/05/2008, 09h33
  5. Position des composants sur une frame avec layout null
    Par bellemlih dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/12/2007, 22h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo