Il y a 13 ans -
Temps de lecture 3 minutes
Customiser les Tooltips JFreeChart
J’ai récemment eu quelques difficultés à customiser les styles (couleurs, fonts, …) des Tooltips générés par l’API JFreeChart.
Quelques recherches sur le sujet m’ont permis de constater que je n’étais pas le seul à rencontrer des difficultés pour modifier les styles par défaut fournis par l’API JFreeChart.
L’API JFreeChart étant assez mal documentée sur le sujet, j’ai du fouiller dans le code source de l’api pour trouver mon bonheur. Comme dit le proverbe, « Pour avoir de l’eau claire, il n’est que d’aller à la source ».
Ayant finalement trouvé une solution au problème, je me propose de la partager au travers de ce billet.
Les Tooltips avec JFreeChart
Les implémentations des Tooltips fournis par l’API JFreeChart sont basées sur l’interface ToolTipTagFragmentGenerator
.
ToolTipTagFragmentGenerator.java
package org.jfree.chart.imagemap;
/**
* Interface for generating the tooltip fragment of an HTML image map area tag.
* The fragment should be XHTML 1.0
compliant.
*/
public interface ToolTipTagFragmentGenerator {
/**
* Generates a tooltip string to go in an HTML image map.
* @param toolTipText the tooltip.
* @return The formatted HTML area tag attribute(s).
*/
public String generateToolTipFragment(String toolTipText);
}
L’api JFreeChart fournit quelques implémentations de base :
StandardToolTipTagFragmentGenerator.java
: Cette classe permet de générer un Tooltip en se basant sur les attributs alt et title.
package org.jfree.chart.imagemap; /** * Generates tooltips using the HTML title attribute for image map area tags. */ public class StandardToolTipTagFragment... implements ToolTipTagFragmentGenerator { public String generateToolTipFragment(String toolTipText) { return " title=" + ImageMapUtilities.htmlEscape(toolTipText) + " alt=''"; } }
OverLIBToolTipTagFragmentGenerator.java
: Cette classe utilise la libraire JavaScript overLIB pour générer un Tooltip avec un style par défaut.
package org.jfree.chart.imagemap; /** * Generates tooltips using the OverLIB library * (http://www.bosrup.com/web/overlib/). */ public class OverLIBToolTipTagFragmentGenerator implements ToolTipTagFragmentGenerator { public String generateToolTipFragment(String toolTipText) { return " onMouseOver=return overlib('" + ImageMapUtilities.javascriptEscape(toolTipText) + "'); onMouseOut=return nd();"; } }
Quelques exemples de Tooltips avec overLIB
Le site de la libraire overLIB proposent de nombreux exemples d’utilisation dont :
- Tooltip ordinaire avec le style fournis par JFreeChart :
tooltip
- Tooltip personnalisé avec la librairie overLIB :
with overlib styles
- Tooltip avec du html et du css :
with HTML
Solution
Une fois le mécanisme compris, tout ce qu’il reste à faire c’est s’inspirer de la classe OverLIBToolTipTagFragmentGenerator
pour créer un générateur de Tooltips personnalisés.
J’ai pour ma part opté pour la solution FULLHTML dans laquelle la librairie overLIB gère uniquement les événements onmouseover
et onmouseout
, les styles et les couleurs sont appliqués directement dans le code HTML.
Je commence par créer mon générateur personnalisé CustomToolTipTagFragmentGenerator
:
import org.jfree.chart.imagemap.ImageMapUtilities; import org.jfree.chart.imagemap.ToolTipTagFragmentGenerator; public class CustomToolTipTagFragment... implements ToolTipTagFragmentGenerator { /** * Generates tooltips using the OverLIB library with FULLHTML option * (http://www.bosrup.com/web/overlib/). */ public String generateToolTipFragment(String toolTipText) { String ret = " onMouseOver=return overlib('" + ImageMapUtilities.javascriptEscape(toolTipText) + "', FULLHTML); onMouseOut=return nd();"; return ret; } }
Pour la génération du graphique, la classe ChartUtilities
propose les méthodes suivantes :
public static void writeImageMap(PrintWriter writer, String name, ChartRenderingInfo info, ToolTipTagFragmentGenerator tooltipTagGen, URLTagFragmentGenerator urlTagGen)
Ou
public static String getImageMap(String name, ChartRenderingInfo info, ToolTipTagFragmentGenerator toolTipTagFragmentGenerator, URLTagFragmentGenerator urlTagFragmentGenerator)
Le code html permettant de générer le rendu du Tooltip est créé en implémentant l’interface StandardCategoryToolTipGenerator
:
CustomValueToolTipGenerator.java
Class CustomValueToolTipGenerator extends StandardCategoryToolTipGenerator { public String generateToolTip(CategoryDataset dataset, int row, int column) { StringBuilder toolTipHtml = new StringBuilder(); toolTipHtml.append(""); toolTipHtml.append(""); toolTipHtml.append(""); return toolTipHtml.toString(); } }
Une instance de cette classe doit être passée en paramètre de la méthode void setBaseToolTipGenerator(CategoryToolTipGenerator)
de la classe AbstractCategoryItemRenderer
.
Toutefois, si vous avez opté pour une utilisation des styles fournis par overLIB, la fonction generateToolTip
doit se contenter de retourner le message à afficher dans le Tooltip.
En espérant que cette solution puisse vous aider !
Commentaire
1 réponses pour " Customiser les Tooltips JFreeChart "
Published by Byzek , Il y a 12 ans
Merci pour ce post,
Actuellement je suis en difficulté pour créer une ImageMap pour un TimeTableXYDataset.
En effet j’ai l’impression que ce n’est pas possible …
Auriez vous des pistes ?
Merci