java - 如何将本地坐标转换为 JavaFX 图表坐标
问题描述
对于业务应用程序,用户必须能够选择 JavaFX LineChart 的某个部分。目前,我已经使用 onMousePressed、onMouseDragged 和 onMouseReleased 侦听器与 JavaFX Rectangle 和一些坐标魔术结合使用选择框。当我对这些事件执行 .getX() 和 .getY() 时,我得到了在图表上绘制矩形的适当坐标。这些是相对于我假设的 JavaFX 图表的坐标?
当用户做出选择时,这个矩形会覆盖图表,并允许用户对他们的选择做任何他们想做的事情或绘制一个新的选择。这一切都有效,但是当用户开始从先前的选择中绘制时,这将采用相对于 Rectangle 的坐标。我的问题如下:如何使鼠标事件的矩形“透明”并将这些事件发送到底层组件(LineChart)。或者有没有办法将这些坐标转换为 LineChart 坐标。
请注意,我已经在所有不同部分尝试了 localToParent、localToScene、sceneToLocal 和 sceneToLocal。即使我不完全了解该属性的确切工作方式,我也尝试以不同方式更改 pickOnBounds 。
谢谢,
解决方案
目前,我已经使用 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());
因此,只要您在折线图中引用了要确定鼠标单击的相对坐标的相关节点,就可以做到这一点。
推荐阅读
- python - 如何为导入的模块配置日志记录?
- arrays - 如何将 json 字符串转换为 bash 中的单个字符数组?
- apache-spark - 使用 SparklyR 连接到 Spark 时出错
- regex - 如何使用正则表达式在回车和换行之前附加字符
- r - tidyverse 中是否有 R 函数可以使用代码选择列的元素?
- python - 如何使用 OpenCV 对 IP 摄像机进行身份验证
- angular - 如何构建我的 Angular 8 应用程序,以便在浏览器中打开 index.html 时它可以工作?
- c# - 在 Unity3D 中模拟真实的汽车旋转
- html - 在我的 CSS 中,网格属性无法正常运行
- sql-server - 推荐邮寄地址匹配方案?