Skip to main content
Jump to: navigation, search


< GEF‎ | GEF4
Revision as of 18:59, 20 November 2013 by (Talk | contribs)

Note to non-wiki readers: This documentation is generated from the Eclipse wiki - if you have corrections or additions it would be awesome if you added them in the original wiki page.


The GEF4 SwtFX component provides specific JavaFX Node implementations which embed SWT Controls in a JavaFX scene graph. The component is subdivided into different packages:

  • org.eclipse.gef4.swtfx
    Contains SWT specific sub-classes of JavaFX framework classes to make embedding SWT Controls in a JavaFX scene graph possible.
  • org.eclipse.gef4.swtfx.controls
    Contains JavaFX Node implementations for the individual SWT Controls, i.e. SwtFXButton, SwtFXLabel, etc.


  • package: org.eclipse.gef4.swtfx

In order to be able to embed SWT Controls in a JavaFX scene graph, we decided to sub-class two JavaFX framework classes: FXCanvas, and Scene. This is due to the API mismatch of SWT and JavaFX. To create an SWT Control, you need to know its parent (a Composite). But in JavaFX you can create all the nodes you need first, and then plug them together to the full scene graph. Therefore, a JavaFX Node for an SWT Control, which we will refer to as SwtFXControl, has to create the "peer" SWT Control not until it can acquire an SWT Composite. For the embedding of JavaFX in an SWT application, JavaFX provides the FXCanvas (which is a SWT Composite). Our SwtFXScene allows access to a corresponding SwtFXCanvas, so that a SwtFXControl can check for its Scene to determine if creating the peer is possible.

This is how you create the context for SwtFX:

import org.eclipse.gef4.swtfx.SwtFXCanvas;
import org.eclipse.gef4.swtfx.SwtFXScene;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public abstract class SwtFXApplication {
	public SwtFXApplication() {
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setLayout(new FillLayout());
		SwtFXCanvas canvas = new SwtFXCanvas(shell, SWT.NONE);
		SwtFXScene scene = createScene();
		shell.setSize((int) scene.getWidth(), (int) scene.getHeight());;
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
	public abstract SwtFXScene createScene();





  • package: org.eclipse.gef4.swtfx.controls

Although you are able to create specific SwtFXControls yourself by sub-classing AbstractSwtFXControl, we provide implementations for a set of SWT Controls, already.


The SwtFXButton is used to embed SWT Button controls in a JavaFX scene graph.

In order to be able to correctly embed multiple radio button groups, you have to group the buttons together by using the SwtFXButton#groupRadios() method. The standard SWT way does not work, because you would have to create all radio buttons of one group in one Composite. But as we only have access to one single Composite, which serves as the parent for all SWT peers, we cannot use the standard behavior.


The SwtFXStyledText is used to embed SWT StyledText controls in a JavaFX scene graph.

Back to the top