java将点从Jfreechart组件转换为屏幕值
我在尝试将点从JFreeChart转换到屏幕上以便机器人时遇到了一个问题。mouseMove()方法才能正常工作
正如本主题{a1}中所建议的,我编写了一个自定义烛台,其中存储了某些绘制点。然后,我将此自定义渲染设置为图表的渲染器:
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中,我希望能够将自定义烛台指示器先前存储的点与鼠标当前指向的点进行比较。为了实现这一点,我使用MouseEvent的屏幕坐标:
Point point = new Point(chartMouseEvent.getTrigger().getXOnScreen(),chartMouseEvent.getTrigger().getYOnScreen());
但是我有一个巨大的问题,就是如何正确翻译从定制烛台上获得的点。我使用以下代码进行翻译:
SwingUtilities.convertPointToScreen(point, this.chartPanel);
但是我得到的值与我单击这些点并将坐标打印到控制台时的值不同。要简化: 1.我用自己定制的烛台画笔画了一支蜡烛。 2.我使用SwingUtilities将蜡烛上的某些点翻译到屏幕上。convertPointToScreen()方法。 3.然后单击屏幕上的这些点并打印它们的屏幕值,但坐标与保存的坐标非常不同
任何帮助都将不胜感激:)
# 1 楼答案
好的,所以对于任何感兴趣的人来说,显然
Point translated=chartPanel.translateJava2DToScreen(point)
而不是使用SwingUtilities来完成工作:)