我試圖將點從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.然後點擊屏幕上的這些點並打印它們的屏幕值,但座標與保存的座標非常不同。
任何幫助,將不勝感激:)