В настоящее время у меня есть окно выбора, работающее с использованием слушателей 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());
Итак, если у вас есть ссылка на соответствующий узел в линейном графике, для которого вы хотитечтобы определить относительные координаты щелчка мышью, вы можете сделать это.