Перевод точек из компонента 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 делает работу:)

Другие вопросы по тегам