2017-06-29 171 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完成,因爲選擇也是圖形化的 –