首页 > 解决方案 > 在窗格或区域内使用备用坐标系

问题描述

我正在尝试设置一个窗格,以便放置在该窗格中的对象使用 JavaFX“场景像素”以外的坐标系。例如,我的坐标系中的 1024 个单位可能对应于 1 个“场景像素”(JavaFX 使用的单位有更好的名称吗?)。但是:我添加到窗格中的对象内部的对象需要在“场景像素”中工作(例如;标签在呈现文本时似乎希望在像素位置工作)。

下面的要点显示了我正在寻找的设置的简单示例,但它有问题。

我创建了一个容器组(实际上是一个窗格),它添加了一个转换,使得 1 个单位 == 32 像素。我将对象添加到此容器中。我添加的每个对象都有一个以单位指定大小和位置的外部窗格,以及一个仅用于反转外部窗格变换比例的内部窗格。在这个内部窗格中,我可以添加标签等,这些都可以正确呈现。

我设置了变换之间的绑定,以便我可以通过调整组容器上的变换来有效地缩放和平移窗格内的视图。然而:关于这个设置的一些东西似乎让 JavaFX 内部的一些东西感到困惑;我在屏幕上看到的结果似乎与 JavaFX 认为的各种对象的边界不匹配。当我尝试在对象上设置边框等操作时,这会导致视觉问题,并且似乎也会混淆 ScenicView。

https://gist.github.com/io7m/20b071e11da2dcd96896a43fad6df644

这是选择容器组的照片(看起来正确):

在此处输入图像描述

这是选择了底部对象的外部窗格的照片:

在此处输入图像描述

请注意,尽管对象实际上以正确的大小呈现在屏幕上(其中一个浅灰色框),但 ScenicView 似乎认为对象的边界是 1x1:它们1x1,但在我的自定义坐标系中表示时它们是 1x1,不在JavaFX“场景像素”中。您在屏幕截图中几乎看不到这一点:在对象的左上角有一个微小的单个像素,ScenicView 正在突出显示它认为的边界是什么。

这是选择了底部对象的内部窗格的照片:

https://ataxia.io7m.com/2019/08/10/view2.png

这看起来是正确的,因为边界包含标签而不是其他任何东西。

我在这里做错了吗?我不知道我是否基本上在滥用转换。

标签: javajavafx

解决方案


我在我的项目中做一些非常相似的事情。与您的方法相反,我没有使用窗格。我只使用组,到目前为止还没有发现任何问题。也许 ScenicView 中只是一个错误。

我不知道这是否也与您相关,但至少在我的情况下,我还必须将反向缩放应用于所有相关的形状属性,例如笔划宽度。我只想缩放外部几何图形的位置,但我仍然想以像素为单位指定笔划宽度。

这很容易变得非常复杂,但从技术上讲,这种方法我没有遇到任何问题。


推荐阅读