Я использую этот код, чтобы выделить вершину, которую я нажимаю, и ее дочерний элемент, изменяя непрозрачность. Он работает только для следующего дочернего элемента, связанного с выбранной мной вершиной. Как я мог сделать то же самое, щелкнув вершину, но выделим также все вершины, связанные с ее дочерним элементом, и те, которые приводят к заклинаемой вершине. Заранее спасибоВыделение нескольких ячеек в 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);
}
}
}
});
}