Fandom

Planet JFX

Updating Java Objects From JavaFX Script

118pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Introduction Edit

The following code example will show you how to update a Java object from a JavaFX script.


DataObject.java:

package fxexamples;

public class DataObject {
private String name;
private String address;
private String phone;
private boolean isDirty;
/*Getters and Setters omitted for brevity*/

        public void PrintContents() {
		System.out.println("Name: " + name);
		System.out.println("Address: " + address);
		System.out.println("Phone: " + phone);
	}
}

FXtoJava.fx:

package fxexamples;
import javafx.ui.*;
import java.lang.System;
import fxexamples.DataObject;

JAVAOBJ:DataObject;

class DataClass {
 attribute name:String;
 attribute address:String;
 attribute phone:String;
}

var data:DataClass = new DataClass();

operation UpdateJavaData(dc:DataClass) {
 JAVAOBJ:DataObject.setName(dc.name);
 JAVAOBJ:DataObject.setAddress(dc.address);
 JAVAOBJ:DataObject.setPhone(dc.phone);
 JAVAOBJ:DataObject.PrintContents();
 System.out.println("Updated java object");
}

Frame {
 title: "FXTimer"
 width: 250
 height: 200
 content: [ Box {
 orientation: VERTICAL
 content: [ FlowPanel {
 content: [ Label {text: "Name"}, TextField { value: bind data.name columns: 10 } ]
 }, FlowPanel {
 content: [ Label {text: "Address"}, TextField { value: bind data.address columns: 10 } ]
 }, FlowPanel {
 content: [ Label {text: "Phone"}, TextField { value: bind data.phone columns: 10 } ]
 }, Button {
 text: "Update Java Data" action: operation() {
                                   UpdateJavaData(data);
                                  }
 }]
 }]
 visible: true
}

RunFX.java:

package fxexamples;

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.SimpleScriptContext;
import javax.swing.SwingUtilities;

public class RunFX {
 public static void main(String[] args) {
 final DataObject myObj = new DataObject();
 Runnable fxScript = new Runnable() {
 public void run() {
 ClassLoader loader = Thread.currentThread().getContextClassLoader();
 ScriptEngineManager manager = new ScriptEngineManager(loader);
 ScriptEngine engine = manager.getEngineByExtension("fx");
 Bindings bindings = engine.createBindings();
 //Bind the Java Object to the one we'll use in the JavaFX Script
 bindings.put("JAVAOBJ:fxexamples.DataObject", myObj);
 ScriptContext context = new SimpleScriptContext();
 context.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);
 context.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
 engine.setContext(context);
 
 String script = "import fxexamples.FXtoJava;";
 try {
      engine.eval(script);
 } catch(Exception ex) {
      ex.printStackTrace();
 }
 }
 };
 SwingUtilities.invokeLater( fxScript );
 }
}

Also on Fandom

Random Wiki