JavaFX Controls in Default Window

I have this very old incomplete attempt I did a long time ago that handles all Processing renderers, including FX2D for Processing 3:

The most relevant parts of that code for JavaFX:

import processing.core.PApplet;
import processing.core.PGraphics;
// FX2D
import javafx.scene.canvas.Canvas;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
protected final PApplet p;
protected final Object window;
protected final PGraphics pg;
public CanvasResizeWatcher(final PApplet pa, boolean now) {
  window = ( p = pa ).getSurface().getNative();
  pg = pa.getGraphics();
public String discoverRenderer() {
  if (window instanceof Canvas) return PApplet.FX2D;
  else if (pg.isGL()) return pg.is3D()? PApplet.P3D : PApplet.P2D;
  return PApplet.JAVA2D;
}
public interface SizeListener {
  SizeListener addListener();
  SizeListener removeListener();
}
protected SizeListener createRendererListener(String render) {
  if (render == null || render.isEmpty())  render = discoverRenderer();

  switch (render) {
  case PApplet.P2D:
  case PApplet.P3D:
    return new SizeListenerOPENGL();
  case PApplet.FX2D:
    return new SizeListenerFX2D<Double>();
  default:
    return new SizeListenerJAVA2D();
  }
}
public class SizeListenerFX2D<N extends Number>
  implements SizeListener, ChangeListener<N> {
  public final Canvas win = (Canvas) window;
  protected final ChangeListener changeListener = this;

  public SizeListenerFX2D() {
    if (listener != null)  listener.removeListener();
    listener = addListener();
  }

  @Override public SizeListener addListener() {
    win.widthProperty().addListener(changeListener);
    win.heightProperty().addListener(changeListener);
    return this;
  }

  @Override public SizeListener removeListener() {
    win.widthProperty().removeListener(changeListener);
    win.heightProperty().removeListener(changeListener);
    return this;
  }

  @Override public void
    changed(ObservableValue<? extends N> obs, N old, N cur) {
    if (!immediate)  resized.set(true);
    else             invokeCallback();
  }

  @Override public String toString() {
    return discoverRenderer();
  }
}