View Javadoc
1   package edu.uci.ics.jung.visualization.layout;
2   
3   import java.awt.Color;
4   import java.awt.Graphics;
5   import java.awt.Graphics2D;
6   import java.awt.geom.Rectangle2D;
7   import java.util.List;
8   
9   import javax.swing.event.ChangeEvent;
10  import javax.swing.event.ChangeListener;
11  
12  import edu.uci.ics.jung.algorithms.layout.Layout;
13  import edu.uci.ics.jung.graph.Graph;
14  import edu.uci.ics.jung.visualization.Layer;
15  import edu.uci.ics.jung.visualization.RenderContext;
16  import edu.uci.ics.jung.visualization.VisualizationServer;
17  import edu.uci.ics.jung.visualization.util.ChangeEventSupport;
18  
19  public class BoundingRectanglePaintable<V,E> implements VisualizationServer.Paintable {
20  
21  	protected RenderContext<V,E> rc;
22  	protected Graph<V,E> graph;
23  	protected Layout<V,E> layout;
24  	protected List<Rectangle2D> rectangles;
25  	
26  	public BoundingRectanglePaintable(RenderContext<V, E> rc, Layout<V, E> layout) {
27  		super();
28  		this.rc = rc;
29  		this.layout = layout;
30  		this.graph = layout.getGraph();
31  		final BoundingRectangleCollector<V,E> brc = new BoundingRectangleCollector<V,E>(rc, layout);
32  		this.rectangles = brc.getRectangles();
33  		if(layout instanceof ChangeEventSupport) {
34  			((ChangeEventSupport)layout).addChangeListener(new ChangeListener() {
35  
36  				public void stateChanged(ChangeEvent e) {
37  					brc.compute();
38  					rectangles = brc.getRectangles();
39  				}});
40  		}
41  	}
42  	
43  	public void paint(Graphics g) {
44  		Graphics2D g2d = (Graphics2D)g;
45  		g.setColor(Color.cyan);
46  		
47  		for(Rectangle2D r : rectangles) {
48  			g2d.draw(rc.getMultiLayerTransformer().transform(Layer.LAYOUT, r));
49  		}
50  	}
51  
52  	public boolean useTransform() {
53  		return true;
54  	}
55  
56  }