So today my colleague Bruno Borges asked me if I would have an example where I use JavaFX with Nashorn only...means without writing any Java code and because I had no example I've created one :)
So here you go, simply copy the following code in a file named e.g. nashorn.js :
load('fx:base.js'); load('fx:graphics.js'); var Random = java.util.Random; var lastTimerCall = 0; var Gauge = Packages.eu.hansolo.enzo.gauge.Gauge; var Section = Packages.eu.hansolo.enzo.common.Section; var timer = new AnimationTimer() { handle: function handle(now) { if (now > lastTimerCall + 5000000000) { gauge.value = new Random().nextDouble() * 40; lastTimerCall = now; } } }; var gauge = new Gauge(); gauge.title = 'NashornFX'; gauge.unit = '°C'; gauge.minValue = 0; gauge.maxValue = 40; gauge.sections = [new Section(18, 26), new Section(26, 32), new Section(32, 40)]; gauge.style = ('-section-fill-0: rgba(0, 200, 50, 0.5);' + '-section-fill-1: rgba(200, 100, 0, 0.5);' + '-section-fill-2: rgba(200, 0, 0, 0.5);'); $STAGE.title = 'Nashorn FX'; $STAGE.scene = new Scene(new StackPane(gauge), 400, 400); $STAGE.show(); timer.start();
And with a few lines of code we created a JavaFX scene and add a stage that contains a Gauge that has three sections with custom colors. In addition we also added an AnimationTimer that changes the value of the Gauge every 5 seconds.
For those of you who are wondering how I can access my Enzo-0.2.4.jar file here is solution...you can simply add it to the classpath when calling the script.
To be able to run the application you have to copy the Enzo-0.2.4.jar file to the same folder as the nashorn.js file. The Enzo library can be downloaded here.
To start the application simply execute the following on the command line:
#: jjs -cp Enzo-0.2.4.jar -fx nashorn.js
Please make sure you run that script on JDK 8 !
If everything is correct you should see something like this...
And that's it for today...keep coding... :)
Very nice.
ReplyDeleteThanks
This is great! I am looking at writing a JavaFX application for the control of microscope imaging systems (microscopes, objectives, filters, cameras, stages etc) and am looking to allow users to add bespoke functionality with javascript scripting. This certainly encourages me!
ReplyDelete