代码之家  ›  专栏  ›  技术社区  ›  Magnus Lutz

行开始/结束到嵌套javafx组/窗格

  •  0
  • Magnus Lutz  · 技术社区  · 7 年前

    我有一些可视化的元素,它们有可以相互连接的端口。元素的端口是表示元素的javafx窗格的子级。我现在想知道什么是将连接线的起点和终点绑定到端口位置的最佳方法,因为端口可能位于元素层次结构的相当深的位置。这就是为什么我认为我可能需要这些港口的绝对位置,但没有找到一个简单的方法得到它们。现在,这些线直接在场景根BTW下面。

    1 回复  |  直到 7 年前
        1
  •  1
  •   FilipRistic    7 年前

    如果看不到代码的结构很难说。但是我在用javafx编写uml建模工具时遇到了类似的问题,所以我的解决方案可能会帮助您。

    所以在你的情况下我会这样做:

    1. 实施 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 如果您使用自定义宽度/高度

    2. 您的窗格应该有所有端口的列表,现在取决于您要如何创建 端口 它可能不同,但在我的项目中,我会创建 端口 关于交叉点 Line 用户绘制并 Pane 它连接到,您也可以将 Ports 在每一个 窗格 只有在 线 终点在里面 端口 半径。

    3. 行已经有 endXProperty endYProperty 所以您可以简单地将它们绑定到 端口 ,这样就可以轻松地将它们一起移动。

    如果你需要代码示例,那么你需要提供你目前所得到的,以便我可以帮助你。

    编辑

    关于父子关系,我们对图的根的解决方案是扩展锚窗格,因为他将大部分控制权交给它的子节点,这个锚窗格上的每个节点都必须 UmlElement ,进一步向下扩展到 UmlNode UmlEdge 然后 UnLoad 有子类型 ParentUmlNode ChildUmlNode , Child 可以放在里面 Parent 他们的立场是 起源 位置,它不在乎外面,因为那一次 起源 他的孩子们跟着他。

    这比基于视图根来处理深子位置要好得多,因为保持所有内容同步可能会有一些问题,特别是如果您添加了大小调整、多选择和类似的更复杂的功能。

    推荐文章