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 :

Empilement de JPanels dans un BoxLayout


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 18
    Par défaut Empilement de JPanels dans un BoxLayout
    Bonjour,

    J'ai fait quelques recherches sur le forum mais aucun post ne correspond tout à fait à mon problème, même si Lady s'en approche pas mal.

    Je souhaite faire un empilement de JPanels les uns en dessous des autres.
    On ajoute des jPanel à la pile grâce à un bouton "ajouter".
    Chacun des JPanel peut avoir une taille différente.

    J'ai utilisé pour cela un BoxLayout. Mon problème est que lorsque j'ajoute un JPanel, celui-ci s'étends en hauteur, et je voudrais qu'il ne prenne que la place dont il a besoin afin que le suivant puisse se mettre à la suite.

    Pour mieux comprendre, voici quelques photos de ce que j'ai:
    le BoxLayout a un fond vert, et est encapsulé dans un JScrollPane pour permettre l'ajout de beaucoup de JPanels.
    Le JPanel que j'ajoute a un fond rouge, mais est composé d'une toolbar grise et d'un panel blanc encadré en gris.
    Le layout de ce JPanel est un FormLayout(JGoodies).
    Voilà ce que j'obtient avec le BoxLayout vide:

    Avec 1 panel d'ajouté:

    Avec 2 panels d'ajoutés:

    Ce que je voudrais obtenir avec 2 panels ajoutés:


    Notons qu'ici j'a ajouté les 2 mêmes jPanels, mais je voudrais pouvoir ajouter des JPanels différents, qui auront des tailles différentes (que je ne peux connaitre à l'avance) et peut-être tous un layout différent.

    J'ai essayé également avec un simple JPanel ne contenant qu'un JLabel, il s'étendait au maximum également.
    J'ai aussi essayé de remplacer le FormLayout par un BorderLayout et j'ai obtenu le même résultat.

    Ma question revient donc à: Comment faire se réduire au maximum la taille des Jpanels, tout en gardant tout le contenu de visible ?
    et une autre question, qui aura certainement son importance:
    Si les composants d'un BoxLayout sont de taille différente, l'affichage se divisera en "cases" de la taille du plus gros composant ?

    Merci beaucoup pour votre aide,

  2. #2
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Pour ta première question, je te répondrai par une autre question : fixes-tu la preferredSize, la minimumSize et la maximumSize du panel que tu ajoutes ?

    Ah et je viens de regarder la JavaDoc, ça dit ça :
    BoxLayout attempts to arrange components at their preferred widths (for horizontal layout) or heights (for vertical layout). For a horizontal layout, if not all the components are the same height, BoxLayout attempts to make all the components as high as the highest component. If that's not possible for a particular component, then BoxLayout aligns that component vertically, according to the component's Y alignment. By default, a component has a Y alignment of 0.5, which means that the vertical center of the component should have the same Y coordinate as the vertical centers of other components with 0.5 Y alignment.

    Similarly, for a vertical layout, BoxLayout attempts to make all components in the column as wide as the widest component. If that fails, it aligns them horizontally according to their X alignments. For PAGE_AXIS layout, horizontal alignment is done based on the leading edge of the component. In other words, an X alignment value of 0.0 means the left edge of a component if the container's ComponentOrientation is left to right and it means the right edge of the component otherwise.

    Instead of using BoxLayout directly, many programs use the Box class. The Box class is a lightweight container that uses a BoxLayout. It also provides handy methods to help you use BoxLayout well. Adding components to multiple nested boxes is a powerful way to get the arrangement you want.

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 18
    Par défaut
    Citation Envoyé par seiryujay
    Pour ta première question, je te répondrai par une autre question : fixes-tu la preferredSize, la minimumSize et la maximumSize du panel que tu ajoutes ?
    Non, je ne fixe rien.

    Pour le how to, je l'ai déjà lu, mais cette image me laisse perplexe et laisse penser que des composants peuvent avoir des hauteurs différentes
    http://java.sun.com/docs/books/tutor...tDemo-left.png

    Sinon il y a peut-être un moyen plus simple que j'ignore.
    Merci

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ben essaie déjà de fixer la preferredSize puisque la JavaDoc dit :
    BoxLayout attempts to arrange components at their preferred widths (for horizontal layout) or heights (for vertical layout).

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Et tu dois fixer les maximumWidth et maximumHeight si tu ne veux pas que tous tes composants prennent toute la place.
    C'est comme ça qu'ils obtiennent l'image que tu as postée (enfin si j'ai bien compris)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 18
    Par défaut
    Citation Envoyé par seiryujay
    Et tu dois fixer les maximumWidth et maximumHeight si tu ne veux pas que tous tes composants prennent toute la place.
    C'est comme ça qu'ils obtiennent l'image que tu as postée (enfin si j'ai bien compris)
    Oui, si je fixe maximumSize, je peux empecher le composant de s'agrandir de trop.
    cependant je cherche à éviter ça car les composants peuvent varier de taille.
    Par exemple, la petite fleche dans la toolbar grise permet de cacher la partie blanche du dessous. Si je fait maximumSize = la hauteur des 2, une fois que je cache, j'obtient du rouge au lieu que le reste bouge au dessus.

    Cela peut être contourné en mettant un Jpanel transparent à la fin du BoxLayout dont le but est de s'agrandir au maximum, et qui fait que chaque composant se réduit s'il le peut.

    Cependant si mon composant doit augmenter sa taille, alors la fin est cachée à cause de l'attribut maximumSize.
    à moins que je trouve un moyen de faire varier maximumSize en fonction de la modification des composants.

    Question subsidiaire, avec maximumsize, je suis obligé de spécifier la largeur, comment faire pour fixer la hauteur, et que la largeur s'étende ?

    Question subsidiaire numéro 2, la vitesse de défilement du scrollpane peut-elle être réglée ? je la trouve très lente

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/04/2014, 23h21
  2. [Debutant]Probleme dimensionnement JPanel dans CardLayout
    Par etiennegaloup dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 22/12/2005, 19h08
  3. Donner le focus à un JPanel dans un autre JPanel
    Par Azanael dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 21/06/2005, 23h34
  4. [Débutant] JPanel dans JScrollPane
    Par Nicolas_75 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 06/04/2005, 09h39
  5. Gestion de menu, JPanels dans une JFrame
    Par Doc.Fusion dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/12/2004, 18h27

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