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
фильтрация