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

Composants Java Discussion :

Modifier la dimension d'un tooltip


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Par défaut Modifier la dimension d'un tooltip
    Bonjour à tous,

    je cherche à modifier la dimension de mon tooltip car à l'affichage il "déborde" de mon application.

    J'ai surchargé la méthode createTooltip, mais la taille reste inchangée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /**
       * {@inheritDoc}
       */
      @Override
      public JToolTip createToolTip()
      {
        JToolTip tooltip = new JToolTip();
        tooltip.setMaximumSize(new Dimension(200, 200));
        tooltip.setPreferredSize(new Dimension(200, 200));
        tooltip.repaint();
        return tooltip;
      }
    Quelqu'un aurait une idée?

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



    Déjà le repaint() est inutile (le composant n'est pas encore affiché, donc inutile de le redessiner). Ensuite il faudrait associer le Tooltip à ton composant (ou utiliser super.createToolTip() pour créer le tooltip au lieu de faire un new JToolTip()).


    Mais... ton code marche !!!

    Il faudrait que tu détailles ta configuration (version de Java, système d'eploitation, LookAndFeel utilisé, ...) et que tu donnes un code minimal compilable qui reproduise le problème.



    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Par défaut
    Bon si mon code doit fonctionner c'est déjà ça, cela dit à l'heure actuel j'ai un tooltip qui fait la largeur de mon écran et donc qui est tronqué car le tip text est plus grand que la largeur de l'écran (1280*1024).

    Je travaille en Java 6, sous XP.

    J'ai oublié de préciser que je travaille sur une cellule de JTable
    Coté code j'ai 2 renderers:
    • Un renderer par defaut pour les labels de cellules dans lequel je surcharge la méthode createTooltip
      Il étend JLabel et implémente TableCellRenderer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /**
       * {@inheritDoc}
       */
      @Override
      public JToolTip createToolTip()
      {
        JToolTip tooltip = super.createToolTip();
        tooltip.setMaximumSize(new Dimension(200, 200));
        tooltip.setPreferredSize(new Dimension(200, 200));
        return tooltip;
      }
    • Un renderer pour le texte de ma cellule qui étend le 1er
      C'est dans celui là que je créé le tooltip
      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
       
          String textToprocess = "TRES LONGUE CHAINE DE CARACTERES ...";
          FontMetrics fontMetrics = getFontMetrics(getFont());
          if (!StringUtil.isEmptyString(textToprocess))
          {
            int cellWidth = table.getCellRect(row, column, false).width;
            cellWidth -= getBorderMargin();
            if (fontMetrics.stringWidth(textToprocess) > cellWidth)
            {
              setToolTipText(textToprocess);
            }
            else
            {
              setToolTipText(null);
            }
           }


    Quelqu'un a une idée?

  4. #4
    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 Goupsy Voir le message
    J'ai oublié de préciser que je travaille sur une cellule de JTable
    Coté code j'ai 2 renderers:
    Tu as ta réponse ! Les renderers des JTables ne sont pas de vrais composant, dans le sens où il ne sont pas réellement ajouté à la fenêtre comme de vrai composant. Pour des raisons de performance c'est la JTable qui simule cela.

    Du coup ta méthode createTooltip() n'est jamais appelée. C'est celle de la classe JTable qui est utilisée !


    Citation Envoyé par Goupsy Voir le message
    Un renderer par defaut pour les labels de cellules dans lequel je surcharge la méthode createTooltip
    Il étend JLabel et implémente TableCellRenderer
    Un conseil : hérites directement de DefaultTableCellRenderer (quitte à modifier son apparence dans le constructeur). Cette classe hérite aussi de JLabel mais elle réimplémente une série de méthode pour des raisons de performances...


    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 72
    Par défaut
    Merci adiGuba,

    il faut donc que je surcharge la méthode dans la bonne table! Je m'explique: J'ai ma table qui hérite d'une table parente, qui hérite elle-même d'un JPanel.

    J'ai essayé de redéfinir createTooltip dans ma table, mais ça n'a pas fonctionné...

    Merci aussi pour le conseil!

  6. #6
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    Salut Goupsy,
    T'as résolu ton problème ?
    Je voudrais aussi vers des tooltips spécifiques pour une colonne.
    As-tu essayer de surcharger la méthode public String getToolTipText(MouseEvent event) de ta table ?

  7. #7
    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
    Il te faudra faire un renderer spécifique et l'appliquer à ta colonne comme indiqué dans la doc...
    http://docs.oracle.com/javase/tutori...ml#celltooltip

  8. #8
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    Connaissais pas ce tuto, mais bon, là je suis déjà arrivé.
    Par contre, on reste toujours ici dans la notion d'un JTooltip dont on contrôle le texte. Mon objectif serait d'avoir pour une colonne particulière un tooltip tout-à-fait différent, avec plus de contenu.
    Là où je bloque c'est qu'une table n'a qu'une seule sorte de tooltip, celle définie dans son createTooltip. Or moi j'en voudrais plusieurs en fonction de la colonne... Une idée ?

  9. #9
    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
    As tu au moins lu le tuto?

    Il est dit spécifiquement que le contenu des Tooltips d'un JTable et de ses cellules sont contrôlés par les renderers des cellules. Or il est relativement aisé, si je ne m'abuse, d'appliquer un Renderer à l'ensemble des cellules d'une Colonne...

    Donc, je ne vois même pas où se trouve ton problème...

    RTFM...

  10. #10
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    lu et relu ainsi que dépiecé le code.

    En résumé, voici ce que fait le code:
    La JTable n'a qu'un unique JTooltip (fournit par la méthode JComponent.createTooltip()). Quand celui-ci s'affiche, il demande à la table de retourner un tooltip texte (via getTooltipText(MouseEvent event)). En fonction de la position de la souris, la table détermine la colonne et la ligne. De là elle détermine le renderer. Elle le prépare et puis lui demande son tooltip texte au travers la même méthode (elle aura pris soin de translater le MouseEvent par rapports aux bounds de la cellule). En aucun cas, elle ne demande au renderer une instance de JTooltip. Elle ne lui demande que son tooltip texte.

    Je voudrais aller un cran plus loin et être capable de contrôler le type du tooltip en fonction de la position de la souris.

  11. #11
    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
    Quand tu parles de changer de type de tooltip, tu penses à quoi exactement?
    Car de base, un tooltip ça ne gère pas grand chose niveau customisation, background, foreground, du rendu html mais pas grand chose de plus...

  12. #12
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    Je pense à un tooltip avec des données plus structurées. La table contient les résultats d'une recherche et je veux présenter une sorte de résumé de la manière dont la row survolée se retrouve dans la table (une sorte d' "explain path" comme dans Oracle).
    Je pense que je vais dupliquer le mécanisme d'affichage des tooltip (MouseEnter + timer) et afficher ma propre popup...

  13. #13
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    J'ai trouvé une solution toute simple pour afficher des données structurées dans un tooltip: mettre le texte du tooltip sous forme d'html. On peut au moins contrôler des retours à ligne et augmenter la lisibilité du texte.

Discussions similaires

  1. Modifier les dimensions d'une image insérée (jpg)
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 47
    Dernier message: 21/08/2008, 08h47
  2. [POO] Modifier les dimensions d'une scene flash en Javascript
    Par Peyothe dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 20/06/2008, 11h19
  3. Réponses: 6
    Dernier message: 17/06/2008, 12h55
  4. Modifier les dimensions d'une image
    Par LoicH dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/10/2007, 22h53
  5. Réponses: 1
    Dernier message: 13/03/2007, 15h31

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