Трассировка CrossHair в JFreeChart - PullRequest
1 голос
/ 05 февраля 2010

Мне удалось реализовать трассировку мыши в режиме реального времени следующим образом:

alt text

Исходный код выглядит следующим образом:

http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/charting/CrossHairUI.java?revision=1.5&view=markup

http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/gui/ChartJDialog.java?revision=1.9&view=markup

Однако мне не удалось получить правильную координату экрана y при добавлении подзаговора.

(разбитое изображение)

Я подозреваю, что не получил правильную область данных экрана.

Когда на экране только один график, я получаю область данных экрана с высотой 300 ++

Когда подзаголовок добавлен внизу, я ожидаю, что высота области данных экрана будет уменьшена из-за высоты, занимаемой вновь добавленным подзаговором.

Однако я понятия не имею, как получить правильную область данных экрана для первого графика.

final XYPlot plot = (XYPlot) cplot.getSubplots().get(0);

// Shall I get _plotArea represents screen for getSubplots().get(0)?
// How?
// I try
//
// chartPanel.getScreenDataArea(0, 0);
// chartPanel.getScreenDataArea(0, 1);
// chartPanel.getScreenDataArea(1, 0);
// chartPanel.getScreenDataArea(1, 1);
//
// All returned null

// OK. I suspect this is causing me unable to get the correct screen y coordinate
// I always get the same _plotArea, although a new sub plot had been added.
final Rectangle2D _plotArea = chartPanel.getScreenDataArea();

final RectangleEdge rangeAxisEdge = plot.getRangeAxisEdge();

final double yJava2D = rangeAxis.valueToJava2D(yValue, _plotArea, rangeAxisEdge);

1 Ответ

0 голосов
/ 07 февраля 2010

Вот фрагмент кода для получения правильного прямоугольника после погружения в исходный код JFreeChart.

/* Try to get correct main chart area. */
final Rectangle2D _plotArea = chartPanel.getChartRenderingInfo().getPlotInfo().getSubplotInfo(0).getDataArea();
...