SwingNode (JavaFX 13)

Module javafx.swing
Package javafx.embed.swing

## 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(javax.swing.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 inherited from class javafx.scene.Node

      `accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, 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 inherited from class javafx.scene.Node

      `BASELINE_OFFSET_SAME_AS_HEIGHT`

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `JComponent` | `getContent()` | Returns the `JComponent` instance attached to this `SwingNode`.
    `boolean` | `isResizable()` | Indicates whether this node is a type which can be resized by its parent.
    `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 inherited from class javafx.scene.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, 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, 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, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, 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, 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, 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, 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 inherited from class java.lang.Object

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

    - ### Methods inherited from interface javafx.css.Styleable

      `getStyleableNode`

- - ### Constructor Detail

    - #### SwingNode

          public SwingNode()

      Constructs a new instance of `SwingNode`.

  - ### Method Detail

    - #### 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()`

    - #### isResizable

          public boolean isResizable()

      Description copied from class: `Node`
      Indicates whether this node is a type which can be resized by its parent. If this method returns true, then the parent will resize the node (ideally within its size range) by calling node.resize(width,height) during the layout pass. All Regions, Controls, and WebView are resizable classes which depend on their parents resizing them during layout once all sizing and CSS styling information has been applied.

      If this method returns false, then the parent cannot resize it during layout (resize() is a no-op) and it should return its layoutBounds for minimum, preferred, and maximum sizes. Group, Text, and all Shapes are not resizable and hence depend on the application to establish their sizing by setting appropriate properties (e.g. width/height for Rectangle, text on Text, and so on). Non-resizable nodes may still be relocated during layout.

      Overrides:
        `isResizable` in class `Node`
      Returns:
        whether or not this node type can be resized by its parent during layout
      See Also:
        `Node.getContentBias()`, `Node.minWidth(double)`, `Node.minHeight(double)`, `Node.prefWidth(double)`, `Node.prefHeight(double)`, `Node.maxWidth(double)`, `Node.maxHeight(double)`, `Node.resize(double, double)`, `Node.getLayoutBounds()`

    - #### 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()`