JFreeChart: как получить координаты XYItemEntity?

Я застрял с этой проблемой в течение достаточно долгого времени. Мне нужны координаты определенных точек, которые принадлежат XYItemEntity. Я рисую графики свечей и хочу узнать, каковы координаты цены открытия, закрытия, максимума и минимума товара.

Есть ли способ добиться этого?

РЕДАКТИРОВАТЬ: Вопрос похож на этот: https://stackru.com/questions/30801444/jfreecharthow-to-get-coordinates-of-a-chartentity-and-snap-mouse-cursor-to-the но с тех пор Я изменил подход. Я хочу добиться следующего: я рисую диаграмму Candelistick. Как упоминалось выше, я хочу, чтобы пользователь мог "привязать" мышь к одному из 4 значений свечи: высокая, низкая, открытие, закрытие. Чтобы реализовать эту функцию, я подумал, что на ChartPanel создам коллекцию точек, которая будет соответствовать этим значениям всех отображаемых в данный момент свечей. Затем, добавив ChartMouseListener в ChartPanel, в методе chartMouseMoved я бы проверил, находится ли курсор в непосредственной близости от любой из этих точек. Здесь я добавляю MouseChartListener к ChartPanel:

chartPanel.addChartMouseListener(new MyChartMouseListener());

В этом методе я хочу проверить, находится ли курсор рядом с любой из свечей:

@Override
    public void chartMouseClicked(ChartMouseEvent chartMouseEvent) {
        int x = chartMouseEvent.getTrigger().getX();
        int y = chartMouseEvent.getTrigger().getY();
        getCandleCloseToCursor(x,y);
    }

Как должен выглядеть мой метод getCandleCloseToCursor?

private Point getCandleCloseToCursor(int x, int y) {
        //return point that belongs to the candle near the x,y position;
        //either high, low, close, open position
        return null;
    }

Надеюсь, теперь это немного яснее.

1 ответ

CandlestickRenderer улавливается ChartEntity информация в его реализации drawItem(), но ему не хватает разрешения, которое вы хотите. Требуемая геометрия рассчитывается на лету для каждого элемента и никогда не сохраняется явно. При отсутствии совершенно нового средства визуализации одним из подходов будет обновление соседнего JTable с соответствующими данными, взятыми из OHLCDataset, Отдай свое TableModel доступ к ChartMouseListener получить ссылку на OHLCDataset набор данных, и использовать его методы доступа для выполнения TableModel контракт, как показано здесь. Точные данные зависят от ваших требований, но вы можете использовать JTable фильтрация

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