Как преобразовать локальные координаты в координаты диаграммы JavaFX - PullRequest
1 голос
/ 03 октября 2019

Для бизнес-приложений требуется, чтобы пользователи могли выбирать определенную часть JavaFX LineChart. В настоящее время у меня есть окно выбора, работающее с использованием слушателей onMousePressed, onMouseDragged и onMouseReleased в сочетании с прямоугольником JavaFX и некоторой магией координат. Когда я делаю .getX () и .getY () для этих событий, я получаю соответствующие координаты для рисования прямоугольника на графике. Это координаты относительно диаграммы JavaFX, я полагаю?

Когда пользователь сделал выбор, этот прямоугольник накладывается на диаграмму и позволяет пользователю делать со своим выбором все, что он хочет, или рисовать новый выбор. Это все работает, но когда пользователь начинает рисовать из предыдущего выбора, он принимает координаты относительно прямоугольника. Мой вопрос заключается в следующем: как сделать Rectangle "прозрачным" для событий мыши и отправить эти события в базовый компонент (LineChart). Или есть способ преобразовать эти координаты в координаты LineChart.

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

Спасибо,

1 Ответ

0 голосов
/ 03 октября 2019

В настоящее время у меня есть окно выбора, работающее с использованием слушателей onMousePressed, onMouseDragged и onMouseReleased в сочетании с JavaFX Rectangle и некоторой магией координат. Когда я делаю .getX () и .getY () для этих событий, я получаю соответствующие координаты для рисования прямоугольника на графике. Я предполагаю, что это координаты относительно диаграммы JavaFX?

Нет, это не относительно диаграммы, это локальные координаты целевого узла, по которому вы щелкнули. См. Документацию для MouseEvent :: getX :

Горизонтальная позиция события относительно источника источника MouseEvent.

Диаграммасложная вещь, состоящая из множества узлов и панелей, каждый из которых может иметь свою собственную локальную систему координат. То, что getX вернет, будет зависеть от того, на что вы нажимаете. Например, если вы наложите полупрозрачный прямоугольник с заливкой поверх диаграммы, а затем щелкните внутри прямоугольника, координаты будут локальными координатами внутри прямоугольника.

как мне сделатьПрямоугольник «прозрачен» для событий мыши и отправляет эти события нижележащему компоненту (LineChart).

Сделать прямоугольник мышью прозрачным :

rectangle.setMouseTransparent(true);

Или есть способ преобразовать эти координаты в координаты LineChart.

Вы можете использовать вызовы типа mouseEvent.getSceneX(), чтобы получить координаты сцены, а не местные координаты.

Затем вы можете преобразовать координаты влокальные координаты любого узла, который вы хотите использовать, используя node.sceneToLocal(sceneX, sceneY):

node.sceneToLocal(mouseEvent.getSceneX(), mouseEvent.getSceneY());

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...