Module javafx.controls
Package javafx.scene.control

# Class Control

java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.control.Control

All Implemented Interfaces:
  `Styleable`, `EventTarget`, `Skinnable`

Direct Known Subclasses:
  `Accordion`, `ButtonBar`, `ChoiceBox`, `ComboBoxBase`, `HTMLEditor`, `Labeled`, `ListView`, `MenuBar`, `Pagination`, `ProgressIndicator`, `ScrollBar`, `ScrollPane`, `Separator`, `Slider`, `Spinner`, `SplitPane`, `TableView`, `TabPane`, `TextInputControl`, `ToolBar`, `TreeTableView`, `TreeView`

public abstract class Control extends Region implements Skinnable
Base class for all user interface controls. A "Control" is a node in the scene graph which can be manipulated by the user. Controls provide additional variables and behaviors beyond those of Node to support common user interactions in a manner which is consistent and predictable for the user.

Additionally, controls support explicit skinning to make it easy to leverage the functionality of a control while customizing its appearance.

See specific Control subclasses for information on how to use individual types of controls.

Most controls have their focusTraversable property set to true by default, however read-only controls such as `Label` and `ProgressIndicator`, and some controls that are containers `ScrollPane` and `ToolBar` do not. Consult individual control documentation for details.

Since:
  JavaFX 2.0

- ## Property Summary

  Properties
  Type
  Property
  Description
  `final ObjectProperty<ContextMenu>`
  `contextMenu`
  The ContextMenu to show for this control.
  `final ObjectProperty<Skin<?>>`
  `skin`
  Skin is responsible for rendering this `Control`.
  `final ObjectProperty<Tooltip>`
  `tooltip`
  The ToolTip for this control.

  ### Properties declared in class javafx.scene.layout.Region

  `background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width`

  ### Properties declared in class javafx.scene.Parent

  `needsLayout`

  ### Properties declared in class javafx.scene.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, 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 javafx.scene.layout.Region

  `USE_COMPUTED_SIZE, USE_PREF_SIZE`

  ### Fields declared in class javafx.scene.Node

  `BASELINE_OFFSET_SAME_AS_HEIGHT`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `Control()`
  Create a new Control.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected double`
  `computeMaxHeight(double width)`
  Computes the maximum allowable height of the Control, based on the provided width.
  `protected double`
  `computeMaxWidth(double height)`
  Computes the maximum allowable width of the Control, based on the provided height.
  `protected double`
  `computeMinHeight(double width)`
  Computes the minimum allowable height of the Control, based on the provided width.
  `protected double`
  `computeMinWidth(double height)`
  Computes the minimum allowable width of the Control, based on the provided height.
  `final ObjectProperty<ContextMenu>`
  `contextMenuProperty()`
  The ContextMenu to show for this control.
  `protected Skin<?>`
  `createDefaultSkin()`
  Create a new instance of the default skin for this control.
  `static List<CssMetaData<? extends Styleable,?>>`
  `getClassCssMetaData()`
  Gets the `CssMetaData` associated with this class, which may include the `CssMetaData` of its superclasses.
  `final ContextMenu`
  `getContextMenu()`
  Gets the value of the `contextMenu` property.
  `protected List<CssMetaData<? extends Styleable,?>>`
  `getControlCssMetaData()`
  Gets the unmodifiable list of the control's CSS-styleable properties.
  `final List<CssMetaData<? extends Styleable,?>>`
  `getCssMetaData()`
  This method returns a `List` containing all `CssMetaData` for both this Control (returned from `getControlCssMetaData()` and its `Skin`, assuming the `skin property` is a `SkinBase`.
  `protected Boolean`
  `getInitialFocusTraversable()`
  Returns the initial focus traversable state of this control, for use by the JavaFX CSS engine to correctly set its initial value.
  `final Skin<?>`
  `getSkin()`
  Gets the value of the `skin` property.
  `final Tooltip`
  `getTooltip()`
  Gets the value of the `tooltip` property.
  `boolean`
  `isResizable()`
  Returns `true` since all Controls are resizable.
  `final void`
  `setContextMenu(ContextMenu value)`
  Sets the value of the `contextMenu` property.
  `final void`
  `setSkin(Skin<?> value)`
  Sets the value of the `skin` property.
  `final void`
  `setTooltip(Tooltip value)`
  Sets the value of the `tooltip` property.
  `final ObjectProperty<Skin<?>>`
  `skinProperty()`
  Skin is responsible for rendering this `Control`.
  `final ObjectProperty<Tooltip>`
  `tooltipProperty()`
  The ToolTip for this control.

  ### Methods declared in class javafx.scene.layout.Region

  `backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, computePrefHeight, computePrefWidth, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty`

  ### Methods declared in class javafx.scene.Parent

  `getBaselineOffset, getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, layoutChildren, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds`

  ### Methods declared in 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, focusVisibleProperty, focusWithinProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, 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, isFocusVisible, isFocusWithin, 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 declared in class java.lang.Object

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

  ### Methods declared in interface javafx.css.Styleable

  `getStyleableNode`

- ## Property Details

  - ### skin

    public final ObjectProperty<Skin<?>> skinProperty
    Skin is responsible for rendering this `Control`. From the perspective of the `Control`, the `Skin` is a black box. It listens and responds to changes in state in a `Control`.

    There is a one-to-one relationship between a `Control` and its `Skin`. Every `Skin` maintains a back reference to the `Control` via the `Skin.getSkinnable()` method.

    To ensure a one-to-one relationship between a `Control` and its `Skin`, skins which were not created for this control are rejected with an `IllegalArgumentException`. Then, `Skin.dispose()` is called on the old skin, disconnecting it from the corresponding `Control`. And finally, `Skin.install()` is invoked to complete the process. Only inside of `Skin.install()` should `Skin` implementations set/overwrite properties of their `Control` (though some operations like adding/removing a listener can still be done in the `Skin` constructor).

    A skin may be null.

    Specified by:
      `skinProperty` in interface `Skinnable`
    Returns:
      the skin property for this Skinnable
    See Also:
      - `getSkin()`
      - `setSkin(Skin)`
      - `skinProperty()`

  - ### tooltip

    public final ObjectProperty<Tooltip> tooltipProperty
    The ToolTip for this control.
    See Also:
      - `getTooltip()`
      - `setTooltip(Tooltip)`
      - `tooltipProperty()`

  - ### contextMenu

    public final ObjectProperty<ContextMenu> contextMenuProperty
    The ContextMenu to show for this control.
    See Also:
      - `getContextMenu()`
      - `setContextMenu(ContextMenu)`
      - `contextMenuProperty()`

- ## Constructor Details

  - ### Control

    protected Control()
    Create a new Control.

- ## Method Details

  - ### skinProperty

    public final ObjectProperty<Skin<?>> skinProperty()
    Skin is responsible for rendering this `Control`. From the perspective of the `Control`, the `Skin` is a black box. It listens and responds to changes in state in a `Control`.

    There is a one-to-one relationship between a `Control` and its `Skin`. Every `Skin` maintains a back reference to the `Control` via the `Skin.getSkinnable()` method.

    To ensure a one-to-one relationship between a `Control` and its `Skin`, skins which were not created for this control are rejected with an `IllegalArgumentException`. Then, `Skin.dispose()` is called on the old skin, disconnecting it from the corresponding `Control`. And finally, `Skin.install()` is invoked to complete the process. Only inside of `Skin.install()` should `Skin` implementations set/overwrite properties of their `Control` (though some operations like adding/removing a listener can still be done in the `Skin` constructor).

    A skin may be null.

    Specified by:
      `skinProperty` in interface `Skinnable`
    Returns:
      the skin property for this control
    See Also:
      - `getSkin()`
      - `setSkin(Skin)`

  - ### setSkin

    public final void setSkin(Skin<?> value)
    Sets the value of the `skin` property.
    Specified by:
      `setSkin` in interface `Skinnable`
    Property description:
      Skin is responsible for rendering this `Control`. From the perspective of the `Control`, the `Skin` is a black box. It listens and responds to changes in state in a `Control`.

      There is a one-to-one relationship between a `Control` and its `Skin`. Every `Skin` maintains a back reference to the `Control` via the `Skin.getSkinnable()` method.

      To ensure a one-to-one relationship between a `Control` and its `Skin`, skins which were not created for this control are rejected with an `IllegalArgumentException`. Then, `Skin.dispose()` is called on the old skin, disconnecting it from the corresponding `Control`. And finally, `Skin.install()` is invoked to complete the process. Only inside of `Skin.install()` should `Skin` implementations set/overwrite properties of their `Control` (though some operations like adding/removing a listener can still be done in the `Skin` constructor).

      A skin may be null.

    Parameters:
      `value` - the value for the `skin` property
    See Also:
      - `getSkin()`
      - `skinProperty()`

  - ### getSkin

    public final Skin<?> getSkin()
    Gets the value of the `skin` property.
    Specified by:
      `getSkin` in interface `Skinnable`
    Property description:
      Skin is responsible for rendering this `Control`. From the perspective of the `Control`, the `Skin` is a black box. It listens and responds to changes in state in a `Control`.

      There is a one-to-one relationship between a `Control` and its `Skin`. Every `Skin` maintains a back reference to the `Control` via the `Skin.getSkinnable()` method.

      To ensure a one-to-one relationship between a `Control` and its `Skin`, skins which were not created for this control are rejected with an `IllegalArgumentException`. Then, `Skin.dispose()` is called on the old skin, disconnecting it from the corresponding `Control`. And finally, `Skin.install()` is invoked to complete the process. Only inside of `Skin.install()` should `Skin` implementations set/overwrite properties of their `Control` (though some operations like adding/removing a listener can still be done in the `Skin` constructor).

      A skin may be null.

    Returns:
      the value of the `skin` property
    See Also:
      - `setSkin(Skin)`
      - `skinProperty()`

  - ### tooltipProperty

    public final ObjectProperty<Tooltip> tooltipProperty()
    The ToolTip for this control.
    Returns:
      the tool tip for this control
    See Also:
      - `getTooltip()`
      - `setTooltip(Tooltip)`

  - ### setTooltip

    public final void setTooltip(Tooltip value)
    Sets the value of the `tooltip` property.
    Property description:
      The ToolTip for this control.
    Parameters:
      `value` - the value for the `tooltip` property
    See Also:
      - `getTooltip()`
      - `tooltipProperty()`

  - ### getTooltip

    public final Tooltip getTooltip()
    Gets the value of the `tooltip` property.
    Property description:
      The ToolTip for this control.
    Returns:
      the value of the `tooltip` property
    See Also:
      - `setTooltip(Tooltip)`
      - `tooltipProperty()`

  - ### contextMenuProperty

    public final ObjectProperty<ContextMenu> contextMenuProperty()
    The ContextMenu to show for this control.
    Returns:
      the `contextMenu` property
    See Also:
      - `getContextMenu()`
      - `setContextMenu(ContextMenu)`

  - ### setContextMenu

    public final void setContextMenu(ContextMenu value)
    Sets the value of the `contextMenu` property.
    Property description:
      The ContextMenu to show for this control.
    Parameters:
      `value` - the value for the `contextMenu` property
    See Also:
      - `getContextMenu()`
      - `contextMenuProperty()`

  - ### getContextMenu

    public final ContextMenu getContextMenu()
    Gets the value of the `contextMenu` property.
    Property description:
      The ContextMenu to show for this control.
    Returns:
      the value of the `contextMenu` property
    See Also:
      - `setContextMenu(ContextMenu)`
      - `contextMenuProperty()`

  - ### isResizable

    public boolean isResizable()
    Returns `true` since all Controls are resizable.
    Overrides:
      `isResizable` in class `Region`
    Returns:
      whether this node 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()`

  - ### computeMinWidth

    protected double computeMinWidth(double height)
    Computes the minimum allowable width of the Control, based on the provided height. The minimum width is not calculated within the Control, instead the calculation is delegated to the `Node.minWidth(double)` method of the `Skin`. If the Skin is null, the returned value is 0.
    Overrides:
      `computeMinWidth` in class `Region`
    Parameters:
      `height` - The height of the Control, in case this value might dictate the minimum width.
    Returns:
      A double representing the minimum width of this control.

  - ### computeMinHeight

    protected double computeMinHeight(double width)
    Computes the minimum allowable height of the Control, based on the provided width. The minimum height is not calculated within the Control, instead the calculation is delegated to the `Node.minHeight(double)` method of the `Skin`. If the Skin is null, the returned value is 0.
    Overrides:
      `computeMinHeight` in class `Region`
    Parameters:
      `width` - The width of the Control, in case this value might dictate the minimum height.
    Returns:
      A double representing the minimum height of this control.

  - ### computeMaxWidth

    protected double computeMaxWidth(double height)
    Computes the maximum allowable width of the Control, based on the provided height. The maximum width is not calculated within the Control, instead the calculation is delegated to the `Node.maxWidth(double)` method of the `Skin`. If the Skin is null, the returned value is 0.
    Overrides:
      `computeMaxWidth` in class `Region`
    Parameters:
      `height` - The height of the Control, in case this value might dictate the maximum width.
    Returns:
      A double representing the maximum width of this control.

  - ### computeMaxHeight

    protected double computeMaxHeight(double width)
    Computes the maximum allowable height of the Control, based on the provided width. The maximum height is not calculated within the Control, instead the calculation is delegated to the `Node.maxHeight(double)` method of the `Skin`. If the Skin is null, the returned value is 0.
    Overrides:
      `computeMaxHeight` in class `Region`
    Parameters:
      `width` - The width of the Control, in case this value might dictate the maximum height.
    Returns:
      A double representing the maximum height of this control.

  - ### createDefaultSkin

    protected Skin<?> createDefaultSkin()
    Create a new instance of the default skin for this control. This is called to create a skin for the control if no skin is provided via CSS `-fx-skin` or set explicitly in a sub-class with `setSkin(...)`.
    Returns:
      new instance of default skin for this control. If null then the control will have no skin unless one is provided by css.
    Since:
      JavaFX 8.0

  - ### getClassCssMetaData

    public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData()
    Gets the `CssMetaData` associated with this class, which may include the `CssMetaData` of its superclasses.
    Returns:
      the `CssMetaData`
    Since:
      JavaFX 8.0

  - ### getCssMetaData

    public final List<CssMetaData<? extends Styleable,?>> getCssMetaData()
    This method returns a `List` containing all `CssMetaData` for both this Control (returned from `getControlCssMetaData()` and its `Skin`, assuming the `skin property` is a `SkinBase`.

    Developers who wish to provide custom CssMetaData are therefore encouraged to override `getControlCssMetaData()` or `SkinBase.getCssMetaData()`, depending on where the CssMetaData resides.

    Specified by:
      `getCssMetaData` in interface `Styleable`
    Overrides:
      `getCssMetaData` in class `Region`
    Returns:
      The CssMetaData associated with this node, which may include the CssMetaData of its superclasses.
    Since:
      JavaFX 8.0

  - ### getControlCssMetaData

    protected List<CssMetaData<? extends Styleable,?>> getControlCssMetaData()
    Gets the unmodifiable list of the control's CSS-styleable properties.
    Returns:
      the unmodifiable list of the control's CSS-styleable properties
    Since:
      JavaFX 8.0

  - ### getInitialFocusTraversable

    protected Boolean getInitialFocusTraversable()
    Returns the initial focus traversable state of this control, for use by the JavaFX CSS engine to correctly set its initial value. By default all UI controls are focus traversable, so this method is overridden in Control to set the initial traversable state to true.
    Overrides:
      `getInitialFocusTraversable` in class `Node`
    Returns:
      the initial focus traversable state of this control
    Since:
      9