2016-01-23 38 views
2

我试图将点从JFreeChart转换为屏幕以便Robot.mouseMove()方法正常工作时出现问题。将Jfreechart组件中的点转换为屏幕值

正如本主题中的建议JFreeChart: how to get coordinates of an XYItemEntity?我写了一个自定义的CandlestickRenderer,用于存储特定的绘制点。然后,我设置的自定义渲染为我的图表渲染:

chart= ChartFactory.createCandlestickChart("Default Chart", "Time", "Value", ohlcSeriesCollection, true); 
chart.getXYPlot().setOrientation(PlotOrientation.VERTICAL); 
chart.getXYPlot().setDomainPannable(true); 
chart.getXYPlot().setRangePannable(true); 
chart.getXYPlot().getRangeAxis().setAutoRange(true); 
String emptyTitle= ""; 
chart.setTitle(emptyTitle); 
XYPlot plot = (XYPlot) chart.getPlot(); 
DateAxis axis = (DateAxis) plot.getDomainAxis(); 
axis.setDateFormatOverride(new SimpleDateFormat(DOMAIN_DATE_FORMAT)); 
XYItemRenderer renderer=new CandleRenderer(); // my custom CandlestickRenderer 
plot.setRenderer(renderer); 

然后,创建的图表我传递给我的自定义ChartPanel和ChatMouseListener添加到CharPanel:

chartPanel=new CandlestickChartPanel(chart, analysis); 
chartPanel.setDisplayToolTips(false); 
tooltipPanel=new TooltipPanel(); 
add(chartPanel, BorderLayout.CENTER); 
add(tooltipPanel, BorderLayout.EAST); 
chartPanel.addChartMouseListener(new MyChartMouseListener()); 

现在,在MyChartMouseListener我希望能够比较先前由我的自定义CandlestickRenderer存储的点,以指向鼠标当前指向的点。为了实现这一目标,我使用的MouseEvent的屏幕坐标:

Point point = new Point(chartMouseEvent.getTrigger().getXOnScreen(),chartMouseEvent.getTrigger().getYOnScreen()); 

但我有从自定义CandlestickRenderer获得的点的正确翻译一个巨大的问题。我使用下面的代码的翻译:

SwingUtilities.convertPointToScreen(point, this.chartPanel); 

,但我得到的值是从当我点击这些点并打印坐标到控制台不同。为了简化: 1.我使用自定义烛台渲染器绘制单个蜡烛。 2.我使用SwingUtilities.convertPointToScreen()方法将蜡烛中的某些点转换为屏幕。 3.然后点击屏幕上的这些点并打印它们的屏幕值,但坐标与保存的坐标非常不同。

任何帮助,将不胜感激:)

回答

1

好了,有兴趣的人士,显然Point translated=chartPanel.translateJava2DToScreen(point)而不是使用SwingUtilities类的做工作:)

相关问题