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 :

[Débutant] JScrollpane et largeur.


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut [Débutant] JScrollpane et largeur.
    Bonjour,

    J'ai encore un soucis avec JScrollPane (C'est une grande histoire d'amour entre nous).

    J'ai un JPanel (en BoxLayout) qui contient des informations texteset qui contient un autre panel (en FlowLayout) qui lui doit afficher une liste de nom de personne. Cette liste peut passer de 10 à ....1000 personnes (en fait il n'y a aucune limite).

    Donc je ne peut pas lui affecter de taille par un set preffered size().

    Le problème est que j'aimerais que lorsque j'insère ce panel dans mon JScollPane (en faisant new JScrollpane (JPanel (en BoxLayout))) ) il s'étend verticalement et non horizontalement.

    Je suis clair ?

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    Citation Envoyé par jbwan
    J'ai un JPanel (en BoxLayout)
    Il vaut mieux utiliser une Box en l'appelant ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Box monExJPanel = Box.createVerticalBox();
    C'est ce que tu cherchais ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  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
    Par défaut
    Tu n'as pas besoin d'affecter la preferredSize de ton panel.
    Affectes juste celle de ton JScrollPane à la taille voulue...

  4. #4
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Tu n'as pas besoin d'affecter la preferredSize de ton panel.
    Affectes juste celle de ton JScrollPane à la taille voulue...
    C'est aussi ce que je pensait, mais dans ce cas il me mets une barre de scroll horizontale et je veux que le scroll soit vertical.

    Pour les box je ne comprend pas trop l'utilisation, auriez vous un brin de documentation s'il vous plait ?

    (Google ne m'as pas vraiment aidé là...)

  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
    Citation Envoyé par jbwan
    C'est aussi ce que je pensait, mais dans ce cas il me mets une barre de scroll horizontale et je veux que le scroll soit vertical.
    La position de ta scrollbar dépend des dimensions de ton panel...
    Si ton panel est plus "haut" que ton JScrollPane, tu auras les barres verticales.
    Si ton panel est plus "large" que ton JScrollPane, tu auras les barres horizontales.

    Ton problème doit venir de la construction de ton JPanel...
    Tu dois placer tes composants les uns en dessous des autres et nonpas les uns à côté des autres.

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Le problème vient du fait que j'insère un JPanel avec a l'intérieur de celui ci un autre JPanel (en FlowLayout) qui contient la liste des nom de personne.


    Lorsque j'affecte une taille préférrée au premier JPanel le Flow layout du second renvoie bien à la ligne. Mais la taille préférrée ne me convient pas étant donné que mon nombre de personne et donc la taille occupée est extrêmement variable.

    Il faut donc que je supprme cette taille préférée, et que j'utilise un JScrollPane.

    Donc j'ajoute mon Panel (le premier) à mon JScrollPane en lui affectant une preferred size, sauf que le JPanel (en FLowlayout) lui ne revient plus à la ligne .

    D'après la doc technique c'est normal, sauf que moi je veux qu'il revienne à la ligne (ce vilain). Quelqu'un à une idée ?

    Je vais regarder du coté de SWT qui apparemment lui gère ce problème.

  7. #7
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Avec les Box, il suffit de regarder l'API, et pour les utiliser, de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Box box = Box.createVerticalBox();
    box.add(new JLabel("Jean Dupont"));
    box.add(new JLabel("Ablert Einstein));
    ...
     
    monJScrollPane.setViewPortView(box);
    Pour un affichage vertical de composants aussi simples, il y a aussi la JList qui permet d'ajouter et de retirer des éléments plus efficacement. Mais pour des composants plus complexes (avec boutons, ou autres), une verticalBox est très bien.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  8. #8
    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
    Je ne connais pas les Box (et j'imagine que ça doit être la meilleure solution), mais au pire, utilise un GridLayout avec une seule colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GridLayout(int rows, int cols, int hgap, int vgap)
    avec cols = 1

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par seiryujay
    Je ne connais pas les Box (et j'imagine que ça doit être la meilleure solution), mais au pire, utilise un GridLayout avec une seule colonne :
    C'est pareil sauf que ça respecte la preferredSize, et ça permet de mettre des espaces fixes (box.add(Box.createVerticalStrut(30));) et flexibles (box.add(Box.createVerticalGlue());).

    Un composant de référence que peu de monde connaît à cause du JPanel, mais le BoxLayout ne peut pas s'utiliser dans un JPanel.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  10. #10
    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
    Ok, merci pour les infos!

  11. #11
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Le problème reste le même je vous donne mon code je doit avoir fait une bétise :

    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
    private void initRepartition3() {
    	Box toutRepartition = Box.createVerticalBox();
    	for(int i =1;i<4;i++)
    	{
    		if (instance.caHasData(i))
    		{
    			for(int j =1;j<5;j++)
    			{
    				if (instance.uaHasData(i,j))
    				{
    					for(int k =1;k<4;k++)
    					{
    						if (instance.tHasData(i,j,k))
    						{
    							JPanel axeTCont = new JPanel();
    							FlowLayout layoutaxeTCont  = new FlowLayout();
    							axeTCont.setLayout(layoutaxeTCont );
    							Iterator it = ((AbstractList) instance.getListeStereotype(i,j,k)).iterator ( ) ;
    							while ( it.hasNext() ) {
    								JLabel fils = new JLabel((String) it.next());
    								fils.setFont(instance.getMoteur().quelPolice("F_liste_eleve_stereo"));
    								axeTCont.add(fils);
    							}
    							toutRepartition.add(axeTCont);
    						}
    					}
    				}
    			}						
    		}
    	}		
    	repartition= new JScrollPane();
    	repartition.setViewportView(toutRepartition);
    	repartition.setPreferredSize(new Dimension(800, 800));
    }

  12. #12
    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
    Je pense que tu n'as pas bien saisi...
    Le FlowLayout te permet de positionner tes composants les uns à la suite des autres...
    Actuellement, tu crées une VerticalBox dans laquelle tu ajoutes un panel dans lequel tu places tes composants les uns à la suite des autres HORIZONTALEMENT!

    Dans la Box créée, tu n'ajoutes qu'un seul panel alors que c'est dans la Box que tu devrais ajouter tes labels (sans utiliser de panel).

  13. #13
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Le FlowLayout te permet de positionner tes composants les uns à la suite des autres...
    Oui et en allant à la ligne s'il dépasse la largeur préférée du composant à qui il appartient.

    mais ici celà ne fonctionne pas, et c'est logique d'un certain point de vue car je n'ai (et ne peut) pas spécifié de preferred size au panel.

    Pour info j'ai trouvé une solution en swt (rowdata + .width = ...) donc je passe toute mon appli en swt ...

    Mais j'aurais préféré Swing ...

    Ce qu'il me manque ici c'est un composant à qui ont peut spécifié une largeur sans une hauteur...

    Et je ne crois pas que ce là existe en Swing...

  14. #14
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par jbwan
    Ce qu'il me manque ici c'est un composant à qui ont peut spécifié une largeur sans une hauteur...
    As tu essayé setMaximumSize(cequetuveux, Integer.MAX_VALUE); ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  15. #15
    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
    Est-ce que tu lis les réponses que l'on te donne???

    1) Je t'ai conseillé le GridLayout en fixant ton nombre de colonne à 1
    Tu crées un panel auquel tu fixes ce GidLayout et tu ajoutes tes composants à ton panel
    => tu auras un seul label par ligne dans ton panel!

    2) Les Box en mettant tes labels directement dans la Box et pas dans un panel que tu ajoutes à ta Box. (mais ça j'ai pas testé, donc à vérifier)

    Après, si tu ne veux pas utiliser nos réponses, c'est toi qui vois...

  16. #16
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par seiryujay
    Est-ce que tu lis les réponses que l'on te donne???
    J'ai l'impression qu'en fait il ne veut pas les arranger verticalement, mais plutôt comme les mots dans un texte : horizontalement tant qu'il y a de la place, et revenir à la ligne sinon, et que c'est nous qui ne lisons pas les questions qu'on nous pose ...

    jbwan : avant de porter toute une interface en swt, ça vaut le coup de chercher encore un peu. On piétine parce qu'on ne voit pas ce que tu veux vraiment comme rendu graphique.

    Tu pourrais nous décrire à quoi ça doit ressembler ? Ou faire un dessin ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  17. #17
    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
    Citation Envoyé par xavlours
    J'ai l'impression qu'en fait il ne veut pas les arranger verticalement, mais plutôt comme les mots dans un texte : horizontalement tant qu'il y a de la place, et revenir à la ligne sinon, et que c'est nous qui ne lisons pas les questions qu'on nous pose ...
    Ok, auquel cas je suis un boulet
    Mais la solution du GridLayout peut encore fonctionner s'il met un nombre de colonnes n...
    Il peut spécifier la taille des labels et laisser son JPanel s'adapter...

  18. #18
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Le grid layout j'ai testé et celà n'a pas fonctionné la scrolhorizontale revient (sauf si je mets un setpreferred size ...)


    Pour le mazimum size j'ai testé
    axeTCont.setMaximumSize(new Dimension(200, Integer.MAX_VALUE));
    Résultat : il n'est pas pris en compte ...

    Voilà le tableau à afficher ... Mon problème se situe a CA3 ua3 T2.



    En tout cas merci de votre aide, et je vous assure que je teste tout (j'ai dailleur trois projets quasi identique sur eclipse pour tester les box, les tables et les layout ^^ )


    Par contre pour simplifier l'interface je test un affichage comme ceci

    CA x, UA x, T x

    Liste des élèves

  19. #19
    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
    En fait, en CA3 UA3 T2, tu voudrais avoir une seule ligne (pour avoir une case de la même hauteur que les autres), contenant x labels en ligne (x variant suivant la taille des noms) et sur y lignes.
    J'ai bien compris?

    Et si au lieu d'utiliser un JPanel dans lequel tu mets des JLabel, pourquoi tu n'utiliserai pas un champs texte non éditable?
    Tu fixes ton nombre de colonnes de manière à ce que ça fasse la largeur que tu souhaites, et tu écris le nom de tous les élèves à l'intérieur.
    Pour ce qui est du nombre de lignes, tu dois pouvoir l'ajuster au fur et à mesure avec la méthode setRows() je pense...
    Au pire, tu fixes un nombre de lignes aléatoirement au départ et tu adaptes à la fin. Ca doit être faisable...

  20. #20
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Non l'image représente la maquette graphique de ce que je voudrait faire.

    En gros je veux que lorsqu'il y a beaucoup d'élève dans une catégorie, que leurs noms soient sur deux (ou plusieurs) lignes.

    Je ne peut pas utiliser un champs texte non éditable car les nom sont en fait des boutons qui ouvrent la fenetre de l'évalutation perso de l'élève. Sinon c'est clair que ta solution serais la bonne (je vais la conserver au cas où ^^ ). Je me demande même si je ne vais pas finir par limiter les interraction dans le logiciel, et l'appliquer ... Domage pour les utilisateurs...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/11/2012, 15h13
  2. [Débutant] JScrollPane centré
    Par tomburn dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 17/06/2005, 10h25
  3. [débutant] taille d'un JScrollPane
    Par Benoit_Durand dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 07/04/2005, 10h15
  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. [Débutant] Jframe/JInternalFrame: prb avec JScrollPane
    Par flzox dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/12/2004, 00h08

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