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

Java JGraphX-如何实时预览和应用更复杂的图形更改,java,swing,visualization,preview,jgraphx,Java,Swing,Visualization,Preview,Jgraphx,我有一个有两种顶点的图: 表示图节点的主要顶点 端口顶点是主顶点和边的子顶点,它们与主顶点和边相连 (无法将边直接连接到节点,因为端口顶点是建模真实对象的,必须显式可视化。)每个端口顶点的位置应使其在连接到它的边的相反节点的方向上与其父节点紧密邻接。这是通过布局算法实现的。见图: +------+ port +------+ | +-+ +-+ | | node | |---------------| | |

我有一个有两种顶点的图:

  • 表示图节点的主要顶点
  • 端口顶点是主顶点和边的子顶点,它们与主顶点和边相连
(无法将边直接连接到节点,因为端口顶点是建模真实对象的,必须显式可视化。)每个端口顶点的位置应使其在连接到它的边的相反节点的方向上与其父节点紧密邻接。这是通过布局算法实现的。见图:

+------+  port             +------+
|      +-+               +-+      |
| node | |---------------| |      |
|      +-+     edge      +-+      |
+------+                   +------+
但是,当拖动节点时,其端口仍具有与父节点的旧相对位置。根据节点的新坐标刷新端口位置时应该做什么?至少在删除节点之后,最好也是在实时预览期间(mxGraphHandler.isLivePreview()==true)

当前错误图形:

+------+  port
|      +-+
| node | |
|      +-+
+------+  \
           \
            \  +------+
             +-+      |
             | |      |
             +-+      |
               +------+
预期正确的图形:

+------+
|      |
| node |
|      |  port
+------+-+
       | |
       +-+
          \
           \
            \
             +-+
             | |
             +-+------+
               |      |
               |      |
               |      |
               +------+
我深入现场预览过程,发现了一些线索和一些未分类的不规则之处:

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

我将非常感谢任何能帮助我朝着正确的方向前进的人。谢谢。

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

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