2011-02-23 3 views
0

Je dessine dans un servlet un ScatterPlot et le dessine dans le navigateur. L'utilisateur peut maintenant cliquer quelque part sur le tracé et je veux déterminer quel point de donnée du nuage de points que l'utilisateur a pointé. De la souris cliquez sur l'utilisateur je peux déterminer sur quel pixel de l'image il a cliqué, mais comment puis-je obtenir de cette information aux coordonnées sur le domaine et l'axe de la gamme?JFreechart & Servlet: Comment calculer le point de donnée à partir de la position de la souris

J'ai trouvé des astuces pour le faire, qui utilise le ChartPanel. Mais pour le servir directement au navigateur, j'utilise seulement une instance d'un objet JFreeChar.

Quelqu'un a une idée ou un exemple comment le faire?

Merci, Dieter

+1

Si vous servez un JFreeChart au navigateur, est pas rendu comme une image? Il semble que vous vouliez quelque chose avec une bonne interaction côté client, comme ou [gRaphaël] (http://g.raphaeljs.com/) ou [Flot] (http://code.google.com/p/flot/) . –

+0

@ matt-ball Bonjour Matt, pas vraiment. Je ne veux pas réagir du côté client. Là, je note juste où l'utilisateur a cliqué (quel pixel) et envoie cette information au côté du serveur pour rendre l'image différemment (comme zoomé ou panoramique). Pour cela, j'ai besoin de mapper la position du pixel dans la position du graphique, donc je sais ce que le nouveau centre de l'image devrait être. – Dieter

+0

Pourriez-vous utiliser une carte avec une image en format HTML? – trashgod

Répondre

1

Je pense avoir trouvé une solution. Pour la solution, j'ai besoin d'obtenir à nouveau mon tableau, donc je dois soit créer un nouveau ou de le sauvegarder en quelque sorte. Mais quand j'ai une référence à ce graphique la solution est la suivante:


JFreeChart chart = functionWhichRetrievesTheChart(); 
ChartRenderingInfo info = new ChartRenderingInfo(); 
// PLOT_SIZE is the size if the graph and has to be the same size as the original drawn chart.createBufferedImage(PLOT_SIZE, PLOT_SIZE, info); 
graph, otherwise the pixel position points to somewhere else 
PlotRenderingInfo plotInfo = info.getPlotInfo(); 


XYPlot plot = (XYPlot)chart.getPlot(); 
Point p = new Point(x,y); // x and y are the pixel positions 

// this is the domain value which belongs to the pixel position x 
double domain = plot.getDomainAxis().java2DToValue(p.getX(), plotInfo.getDataArea(), plot.getDomainAxisEdge()); 

// this is the range value which belongs to the pixel position y 
double range = plot.getRangeAxis().java2DToValue(p.getY(), plotInfo.getDataArea(), plot.getRangeAxisEdge()); 
Questions connexes