Мне удалось со временем разобраться.Первоначально я был на правильном пути;добавьте PlotChangeListener, чтобы получить уведомление об изменении, а затем получите значение перекрестия.Поскольку ось моего домена представляет собой DateAxis, значение, возвращаемое в качестве значения перекрестия, фактически является миллисекундным значением даты, на которую попадает перекрестие.Исходя из этого, я могу создать экземпляр Day, который можно использовать для извлечения TimeSeriesDataItem из каждого TimeSeries в моей коллекции TimeSeriesCollection.
plot.addChangeListener(new PlotChangeListener() {
public void plotChanged(PlotChangeEvent event) {
double crosshairXValue = this.plot.getDomainCrosshairValue();
if (crosshairXValue == 0) {
return;
}
Date date = new Date((long) crosshairXValue);
Day day = new Day(date);
for (Iterator<TimeSeries> itr = timeseriesCollection.getSeries().iterator(); itr.hasNext(); ) {
TimeSeries timeSeries = itr.next();
TimeSeriesDataItem dataItem = timeSeries.getDataItem(day);
Number balance = dataItem.getValue();
System.out.println("Balance for day " + day + " is " + balance);
//TODO publish balances to listeners
}
}
});
Затем вам также необходимо добавить MouseClickListener в ChartPanel, чтобы вы могли делегировать щелчкина график.В противном случае ваш слушатель изменения сюжета никогда не будет вызван.
chartPanel.addChartMouseListener(new ChartMouseListener() {
public void chartMouseMoved(ChartMouseEvent event) {
// Do nothing
}
public void chartMouseClicked(ChartMouseEvent event) {
int x = event.getTrigger().getX();
int y = event.getTrigger().getY();
chart.handleClick(x, y, chartPanel.getChartRenderingInfo());
}
});