BuildGraphDemo.java |
1 /**************************************************************************** 2 * This demo file is part of yFiles for Java 2.14. 3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28, 4 * 72070 Tuebingen, Germany. All rights reserved. 5 * 6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution 7 * of demo files in source code or binary form, with or without 8 * modification, is not permitted. 9 * 10 * Owners of a valid software license for a yFiles for Java version that this 11 * demo is shipped with are allowed to use the demo source code as basis 12 * for their own yFiles for Java powered applications. Use of such programs is 13 * governed by the rights and conditions as set out in the yFiles for Java 14 * license agreement. 15 * 16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 ***************************************************************************/ 28 package demo.view; 29 30 import y.base.Node; 31 import y.view.Arrow; 32 import y.view.EdgeLabel; 33 import y.view.EditMode; 34 import y.view.EdgeRealizer; 35 import y.view.Graph2D; 36 import y.view.Graph2DView; 37 import y.view.ImageNodeRealizer; 38 import y.view.NodeLabel; 39 import y.view.NodeRealizer; 40 import y.view.ShapeNodeRealizer; 41 import y.view.SmartEdgeLabelModel; 42 import y.view.SmartNodeLabelModel; 43 44 import java.awt.BorderLayout; 45 import java.awt.EventQueue; 46 import javax.swing.JFrame; 47 import javax.swing.JPanel; 48 import javax.swing.JRootPane; 49 50 /** 51 * <p> 52 * Demonstrates simple usage of {@link Graph2DView}, {@link Graph2D} 53 * and {@link EditMode}. 54 * </p> 55 * <p> 56 * This demo creates an initial graph by adding nodes and edges 57 * to the {@link Graph2D} displayed by the main {@link Graph2DView} 58 * view using API calls. It further shows how some graphical node 59 * and edge properties can be set (see {@link #buildGraph()}). 60 * </p> 61 * <p> 62 * Additionally it is shown how the appearance of the default nodes 63 * and edges can be set (see {@link #configureDefaultRealizers()}). 64 * This applies to new nodes and edges added to the initial graph. 65 * Editing the initial graph is possible due to the {@link EditMode} 66 * added to the view. 67 * </p> 68 * 69 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/base#Creating%20Graphs%20and%20Graph%20Elements" target="_blank">Section Creating Graphs and Graph Elements</a> in the yFiles for Java Developer's Guide 70 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/mvc_view" target="_blank">Section View Implementations</a> in the yFiles for Java Developer's Guide 71 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/realizer_related" target="_blank">Section Realizer-Related Features</a> in the yFiles for Java Developer's Guide 72 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/realizers" target="_blank">Section Bringing Graph Elements to Life: The Realizer Concept</a> in the yFiles for Java Developer's Guide 73 */ 74 public class BuildGraphDemo extends JPanel 75 { 76 Graph2DView view; 77 78 public BuildGraphDemo() 79 { 80 setLayout(new BorderLayout()); 81 view = new Graph2DView(); 82 EditMode mode = new EditMode(); 83 view.addViewMode(mode); 84 add(view); 85 86 configureDefaultRealizers(); 87 buildGraph(); 88 } 89 90 protected void configureDefaultRealizers() 91 { 92 Graph2D graph = view.getGraph2D(); 93 94 //change the looks of the default edge 95 EdgeRealizer er = graph.getDefaultEdgeRealizer(); 96 //a standard (target) arrow 97 er.setArrow(Arrow.STANDARD); 98 99 //change the looks (and type) of the default node 100 ShapeNodeRealizer snr = new ShapeNodeRealizer(ShapeNodeRealizer.ROUND_RECT); 101 snr.setSize(80, 30); 102 snr.setFillColor(DemoDefaults.DEFAULT_NODE_COLOR); 103 NodeLabel label = snr.getLabel(); 104 SmartNodeLabelModel model = new SmartNodeLabelModel(); 105 label.setLabelModel(model, model.getDefaultParameter()); 106 107 //use it as default node realizer 108 graph.setDefaultNodeRealizer(snr); 109 } 110 111 void buildGraph() 112 { 113 Graph2D graph = view.getGraph2D(); 114 115 //register an image with ImageNodeRealizer. 116 //must be a path name relative to your java CLASSPATH. 117 ImageNodeRealizer inr = new ImageNodeRealizer(); 118 //set the image 119 inr.setImageURL(DemoBase.getResource(getClass(), "resource/yicon.png")); 120 //set node size equals to half of original image size 121 inr.setToImageSize(); 122 inr.setSize(inr.getWidth()/2, inr.getHeight()/2); 123 inr.setLocation(60, 200); 124 //set a label text 125 inr.setLabelText("yFiles"); 126 127 // set the label model to be a SmartNodeLabelModel 128 // (free label placement with snapping to significant positions) 129 // with an initial position south of the node 130 SmartNodeLabelModel labelModel = new SmartNodeLabelModel(); 131 NodeLabel nodeLabel = inr.getLabel(); 132 nodeLabel.setLabelModel(labelModel, 133 labelModel.createDiscreteModelParameter(SmartNodeLabelModel.POSITION_SOUTH)); 134 135 //create a node that displays the image 136 Node v = graph.createNode(inr); 137 138 139 140 //create some edges and new nodes 141 for (int i = 0; i < 5; i++) { 142 Node w = graph.createNode(); 143 144 //customize position and label of the created node 145 NodeRealizer nr = graph.getRealizer(w); 146 nr.setLocation(300, 100 + i*50); 147 nr.setLabelText("Node " + (i+1)); 148 149 graph.createEdge(v, w); 150 151 //decorations for the created edge 152 EdgeRealizer er = graph.getRealizer(graph.lastEdge()); 153 if (i % 2 == 0) { 154 //set diamond source arrow 155 er.setSourceArrow(Arrow.WHITE_DIAMOND); 156 } else { 157 //a label for the edge 158 EdgeLabel edgeLabel = er.getLabel(); 159 edgeLabel.setText("Edge " + (i + 1)); 160 SmartEdgeLabelModel model = new SmartEdgeLabelModel(); 161 model.setDefaultDistance(2); 162 model.setAutoRotationEnabled(true); 163 int pos = ((i+1) % 4) == 0 164 ? SmartEdgeLabelModel.POSITION_RIGHT 165 : SmartEdgeLabelModel.POSITION_LEFT; 166 edgeLabel.setLabelModel(model, model.createDiscreteModelParameter(pos)); 167 } 168 } 169 } 170 171 public void start() 172 { 173 JFrame frame = new JFrame(getClass().getName()); 174 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 175 addContentTo(frame.getRootPane()); 176 frame.pack(); 177 frame.setLocationRelativeTo(null); 178 frame.setVisible(true); 179 } 180 181 public final void addContentTo( final JRootPane rootPane ) 182 { 183 rootPane.setContentPane(this); 184 } 185 186 public static void main(String[] args) { 187 EventQueue.invokeLater(new Runnable() { 188 public void run() { 189 (new BuildGraphDemo()).start(); 190 } 191 }); 192 } 193 } 194