2017-06-29 173 views
1

我需要得到我的Id找到的mxCell的坐标(x,y),但是当我调用getGeometry()时,它给了我null并且在我得到NullPointerException之后。如何获取mxCell的坐标?

private double getX(String node){ 
    mxCell cell = (mxCell) ((mxGraphModel)map.getGraph().getModel()).getCell(node); 
    mxGeometry geo = cell.getGeometry();//this line give me the null value 
    double x = geo.getX();//NullPointerException 
    return x; 
} 

map是包含所有图的mxGraphComponent。

我在想什么?

回答

1

我假设你的String node参数应该映射到单元的id

基本上,您选择所有单元格,获取它们并遍历它们。由于JGraph中的几乎所有内容都是Object,因此您需要一些演员。

private double getXForCell(String id) { 
    double res = -1; 
    graph.clearSelection(); 
    graph.selectAll(); 
    Object[] cells = graph.getSelectionCells(); 
    for (Object object : cells) { 
     mxCell cell = (mxCell) object; 
     if (id.equals(cell.getId())) { 
      res = cell.getGeometry().getX(); 
     } 
    } 
    graph.clearSelection(); 
    return res; 
} 

你还不如,如果cell.isVertex()调用getGeometry(),因为它在边缘上不同的方式实现前检查。

编辑:跟着你的方法和以下作品也适合我。似乎你需要额外的演员(mxCell)

mxGraphModel graphModel = (mxGraphModel) graph.getModel(); 
return ((mxCell) graphModel.getCell(id)).getGeometry().getX(); 
+0

是的,我在找这个,谢谢! –

+0

我还发现'void graph.selectVertices()'方法,如果只想查询顶点,这可能很有用。 – Johannes

+0

它会导致一些问题,因为它必须由EDT完成,因为选择也是图形化的 –