# Class SwingNode

java.lang.Object
javafx.scene.Node
javafx.embed.swing.SwingNode

All Implemented Interfaces:
  `Styleable, EventTarget`

public class SwingNode extends Node
This class is used to embed a Swing content into a JavaFX application. The content to be displayed is specified with the `setContent(JComponent)` method that accepts an instance of Swing `JComponent`. The hierarchy of components contained in the `JComponent` instance should not contain any heavyweight components, otherwise `SwingNode` may fail to paint it. The content gets repainted automatically. All the input and focus events are forwarded to the `JComponent` instance transparently to the developer.

Here is a typical pattern which demonstrates how `SwingNode` can be used:

        public class SwingFx extends Application {

            @Override
            public void start(Stage stage) {
                final SwingNode swingNode = new SwingNode();
                createAndSetSwingContent(swingNode);

                StackPane pane = new StackPane();
                pane.getChildren().add(swingNode);

                stage.setScene(new Scene(pane, 100, 50));
                stage.show();
            }

            private void createAndSetSwingContent(final SwingNode swingNode) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        swingNode.setContent(new JButton("Click me!"));
                    }
                });
            }

            public static void main(String[] args) {
                launch(args);
            }
        }

Since:
  JavaFX 8.0

- ## Property Summary

  ### Properties declared in class Node

  `accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, focusVisible, focusWithin, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragDone, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible`

- ## Field Summary

  ### Fields declared in class Node

  `BASELINE_OFFSET_SAME_AS_HEIGHT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SwingNode()`
  Constructs a new instance of `SwingNode`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `JComponent`
  `getContent()`
  Returns the `JComponent` instance attached to this `SwingNode`.
  `double`
  `maxHeight(double width)`
  Returns the `SwingNode`'s maximum height for use in layout calculations.
  `double`
  `maxWidth(double height)`
  Returns the `SwingNode`'s maximum width for use in layout calculations.
  `double`
  `minHeight(double width)`
  Returns the `SwingNode`'s minimum height for use in layout calculations.
  `double`
  `minWidth(double height)`
  Returns the `SwingNode`'s minimum width for use in layout calculations.
  `double`
  `prefHeight(double width)`
  Returns the `SwingNode`'s preferred height for use in layout calculations.
  `double`
  `prefWidth(double height)`
  Returns the `SwingNode`'s preferred width for use in layout calculations.
  `void`
  `resize(double width, double height)`
  Invoked by the `SwingNode`'s parent during layout to set the `SwingNode`'s width and height.
  `void`
  `setContent(JComponent content)`
  Attaches a `JComponent` instance to display in this `SwingNode`.

  ### Methods declared in class Node

  `accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, focusVisibleProperty, focusWithinProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBaselineOffset, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClassCssMetaData, getClip, getContentBias, getCssMetaData, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragDone, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isFocusVisible, isFocusWithin, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragDoneProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, requestFocusTraversal, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragDone, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty`

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods declared in interface Styleable

  `getStyleableNode`

- ## Constructor Details

  - ### SwingNode

    public SwingNode()
    Constructs a new instance of `SwingNode`.

- ## Method Details

  - ### setContent

    public void setContent(JComponent content)
    Attaches a `JComponent` instance to display in this `SwingNode`.

    The method can be called either on the JavaFX Application thread or the Event Dispatch thread. Note however, that access to a Swing component must occur from the Event Dispatch thread according to the Swing threading restrictions.

    Parameters:
      `content` - a Swing component to display in this `SwingNode`
    See Also:
      - `EventQueue.isDispatchThread()`
      - `Platform.isFxApplicationThread()`

  - ### getContent

    public JComponent getContent()
    Returns the `JComponent` instance attached to this `SwingNode`.

    The method can be called either on the JavaFX Application thread or the Event Dispatch thread. Note however, that access to a Swing component must occur from the Event Dispatch thread according to the Swing threading restrictions.

    Returns:
      the Swing component attached to this `SwingNode`
    See Also:
      - `EventQueue.isDispatchThread()`
      - `Platform.isFxApplicationThread()`

  - ### resize

    public void resize(double width, double height)
    Invoked by the `SwingNode`'s parent during layout to set the `SwingNode`'s width and height. Applications should not invoke this method directly. If an application needs to directly set the size of the `SwingNode`, it should set the Swing component's minimum/preferred/maximum size constraints which will be propagated correspondingly to the `SwingNode` and it's parent will honor those settings during layout.
    Overrides:
      `resize` in class `Node`
    Parameters:
      `width` - the target layout bounds width
      `height` - the target layout bounds height
    See Also:
      - `Node.isResizable()`
      - `Node.getContentBias()`
      - `Node.autosize()`
      - `Node.minWidth(double)`
      - `Node.minHeight(double)`
      - `Node.prefWidth(double)`
      - `Node.prefHeight(double)`
      - `Node.maxWidth(double)`
      - `Node.maxHeight(double)`
      - `Node.getLayoutBounds()`

  - ### prefWidth

    public double prefWidth(double height)
    Returns the `SwingNode`'s preferred width for use in layout calculations. This value corresponds to the preferred width of the Swing component.
    Overrides:
      `prefWidth` in class `Node`
    Parameters:
      `height` - the height that should be used if preferred width depends on it
    Returns:
      the preferred width that the node should be resized to during layout
    See Also:
      - `Node.isResizable()`
      - `Node.getContentBias()`
      - `Node.autosize()`

  - ### prefHeight

    public double prefHeight(double width)
    Returns the `SwingNode`'s preferred height for use in layout calculations. This value corresponds to the preferred height of the Swing component.
    Overrides:
      `prefHeight` in class `Node`
    Parameters:
      `width` - the width that should be used if preferred height depends on it
    Returns:
      the preferred height that the node should be resized to during layout
    See Also:
      - `Node.getContentBias()`
      - `Node.autosize()`

  - ### maxWidth

    public double maxWidth(double height)
    Returns the `SwingNode`'s maximum width for use in layout calculations. This value corresponds to the maximum width of the Swing component.
    Overrides:
      `maxWidth` in class `Node`
    Parameters:
      `height` - the height that should be used if maximum width depends on it
    Returns:
      the maximum width that the node should be resized to during layout
    See Also:
      - `Node.isResizable()`
      - `Node.getContentBias()`

  - ### maxHeight

    public double maxHeight(double width)
    Returns the `SwingNode`'s maximum height for use in layout calculations. This value corresponds to the maximum height of the Swing component.
    Overrides:
      `maxHeight` in class `Node`
    Parameters:
      `width` - the width that should be used if maximum height depends on it
    Returns:
      the maximum height that the node should be resized to during layout
    See Also:
      - `Node.isResizable()`
      - `Node.getContentBias()`

  - ### minWidth

    public double minWidth(double height)
    Returns the `SwingNode`'s minimum width for use in layout calculations. This value corresponds to the minimum width of the Swing component.
    Overrides:
      `minWidth` in class `Node`
    Parameters:
      `height` - the height that should be used if minimum width depends on it
    Returns:
      the minimum width that the node should be resized to during layout
    See Also:
      - `Node.isResizable()`
      - `Node.getContentBias()`

  - ### minHeight

    public double minHeight(double width)
    Returns the `SwingNode`'s minimum height for use in layout calculations. This value corresponds to the minimum height of the Swing component.
    Overrides:
      `minHeight` in class `Node`
    Parameters:
      `width` - the width that should be used if minimum height depends on it
    Returns:
      the minimum height that the node should be resized to during layout
    See Also:
      - `Node.isResizable()`
      - `Node.getContentBias()`