| BuildGraphDemo.java |
1 /****************************************************************************
2 **
3 ** This file is part of yFiles-2.9.
4 **
5 ** yWorks proprietary/confidential. Use is subject to license terms.
6 **
7 ** Redistribution of this file or of an unauthorized byte-code version
8 ** of this file is strictly forbidden.
9 **
10 ** Copyright (c) 2000-2011 by yWorks GmbH, Vor dem Kreuzberg 28,
11 ** 72070 Tuebingen, Germany. All rights reserved.
12 **
13 ***************************************************************************/
14 package demo.view;
15
16 import y.base.Node;
17 import y.view.Arrow;
18 import y.view.EdgeLabel;
19 import y.view.EditMode;
20 import y.view.EdgeRealizer;
21 import y.view.Graph2D;
22 import y.view.Graph2DView;
23 import y.view.ImageNodeRealizer;
24 import y.view.NodeLabel;
25 import y.view.NodeRealizer;
26 import y.view.ShapeNodeRealizer;
27 import y.view.SmartEdgeLabelModel;
28 import y.view.SmartNodeLabelModel;
29
30 import java.awt.BorderLayout;
31 import java.awt.EventQueue;
32 import javax.swing.JFrame;
33 import javax.swing.JPanel;
34 import javax.swing.JRootPane;
35
36 /**
37 * <p>
38 * Demonstrates simple usage of {@link Graph2DView}, {@link Graph2D}
39 * and {@link EditMode}.
40 * </p>
41 * <p>
42 * This demo creates an initial graph by adding nodes and edges
43 * to the {@link Graph2D} displayed by the main {@link Graph2DView}
44 * view using API calls. It further shows how some graphical node
45 * and edge properties can be set (see {@link #buildGraph()}).
46 * </p>
47 * <p>
48 * Additionally it is shown how the appearance of the default nodes
49 * and edges can be set (see {@link #configureDefaultRealizers()}).
50 * This applies to new nodes and edges added to the initial graph.
51 * Editing the initial graph is possible due to the {@link EditMode}
52 * added to the view.
53 * </p>
54 *
55 * @see <a href="http://docs.yworks.com/yfiles/doc/developers-guide/base.html#Creating%20Graphs%20and%20Graph%20Elements">Section Creating Graphs and Graph Elements</a> in the yFiles for Java Developer's Guide
56 * @see <a href="http://docs.yworks.com/yfiles/doc/developers-guide/mvc_view.html">Section View Implementations</a> in the yFiles for Java Developer's Guide
57 * @see <a href="http://docs.yworks.com/yfiles/doc/developers-guide/realizer_related.html">Section Realizer-Related Features</a> in the yFiles for Java Developer's Guide
58 * @see <a href="http://docs.yworks.com/yfiles/doc/developers-guide/realizers.html">Section Bringing Graph Elements to Life: The Realizer Concept</a> in the yFiles for Java Developer's Guide
59 */
60 public class BuildGraphDemo extends JPanel
61 {
62 Graph2DView view;
63
64 public BuildGraphDemo()
65 {
66 setLayout(new BorderLayout());
67 view = new Graph2DView();
68 EditMode mode = new EditMode();
69 view.addViewMode(mode);
70 add(view);
71
72 configureDefaultRealizers();
73 buildGraph();
74 }
75
76 protected void configureDefaultRealizers()
77 {
78 Graph2D graph = view.getGraph2D();
79
80 //change the looks of the default edge
81 EdgeRealizer er = graph.getDefaultEdgeRealizer();
82 //a standard (target) arrow
83 er.setArrow(Arrow.STANDARD);
84
85 //change the looks (and type) of the default node
86 ShapeNodeRealizer snr = new ShapeNodeRealizer(ShapeNodeRealizer.ROUND_RECT);
87 snr.setSize(80, 30);
88 snr.setFillColor(DemoDefaults.DEFAULT_NODE_COLOR);
89 NodeLabel label = snr.getLabel();
90 SmartNodeLabelModel model = new SmartNodeLabelModel();
91 label.setLabelModel(model);
92 label.setModelParameter(model.getDefaultParameter());
93
94 //use it as default node realizer
95 graph.setDefaultNodeRealizer(snr);
96 }
97
98 void buildGraph()
99 {
100 Graph2D graph = view.getGraph2D();
101
102 //register an image with ImageNodeRealizer.
103 //must be a path name relative to your java CLASSPATH.
104 ImageNodeRealizer inr = new ImageNodeRealizer();
105 //set the image
106 inr.setImageURL(getClass().getResource("resource/yicon.png"));
107 //set node size equals to half of original image size
108 inr.setToImageSize();
109 inr.setSize(inr.getWidth()/2, inr.getHeight()/2);
110 inr.setLocation(60, 200);
111 //set a label text
112 inr.setLabelText("yFiles");
113
114 // set the label model to be a SmartNodeLabelModel
115 // (free label placement with snapping to significant positions)
116 // with an initial position south of the node
117 SmartNodeLabelModel labelModel = new SmartNodeLabelModel();
118 NodeLabel nodeLabel = inr.getLabel();
119 nodeLabel.setLabelModel(labelModel);
120 nodeLabel.setModelParameter(labelModel.createDiscreteModelParameter(SmartNodeLabelModel.POSITION_SOUTH));
121
122 //create a node that displays the image
123 Node v = graph.createNode(inr);
124
125
126
127 //create some edges and new nodes
128 for (int i = 0; i < 5; i++) {
129 Node w = graph.createNode();
130
131 //customize position and label of the created node
132 NodeRealizer nr = graph.getRealizer(w);
133 nr.setLocation(300, 100 + i*50);
134 nr.setLabelText("Node " + (i+1));
135
136 graph.createEdge(v, w);
137
138 //decorations for the created edge
139 EdgeRealizer er = graph.getRealizer(graph.lastEdge());
140 if (i % 2 == 0) {
141 //set diamond source arrow
142 er.setSourceArrow(Arrow.WHITE_DIAMOND);
143 } else {
144 //a label for the edge
145 EdgeLabel edgeLabel = er.getLabel();
146 edgeLabel.setText("Edge " + (i + 1));
147 SmartEdgeLabelModel model = new SmartEdgeLabelModel();
148 model.setDefaultDistance(2);
149 model.setAutoRotationEnabled(true);
150 edgeLabel.setLabelModel(model);
151 int pos = ((i+1) % 4) == 0
152 ? SmartEdgeLabelModel.POSITION_RIGHT
153 : SmartEdgeLabelModel.POSITION_LEFT;
154 edgeLabel.setModelParameter(model.createDiscreteModelParameter(pos));
155 }
156 }
157 }
158
159 public void start()
160 {
161 JFrame frame = new JFrame(getClass().getName());
162 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
163 addContentTo(frame.getRootPane());
164 frame.pack();
165 frame.setLocationRelativeTo(null);
166 frame.setVisible(true);
167 }
168
169 public final void addContentTo( final JRootPane rootPane )
170 {
171 rootPane.setContentPane(this);
172 }
173
174 public static void main(String[] args) {
175 EventQueue.invokeLater(new Runnable() {
176 public void run() {
177 (new BuildGraphDemo()).start();
178 }
179 });
180 }
181 }
182