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

Agents de placement/Fenêtres Java Discussion :

JScrollPane et redimensionnement de la JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut JScrollPane et redimensionnement de la JFrame
    Bonjour à tous

    Pour mon application j'ai besoin de redimensionner un JScrollPane qui contient un JPanel. Pour cela je fais donc appel à la méthode setSize de JScrollPane. Jusque-là tout va bien, le scroll pane est bien redimensionné.

    Seulement lorsque je redimensionne ma fenêtre (JFrame) par exemple, la JScrollPane se redimensionne pour prendre tout l'écran, ce que je ne lui ai pas demandé.

    Voici la hiérarchie des composants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    contentPane de la JFrame (BorderLayout)
       |--- JScrollPane (BorderLayout.CENTER)
       |--- JPanel (ma barre de statut, en BorderLayout.PAGE_END)
    Savez-vous comment je peux éviter ce comportement ? (sachant que même lorsque je modifie le texte d'un JLabel situé dans la barre de statut ça redimensionne la JScrollPane pour lui faire prendre tout la fenêtre)

    PS : J'ai aussi essayé avec setPreferredSize sur le JScrollPane à la place de setSize mais ça ne marche pas

    Merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En même temps le CENTER d'un BorderLayout est prévu pour occuper tout l'espace disponible au niveau de l'interface. Or tu as mis ton JScrollPane dans le CENTER de ton BorderLayout. Donc il prend tout l'espace disponible CQFD

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Ahhhh pas bête^^

    Mais dans ce cas comment est-ce que je pourrais faire pour pouvoir mettre une toolbox en haut, une barre de statut en bas, et mon scrollpane au milieu, tout ça sans BorderLayout ?

    Parce que je viens de tester, si je garde mon BorderLayout et que je mets mon scrollpane dans un JPanel que je place en CENTER, ça va pas non plus : le scrollpane bouge pour se retrouver au milieu

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu as une partie de la réponse:
    Etapes:


    1. Garder ton BordserLayout, il est parfait pour ce que tu cherches à faire
    2. Utiliser un JPanel dans le center de ton BOrderLayout
    3. Utiliser le Layout de ta convenance sur ce JPanel afin de pouvoir correctement placer les composants qui forment le contenu de ton GUI

    Bon ensuite ne visualisant pas exactement ce que tu cherches à faire je ne peux pas trop te conseiller sur le layout à utiliser.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Pour être plus clair j'ai pris des screenshots. Tout d'abord voila ce que j'aimerais avoir (et que j'ai tant que la JFrame ne me redimensionne pas tout) :



    Ensuite voila ce que j'ai, lorsque ma JFrame fait sa modif', en mettant en CENTER un JPanel. Ce JPanel a un FlowLayout. Ca ne va pas car le JPanel se met au milieu :


    Ne connaissant pas trop les layouts, j'ai été faire un tour sur cette page, mais à première vue aucun ne semblerait convenir

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par TheDoci Voir le message
    Ce JPanel a un FlowLayout.
    Il faudrait avoir le code correspondant ou l'arborescence complète des composants. Chaque composant est positionné selon le layout de son parent.

    Si comme je le pense tu as bien ceci : JScrollPane -> JPanel -> Image
    • Le JScrollPane prend le maximum de place (le contentPane de la fenêtre à un BorderLayout.Center).
    • Le JPanel prendra toute la place du JScrollPane. Si ce dernier est trop petit les scrollbar apparaissent.
    • Les composants à l'intérieur du JPanel sont positionné par rapport au FlowLayout, donc les un à la suite des autres. Mais par défaut le FlowLayout centre les composants si l'espace vertical est plus grand que nécessaire.


    Dans ce cas la solution est de forcer le JPanel à aligner à gauche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JPanel(new FlowLayout(FlowLayout.LEFT));
    a++

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    salut

    Au tout début j'avais fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ContentPane (BorderLayout)
       |--- JToolBar (BorderLayout.TOP)
       |--- JScrollPane (situé en BorderLayout.CENTER)
                  |--- JPanel (qui ne contient pas d'images mais dessine des formes. Il n'a pas de layout)
       |--- JPanel (ma barre de statut, en BorderLayout.PAGE_END)
    J'ai découvert le FlowLayout.LEFT un peu avant que tu ne postes. Suite au post de sinok j'ai modifié le code pour avoir la structure suivante, mais ça ne marche pas, car cette fois c'est le JPanel qui contient la jscrollpane qui se met au centre (je pensais que le JPanel s'étendrait sur toute la fenêtre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ContentPane (BorderLayout)
       |--- JToolBar (BorderLayout.TOP)
       |--- JPanel (situé en BorderLayout.CENTER. Contient un layout FlowLayout.LEFT)
                  |--- JScrollPane
                               |--- JPanel (qui ne contient pas d'images mais dessine des formes)
       |--- JPanel (ma barre de statut, en BorderLayout.PAGE_END)

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    La première arborescence est très bien.

    Du coup il faudrait voir le code de ton JPanel "qui ne contient pas d'images mais dessine des formes"...

    a++

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Elle semble bien mais comme l'a dit sinok c'est normal que le JScrollPane se remette centré vu qu'il est en BorderLayout.CENTER.

    Je pense pas que ça vienne du JPanel contenu à l'intérieur du JScrollPane car a priori il ne peut pas intervenir dans le centrage du JScrollPane (et le code est très long, donc pas vraiment montrable). Quant à l'affichage de formes, tout se fait dans la méthode paintComponent.

    Je pense que c'est juste une histoire de layouts au niveau du contentPane. Mais comment le régler, c'est une autre histoire

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par TheDoci Voir le message
    Elle semble bien mais comme l'a dit sinok c'est normal que le JScrollPane se remette centré vu qu'il est en BorderLayout.CENTER.
    BorderLayout.CENTER ne signifie en aucun cas que le composant sera centré, mais uniquement qu'il prendra toute la place au centre de la fenêtre...

    a++

Discussions similaires

  1. redimensionnement de mon jframe
    Par remy85 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 13/06/2007, 22h01
  2. Redimensionnement d'une jFrame
    Par fred978 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 02/09/2006, 16h19
  3. [JFrame] Redimensionnement et Drag Mode
    Par Quentin dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 01/12/2004, 23h12
  4. Interdire de redimensionner une JFrame
    Par java_math dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/06/2004, 13h59
  5. [JFrame][JScrollPane] rafraichissement
    Par iuz dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 14/05/2004, 11h08

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