package edu.uci.ics.jung.visualization.layout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.util.List; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.visualization.Layer; import edu.uci.ics.jung.visualization.RenderContext; import edu.uci.ics.jung.visualization.VisualizationServer; import edu.uci.ics.jung.visualization.util.ChangeEventSupport; public class BoundingRectanglePaintable<V,E> implements VisualizationServer.Paintable { protected RenderContext<V,E> rc; protected Graph<V,E> graph; protected Layout<V,E> layout; protected List<Rectangle2D> rectangles; public BoundingRectanglePaintable(RenderContext<V, E> rc, Layout<V, E> layout) { super(); this.rc = rc; this.layout = layout; this.graph = layout.getGraph(); final BoundingRectangleCollector<V,E> brc = new BoundingRectangleCollector<V,E>(rc, layout); this.rectangles = brc.getRectangles(); if(layout instanceof ChangeEventSupport) { ((ChangeEventSupport)layout).addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { brc.compute(); rectangles = brc.getRectangles(); }}); } } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; g.setColor(Color.cyan); for(Rectangle2D r : rectangles) { g2d.draw(rc.getMultiLayerTransformer().transform(Layer.LAYOUT, r)); } } public boolean useTransform() { return true; } }