javafx - 行开始/结束到嵌套的 javafx 组/窗格
问题描述
我有某种可视化元素,这些元素具有可以相互连接的端口。元素的端口是表示元素的 javafx 窗格的子项。我现在想知道将连接线的起点和终点绑定到端口位置的最佳方法是什么,因为端口可能位于元素层次结构的深处。这就是为什么我认为我可能需要这些端口的绝对位置,但没有找到一种简单的方法来获得它们。现在,这些线条直接位于场景根目录下。
解决方案
如果没有看到代码的结构,很难说。但是我在使用 javafx 编写的 uml 建模工具时遇到了类似的问题,所以我的解决方案可能会对您有所帮助。
所以在你的情况下,我会做这样的事情:
Port
以他们对 X 和 Y 位置的方式实现DoubleProperty
,现在取决于它应该如何实现可能会有所不同,在我的情况下,我使用Circle
and 它的centerXProperty
andcenterYProperty
,如果使用某些矩形形状的另一个选项是创建自己的centerXProperty
andcenterYProperty
,他们可以通过绑定到layoutX
+ (width
/ 2) 非常容易计算,对于 y 仅使用高度也是如此。它应该看起来像这样:DoubleProperty centerXProperty = new SimpleDoubleProperty(0);
centerXProperty.bind(n.layoutXProperty().add(n.widthProperty().divide(2)));
n
场景图上的某个节点在哪里prefWidthProperty
,如果您使用自定义宽度/高度 ,您也可以使用您的窗格应该有所有端口的列表,现在取决于您要如何制作
Port
它可能会有所不同,但在我的项目中,我将在该用户绘制Port
的交叉点上创建它并连接到,您也可以只在每个并且仅当端点在半径内时才建立连接。Line
Pane
Ports
Pane
Line
Port
Line 已经有了
endXProperty
,endYProperty
因此您可以简单地将它们绑定到您的位置属性Port
,这样您就可以轻松地将它们一起移动。
如果您需要代码示例,那么您需要提供到目前为止所获得的内容,以便我可以帮助您。
编辑
关于父子关系,我们对图根的解决方案是扩展锚窗格,因为他将大部分控制权交给了它的孩子,这个锚窗格上的每个节点都必须是UmlElement
,它进一步向下传播到UmlNode
,UmlEdge
然后UmlNode
具有子类型ParentUmlNode
和ChildUmlNode
,Child
可以放在里面Parent
,位置是绑定Parent
位置的,外面不关心,因为一Parent
动他的孩子就跟着他。
恕我直言,这比根据视图根处理深层子位置要好得多,因为保持一切同步可能会出现一些问题,特别是如果您添加调整大小、多选和类似的更复杂的功能。
推荐阅读
- ios - 在 iOS 模拟器中 React-Native Fetch + 解析 JSON 抓取,但在远程调试中即时
- android - 如何使用 Android 上传多个 Firebase 图像
- java - Gradle 构建错误:无法应用插件 [class 'org.gradle.api.plugins.JavaPlugin
- javascript - 如何将类中的所有对象推送到一个数组 javascript 中?
- python - Django urlpatterns - 解包的值太多
- c# - Microsoft Graph 个人帐户。如何获取用户照片?
- javascript - JS不识别函数
- ios - ionic build ios成功,但启动应用程序后打开nginx错误
- python - 在类中引用方法有什么好处?
- sql - 从表中计算多个列值