1
2
3
4
5
6
7
8
9 package edu.uci.ics.jung.samples;
10
11 import java.awt.BorderLayout;
12 import java.awt.Color;
13 import java.awt.Container;
14 import java.awt.Dimension;
15 import java.awt.GridLayout;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ActionListener;
18 import java.awt.event.ItemEvent;
19 import java.awt.event.ItemListener;
20
21 import javax.swing.BorderFactory;
22 import javax.swing.JApplet;
23 import javax.swing.JButton;
24 import javax.swing.JComboBox;
25 import javax.swing.JFrame;
26 import javax.swing.JMenuBar;
27 import javax.swing.JPanel;
28
29 import edu.uci.ics.jung.algorithms.layout.FRLayout;
30 import edu.uci.ics.jung.graph.Graph;
31 import edu.uci.ics.jung.graph.util.TestGraphs;
32 import edu.uci.ics.jung.visualization.DefaultVisualizationModel;
33 import edu.uci.ics.jung.visualization.GraphZoomScrollPane;
34 import edu.uci.ics.jung.visualization.VisualizationModel;
35 import edu.uci.ics.jung.visualization.VisualizationViewer;
36 import edu.uci.ics.jung.visualization.control.CrossoverScalingControl;
37 import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
38 import edu.uci.ics.jung.visualization.control.ScalingControl;
39 import edu.uci.ics.jung.visualization.decorators.PickableEdgePaintTransformer;
40 import edu.uci.ics.jung.visualization.decorators.PickableVertexPaintTransformer;
41 import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
42 import edu.uci.ics.jung.visualization.picking.PickedState;
43 import edu.uci.ics.jung.visualization.renderers.Renderer;
44 import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position;
45
46
47
48
49
50
51
52
53
54
55 @SuppressWarnings("serial")
56 public class VertexLabelPositionDemo extends JApplet {
57
58
59
60
61 Graph<String,Number> graph;
62
63 FRLayout<String,Number> graphLayout;
64
65
66
67
68 VisualizationViewer<String,Number> vv;
69
70 ScalingControl scaler;
71
72
73
74
75
76
77 public VertexLabelPositionDemo() {
78
79
80 graph = TestGraphs.getOneComponentGraph();
81
82 graphLayout = new FRLayout<String,Number>(graph);
83 graphLayout.setMaxIterations(1000);
84
85 Dimension preferredSize = new Dimension(600,600);
86
87 final VisualizationModel<String,Number> visualizationModel =
88 new DefaultVisualizationModel<String,Number>(graphLayout, preferredSize);
89 vv = new VisualizationViewer<String,Number>(visualizationModel, preferredSize);
90
91 PickedState<String> ps = vv.getPickedVertexState();
92 PickedState<Number> pes = vv.getPickedEdgeState();
93 vv.getRenderContext().setVertexFillPaintTransformer(new PickableVertexPaintTransformer<String>(ps, Color.red, Color.yellow));
94 vv.getRenderContext().setEdgeDrawPaintTransformer(new PickableEdgePaintTransformer<Number>(pes, Color.black, Color.cyan));
95 vv.setBackground(Color.white);
96 vv.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.W);
97
98 vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
99
100
101 vv.setVertexToolTipTransformer(new ToStringLabeller());
102
103 Container content = getContentPane();
104 GraphZoomScrollPane gzsp = new GraphZoomScrollPane(vv);
105 content.add(gzsp);
106
107
108
109
110 final DefaultModalGraphMouse<String,Number> graphMouse
111 = new DefaultModalGraphMouse<String,Number>();
112
113 vv.setGraphMouse(graphMouse);
114 vv.addKeyListener(graphMouse.getModeKeyListener());
115
116 final ScalingControl scaler = new CrossoverScalingControl();
117
118 JButton plus = new JButton("+");
119 plus.addActionListener(new ActionListener() {
120 public void actionPerformed(ActionEvent e) {
121 scaler.scale(vv, 1.1f, vv.getCenter());
122 }
123 });
124 JButton minus = new JButton("-");
125 minus.addActionListener(new ActionListener() {
126 public void actionPerformed(ActionEvent e) {
127 scaler.scale(vv, 1/1.1f, vv.getCenter());
128 }
129 });
130 JPanel positionPanel = new JPanel();
131 positionPanel.setBorder(BorderFactory.createTitledBorder("Label Position"));
132 JMenuBar menubar = new JMenuBar();
133 menubar.add(graphMouse.getModeMenu());
134 gzsp.setCorner(menubar);
135 JComboBox<Position> cb = new JComboBox<Position>();
136 cb.addItem(Renderer.VertexLabel.Position.N);
137 cb.addItem(Renderer.VertexLabel.Position.NE);
138 cb.addItem(Renderer.VertexLabel.Position.E);
139 cb.addItem(Renderer.VertexLabel.Position.SE);
140 cb.addItem(Renderer.VertexLabel.Position.S);
141 cb.addItem(Renderer.VertexLabel.Position.SW);
142 cb.addItem(Renderer.VertexLabel.Position.W);
143 cb.addItem(Renderer.VertexLabel.Position.NW);
144 cb.addItem(Renderer.VertexLabel.Position.N);
145 cb.addItem(Renderer.VertexLabel.Position.CNTR);
146 cb.addItem(Renderer.VertexLabel.Position.AUTO);
147 cb.addItemListener(new ItemListener() {
148 public void itemStateChanged(ItemEvent e) {
149 Renderer.VertexLabel.Position position =
150 (Renderer.VertexLabel.Position)e.getItem();
151 vv.getRenderer().getVertexLabelRenderer().setPosition(position);
152 vv.repaint();
153 }});
154 cb.setSelectedItem(Renderer.VertexLabel.Position.SE);
155 positionPanel.add(cb);
156 JPanel controls = new JPanel();
157 JPanel zoomControls = new JPanel(new GridLayout(2,1));
158 zoomControls.setBorder(BorderFactory.createTitledBorder("Zoom"));
159 zoomControls.add(plus);
160 zoomControls.add(minus);
161
162 controls.add(zoomControls);
163 controls.add(positionPanel);
164 content.add(controls, BorderLayout.SOUTH);
165 }
166
167 public static void main(String[] args) {
168 JFrame f = new JFrame();
169 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
170 f.getContentPane().add(new VertexLabelPositionDemo());
171 f.pack();
172 f.setVisible(true);
173 }
174 }