@Override public void doAction() { boolean graphChanged = false; GraphNode nodes[] = model.getAllNodes().toArray(new GraphNode[model.getAllNodes().size()]); // goes through all nodes and hides any that have no arcs or have no visible arcs for(GraphNode node : nodes) { if(node.getArcs().size() == 0) { graphChanged = true; model.removeNode(node.getUserObject()); } else { boolean found = false; for(GraphArc arc : node.getArcs()) { if(arc.isVisible()) { found = true; } } if(!found) { graphChanged = true; model.removeNode(node.getUserObject()); } } } // re-layout the graph if it changed if(graphChanged) graph.performLayout(); } }