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 :

Méthode getSize() qui ne marche pas


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut Méthode getSize() qui ne marche pas
    Salut, j'ai une interface utilisant diversz Component (JPanel, JTextPane ect..)
    Je les place à l'aide de divers layout. Et ainsi les composant ce redimensionne en fonction de la taille de la fenetre principale (ce qui est tout de même bien pratique )

    Or, j'aurais besoin de récupérer la taille de mes JTextPane (vu que c'est dynamique, je ne les connais pas). Et voila le problème, les methode getWidth, getHeight, getSize, getBounds etc.. me renvoie toute 0 comme valeur. Et ceci est apparament aussi valable pour mes JPanel et autres composant.

    Donc question, comment je peux reussir à récupérer la taille de mes composant dynamiquement ?

    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    Moi je vois une solution... Assez barbare mais je ne vois que ca pour le moment.

    Tu les calcules! A partir des données arithmetiques et des pourcentages dans les layout y a toujours moyen de retrouver les tailles. Parceque apres je ne vois pas trop comment tu pourrai faire autrement. Parcequ'en effet avec le GridBag layout (layout que j'utilise a 99% du temps) tu donne en (0,0). parceque c'est lui qui prend tout en charge. Mais lui ne connait aucune taille. Il marche uniquement en pourcentage. Alors a mon avis tu dois prendre avec la taille de ta fenetre et puis en déduire le reste...

    Enfin perso je ne vois que ca et j'espere qu'il existe autre chose que je ne connais pas.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    J'avais bien pensé à cette solution, mais effectivement c'est assez barbare ^^. En plus, c'est quand même idiot d'avoir des méthode de l'api qui me renvoit toujours 0...

    Je vais voir si jamais quelqu'un n'as pas une autre idée. En tout cas, merci de ta réponse spoon, ça fait plaisir que quelqu'un réponde ^^

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 89
    Par défaut
    C'est bizarre ton truc tu utilise quoi comme layout ?

    tu as essayé de faire des System.out.println pour voir si il te rendait réelement 0 ? Et fais gaffe car par exemple getSize renvoie une dimension pas un valeur.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    C'est bizarre ton truc tu utilise quoi comme layout ?
    Hum, plusieurs layout dont voici, en gros la structure :

    Un JPanel en BoxLayout Y composé de :
    - Un Jpanel en BoxLayout X
    -Un Jpanel avec un GridBagLayout composé de :
    - En fonction des cliques de l'utilisateur, des JPanel et des bouton, mais pas toujours au meme endroit et dans le même nombre. Les Jpanel dont composé d'un JPanel en BoxLayout Y composé de deux JPanel, dont le deuxieme contient un JScrollPane contenant mon JTextPane.

    Je sais, c'est pas super simple à expliquer, mais c'est la plus simple pour faire mon interface...


    tu as essayé de faire des System.out.println pour voir si il te rendait réelement 0 ?
    Oui, bien sur. Sur mon JTextPane et un peu tout les composant de mes derniers JPanel et ca me rend vraiment 0.

    Et fais gaffe car par exemple getSize renvoie une dimension pas un valeur.
    Oui, oui, je sais bien. Je faisais un getWidth ou .width ou autre en fonction de la fonction testé.

    Et je trouve aussi que c'est étrange que ces methodes me rendent une dimension de 0 de largeur et 0 de longueur.

    Pensez-vous que le fait que je tente de recupéré ces valeurs juste aprés avoir ajouté le JTextPane à mon interface puisse jouer ?

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    je m'inspire de -=Spoon=- pour te filer une idée assez barbare aussi : tu n'as qu'à récupérer les coordonnées d'un clic de souris et quand ton programme tourne tu clique aux 4 angles (oui je sais c'est bourrin mais bon...)

  7. #7
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    Euh merci bien trotters, mais ce que je veux faire c'est afficher une image dans un JTextPane, et je la redimensionne aux dimension du JTextPane, que je ne connais pas, puisque sa taille est géré dynamiquement par les layout.

    De plus je doute que ca amuse l'utilisateur de cliqué 4 fois a chaque fois qu'il veuille mettre une image ou changer la taille de la fenetre ^^'

  8. #8
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    ah oui mais là d'accord, fallait poser les conditions avant lol

  9. #9
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    lol, c'est pas faux ^^.

    Mais je t'avoue que je m'attendais pas à une solution si barbare

  10. #10
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    Donc, pas d'autre idées ?

  11. #11
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    Bon, pour ceux que ca interresserait à l'avenir, maintenant que j'utilise un bouton pour mettre l'image dans mon JTextPane, la methode getWidth sur mon JTextPane renvoie toujours 0, mais sur le JPanel qui contient le JScroolBar qui contient le JTextPane (je sais, il faut suivre..) ça me renvoie une valeur correcte.

    Je vais donc essayer de me debrouiller avec ca.

  12. #12
    Membre expérimenté
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Par défaut
    J'aimerais bien savoir ou tu places tes getSize, getHeight, ect ... Car moi ca fait des années que je fait des IHM en Java et je n'ai jamais eu de pb avec ces méthodes. Tu a peut être un pb de de conception ou de compréhension quelque part

  13. #13
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    En fait, voila ce qu'il se passe :

    J'ai une interface avec des JTextPane positionner dans des JScrollBar, positionner dans un JPanel à l'aide d'un GridBagLayout.
    Lors d'un clique sur un bouton particulier, je met une image dans le JTextPane, et je voudrais que cette image prenne la dimension du JTextPane, en la redimansionnant par getScaledInstance().

    Seulement, la modification de ce bouton ne se contente pas à ca et modifie aussi la structure de donné en changeant le type d'un objet pour lui dire qu'il est maintenant un objet qui n'affiche plus du texte sous un certain format, mais une image.

    Donc lorsque j'utilise l'un de ses boutons, le plus simple était de modifier la structure, supprimer les éléments affiché et reafficher le tout avec la nouvelle structure de données. (Je sais pas si je suis trés clair...)

    Et c'est donc pour ca que le getWidth ne marche pas, car je l'utilise avant le nouvel affichage des composants et leurs gestion par le layout.

    Je devrais pouvoir regler ca lors de l'appui sur le bouton, mais pas lors de l'affichage d'une structure préexistante.

    Enfin, je vais me débrouiller [/code]

  14. #14
    Membre expérimenté
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Par défaut
    En fait tu te prend la tête pour peu. tu n'as besoin de dimensionner l'image qu'au moment de l'affichage.
    Par exemple pour ton image tu peux utiliser une classe qui ressembel à :
    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
     
    import javax.swing.*;
    import java.awt.*;
    public class LabelImage extends JLabel
    {
        private Image image;
        public LabelImage(Image image)
        {
            this.image = image;
        }
        protected void paintComponent(Graphics g)
        {
              g.drawImage(this.image,0,0,this.getWidth(),this.getHeight(),this);
         }
    }
    Et voila l'image prendras à tout moment extement la taille du composant LabelImage, il te suffit alors de remplacer dans ton JPanel ton JTextArea par un LabelImage, un petît revalidate et zou, c'est réglé.
    Remarque : au moment du paintComponent, il a déja réservé l'emplacement pour le composant, il en connais donc la taille.

  15. #15
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    Oui, j'avais deja pensé à ca.
    Et crois bien que si je pouvais faire ca, je l'aurais fais, mais je dois garder un JTextPane pour pouvoir permettre à l'utilisateur de rajouter un peu partout autour de l'image. C'est pourquoi le JTextPane était tout indiqué.
    De plus ca donne une certaine cohérence au niveau graphique avec les autres JTextPane .

    Mais bon, si jamais je trouve pas de moyen simple, je finirais par adopter ta solution.

    Je me laisse encore un peu de temps pour trouver ^^

  16. #16
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Par défaut
    Bon, aprés réflexion, je pense que t'as raison, je devrais pouvoir m'en sortir en utilisant un JLable et quelques aménagements.

    A force de tripoter dans son code en fini par plus avoir de vision d'ensemble.


    Merci à toi de m'avoir remis dans le droit chemin

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

Discussions similaires

  1. Méthode ondblclick qui ne marche pas oO
    Par kelaan dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 18/02/2011, 12h30
  2. [JDOM] Une méthode qui ne marche pas
    Par kaninama dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 24/05/2006, 16h10
  3. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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