1

我需要获取我通过他的 ID 找到的 mxCell 的坐标(x,y),但是当我在其上调用 getGeometry() 时,它给了我 null 并且在我得到 NullPointerException 之后。

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。

我错过了什么?

4

1 回答 1

2

我假设您的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()您不妨在调用之前检查 if getGeometry(),因为它在边缘上的实现方式不同。

编辑:遵循您的方法,以下内容也适用于我。好像你需要额外的演员表(mxCell)

mxGraphModel graphModel = (mxGraphModel) graph.getModel();
return ((mxCell) graphModel.getCell(id)).getGeometry().getX();
于 2017-07-06T12:38:16.900 回答