2013-09-16 2 views
0

Я использую этот код, чтобы выделить вершину, которую я нажимаю, и ее дочерний элемент, изменяя непрозрачность. Он работает только для следующего дочернего элемента, связанного с выбранной мной вершиной. Как я мог сделать то же самое, щелкнув вершину, но выделим также все вершины, связанные с ее дочерним элементом, и те, которые приводят к заклинаемой вершине. Заранее спасибоВыделение нескольких ячеек в jgraphx

public void CellHighlight() { 



      graphComponent.getGraphControl().addMouseListener(new MouseAdapter() { 
       public void mouseReleased (MouseEvent e1) { 
        if (e1.getButton() == 1 && e1.getClickCount() == 2) { 
        final Object selectedCell = graphComponent.getCellAt(e1.getX(), e1.getY()); 
        Object[] allCells = mxGraphModel.getChildren(graph.getModel(), graph.getDefaultParent()); 
        if (selectedCell != null) { 
         if (graph.getModel().isVertex(selectedCell)) { 
          for(Object myCell: allCells) { 
           graph.getView().getState(myCell).getStyle().put(mxConstants.STYLE_OPACITY, OPACITY_PALE); 
           graph.getView().getState(myCell).getStyle().put(mxConstants.STYLE_TEXT_OPACITY, OPACITY_PALE); 
          } 
          List<Object> cellList = new ArrayList<Object>(); 
          cellList.add(selectedCell); 
          Object[] outgoingEdges = mxGraphModel.getOutgoingEdges(graph.getModel(), selectedCell); 
          for(Object edge: outgoingEdges) { 
           cellList.add(graph.getModel().getTerminal(edge, false)); 
          } 
          cellList.addAll(Arrays.asList(outgoingEdges)); 
          for(Object myCell: cellList) { 
           graph.getView().getState(myCell).getStyle().put(mxConstants.STYLE_OPACITY, OPACITY_HIGHLIGHT); 
           graph.getView().getState(myCell).getStyle().put(mxConstants.STYLE_TEXT_OPACITY, OPACITY_HIGHLIGHT); 
          } 
         } else { 
          for(Object myCell: allCells) { 
           graph.getView().getState(myCell).getStyle().put(mxConstants.STYLE_OPACITY, OPACITY_HIGHLIGHT); 
           graph.getView().getState(myCell).getStyle().put(mxConstants.STYLE_TEXT_OPACITY, OPACITY_HIGHLIGHT); 
          } 
         } 
         mxRectangle bounds = graph.getBoundsForCells(allCells, true, true, true); 
         graph.repaint(bounds); 
        } 
       } 


      } 
       }); 
      } 

ответ

0

Рекурсия - это ответ!

Как только я получу его, я отправлю объяснение и код, который я написал, чтобы удалить ячейку и все ее потомки (дети, дети детей и т. Д.) Также автоматически удаляются , Я думаю, что это довольно легко применить в этом контексте, и я надеюсь, что вы получили мой намек.

 Смежные вопросы

  • Нет связанных вопросов^_^