Flow Visualization Library for JavaFX and VRL-Studio

Overview

VWorkflows

Build Status

Interactive flow/graph visualization for building domain specific visual programming environments. Provides UI bindings for JavaFX.

See http://mihosoft.eu/?p=523 and http://mihosoft.eu/?p=564 for an introduction.

Join the Developer Group if you'd like to contribute.

Maven Coordinates

VWorkflows-Core:

Download Javadocs

<dependency>
  <groupId>eu.mihosoft.vrl.workflow</groupId>
  <artifactId>vworkflows-core</artifactId>
  <version>0.2.3</version>
</dependency>

VWorkflows-FX:

Download Javadocs

Replace version with the desired version (see above for latest version).

<dependency>
  <groupId>eu.mihosoft.vrl.workflow</groupId>
  <artifactId>vworkflows-fx</artifactId>
  <version>0.2.3</version>
</dependency>

How To Build

Reqirements

  • Java >= 1.8.0_60
  • Internet connection (other dependencies are downloaded automatically)
  • IDE: Gradle Plugin (not necessary for command line usage)

IDE

Open the VWorkflows Gradle project in your favourite IDE (tested with NetBeans 8.1) and build it by calling the assemble task.

Command Line

Navigate to the Gradle project (e.g., path/to/VWorkflows) and enter the following command

Bash (Linux/OS X/Cygwin/other Unix-like OS)

./gradlew assemble

Windows (CMD)

gradlew assemble

Test It

Besides the tests defined in VWorkflows-Core (test task) it is also possible to run a graphical demo that comes with VWorkflows-Demo subproject. To run it call the run task.

Comments
  • Multiple in / out

    Multiple in / out

    Hi, very nice project you have here.

    I have watched a couple videos and scanned some code, I couldn't figure out if this library allows for multiple in and out connections to a node. In all the videos I only see one in and out per node.

    I have a use case where I would definitely use this library and possibly help contribute if I were able to hook up multiple connections to nodes. Sorry if there is api where this would be obvious, I tried to find the answer quickly. :)

    Mike

    opened by teotigraphix 8
  • A bound value cannot be set

    A bound value cannot be set

    I am running a modified and simplified version of your demo within Luna Eclipse and Java 8.

    I can add a node just fine, however, when I add an input or output, I get the following error:

    Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: A bound value cannot be set. at javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:142) at javafx.scene.Node.setLayoutX(Node.java:2412) at javafx.scene.Node.relocate(Node.java:2538) at javafx.scene.Node.resizeRelocate(Node.java:2891) at javafx.scene.layout.AnchorPane.layoutChildren(AnchorPane.java:363) at javafx.scene.Parent.layout(Parent.java:1076) at javafx.scene.Parent.layout(Parent.java:1082) at javafx.scene.Parent.layout(Parent.java:1082) at javafx.scene.Parent.layout(Parent.java:1082) at javafx.scene.Parent.layout(Parent.java:1082) at javafx.scene.Parent.layout(Parent.java:1082) at javafx.scene.Scene.doLayoutPass(Scene.java:576) at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2386) at com.sun.javafx.tk.Toolkit$3.run(Toolkit.java:321) at com.sun.javafx.tk.Toolkit$3.run(Toolkit.java:319) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:319) at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:348) at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:479) at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:460) at com.sun.javafx.tk.quantum.QuantumToolkit$13.run(QuantumToolkit.java:327) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) at java.lang.Thread.run(Thread.java:745)

    Any clue what I am doing wrong?

    opened by PatMartin 7
  • Implementation question

    Implementation question

    I had an idea for an application that could be visualized using VWorkflows. The idea is to have events that trigger specific actions (for example a scheduled task or watching a directory for a new file). The trigger will then provide the specific file or a start signal to the next node that will be process the file in a specific manner. The goal is to create a tool that can be used to automate tasks (like sorting files, triggering backups etc.). All actions (like moving, copying, renaming files, deleting) could be visualized as a node with an input of accepts a file and an output that provides the new file or nothing. I couldn't really figure out how to pass information from one node to another via a connection. I created two nodes with the same type of output and input, connected them and tried to pass data over via the value object property but that doesn't seem to work out that well. Could you help me out please? Any help is appreciated. I tried to look into vrlstudio but couldn't find the part where data is transmitted/received via the node's connections.

    opened by mainrs 5
  • NoClassDefFoundError with Java 8

    NoClassDefFoundError with Java 8

    Demos in eu.mihosoft.vrl.workflow.demo and in eu.mihosoft.vrl.workflow.demo5 thows error ander Java version 8.

    Caused by: java.lang.ClassNotFoundException: com.sun.javafx.scene.control.skin.SkinBase

    opened by alexey-schroeder 5
  • Extension points

    Extension points

    This PR addresses the following points:

    • reduce code duplication between FXConnectionSkin and FXNewConnectionSkin by adding a type in between.
    • expose package private classes as public.
    • apply license headers to all files

    WARNING: The AbstractFXConnectionSkin classes follows the template method pattern to let its subclasses initialize various aspects. This leads to an explicit invocation of the init() method right after the constructor is invoked.

    opened by aalmiray 4
  • Dangling Connection with Exception

    Dangling Connection with Exception

    connector ins nowhere

    When dropping the connection to nowhere there is a NPE (the Connection stays green and that dropped point like in the picture):

    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at eu.mihosoft.vrl.workflow.skin.FlowNodeSkinLookupImpl.getById(FlowNodeSkinLookupImpl.java:180) at eu.mihosoft.vrl.workflow.fx.FlowNodeWindow.connectorsToFront(FlowNodeWindow.java:328) at eu.mihosoft.vrl.workflow.fx.FlowNodeWindow.access$000(FlowNodeWindow.java:71) at eu.mihosoft.vrl.workflow.fx.FlowNodeWindow$1.handle(FlowNodeWindow.java:102) at eu.mihosoft.vrl.workflow.fx.FlowNodeWindow$1.handle(FlowNodeWindow.java:99) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:204) at com.sun.javafx.event.EventQueue.fire(EventQueue.java:48) at javafx.scene.Scene$MouseHandler.handleEnterExit(Scene.java:3662) at javafx.scene.Scene$MouseHandler.process(Scene.java:3728) at javafx.scene.Scene$MouseHandler.access$1800(Scene.java:3471) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1695) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2486) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:314) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:243) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:345) at com.sun.glass.ui.View.handleMouseEvent(View.java:526) at com.sun.glass.ui.View.notifyMouse(View.java:898) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) at java.lang.Thread.run(Thread.java:744)

    opened by bigDevDe 4
  • Possible NPE in eu.mihosoft.vrl.workflow.VFlowImpl

    Possible NPE in eu.mihosoft.vrl.workflow.VFlowImpl

    Given 2 connected nodes, removing a node will throw NPE in VFlowImpl.init Guarding with a null check will solve the issue, but not sure if this is the best solution.

    opened by hkarim 4
  • net.nemerosa:versioning plugin requires external git client

    net.nemerosa:versioning plugin requires external git client

    Currently, the net.nemerosa:versioning plugin depends on git/git.exe executables. This is a disadvantage, especially on Windows. For unexperienced users this behavior causes a lot of trouble since most of the time, the git-client provided by the IDE is sufficient and the dependency to an additional git executable complicates the build process.

    See https://github.com/nemerosa/versioning/issues/27 for status updates

    opened by miho 3
  • Is this broken on JavaFX 9?

    Is this broken on JavaFX 9?

    I tried getting the example described in http://mihosoft.eu/?p=523 to work. I replaced setSkinFactory with setSkinFactories, of course. The result on JavaFX 9 is... nothing.

    Is this broken on JavaFX 9? If so, is there a workaround, or a fix, or a...?

    opened by zilti 2
  • Connections not Showing Up

    Connections not Showing Up

    I'm fairly new at this, but I didn't see any tutorials or sample code online besides those found on this repository.

    Basically, I'm using one of the tutorial programs on the website, but it doesn't seem to show any of the connections or the connectors on the nodes themselves. I'll include the code I'm using, as well as a screen shot of what it looks like.

    Using Maven build 0.2.4.3

    opened by ddukki 2
  • Use only a single timerthread

    Use only a single timerthread

    Since every event did create a new thread the library was very thread intensive. With this change, only a single thread is used. This significantly improves the performance for complex flows.

    opened by cbvms123 2
  • Improve GRADLE build Performance

    Improve GRADLE build Performance

    Parallel builds. This project contains multiple modules. Parallel builds can improve the build speed by executing tasks in parallel. We can enable this feature by setting org.gradle.parallel=true.

    File system watching. Since Gradle 6.5, File system watching was introduced which can help to avoid unnecessary I/O. This feature is the default since 7.0. For an older version, we can enable this feature by setting org.gradle.vfs.watch=true.

    Configuration on demand. Configuration on demand tells Gradle to configure modules that only are relevant to the requested tasks instead of configuring all of them. We can enable this feature by setting org.gradle.configureondemand=true.

    gradle caching. Shared caches can reduce the number of tasks you need to execute by reusing outputs already generated elsewhere. This can significantly decrease build times. We can enable this feature by setting org.gradle.caching=true.

    ===================== If there are any inappropriate modifications in this PR, please give me a reply and I will change them.

    opened by shisheng-1 0
  • Exception when starting a new scene

    Exception when starting a new scene

    Everything is ok until I try to visualize the java fx scene:

            // create a flow object
            VFlow flow = FlowFactory.newFlow();
    
            // add two nodes to the flow
            VNode n1 = flow.newNode();
            VNode n2 = flow.newNode();
    
            // create input and output connectors of type "default-type"
            Connector inN1 = n1.addInput("default-type");
            Connector outN1 = n1.addOutput("default-type");
            Connector inN2 = n2.addInput("default-type");
            Connector outN2 = n2.addOutput("default-type");
    
            // create a connections
            flow.connect(outN1, inN2);
            // we assume a flow already exists
            // make the flow visible
            flow.setVisible(true);
    
            // create a zoomable canvas
            VCanvas canvas = new VCanvas();
            Pane root = (Pane) canvas.getContent();
    
            // creating a skin factory and attach it to the flow
            FXSkinFactory skinFactory = new FXSkinFactory(root);
            flow.setSkinFactories(skinFactory);
            
            Scene scene = new Scene(canvas);
            primaryStage.setTitle("Try");
            primaryStage.setScene(scene);
            primaryStage.show();// create a flow object
            VFlow flow = FlowFactory.newFlow();
    
            // add two nodes to the flow
            VNode n1 = flow.newNode();
            VNode n2 = flow.newNode();
    
            // create input and output connectors of type "default-type"
            Connector inN1 = n1.addInput("default-type");
            Connector outN1 = n1.addOutput("default-type");
            Connector inN2 = n2.addInput("default-type");
            Connector outN2 = n2.addOutput("default-type");
    
            // create a connections
            flow.connect(outN1, inN2);
            // we assume a flow already exists
            // make the flow visible
            flow.setVisible(true);
    
            // create a zoomable canvas
            VCanvas canvas = new VCanvas();
            Pane root = (Pane) canvas.getContent();
    
            // creating a skin factory and attach it to the flow
            FXSkinFactory skinFactory = new FXSkinFactory(root);
            flow.setSkinFactories(skinFactory);
            
            Scene scene = new Scene(canvas);
            primaryStage.setTitle("Try");
            primaryStage.setScene(scene);
            primaryStage.show();
    

    I get the following error:

    Exception in Application start method
    java.lang.reflect.InvocationTargetException
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
    Caused by: java.lang.RuntimeException: Exception in Application start method
    	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.NullPointerException
    	at jfxtras.scene.control.window.Window.getUserAgentStylesheet(Window.java:501)
    	at com.sun.javafx.css.StyleManager.findMatchingStyles(StyleManager.java:1683)
    	at javafx.scene.CssStyleHelper.createStyleHelper(CssStyleHelper.java:111)
    	at javafx.scene.Node.reapplyCss(Node.java:8985)
    	at javafx.scene.Node.reapplyCss(Node.java:9014)
    	at javafx.scene.Node.reapplyCss(Node.java:9014)
    	at javafx.scene.Node.impl_reapplyCSS(Node.java:8948)
    	at javafx.scene.Node.invalidatedScenes(Node.java:856)
    	at javafx.scene.Node.setScenes(Node.java:921)
    	at javafx.scene.Scene$9.invalidated(Scene.java:1119)
    	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:111)
    	at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
    	at javafx.scene.Scene.setRoot(Scene.java:1072)
    	at javafx.scene.Scene.<init>(Scene.java:347)
    	at javafx.scene.Scene.<init>(Scene.java:194)
    	at sample.Main.start(Main.java:109)
    	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
    	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
    	at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
    	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    	at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    	... 1 more
    Exception running application sample.Main
    

    which is triggered by the new Scene(canvas) line

    did this happen to anybody else?

    opened by alessiapacca 0
  • VisualizationRequest.KEY_NODE_NOT_REMOVABLE has no effect

    VisualizationRequest.KEY_NODE_NOT_REMOVABLE has no effect

    I am trying to disable/hide the 'X' button in a VNode that is rendered in a VCanvas. Here's the code snippet that I wrote to do it:

    DefaultValueObject dvo = new DefaultValueObject(); dvo.setValue(myObject); VNode node = workflow.newNode(dvo); node.getVisualizationRequest().set(VisualizationRequest.KEY_NODE_NOT_REMOVABLE, true);

    Unfortunately, it has no effect. I have tried it both when creating the node, but also inside a custom class that extends the FXFlowNodeSkinBase.

    Am I doing something wrong?

    PS. Is this project still active?

    opened by m0squito 1
  • ScalableContentPane  cause StackOverflowError

    ScalableContentPane cause StackOverflowError

    Try to run demo in openjdk14+jfx. Got lot of error message below,tried to mark ScalableContentPane.computeScale then could run? Don't know why....

    "C:\Program Files\Java\jdk-14.0.1\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63756,suspend=y,server=n -Dfile.encoding=UTF-8 -classpath "D:\00WS\JAVA\FlowChart\VWorkflows-Demo\target\classes;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-controls\14.0.1\javafx-controls-14.0.1.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-controls\14.0.1\javafx-controls-14.0.1-win.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-base\14.0.1\javafx-base-14.0.1.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-base\14.0.1\javafx-base-14.0.1-win.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-graphics\14.0.1\javafx-graphics-14.0.1.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-graphics\14.0.1\javafx-graphics-14.0.1-win.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-swing\14.0.1\javafx-swing-14.0.1.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-swing\14.0.1\javafx-swing-14.0.1-win.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-fxml\14\javafx-fxml-14.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-fxml\14\javafx-fxml-14-win.jar;D:\00WS\JAVA\FlowChart\VWorkflows-FX\target\classes;D:\00WS\JAVA\FlowChart\VWorkflows-Core\target\classes;C:\Users\n000000930\.m2\repository\com\thoughtworks\xstream\xstream\1.4.12\xstream-1.4.12.jar;C:\Users\n000000930\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\n000000930\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\n000000930\.m2\repository\net\sf\jung\jung-api\2.1.1\jung-api-2.1.1.jar;C:\Users\n000000930\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\n000000930\.m2\repository\net\sf\jung\jung-graph-impl\2.1.1\jung-graph-impl-2.1.1.jar;C:\Users\n000000930\.m2\repository\net\sf\jung\jung-algorithms\2.1.1\jung-algorithms-2.1.1.jar;C:\Users\n000000930\.m2\repository\net\sf\jung\jung-visualization\2.1.1\jung-visualization-2.1.1.jar;C:\Users\n000000930\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\n000000930\.m2\repository\eu\mihosoft\jfx\scaledfx\scaledfx\0.6\scaledfx-0.6.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-controls\11.0.2\javafx-controls-11.0.2-mac.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-fxml\11.0.2\javafx-fxml-11.0.2-mac.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-graphics\11.0.2\javafx-graphics-11.0.2-mac.jar;C:\Users\n000000930\.m2\repository\org\openjfx\javafx-base\11.0.2\javafx-base-11.0.2-mac.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar" eu.mihosoft.vrl.workflow.demo.GUIstart
    Connected to the target VM, address: '127.0.0.1:63756', transport: 'socket'
     >> generate workflowException in Application start method
    Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    	at java.base/java.lang.Thread.run(Thread.java:832)
    Caused by: java.lang.StackOverflowError
    	at javafx.scene.Parent.doComputeGeomBounds(Parent.java:1492)
    	at javafx.scene.Parent$1.doComputeGeomBounds(Parent.java:115)
    	at com.sun.javafx.scene.ParentHelper.computeGeomBoundsImpl(ParentHelper.java:84)
    	at com.sun.javafx.scene.layout.RegionHelper.superComputeGeomBoundsImpl(RegionHelper.java:78)
    	at com.sun.javafx.scene.layout.RegionHelper.superComputeGeomBounds(RegionHelper.java:62)
    	at javafx.scene.layout.Region.doComputeGeomBounds(Region.java:3289)
    	at javafx.scene.layout.Region$1.doComputeGeomBounds(Region.java:168)
    	at com.sun.javafx.scene.layout.RegionHelper.computeGeomBoundsImpl(RegionHelper.java:89)
    	at com.sun.javafx.scene.NodeHelper.computeGeomBounds(NodeHelper.java:115)
    	at javafx.scene.Node.updateGeomBounds(Node.java:3843)
    	at javafx.scene.Node.getGeomBounds(Node.java:3805)
    	at javafx.scene.Node.getLocalBounds(Node.java:3753)
    	at javafx.scene.Node.updateTxBounds(Node.java:3907)
    	at javafx.scene.Node.getTransformedBounds(Node.java:3699)
    	at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1848)
    	at javafx.scene.Parent.updateCachedBounds(Parent.java:1709)
    	at javafx.scene.Parent.recomputeBounds(Parent.java:1648)
    	at javafx.scene.Parent.doComputeGeomBounds(Parent.java:1501)
    	at javafx.scene.Parent$1.doComputeGeomBounds(Parent.java:115)
    	at com.sun.javafx.scene.ParentHelper.computeGeomBoundsImpl(ParentHelper.java:84)
    	at com.sun.javafx.scene.layout.RegionHelper.superComputeGeomBoundsImpl(RegionHelper.java:78)
    	at com.sun.javafx.scene.layout.RegionHelper.superComputeGeomBounds(RegionHelper.java:62)
    	at javafx.scene.layout.Region.doComputeGeomBounds(Region.java:3289)
    	at javafx.scene.layout.Region$1.doComputeGeomBounds(Region.java:168)
    	at com.sun.javafx.scene.layout.RegionHelper.computeGeomBoundsImpl(RegionHelper.java:89)
    	at com.sun.javafx.scene.NodeHelper.computeGeomBounds(NodeHelper.java:115)
    	at javafx.scene.Node.updateGeomBounds(Node.java:3843)
    	at javafx.scene.Node.getGeomBounds(Node.java:3805)
    	at javafx.scene.Node.getLocalBounds(Node.java:3753)
    	at javafx.scene.Node.updateTxBounds(Node.java:3907)
    	at javafx.scene.Node.getTransformedBounds(Node.java:3699)
    	at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1848)
    	at javafx.scene.Parent.recomputeBounds(Parent.java:1637)
    	at javafx.scene.Parent.doComputeGeomBounds(Parent.java:1501)
    	at javafx.scene.Parent$1.doComputeGeomBounds(Parent.java:115)
    	at com.sun.javafx.scene.ParentHelper.computeGeomBoundsImpl(ParentHelper.java:84)
    	at com.sun.javafx.scene.layout.RegionHelper.superComputeGeomBoundsImpl(RegionHelper.java:78)
    	at com.sun.javafx.scene.layout.RegionHelper.superComputeGeomBounds(RegionHelper.java:62)
    	at javafx.scene.layout.Region.doComputeGeomBounds(Region.java:3289)
    	at javafx.scene.layout.Region$1.doComputeGeomBounds(Region.java:168)
    	at com.sun.javafx.scene.layout.RegionHelper.computeGeomBoundsImpl(RegionHelper.java:89)
    	at com.sun.javafx.scene.NodeHelper.computeGeomBounds(NodeHelper.java:115)
    	at javafx.scene.Node.updateGeomBounds(Node.java:3843)
    	at javafx.scene.Node.getGeomBounds(Node.java:3805)
    	at javafx.scene.Node.getLocalBounds(Node.java:3753)
    	at javafx.scene.Node$MiscProperties$3.computeBounds(Node.java:6843)
    	at javafx.scene.Node$LazyBoundsProperty.get(Node.java:9777)
    	at javafx.scene.Node$LazyBoundsProperty.get(Node.java:9747)
    	at javafx.beans.binding.ObjectExpression.getValue(ObjectExpression.java:49)
    	at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:177)
    	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
    	at javafx.scene.Node$LazyBoundsProperty.invalidate(Node.java:9787)
    	at javafx.scene.Node$MiscProperties.invalidateBoundsInLocal(Node.java:6871)
    	at javafx.scene.Node.invalidateBoundsInLocal(Node.java:3464)
    	at javafx.scene.Node.localBoundsChanged(Node.java:4036)
    	at javafx.scene.Node.doGeomChanged(Node.java:4023)
    	at javafx.scene.Node$1.doGeomChanged(Node.java:462)
    	at com.sun.javafx.scene.NodeHelper.geomChangedImpl(NodeHelper.java:184)
    	at com.sun.javafx.scene.NodeHelper.geomChanged(NodeHelper.java:137)
    	at javafx.scene.Parent.childBoundsChanged(Parent.java:1873)
    	at javafx.scene.Node.notifyParentOfBoundsChange(Node.java:4094)
    	at javafx.scene.Node.transformedBoundsChanged(Node.java:4055)
    	at javafx.scene.Node.localBoundsChanged(Node.java:4037)
    	at javafx.scene.Node.doGeomChanged(Node.java:4023)
    	at javafx.scene.Node$1.doGeomChanged(Node.java:462)
    	at com.sun.javafx.scene.NodeHelper.geomChangedImpl(NodeHelper.java:184)
    	at com.sun.javafx.scene.NodeHelper.geomChanged(NodeHelper.java:137)
    	at javafx.scene.Parent.childBoundsChanged(Parent.java:1873)
    	at javafx.scene.Node.notifyParentOfBoundsChange(Node.java:4094)
    	at javafx.scene.Node.transformedBoundsChanged(Node.java:4055)
    	at javafx.scene.Node.localBoundsChanged(Node.java:4037)
    	at javafx.scene.Node.doGeomChanged(Node.java:4023)
    	at javafx.scene.Node$1.doGeomChanged(Node.java:462)
    	at com.sun.javafx.scene.NodeHelper.geomChangedImpl(NodeHelper.java:184)
    	at com.sun.javafx.scene.NodeHelper.geomChanged(NodeHelper.java:137)
    	at javafx.scene.Parent.childBoundsChanged(Parent.java:1873)
    	at javafx.scene.Node.notifyParentOfBoundsChange(Node.java:4094)
    	at javafx.scene.Node.transformedBoundsChanged(Node.java:4055)
    	at javafx.scene.Node.doTransformsChanged(Node.java:4998)
    	at javafx.scene.Node$1.doTransformsChanged(Node.java:445)
    	at com.sun.javafx.scene.NodeHelper.transformsChangedImpl(NodeHelper.java:170)
    	at com.sun.javafx.scene.NodeHelper.transformsChanged(NodeHelper.java:119)
    	at javafx.scene.transform.Transform.transformChanged(Transform.java:2109)
    	at javafx.scene.transform.Scale$1.invalidated(Scale.java:128)
    	at javafx.beans.property.DoublePropertyBase.markInvalid(DoublePropertyBase.java:113)
    	at javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:148)
    	at javafx.scene.transform.Scale.setX(Scale.java:115)
    	at eu.mihosoft.scaledfx.ScalableContentPane.computeScale(ScalableContentPane.java:197)
    	at eu.mihosoft.scaledfx.ScalableContentPane.lambda$new$0(ScalableContentPane.java:70)
    	at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
    
    opened by kaonick 0
  • Add event handler for connection

    Add event handler for connection

    Hello,

    Would someone enlighten me on how to add event handlers for connections in the controller? I know that we can define custom connection skin and handle in there but I would like to manipulate connection objects from inside my controllers.

    Thanks.

    opened by newbiettn 0
Releases(v0.2.5.0)
Owner
Michael Hoffer
Computer Scientist, Developer, Artist
Michael Hoffer
This is an open source visualization for the C4 model for visualising software architecture.

c4viz: C4 Visualization This is an open source visualization for the C4 model for visualising software architecture. It expects input in the form of a

Peter Valdemar Mørch 40 Dec 6, 2022
Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE 8 and provides the functionalities to use and handle easily Tiles in your JavaFX application.

Lib-Tile Intention Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE and provides the functionalities to use and handle easily Tile

Peter Rogge 13 Apr 13, 2022
DataFX - is a JavaFX frameworks that provides additional features to create MVC based applications in JavaFX by providing routing and a context for CDI.

What you’ve stumbled upon here is a project that intends to make retrieving, massaging, populating, viewing, and editing data in JavaFX UI controls ea

Guigarage 110 Dec 29, 2022
Tray Icon implementation for JavaFX applications. Say goodbye to using AWT's SystemTray icon, instead use a JavaFX Tray Icon.

FXTrayIcon Library intended for use in JavaFX applications that makes adding a System Tray icon easier. The FXTrayIcon class handles all the messy AWT

Dustin Redmond 248 Dec 30, 2022
A library for creating and editing graph-like diagrams in JavaFX.

Graph Editor A library for creating and editing graph-like diagrams in JavaFX. This project is a fork of tesis-dynaware/graph-editor 1.3.1, which is n

Steffen 125 Jan 1, 2023
SynchronizeFX - a library for JavaFX 2 and later that enables property bindings between different JVMs

SynchronizeFX - a library for JavaFX 2 and later that enables property bindings between different JVMs, both on a local computer and over the network.

Manuel Mauky 8 Jul 24, 2020
A library of +70 ready-to-use animations for JavaFX

AnimateFX A library of ready-to-use animations for JavaFX Features: Custom animations Custom interpolators Play/Stop animation Play an animation after

Loïc Sculier 366 Jan 5, 2023
A JavaFX library that allows Java2D code (Graphics2D) to be used to draw to a Canvas node.

FXGraphics2D Version 2.1, 3 October 2020. Overview FXGraphics2D is a free implementation of Java's Graphics2D API that targets the JavaFX Canvas. It m

David Gilbert 184 Dec 31, 2022
A library for JavaFX that gives you the ability to show progress on the Windows taskbar.

A clean and easy way to implement this amazing native Windows taskbar-progressbar functionality in javaFX Background Since Windows 7 there is a taskba

Daniel Gyoerffy 77 Nov 28, 2022
Provides a Java API to use the JavaScript library d3.js with the JavaFx WebView

javafx-d3 Provides a Java API for using the JavaScript library d3.js with JavaFx Applications. Many thanks to the authors of the projects gwt-d3 [1] a

null 98 Dec 19, 2022
Kubed - A port of the popular Javascript library D3.js to Kotlin/JavaFX.

Kubed: A Kotlin DSL for data visualization Kubed is a data visualization DSL embedded within the Kotlin programming language. Kubed facilitates the cr

Brian Hudson 71 Dec 28, 2022
A 3D chart library for Java applications (JavaFX, Swing or server-side).

Orson Charts (C)opyright 2013-2020, by Object Refinery Limited. All rights reserved. Version 2.0, 15 March 2020. Overview Orson Charts is a 3D chart l

David Gilbert 96 Sep 27, 2022
A JavaFX library containing tiles that can be used for dashboards.

TilesFX A JavaFX library containing tiles for Dashboards. Donations are welcome at Paypal Intro The Tile is a simple JavaFX Control that comes with di

Gerrit Grunwald 1.3k Dec 30, 2022
A Javafx Library for building MVC Applications.

A JavaFx Library For Making MVC Type Desktop Applications Installation requires Java jdk > 7 for windows requres openjdk-7 or 8 and openjfx for linux

Obi Uchenna David 38 Apr 30, 2022
RXControls is a JavaFX custom component library.

RXControls RXControls Version 8.x.y need javafx8 RXControls Version 11.x.y need javafx11+ 一个javafx的自定义组件库, 密码可见组件, 轮播图组件, 动态按钮组件等, 音频频谱可视化组件,歌词组件 等...

null 164 Jan 1, 2023
A JavaFX library that contains different kind of charts

Charts A library for scientific charts in JavaFX. This is still a work in development, but here are some of the charts being worked on so far. The cha

Gerrit Grunwald 497 Jan 2, 2023
A 2D chart library for Java applications (JavaFX, Swing or server-side).

JFreeChart Version 2.0.0, not yet released. Overview JFreeChart is a comprehensive free chart library for the Java(tm) platform that can be used on th

David Gilbert 946 Jan 5, 2023
MaterialFX is an open source Java library which provides material design components for JavaFX

MaterialFX MaterialFX is an open source Java library which provides material design components for JavaFX Explore the wiki » Download Latest Demo · Re

Alessadro Parisi 744 Jan 3, 2023
JFXNodeMapper - a simple library that focuses on mapping data from common data represntation formats to JavaFx Nodes

JFXNodeMapper - a simple library that focuses on mapping data from common data represntation formats to JavaFx Nodes. Our main focus is to build a library that,

Aby Kuruvilla 7 Oct 15, 2021