- Blog Xebia France - http://blog.xebia.fr -
Customiser les Tooltips JFreeChart
Posted By Amin Fathallah On Lundi 30 août 2010 @ 12:49 In Java / JEE | 1 Comment
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 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 <code>XHTML 1.0</code> 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();";
}
}
Le site de la libraire overLIB proposent de nombreux exemples d’utilisation dont :
[JavaScript]
tooltip
[/JavaScript]
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("<html><body>");
toolTipHtml.append("<span style='color: #000000;padding: 0.1em 0.1em;background: #FFFF99;border: 1px solid #000000;width:40px;left:25px;top:2px;font-family: Calibri, Tahoma, Geneva, sans-serif;font-size: 8pt;font-weight:normal;' />");
toolTipHtml.append("</body></html>");
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 !
Article printed from Blog Xebia France: http://blog.xebia.fr
URL to article: http://blog.xebia.fr/2010/08/30/customiser-les-tooltips-jfreechart/
Click here to print.