我试图将点从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.然后点击屏幕上的这些点并打印它们的屏幕值,但坐标与保存的坐标非常不同。
任何帮助,将不胜感激:)