将 Jfreechart 组件中的点转换为屏幕值
Translating points from Jfreechart component to screen values
我在尝试将点从 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. 然后我点击屏幕上的那些点并打印它们的屏幕值,但坐标与保存的坐标非常不同。
任何帮助将不胜感激:)
好的,所以对于任何感兴趣的人来说,显然 Point translated=chartPanel.translateJava2DToScreen(point)
而不是使用 SwingUtilities 来完成这项工作:)
我在尝试将点从 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. 然后我点击屏幕上的那些点并打印它们的屏幕值,但坐标与保存的坐标非常不同。
任何帮助将不胜感激:)
好的,所以对于任何感兴趣的人来说,显然 Point translated=chartPanel.translateJava2DToScreen(point)
而不是使用 SwingUtilities 来完成这项工作:)