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 }