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 :

[JscrollPane]Problèmes avec layout du panel intérieur


Sujet :

AWT/Swing Java

  1. #1
    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 [JscrollPane]Problèmes avec layout du panel intérieur
    Bonjour,

    J'ai crée un JScrollPane, dans lequel je mets un JPanel qui a comme layout un FlowLayout. Le problème, c'est que tout se dispose en horizontal alors que j'aimerais que les composants se disposent en vertical, c'est logique me direz vous, puisqu'il a de place pour placer les composants les uns à coté des autres, le layout va le faire, mais j'aimerais qu'il les mette les uns en dessous des autres.

    Ce que j'aurais besoin, c'est faire que le JScrollPane étende mon panel mais seulement vers le bas

    Quelqu'un a t il une idée pour faire cela, ou alors l'a t'il déja fait ?

    Merci

  2. #2
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    utilise un autre layoutmanager, une boxlayout ou un gridbaglayout.
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  3. #3
    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
    à propos du FlowLayout :
    A flow layout arranges components in a directional flow, much like lines of text in a paragraph. The flow direction is determined by the container's componentOrientation property and may be one of two values:

    ComponentOrientation.LEFT_TO_RIGHT
    ComponentOrientation.RIGHT_TO_LEFT
    Donc je pense qu'il te faut un :
    => nombre de lignes indéterminé, rajoute à chaque fois à la ligne du dessous.
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  4. #4
    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
    merci,

    mais avec ca, les composants s'adapte à la taille du JScrollPane et en plus les composants que j'ai mis invisibles prennent de la place quand meme...

    y a t'il une solution ?

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Essaie en mettant un layout de type BoxLayout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS);

  6. #6
    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
    C'est pas vraiment mieux, sauf que mes éléments invisibles ne prennent plus de places, mais les composants qui sont dans le panel s'étirent jusqu'à prend la place du panel entier, c'est assez horrible...

    J'aimerais que mes composants intérieurs gardent au moins leur taille d'origine...

  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
    Ce qu'il me faudrait en fait , c'est une sorte de flowLayout mais sur une seule colonne... Mais je suis pas doué pour les layouts

  8. #8
    Membre actif Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Points : 227
    Points
    227
    Par défaut
    Comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    package mylayout;
     
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.LayoutManager;
     
    /**
     *
     * @author Lethal
     */
     
    //La classe doit implémenter layout manager
    public class MyVerticalLayout implements LayoutManager{
     
        Component[] composants;
        int nbr;
     
        /** Creates a new instance of MyLayout */
        public MyVerticalLayout() {}
     
        public void addLayoutComponent(String name, Component comp) {}
     
        public void removeLayoutComponent(Component comp){}
     
        public Dimension preferredLayoutSize(Container parent) 
        {
            return parent.getSize();
        }
     
        public Dimension minimumLayoutSize(Container parent)
        {
            return parent.getSize();
        }
     
        // on ne redéfinit que la méthode qui est appelée chaque fois qu'on doit repositionner les composants
        public void layoutContainer(Container parent)
        {
            // on récupère la liste des composants
            composants = parent.getComponents();
     
            // on récupère le nombre de composants
            nbr = composants.length;
     
            int y = 0;
     
            for(int i = 0; i < nbr; i++)
            {
                composants[i].setLocation(0,y);
                y += composants[i].getSize().getHeight()+5;
            }
        }   
    }

  9. #9
    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
    wichtounet : t'as pensé à mettre le JPanel sous chaque composant pour pas qu'il s'étende ? C classique : tu me 1 JPanel, C lui qui s'étend, et ensuite tu met ton Componont qui garde sa taille .... essaye
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  10. #10
    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
    Lethal : Avec ton layout rien ne s'affiche...

    Neptus : Tu veut dire que pour chaque élément que j'ajoute dans mon Panel, je devrais le mettre dans autre JPanel pour que ce soit lui qui prenne tout la taille et ensuite le composant intérieur prendra la taille qu'il voudra, c'est bien ca ?

    Ca risque d'etre lourd, car dans le JPanel du JScrollPane, j'affiche déja des JPanel, jusqu'à plusieurs dizaines, donc si j'ajoute encore un JPanel pour chaque ca risque de de devenir énorme...

  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
    j'ai pas trop compris ^^ tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    JScrollPane
           JPanel
                JPanel1
                     Component1_1
                     Component1_2
                     Component1_3
                JPanel2
                     Component2_1
                     Component2_2
                     Component2_3
    C'est bien ça ?
    Si ce n'est pas le cas, c'est ce que tu devrais faire .... enfin ... disons que c'est une idées comme une autre.

    Très lourd ? T sur 1 286 ?
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  12. #12
    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
    Je vais essayer d'etre plus clair

    J'ai un JScrollPane dans lequel je mets un JPanel, ensuite dans ce JPanel j'ajoute des JPanel qui contiennent des composants.

    donc j'ai une structure comme tu l'as montré dans ton post précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JScrollPane 
          panel
                panel1 
                     Divers Compo
                panel2 
                     Divers Compo
    Avant je mettais pas de JScrollPane, j'avais donc un flowLayout sur mon panel donc je veut que chaque composant à l'intérieur de panel se mettent les uns apres les autres. Mais maintenant que j'ai un JScrollPane, j'ai donc une largeur variable, donc avec mon FlowLayout, il affiche tous sur une seule ligne, ce que je ne veut pas. Avec certaines de vos propositions, j'arrivais à avoir tout sur une seule ligne, mais les panel1 et panel 2 devenaient trop grand.

    Donc en résumé, ce que je veut c'est un layout avec les caractéristiques suivantes, ou alors une combine pour que je puise le faire :

    • Un seul composants par ligne
    • J'aimerais qu'ils ne s'étendent pas à la taille du panel, mais qu'ils restent à la taille que j'ai fixé
    • J'aimerais que les élémetns que je mets invisibles (par un setVisible(false)), ne prennet aucune place


    Donc en fait, un flowLayout sur une seule colonne si ca existe...

    Si j'ai pas été clair dites le moi ^^

    Citation Envoyé par Neptus
    C'est bien ça ?
    Si ce n'est pas le cas, c'est ce que tu devrais faire .... enfin ... disons que c'est une idées comme une autre.

    Très lourd ? T sur 1 286 ?
    Si je suis ta technique, ca voudrait dire que je devrais adapter une structure comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    JScrollPane 
           JPanel 
              panelIntermediaire1
                JPanel1 
                     Component1_1 
                     Component1_2 
                     Component1_3 
              panelIntermediaire2
                JPanel2 
                     Component2_1 
                     Component2_2 
                     Component2_3
    Mais je trouve pas ca tres optimal...

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Le BoxLayout ira tres bien pour ton cas normalement. Lis le tutorial de Sun a ce sujet : http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html

    Et notamment les sections http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html#filler et http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html#size

    Le BoxLayout est un excellent layout trop peu utilise je trouve. Je l'aime bien notamment parce qu'il est l'un des rares a faire attention a getMaximumSize() sur les composants.

    Une technique efficace avec un BoxLayout est de placer tes composants et de finir en ajoutant une Box.createVerticalGlue() qui va prendre tout l'espace disponible en bas. Pour la largeur des composants tu peux souvent te contenter d'un setMaximumSize(getPreferredSize()) sur chaque composant.
    Romain Guy
    Android - Mon livre - Mon blog

  14. #14
    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
    Je vais regarder ca et essayer de faire quelque chose avec ce BoxLayout, merci

  15. #15
    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
    Tu avais raison gfx, je peut faire tout ce que je veut avec un BoxLayout

    Merci à tous ceux qui m'ont aidé

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

Discussions similaires

  1. Problème avec layout en SWT
    Par talkhor dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/08/2007, 17h25
  2. [Struts-Layout] problème avec layout:collection
    Par khayri dans le forum Struts 1
    Réponses: 4
    Dernier message: 31/05/2007, 13h28
  3. problème avec layout:menu
    Par khayri dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/04/2007, 19h17
  4. [Struts-Layout] problème avec layout:datagrid
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/04/2007, 09h31
  5. [JScrollPane] Problème avec la taille du composant interne
    Par wikers dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/09/2005, 15h03

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