2016-01-23 18 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類的做工作:)

相關問題