/******************************************************************************* * Copyright (c) 2014, 2016 itemis AG and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Matthias Wienand (itemis AG) - initial API and implementation * *******************************************************************************/ package org.eclipse.gef.fx.examples.snippets; import org.eclipse.gef.fx.anchors.DynamicAnchor; import org.eclipse.gef.fx.examples.AbstractFxExample; import org.eclipse.gef.fx.nodes.Connection; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; public class DynamicAnchorConnectionSnippet extends AbstractFxExample { public static void main(String[] args) { launch(); } private Rectangle nodeA; private Rectangle nodeB; private Rectangle nodeC; private DynamicAnchor anchorA; private DynamicAnchor anchorB; private DynamicAnchor anchorC; public DynamicAnchorConnectionSnippet() { super("DynamicConnectionSnippet"); } private EventHandler<ActionEvent> createMoveHandler(final String label, final Node node, final double x, final double y0, final double y1) { return new EventHandler<ActionEvent>() { boolean flag = false; @Override public void handle(ActionEvent event) { node.relocate(x, flag ? y0 : y1); flag = !flag; } }; } @Override public Scene createScene() { BorderPane root = new BorderPane(); Scene scene = new Scene(root, 640, 480); nodeA = new Rectangle(50, 50); nodeA.setFill(Color.RED); nodeB = new Rectangle(50, 50); nodeB.setFill(Color.BLUE); nodeC = new Rectangle(50, 50); nodeC.setFill(Color.GREEN); Button btnA = new Button("move A"); btnA.setOnAction(createMoveHandler("A", nodeA, 100, 100, 200)); btnA.relocate(0, 0); Button btnB = new Button("move B"); btnB.setOnAction(createMoveHandler("B", nodeB, 300, 100, 200)); btnB.relocate(70, 0); Button btnC = new Button("move C"); btnC.setOnAction(createMoveHandler("C", nodeC, 200, 200, 300)); btnC.relocate(140, 0); Connection connectionAB = new Connection(); Connection connectionBC = new Connection(); Group group = new Group(nodeA, nodeB, nodeC, connectionAB, connectionBC, btnA, btnB, btnC); root.getChildren().add(group); anchorA = new DynamicAnchor(nodeA); anchorB = new DynamicAnchor(nodeB); anchorC = new DynamicAnchor(nodeC); connectionAB.setStartAnchor(anchorA); connectionAB.setEndAnchor(anchorB); connectionBC.setStartAnchor(anchorB); connectionBC.setEndAnchor(anchorC); nodeA.relocate(100, 100); nodeB.relocate(300, 100); nodeC.relocate(200, 200); return scene; } }