将点从Jfreechart组件转换为屏幕值

时间:2016-01-23 18:26:27

标签: java swing jfreechart

我在尝试将点从JFreeChart转换为屏幕时遇到问题,以便Robot.mouseMove()方法正常工作。

正如本主题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.我使用我的自定义CandlestickRenderer绘制一根蜡烛。 2.我使用SwingUtilities.convertPointToScreen()方法将该蜡烛中的某些点转换为屏幕。 3.然后我点击屏幕上的那些点并打印它们的屏幕值,但坐标与保存的坐标非常不同。

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

好的,所以对于任何有兴趣的人,显然Point translated=chartPanel.translateJava2DToScreen(point)而不是使用SwingUtilities做的工作:)