我在尝试将点从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.然后我点击屏幕上的那些点并打印它们的屏幕值,但坐标与保存的坐标非常不同。
任何帮助将不胜感激:)
答案 0 :(得分:1)
好的,所以对于任何有兴趣的人,显然Point translated=chartPanel.translateJava2DToScreen(point)
而不是使用SwingUtilities做的工作:)