如果看不到代码的结构很难说。但是我在用javafx编写uml建模工具时遇到了类似的问题,所以我的解决方案可能会帮助您。
所以在你的情况下我会这样做:
-
实施
Port
以这样的方式
DoubleProperty
对于它们的x和y位置,现在取决于它的外观实现可能不同,在我的例子中,我使用
Circle
及其
centerXProperty
和
centerYProperty
,如果使用某个矩形形状,则另一个选项是创建自己的
中心属性
和
中心属性
,通过绑定到
layoutX
+(
width
/2),同样的y只是用高度。应该是这样的:
DoubleProperty centerXProperty = new SimpleDoubleProperty(0);
centerXProperty.bind(n.layoutXProperty().add(n.widthProperty().divide(2)));
在哪里?
n
是花环上的一个节点,你可以用
prefWidthProperty
如果您使用自定义宽度/高度
-
您的窗格应该有所有端口的列表,现在取决于您要如何创建
端口
它可能不同,但在我的项目中,我会创建
端口
关于交叉点
Line
用户绘制并
Pane
它连接到,您也可以将
Ports
在每一个
窗格
只有在
线
终点在里面
端口
半径。
-
行已经有
endXProperty
和
endYProperty
所以您可以简单地将它们绑定到
端口
,这样就可以轻松地将它们一起移动。
如果你需要代码示例,那么你需要提供你目前所得到的,以便我可以帮助你。
编辑
关于父子关系,我们对图的根的解决方案是扩展锚窗格,因为他将大部分控制权交给它的子节点,这个锚窗格上的每个节点都必须
UmlElement
,进一步向下扩展到
UmlNode
和
UmlEdge
然后
UnLoad
有子类型
ParentUmlNode
和
ChildUmlNode
,
Child
可以放在里面
Parent
他们的立场是
起源
位置,它不在乎外面,因为那一次
起源
他的孩子们跟着他。
这比基于视图根来处理深子位置要好得多,因为保持所有内容同步可能会有一些问题,特别是如果您添加了大小调整、多选择和类似的更复杂的功能。