Перевод точек из компонента Jfreechart в экранные значения
У меня возникла проблема при попытке перевести точки из JFreeChart на экран, чтобы метод Robot.mouseMove() работал правильно.
Как предлагается в этой теме JFreeChart: как получить координаты 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 ответ
Ок, так что для всех, кто заинтересован Point translated=chartPanel.translateJava2DToScreen(point)
вместо использования SwingUtilities делает работу:)