2014-01-21 2 views
3

Я использую JFreeChart в Java, чтобы нарисовать XYLineChart, содержащий 50+ x, y точек. Диаграмма находится в ChartPanel, которая находится в 1 из JPanels моего JFrame.JFreeChart выбрать несколько точек - перетаскивание мышью - lasso - Java

Я знаю, что JFreeChart уже имеет функцию масштабирования, в результате чего при щелчке мышью и перетаскивании он масштабирует/выводит и отображает точки под выбранной «перетаскиваемой» областью.

Я хочу знать, есть ли способ, чтобы это вернуть х, у координаты точек, если увеличение при нажатии на CTRL, ALT или SHIFT ключ, то есть, если пользователь нажимает точку на диаграмме, а затем перетаскивает мышь, она должна масштабироваться, как обычно. Но если пользователь нажимает на точку и тащит, нажимая либо SHIFT или ALT или CTRL ключей, мы должны получить список всех выбранных точек на графике [точки под тащили области]. Это возможно ? Пожалуйста, дайте мне знать, как это сделать.

Я пытаюсь добавить простой MouseListener к ChartPanel, чтобы обнаружить, когда мышь нажата & выпущенные но х, у значения положения возвращаемого событий мышей соответствует месту нахождения Нажмите на экране & не фактические x, y координаты точек на графике. Мне нужны фактические координаты всех точек, которые пользователь нажимает и перетаскивает мышью, чтобы вычислить, до какой точки была нажата мышь, и перетащил &, где мышь была выпущена, и использовать эту информацию для выбора нескольких точек под перетаскиванием площадь.

Если у кого-либо есть представление об этом, сообщите мне.

+0

Перекрестная рассылка [здесь] (http://www.jfree.org/forum/viewtopic.php?f=3&t=116768). – trashgod

+0

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

+0

Я попытался реализовать эту функцию в старой версии JFreeChart: JFreeChart 1.0.16, но не могу этого сделать. Я могу использовать ChartMouseListener на моем ChartPanel, чтобы получить значения x, y точки при нажатии. Тем не менее, чтобы реализовать то, что я хочу (отображено несколько точек и отображены их значения x, y), мне нужно иметь регулярный MouseListener на ChartPanel, который будет делать это с помощью mousePressed() и mouseReleased(), которые используют MouseEvent, а не ChartMouseEvent. Как получить фактические значения x, y, а не x, y на экране, используя MouseListener? –

ответ

4

Это ответ, который я дал в форуме JFreeChart:

Это не реализовано в JFreeChart 1.0.17, но эта функция была реализована в JFreeChart-FSE («будущее состояние издание») проект по GitHub:

https://github.com/jfree/jfreechart-fse

Там не было освобождение от этого репо, но вы можете создать его из источника. Обратная связь приветствуется, у меня не было времени недавно на работу , но я хотел бы получить выпуск от этого репо некоторого времени в ближайшие месяцы (моя цель - иметь JFreeChart 2.0 в 2014 году). Выбор лассо был получен из некоторого кода, который я написал несколько лет назад , но Майкл Зинсмайер из KNIME.org сделал большой кусок работы , чтобы структурировать это и состояние выбора набора данных.

4

Как получить фактические значения x, y, а не x, y на экране, используя MouseListener?

Добавить ChartMouseListener, как показано here и here.

Внешний вид JFreeChart, множественный выбор с лассо проиллюстрирован в приведенном примере here. A marching ants прямоугольник показан here.

+0

Привет, спасибо за ответ. Но я хочу знать, как получить построенные значения x, y, используя регулярный 'MouseListener'. Я знаю, как это сделать с помощью ChartMouseListener (через ChartMouseEvent), но у него есть только два метода: mouseClicked() и mouseMoved(), тогда как я заинтересован в использовании методов MouseListener MouseEvent и методов mousePressed() и mouseReleased() узнайте, где мышь начала тащиться с & до где. Таким образом, я могу получить все точки в этом горизонтальном диапазоне и получить и выбрать их все, чтобы создать эффект ** lasso **. Есть ли способ достичь этого? –

+0

Есть ли способ сделать то, что я упомянул выше? Поскольку использование ChartMouseEvent внутри обычного MouseListener вместо MouseEvent ИЛИ создание настраиваемого метода в «ChartMouseListener», которое вызывается при нажатии или отпустите мышь (например, методы mousePeleased() мыши MouseListener), невозможно сделать, единственное возможное решение - это способ вычисления фактических значений x, y (основанных на значениях оси x, y оси) в стандартном 'MouseListener' вместо того, чтобы получить возврат x, y на основе размеров экрана]. Как это может быть сделано ? –

+0

Вы можете увидеть исходное событие, используя 'getTrigger()', как предложено [здесь] (http://stackoverflow.com/a/20900152/230513). – trashgod

Смежные вопросы