为了账号安全,请及时绑定邮箱和手机立即绑定

如何将本地坐标转换为JavaFX图表坐标

如何将本地坐标转换为JavaFX图表坐标

繁星点点滴滴 2023-09-20 19:14:51
对于业务应用程序,要求用户能够选择 JavaFX LineChart 的特定部分。目前,我已经使用 onMousePressed、onMouseDragged 和 onMouseReleased 侦听器结合 JavaFX 矩形和一些坐标魔法来使用选择框。当我对这些事件执行 .getX() 和 .getY() 时,我得到了在图表上绘制矩形的适当坐标。这些是我假设的相对于 JavaFX 图表的坐标?当用户做出选择时,该矩形会覆盖图表并允许用户对其选择执行任何操作或绘制新选择。这一切都有效,但是当用户开始从先前的选择范围内绘制时,这将采用相对于矩形的坐标。我的问题如下:如何使矩形对鼠标事件“透明”并将这些事件发送到底层组件(折线图)。或者有没有办法将这些坐标转换为折线图坐标。请注意,我已经在所有不同部分尝试了 localToParent、localToScene、sceneToLocal 和 sceneToLocal。此外,即使我不完全了解该属性的确切工作原理,我也尝试以不同的方式更改 pickOnBounds 。谢谢,
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

目前,我已经使用 onMousePressed、onMouseDragged 和 onMouseReleased 侦听器结合 JavaFX 矩形和一些坐标魔法来使用选择框。当我对这些事件执行 .getX() 和 .getY() 时,我得到了在图表上绘制矩形的适当坐标。这些是我假设的相对于 JavaFX 图表的坐标?

不,它与图表无关,它是您单击的目标节点的本地坐标。

事件相对于 MouseEvent 源的原点的水平位置。

图表是一个由许多节点和窗格组成的复杂事物,每个节点和窗格都可以有自己的本地坐标系。因此 getX 将返回的内容取决于您单击的实际内容。例如,如果您在图表顶部覆盖一个半透明填充的矩形,然后在矩形内部单击,则坐标将是矩形内的局部坐标。

如何使矩形对鼠标事件“透明”并将这些事件发送到底层组件(折线图)。

使矩形鼠标透明:

rectangle.setMouseTransparent(true);

或者有没有办法将这些坐标转换为折线图坐标。

您可以使用诸如mouseEvent.getSceneX() 获取场景坐标之类的调用,而不是获取本地坐标。

然后,您可以使用以下命令将坐标转换为您希望的任何节点的本地坐标node.sceneToLocal(sceneX, sceneY)

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

因此,只要您引用折线图中想要确定鼠标单击相对坐标的相关节点,就可以做到这一点。


查看完整回答
反对 回复 2023-09-20
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信