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 :

recuperer size max d'une JLabel


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut recuperer size max d'une JLabel
    bonjour

    Voila j ai un JPanel diviser en 2 avec un BoxLayout en X_AXIS, j mets une JLabel a gauche et une autre a droite alors moi j voudrai que la taille de JLabel qui est a gauche soit la meme qlq soit son contenu sachant que son contenu change selon des conditions, et sachant que j ai pas fait un setSize
    Comment j pourrai récupérer size max pour l affecter a ttes les JLabel?

    merci

  2. #2
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    lu,

    je pense que tu dois pouvoir t'en sortir avec les méthodes de la classe Component : setMaximumSize(Dimension maximumSize), setMinimumSize(Dimension minimumSize) & setPreferredSize(Dimension preferredSize) et les getters associés.

  3. #3
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    merci xixi31

    par exemple on a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JLabel label=new JLabel("quelque chose");
    supposons que la taille de label est la plus grande alors est ce qu il n y a pas un moyen de recuperer cette taille est l affecter a d autres JLabel?

    le probleme cest qd j mets il retourne width=0 et height=0

    merci

  4. #4
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    A quel moment fais-tu appel à getSize() ??

    fais voir le code d'une classe éxécutable pour y jeter un coup d'oeil.

  5. #5
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    j fais appel a getSize après que j ajoute label au panel.

    j crois qu un getSize() va retourner tjrs un width=0 et un height=0 si on fait pas un setSize(nbre) avant.

    alors j sais pas comment recuperer la taille!!!

  6. #6
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    lorsque tu as ajouté ton JLabel au panel, ca semble normal que sa taille ne soit pas décidée. Lorsque ton label sera affichée, par contre, la taille sera initialisée.

    tu disposes des méthodes getPreferredSize et setPreferredSize pour agir sur la taille de ton composant.

    Si tu veux bloquer ton composant à une taille fixe, alors tu peux créer une dimension qui te convient. puis initialiser la taille pref, min & max avec cette dimension. de cette façon, ton composant ne pourra pas se redimensionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        JLabel label = new JLabel();
        Dimension dim = new Dimension(200, 200);
        label.setMaximumSize(dim);
        label.setMinimumSize(dim);
        label.setPreferredSize(dim);
    je ne suis d'ailleurs pas sur que le dernier appel soit nécessaire. En théorie, non.

    Je sais pas si j'ai pu t'aider.

    Il faudrait que tu fournisses un truc éxécutable pour qu'on puisse exactement t'aiguiller la ou il faut.

  7. #7
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    merci xixi31

    ben j avais deja pensé a cette solution celle de fixé la taille du label avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label.setPreferredSize(new Dimension(60,20));
    mais j disais que peut etre j pourrais recuperer la taille max d un label et l affecter aux autres, et puisque y a pas cette autre solution j vais revenir a ma solution de depart

    merci encore une fois

  8. #8
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    mais j disais que peut etre j pourrais recuperer la taille max d un label et l affecter aux autres, et puisque y a pas cette autre solution j vais revenir a ma solution de depart
    J'ai pas du être très clair...

    tu peux récupérer la taille max d'un label via "Dimension getMaximumSize()". rien ne t'empeche d'utiliser l'objet Dimension retourné pour fixer la taille max d'autres label via "setMaximumSize(Dimension dimension)"...

    comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
                JLabel label1 = new JLabel("a1");
                JLabel label2 = new JLabel("a2");
                
                Dimension dimension = new Dimension(60, 20);
                
                label1.setMaximumSize(dimension);
                label2.setMaximumSize(label1.getMaximumSize());

  9. #9
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    j crois que j m suis mal exprimé

    voila supposons qu on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JLabel label1=new JLabel("qlq chose");
    JLabel label2=new JLabel("blabla");
    JLabel label3=new JLabel("hello");
    alors et sans faire un setMaximumSize(dimension); pour ces JLabel j voudrai recuperer la taille de chaque label

    et puis faire appel a setPreferredSize(ici j met la taille la plus grande des tailles trouvées pour ces JLabel) pour donner une taille fixe a ts les label

    est ce qu il y a un moyen de faire ça ou non.?

    merci

  10. #10
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    en aucun cas, l'apel au setPreferredSize ne te fixera la taille de tes labels

  11. #11
    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,

    si tu veux prévoir la taille des composants sans les afficher, il faut au moins ajouter tout les composants dans une JFrame et appeler pack() sur cette JFrame.

    Sinon, tu peux aussi ajouter ces composants dans un JPanel, lui affecter une taille, puis appeler validate() sur le JPanel. Si je ne me trompe pas, ça devrait forcer le layout, même si les composants ne sont pas visibles.
    "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.

  12. #12
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Autre solution potentielle: utiliser getStringBounds.

    Par exemple, faire un panel avec ça :
    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
     
    public void paintComponent(Graphics g){
            super.paintComponents(g);
            Graphics2D g2d = (Graphics2D) g;
     
            String message = "test de taille";
     
            Font f = new Font("Arial Black", Font.ITALIC, 12);
            g2d.setFont(f);
     
            // mesure le message
     
            FontRenderContext context = g2d.getFontRenderContext();
            Rectangle2D bounds = f.getStringBounds(message, context);
     
            // Affichage
     
            g2d.drawString(message, 10 , (int) bounds.getHeight());
     
            Rectangle2D rect = new Rectangle2D.Double(10 ,0, bounds.getWidth(),bounds.getHeight());
            g2d.draw(rect);
            g2d.drawString("Hauteur de la chaine : " + bounds.getHeight() + ", largeur : " + bounds.getWidth(), 10 , (int)  (2 * bounds.getHeight()) );
     
        }
    Maintenant, tu parlais d'un label, mais bon tu peux avoir la taille de ta chaîne là.

  13. #13
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    bonjour

    jcrois que j ai trouvé la soulution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JLabel label1=new JLabel("qlq chose");
    JLabel label2=new JLabel("blabla");
    JLabel label3=new JLabel("hello");
    j ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dimension dim=label1.getPreferredSize();
    la j suppose que la dimension de label1 est la plus grande
    (avant j faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dimension dim=label1.getSize();
    et ça donnait tjrs une taille nulle, mais avec getPreferredSize ça donne la taille du label)

    ensuite j affecte cette taille aux autres labels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    label2.setPreferredSize(dim);
    label3.setPreferredSize(dim);

  14. #14
    Membre éprouvé Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Par défaut
    Je ne pense pas qu'un composant a toujours sa "PreferredSize", par exemple si l'utilisateur redimensionne la fenêtre et que le composant est redimensionné en conséquence, sa PreferredSize ne change pas, contrairement à sa taille (size)

    Ce n'est que si tu appelle la méthode pack() que les composants prenne leur taille préférée...

    Seule le méthode getSize retourne réellement la taille du composant. GetPreferredSize() retourne seulement des valeurs stockés dans un objet Dimension. Si un composant est redimensionné, les valeurs de PreferredSize ne changeront pas et ne représenteront donc pas la vraie taille de ton composant.

    Es-tu sûr que la méthode getSize() retourne null?

    Montre-nous ton code que l'on puisse t'aider au mieux

  15. #15
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    oui getSize() retourne width=0 et height=0
    ben moi j ai fait la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JLabel lab=new JLabel("100");
    lab.setFont(new Font("Arial",Font.BOLD,50);
    Dimension dim=lab.getPreferredSize();
    puis j ai affecté dim aux autres labels sachant que le texte de ces labels va de 1 jusqu à 30

    a la fin j ai ajouté ces labels a mon panel sans ajouter le JLabel lab que j l ai créé que pour recuperer sa preferredSize

    qd j fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(lab.getSize());
    il retourne width=0 et height=0;

  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
    Bon, petit récapitulatif (je peux me tromper, mais pas de beaucoup) :

    - à la construction, le JLabel ne connaît que son texte et son icone.
    - si on appelle getPreferredSize sans faire de setPreferredSize, il va calculer (en fonction du texte et de l'icône) sa taille préférée, puis la retourner. Idem pour minimumSize et maximumSize.
    - si on appelle getSize, il retourne (0, 0).

    - Lors de l'ajout du JLabel dans un composant, rien ne change.
    - lors du layout, le layoutManager consulte les tailles minimum/préférées/maximum du JLabel, et en fonction des contraintes et de sa politique, affecte une taille (setSize) et une position.
    - C'est à ce moment là que getSize retournera la taille réelle du composant, pas forcément égale à la préférée, pas forcément comprise entre la minimum et la maximum (on peut faire des layouts qui s'en fichent complètement, mais c'est pas propre).
    - au moindre redimensionnement, le layout recalculera la taille du JLabel en fonction des tailles minimum/préférée/maximum et des contraintes.

    En espérant avoir été utile et ne pas m'être trompé.
    "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 éprouvé Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Par défaut
    ben c'est normal, lorsque tu créé un nouveau JLabel, il n'a pas encore de taille par contre il a bien une preferredSize. Ce n'est qu'en faisant pack() ou setSize() qu'il a une taille.

    Si tu appelles la méthode getSize() après avoir fait appel à la méthode pack(), tu auras la vraie taille et non plus 0,0

    J'ai fait une petite application pour te montrer que c'est mauvais de faire getPreferredSize() pour voir quelle taille à ton composant.

    Lancer l'application

  18. #18
    Membre confirmé Avatar de ferrero
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 75
    Par défaut
    merci

    alors mnt ce que j dois faire c est un pack(); et puis apres j fais appel a getSize();

    j vais voir ça

    merci encore une fois

  19. #19
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    génial, BoudBoulMan, tu sors des applics jnlp à la volée...

  20. #20
    Membre éprouvé Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Par défaut
    Citation Envoyé par xixi31
    génial, BoudBoulMan, tu sors des applics jnlp à la volée...
    Maintenant que j'arrive à déployer une appli avec Web Start, je ne m'en prive pas

Discussions similaires

  1. [MySQL, PostGreSQL] Récupérer les max sur une jointure
    Par genova dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/12/2017, 15h25
  2. Réponses: 4
    Dernier message: 22/03/2010, 21h24
  3. Recuperer l'adresse d'une valeur (Max d'une plage définie)
    Par karim19 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 30/10/2009, 12h32
  4. recuperer la valeur d une fonction Max avec jdbc
    Par mitnick2006 dans le forum JDBC
    Réponses: 2
    Dernier message: 09/05/2008, 11h17
  5. Recuperer les max des dates à partir d'une autre table
    Par inabil dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/11/2006, 15h19

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