public class FXCanvas
extends org.eclipse.swt.widgets.Canvas
FXCanvas
is a component to embed JavaFX content into
SWT applications. The content to be displayed is specified
with the setScene(javafx.scene.Scene)
method that accepts an instance of
JavaFX Scene
. After the scene is assigned, it gets
repainted automatically. All the input and focus events are
forwarded to the scene transparently to the developer.
Here is a typical pattern how FXCanvas
can used:
public class Test { private static Scene createScene() { Group group = new Group(); Scene scene = new Scene(group); Button button = new Button("JFX Button"); group.getChildren().add(button); return scene; } public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); FXCanvas canvas = new FXCanvas(shell, SWT.NONE); Scene scene = createScene(); canvas.setScene(scene); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }
Modifier and Type | Class and Description |
---|---|
private class |
FXCanvas.HostContainer |
Modifier and Type | Field and Description |
---|---|
private static java.lang.reflect.Method |
backingScaleFactorMethod |
(package private) static org.eclipse.swt.dnd.Transfer[] |
CustomTransfers |
private org.eclipse.swt.dnd.DropTarget |
dropTarget |
private FXCanvas.HostContainer |
hostContainer |
(package private) int |
lastHeight |
(package private) java.nio.IntBuffer |
lastPixelsBuf |
(package private) double |
lastScaleFactor |
(package private) int |
lastWidth |
(package private) org.eclipse.swt.widgets.Listener |
moveFilter |
private int |
pHeight |
private java.nio.IntBuffer |
pixelsBuf |
private int |
pPreferredHeight |
private int |
pPreferredWidth |
private int |
pWidth |
private Scene |
scene |
private EmbeddedSceneInterface |
scenePeer |
private static java.lang.reflect.Method |
screenMethod |
private EmbeddedWindow |
stage |
private EmbeddedStageInterface |
stagePeer |
(package private) static org.eclipse.swt.dnd.Transfer[] |
StandardTransfers |
(package private) static java.util.ArrayList<org.eclipse.swt.dnd.DropTarget> |
targets |
private static java.lang.reflect.Field |
windowField |
private static java.lang.reflect.Method |
windowMethod |
Constructor and Description |
---|
FXCanvas(org.eclipse.swt.widgets.Composite parent,
int style) |
Modifier and Type | Method and Description |
---|---|
org.eclipse.swt.graphics.Point |
computeSize(int wHint,
int hHint,
boolean changed) |
(package private) static org.eclipse.swt.dnd.Transfer[] |
getAllTransfers() |
(package private) static org.eclipse.swt.dnd.Transfer |
getCustomTransfer(java.lang.String mime) |
(package private) org.eclipse.swt.dnd.DropTarget |
getDropTarget() |
private double |
getScaleFactor() |
Scene |
getScene()
Returns the JavaFX scene attached to this
FXCanvas . |
private static void |
initFx() |
private void |
paintControl(org.eclipse.swt.events.PaintEvent pe) |
private void |
registerEventListeners() |
private void |
resizePixelBuffer(double newScaleFactor) |
private void |
sendFocusEventToFX(org.eclipse.swt.events.FocusEvent fe,
boolean focused) |
private void |
sendKeyEventToFX(org.eclipse.swt.events.KeyEvent e,
int type) |
private void |
sendMenuEventToFX(org.eclipse.swt.events.MenuDetectEvent me) |
private void |
sendMouseEventToFX(org.eclipse.swt.events.MouseEvent me,
int embedMouseType) |
private void |
sendMoveEventToFX() |
private void |
sendResizeEventToFX() |
(package private) void |
setDropTarget(org.eclipse.swt.dnd.DropTarget newTarget) |
void |
setScene(Scene newScene)
Attaches a
Scene object to display in this FXCanvas . |
(package private) static void |
updateDropTarget() |
private void |
widgetDisposed(org.eclipse.swt.events.DisposeEvent de) |
drawBackground, getCaret, getIME, scroll, setCaret, setFont, setIME
changed, checkSubclass, drawBackground, getBackgroundMode, getChildren, getLayout, getLayoutDeferred, getTabList, isLayoutDeferred, layout, layout, layout, layout, layout, setBackgroundMode, setFocus, setLayout, setLayoutDeferred, setTabList
computeTrim, getClientArea, getHorizontalBar, getScrollbarsMode, getVerticalBar
addControlListener, addDragDetectListener, addFocusListener, addGestureListener, addHelpListener, addKeyListener, addMenuDetectListener, addMouseListener, addMouseMoveListener, addMouseTrackListener, addMouseWheelListener, addPaintListener, addTouchListener, addTraverseListener, computeSize, dragDetect, dragDetect, forceFocus, getAccessible, getBackground, getBackgroundImage, getBorderWidth, getBounds, getCursor, getDragDetect, getEnabled, getFont, getForeground, getLayoutData, getLocation, getMenu, getMonitor, getOrientation, getParent, getRegion, getShell, getSize, getTextDirection, getToolTipText, getTouchEnabled, getVisible, internal_dispose_GC, internal_new_GC, isEnabled, isFocusControl, isReparentable, isVisible, moveAbove, moveBelow, pack, pack, print, redraw, redraw, removeControlListener, removeDragDetectListener, removeFocusListener, removeGestureListener, removeHelpListener, removeKeyListener, removeMenuDetectListener, removeMouseListener, removeMouseMoveListener, removeMouseTrackListener, removeMouseWheelListener, removePaintListener, removeTouchListener, removeTraverseListener, requestLayout, setBackground, setBackgroundImage, setBounds, setBounds, setCapture, setCursor, setDragDetect, setEnabled, setForeground, setLayoutData, setLocation, setLocation, setMenu, setOrientation, setParent, setRedraw, setRegion, setSize, setSize, setTextDirection, setToolTipText, setTouchEnabled, setVisible, toControl, toControl, toDisplay, toDisplay, traverse, traverse, traverse, update
addDisposeListener, addListener, checkWidget, dispose, getData, getData, getDisplay, getListeners, getStyle, isAutoDirection, isDisposed, isListening, notifyListeners, removeDisposeListener, removeListener, removeListener, reskin, setData, setData, toString
private FXCanvas.HostContainer hostContainer
private volatile EmbeddedWindow stage
private volatile Scene scene
private EmbeddedStageInterface stagePeer
private EmbeddedSceneInterface scenePeer
private int pWidth
private int pHeight
private volatile int pPreferredWidth
private volatile int pPreferredHeight
private java.nio.IntBuffer pixelsBuf
org.eclipse.swt.widgets.Listener moveFilter
private org.eclipse.swt.dnd.DropTarget dropTarget
static org.eclipse.swt.dnd.Transfer[] StandardTransfers
static org.eclipse.swt.dnd.Transfer[] CustomTransfers
private static java.lang.reflect.Field windowField
private static java.lang.reflect.Method windowMethod
private static java.lang.reflect.Method screenMethod
private static java.lang.reflect.Method backingScaleFactorMethod
static java.util.ArrayList<org.eclipse.swt.dnd.DropTarget> targets
double lastScaleFactor
int lastWidth
int lastHeight
java.nio.IntBuffer lastPixelsBuf
private double getScaleFactor()
static org.eclipse.swt.dnd.Transfer[] getAllTransfers()
static org.eclipse.swt.dnd.Transfer getCustomTransfer(java.lang.String mime)
private static void initFx()
org.eclipse.swt.dnd.DropTarget getDropTarget()
void setDropTarget(org.eclipse.swt.dnd.DropTarget newTarget)
static void updateDropTarget()
public org.eclipse.swt.graphics.Point computeSize(int wHint, int hHint, boolean changed)
computeSize
in class org.eclipse.swt.widgets.Control
public Scene getScene()
FXCanvas
.Scene
attached to this FXCanvas
public void setScene(Scene newScene)
Scene
object to display in this FXCanvas
. This method must called either on the JavaFX
JavaFX application thread (which is the same as the SWT
event dispatch thread).newScene
- a scene to display in this FXCanvas
Platform.isFxApplicationThread()
private void registerEventListeners()
private void widgetDisposed(org.eclipse.swt.events.DisposeEvent de)
private void paintControl(org.eclipse.swt.events.PaintEvent pe)
private void sendMoveEventToFX()
private void sendMouseEventToFX(org.eclipse.swt.events.MouseEvent me, int embedMouseType)
private void sendKeyEventToFX(org.eclipse.swt.events.KeyEvent e, int type)
private void sendMenuEventToFX(org.eclipse.swt.events.MenuDetectEvent me)
private void sendResizeEventToFX()
private void resizePixelBuffer(double newScaleFactor)
private void sendFocusEventToFX(org.eclipse.swt.events.FocusEvent fe, boolean focused)