JGraphX - 如何实时预览并应用更复杂的图形更改

时间:2013-08-24 21:56:17

标签: java swing visualization preview jgraphx

我有一个包含两种顶点的图形:

  • 表示图节点的主要顶点
  • 作为主顶点和边的子节点的端口顶点连接到它们。

(边缘不能直接连接到节点,因为端口顶点正在建模必须明确可视化的真实对象。)每个端口顶点的位置使得它在与其连接的边缘的相对节点的方向上紧密地邻接其父节点。这是通过布局算法完成的。见图:

+------+  port             +------+
|      +-+               +-+      |
| node | |---------------| |      |
|      +-+     edge      +-+      |
+------+                   +------+

但是,当拖动节点时,其端口仍然具有与父节点相关的旧相对位置。如何根据节点的新坐标刷新端口位置?至少在删除节点之后,理想情况下也是在实时预览期间(mxGraphHandler.isLivePreview()== true)。

当前错误的图表:

+------+  port
|      +-+
| node | |
|      +-+
+------+  \
           \
            \  +------+
             +-+      |
             | |      |
             +-+      |
               +------+

预期正确的图表:

+------+
|      |
| node |
|      |  port
+------+-+
       | |
       +-+
          \
           \
            \
             +-+
             | |
             +-+------+
               |      |
               |      |
               |      |
               +------+

我深入研究了实时预览过程,并有一些线索和一些未分类的不清晰度:

  • 似乎我必须实现自己的mxMovePreview扩展并覆盖start / getPreviewStates方法,因为它们当前的实现硬编码受影响的节点集,例如不包括拖动节点的相对端口
  • 似乎我无法完全重用端口定位策略,因为在布局中它应用于单元格的几何体,在预览中它应用于mxCellStates和mxCellStatePreview
  • 接收dx,dy的方法应用线性变换(通过常量矢量移位),复杂的几何重新计算将需要重建坐标?
  • 端口的定位类似于更新mxCellStatePreview.revalidateState中的边缘终端点 - 也许我应该实现自己的mxCellStatePreview扩展并重写此方法?
  • 删除节点后如何实现刷新?似乎与实时预览不同。 mxEvent.STOP上的监听器就足够了,或者也需要一些重载?

我会感谢任何帮助,正确的方向。谢谢。

1 个答案:

答案 0 :(得分:2)

您是否已将端口几何设置为相对于父级?

geo.setParent(<>);   geo.setRelative(真);