2016-08-11 8 views
1

Я создаю различные типы Edges, изменяя DefaultEdgeStyle. Каждый стиль зависит от кнопки, нажатой в пользовательском интерфейсе, и края добавляются перетаскиванием из одной вершины в другую, а не с помощью метода вставки.GetEdgeStyle return null JGraphX ​​

Моя проблема в том, что когда я хочу получить стиль ребра, возвращается null.

Почему это происходит? Я использую JgraphX ​​(v6)

private void applyEdgeNew2(mxStylesheet stylesheet) { 
    // Settings for edges 
    Map<String, Object> edge = new HashMap<String, Object>(); 
    edge.put(mxConstants.STYLE_ROUNDED, true); 
    edge.put(mxConstants.STYLE_ORTHOGONAL, false); 
    edge.put(mxConstants.STYLE_EDGE, "elbowEdgeStyle"); 
    edge.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_CONNECTOR); 
    edge.put(mxConstants.STYLE_ENDARROW, mxConstants.ARROW_CLASSIC); 
    edge.put(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE); 
    edge.put(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER); 
    edge.put(mxConstants.STYLE_STROKECOLOR, "#FF0000"); // default is #6482B9 
    edge.put(mxConstants.STYLE_FONTCOLOR, "#446299"); 
    stylesheet.putCellStyle("edge2", edge); 
    stylesheet.setDefaultEdgeStyle(edge); 
} 

private void applyEdgeNew3(mxStylesheet stylesheet) { 
    // Settings for edges 
    Map<String, Object> edge = new HashMap<String, Object>(); 
    edge.put(mxConstants.STYLE_EDGE, mxConstants.EDGESTYLE_SEGMENT); 
    edge.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_CONNECTOR); 
    edge.put(mxConstants.STYLE_ENDARROW, mxConstants.ARROW_CLASSIC); 
    edge.put(mxConstants.STYLE_STROKECOLOR, "#6482B9"); // default is #6482B9 
    stylesheet.putCellStyle("edge3", edge); 
    stylesheet.setDefaultEdgeStyle(edge); 

} 


graphComponent.getGraphControl().addMouseListener(new MouseListener() { 

    @Override 
    public void mouseReleased(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mousePressed(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseExited(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void mouseClicked(MouseEvent e) { 
     mxCell cell =(mxCell) graphComponent.getCellAt(e.getX(), e.getY()); 
     if(cell != null) 
     { 
     System.out.println("Edge:"+cell.isEdge()); 
     System.out.println("Vertex:"+cell.isVertex()); 
     if (cell.isEdge()){ 

     System.out.println(cell.getStyle()); //Here is the problem(It return null value) 
     System.out.println(cell.getId()); 
     System.out.println(cell.getSource()); 
     System.out.println(cell.getTarget()); 
    } 
    if (cell.isVertex()){ 
     System.out.println(cell.getStyle()); 
     System.out.println(cell.getId()); 
    } 
} 

}

ответ

1

null возвращается, потому что каждое ребро использует defaultEdgeStyle, определенный в mxStylesheet.

Раньше созданные ребра просто не обновлялись в представлении. Если вы немного пообщаетесь с ними, вы поймете, что они изменят свой стиль на новый определенный defaultEdgeStyle.

Если вы хотите разные стили, вам нужно создать ребра и дать им параметр style. Это может быть ключом к записи, добавленной в объект mxStylesheet вашего графика, или совершенно новый стиль, например. strokeColor=#0ff00f