JFreeChart mettre un image comme type de point

[Résolu]
Signaler
Messages postés
9
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
10 juillet 2012
-
Messages postés
9
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
10 juillet 2012
-
Bonjour à toutes et tous,

Voilà un petit bout de temps que je suis membre de ce site qui m'aide à résoudre mes problèmes. Habituellement, j'arrivais à les résoudre en cherchant dans les sujets existants voir dans les morceaux de codes développés par les membres mais aujourd'hui ce n'est pas le cas hélas.

Je suis actuellement en train de développer une application où j'aimerais arriver à obtenir une barre de suivi comme sur le site suivant (http://www.sports.fr/football/directs/2012/ligue-1/138591/evian-thonon-caen.html). A savoir avoir une barre et des icones sur celle ci afin de représenter des événements qui y seront survenus.

Jusqu'à maintenant j'obtiens ceci:


Il ne me manquerait plus qu'à transformer les points bleus, rouges, verts par des images de mon choix.
Je ne trouve rien sur le net pour m'aider dans cette tâche. Est ce tout simplement possible ?

Je vous remercie par avance.
Bonne journée

4 réponses


Bonjour

Essayez de surcharger la méthode XYLineAndShapeRenderer.drawSecondaryPass() pour faire ça. Vous devriez poser votre question sur le forum de JFreeChart, vous auriez plus de chances d'avoir des réponses. Cordialement








T.U.E.R (First Person Shooter créé par Julien Gouesse)
Messages postés
9
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
10 juillet 2012
2
Merci Gouessej ;)

Je n'ai pas eu besoin d'aller sur leur forum car tu m'as donné la réponse que je souhaitais.
Tout marche très bien !

Pour ceux qui souhaiterais avoir la réponse, je poste le code. Il n'est pas commenté mais reste assez implicite. J'ai défini cette méthode dans une classe CustomXYLineAndShapeRenderer qui hérite de XYLineAndShapeRenderer :

protected void drawSecondaryPass(Graphics2D g2, XYPlot plot,
XYDataset dataset, int pass, int series, int item,
ValueAxis domainAxis, Rectangle2D dataArea, ValueAxis rangeAxis,
CrosshairState crosshairState, EntityCollection entities) {

double x1 = dataset.getXValue(series, item);
double y1 = dataset.getYValue(series, item);
if (Double.isNaN(y1) || Double.isNaN(x1)) {
return;
}

RectangleEdge xAxisLocation = plot.getDomainAxisEdge();
RectangleEdge yAxisLocation = plot.getRangeAxisEdge();
double transX1 = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
double transY1 = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);
Image image = null;
String imgStr;
if (series == ModeleGraphiqueStatic.SERIE_ARRET_TACHE)
imgStr = Variable.IMG_GRAPHIQUE_BARRE_CARTON_ROUGE;
else if (series == ModeleGraphiqueStatic.SERIE_REDEMERAGE_CHRONOS)
imgStr = Variable.IMG_GRAPHIQUE_BARRE_REMPLACEMENT;
else if (series == ModeleGraphiqueStatic.SERIE_SAUT_CHRONOS)
imgStr = Variable.IMG_GRAPHIQUE_BARRE_CARTON_JAUNE;
else
imgStr = Variable.IMG_GRAPHIQUE_BARRE_SIFFLET;

try {
image = ImageIO.read((getClass().getResource(imgStr)));
} catch (IOException e) {
e.printStackTrace();
}

g2.drawImage(image, (int)transY1, (int)transX1-6, null);
}

Bonjour

Je suis content d'avoir pu vous aider et je vous remercie d'avoir posté un exemple de code illustrant ma suggestion. Il pourrait être amélioré de sorte que l'image soit redimensionnée pour rentrer pile dans l'aire rectangulaire et il serait préférable de tester si la variable "image" est à null (si le chargement de l'image a échoué).










T.U.E.R (First Person Shooter créé par Julien Gouesse)
Messages postés
9
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
10 juillet 2012
2
Bonjour,

Je suis tout à fait d'accord sur vos remarques.
Le code posté ici reste à titre indicatif