# Package javafx.scene.control

package javafx.scene.control

The JavaFX User Interface Controls (UI Controls or just Controls) are specialized Nodes in the JavaFX Scenegraph especially suited for reuse in many different application contexts. They are designed to be highly customizable visually by designers and developers. They are designed to work well with layout systems. Examples of prominent controls include `Button`, `Label`, `ListView`, and `TextField`.

Since Controls are `Nodes` in the scenegraph, they can be freely mixed with `Groups`, `Images`, `Media`, `Text`, and `basic geometric shapes`. While writing new UI Controls is not trivial, using and styling them is very easy, especially to existing web developers.

The remainder of this document will describe the basic architecture of the JavaFX UI Control library, how to style existing controls, write custom skins, and how to use controls to build up more complicated user interfaces.

## Architecture

Controls follow the classic MVC design pattern. The `Control` is the "model". It contains both the state and the functions which manipulate that state. The Control class itself does not know how it is rendered or what the user interaction is. These tasks are delegated to the `Skin` ("view"), which may internally separate out the view and controller functionality into separate classes, although at present there is no public API for the "controller" aspect.

All Controls extend from the Control class, which is in turn a `Parent` node, and which is a `Node`. Every Control has a reference to a single Skin, which is the view implementation for the Control. The Control delegates to the Skin the responsibility of computing the min, max, and pref sizes of the Control, the baseline offset, and hit testing (containment and intersection). It is also the responsibility of the Skin, or a delegate of the Skin, to implement and respond to all relevant key events which occur on the Control when it contains the focus.

## Control

Control extends from `Parent`, and as such, is not a leaf node. From the perspective of a developer or designer the Control can be thought of as if it were a leaf node in many cases. For example, the developer or designer can consider a Button as if it were a Rectangle or other simple leaf node.

Since a Control is resizable, a Control will be auto-sized to its preferred size on each scenegraph pulse. Setting the width and height of the Control does not affect its preferred size. When used in a layout container, the layout constraints imposed upon the Control (or manually specified on the Control) will determine how it is positioned and sized.

The Skin of a Control can be changed at any time. Doing so will mark the Control as needing to be laid out since changing the Skin likely has changed the preferred size of the Control. If no Skin is specified at the time that the Control is created, then a default CSS-based skin will be provided for all of the built-in Controls.

Each Control may have an optional tooltip specified. The Tooltip is a Control which displays some (usually textual) information about the control to the user when the mouse hovers over the Control from some period of time. It can be styled from CSS the same as with other Controls.

`focusTraversable` is overridden in Control to be true by default, whereas with Node it is false by default. Controls which should not be focusable by default (such as Label) override this to be false.

The getMinWidth, getMinHeight, getPrefWidth, getPrefHeight, getMaxWidth, and getMaxHeight functions are delegated directly to the Skin. The baselineOffset method is delegated to the node of the skin. It is not recommended that subclasses alter these delegations.

## Styling Controls

There are two methods for customizing the look of a Control. The most difficult and yet most flexible approach is to write a new Skin for the Control which precisely implements the visuals which you desire for the Control. Consult the Skin documentation for more details.

The easiest and yet very powerful method for styling the built in Controls is by using CSS. Please note that in this release the following CSS description applies only to the default Skins provided for the built in Controls. Subsequent releases will make this generally available for any custom third party Controls which desire to take advantage of these CSS capabilities.

Each of the default Skins for the built in Controls is comprised of multiple individually styleable areas or regions. This is much like an HTML page which is made up of <div>'s and then styled from CSS. Each individual region may be drawn with backgrounds, borders, images, padding, margins, and so on. The JavaFX CSS support includes the ability to have multiple backgrounds and borders, and to derive colors. These capabilities make it extremely easy to alter the look of Controls in JavaFX from CSS.

The colors used for drawing the default Skins of the built in Controls are all derived from a base color, an accent color and a background color. Simply by modifying the base color for a Control you can alter the derived gradients and create Buttons or other Controls which visually fit in with the default Skins but visually stand out.

As with all other Nodes in the scenegraph, Controls can be styled by using an external stylesheet, or by specifying the style directly on the Control. Although for examples it is easier to express and understand by specifying the style directly on the Node, it is recommended to use an external stylesheet and use either the styleClass or id of the Control, just as you would use the "class" or id of an HTML element with HTML CSS.

Each UI Control specifies a styleClass which may be used to style controls from an external stylesheet. For example, the Button control is given the "button" CSS style class. The CSS style class names are hyphen-separated lower case as opposed to camel case, otherwise, they are exactly the same. For example, Button is "button", RadioButton is "radio-button", Tooltip is "tooltip" and so on.

The class documentation for each Control defines the default Skin regions which can be styled. For further information regarding the CSS capabilities provided with JavaFX, see the CSS Reference Guide.

- Related Packages
  Module
  Package
  Description
  javafx.graphics
  javafx.scene
  Provides the core set of base classes for the JavaFX Scene Graph API.
  javafx.controls
  javafx.scene.control.cell
  The `javafx.scene.control.cell` package is where all cell-related classes are located, other than the core classes such as `Cell`, `IndexedCell`, `ListCell`, `TreeCell`, and `TableCell`.
  javafx.controls
  javafx.scene.control.skin
  The javafx.scene.control.skin package is where the skin classes, typically one for each UI control, are located
- Class
  Description
  Accordion
  An accordion is a group of `TitlePanes`.
  Alert
  The Alert class subclasses the `Dialog` class, and provides support for a number of pre-built dialog types that can be easily shown to users to prompt for a response.
  Alert.AlertType
  An enumeration containing the available, pre-built alert types that the `Alert` class can use to pre-populate various properties.
  Button
  A simple button control.
  ButtonBar
  A ButtonBar is essentially a `HBox`, with the additional functionality for operating system specific button placement.
  ButtonBar.ButtonData
  An enumeration of all available button data annotations.
  ButtonBase
  Base class for button-like UI Controls, including Hyperlinks, Buttons, ToggleButtons, CheckBoxes, and RadioButtons.
  ButtonType
  The ButtonType class is used as part of the JavaFX `Dialog` API (more specifically, the `DialogPane` API) to specify which buttons should be shown to users in the dialogs.
  Cell<T>
  The Cell API is used for virtualized controls such as `ListView`, `TreeView`, and `TableView`.
  CheckBox
  A tri-state selection Control typically skinned as a box with a checkmark or tick mark when checked.
  CheckBoxTreeItem<T>
  TreeItem subclass that adds support for being in selected, unselected, and indeterminate states.
  CheckBoxTreeItem.TreeModificationEvent<T>
  A TreeModificationEvent class that works in a similar vein to the `TreeItem.TreeModificationEvent` class, in that this event will bubble up the CheckBoxTreeItem hierarchy, until the parent node is null.
  CheckMenuItem
  A `MenuItem` that can be toggled between selected and unselected states.
  ChoiceBox<T>
  The ChoiceBox is used for presenting the user with a relatively small set of predefined choices from which they may choose.
  ChoiceDialog<T>
  A dialog that shows a list of choices to the user, from which they can pick one item at most.
  ColorPicker
  ColorPicker control allows the user to select a color from either a standard palette of colors with a simple one click selection OR define their own custom color.
  ComboBox<T>
  An implementation of the `ComboBoxBase` abstract class for the most common form of ComboBox, where a popup list is shown to users providing them with a choice that they may select from.
  ComboBoxBase<T>
  Abstract base class for ComboBox-like controls.
  ConstrainedColumnResizeBase
  Base class for a constrained column resize policy.
  ContentDisplay
  The position to place the content within a Label.
  ContextMenu
  A popup control containing an ObservableList of menu items.
  Control
  Base class for all user interface controls.
  CustomMenuItem
  A `MenuItem` that allows for arbitrary nodes to be embedded within it, by assigning a `Node` to the `content` property.
  DateCell
  DateCell is used by `DatePicker` to render the individual grid cells in the calendar month.
  DatePicker
  The DatePicker control allows the user to enter a date as text or to select a date from a calendar popup.
  Dialog<R>
  A Dialog in JavaFX wraps a `DialogPane` and provides the necessary API to present it to end users.
  DialogEvent
  Event related to dialog showing/hiding actions.
  DialogPane
  DialogPane should be considered to be the root node displayed within a `Dialog` instance.
  FocusModel<T>
  The abstract base class for FocusModel implementations.
  Hyperlink
  An HTML like label which can be a graphic and/or text which responds to rollovers and clicks.
  IndexedCell<T>
  An implementation of `Cell` which contains an index property which maps into the data model underlying the visualization.
  IndexRange
  Class representing a contiguous range of integral values.
  Label
  Label is a non-editable text control.
  Labeled
  A Labeled `Control` is one which has as part of its user interface a textual content associated with it.
  ListCell<T>
  The `Cell` type used within `ListView` instances.
  ListView<T>
  A ListView displays a horizontal or vertical list of items from which the user may select, or with which the user may interact.
  ListView.EditEvent<T>
  An `Event` subclass used specifically in ListView for representing edit-related events.
  Menu
  A popup menu of actionable items which is displayed to the user only upon request.
  MenuBar
  A MenuBar control traditionally is placed at the very top of the user interface, and embedded within it are `Menus`.
  MenuButton
  MenuButton is a button which, when clicked or pressed, will show a `ContextMenu`.
  MenuItem
  MenuItem is intended to be used in conjunction with `Menu` to provide options to users.
  MultipleSelectionModel<T>
  An abstract class that extends `SelectionModel` to add API to support multiple selection.
  OverrunStyle
  Defines the behavior of a labeled Control when the space for rendering the text is smaller than the space needed to render the entire string.
  Pagination
  A Pagination control is used for navigation between pages of a single content, which has been divided into smaller parts.
  PasswordField
  Text field that masks entered characters.
  PopupControl
  An extension of PopupWindow that allows for CSS styling.
  ProgressBar
  A specialization of the ProgressIndicator which is represented as a horizontal bar.
  ProgressIndicator
  A circular control which is used for indicating progress, either infinite (aka indeterminate) or finite.
  RadioButton
  RadioButtons create a series of items where only one item can be selected.
  RadioMenuItem
  A RadioMenuItem is a `MenuItem` that can be toggled (it uses the `Toggle` mixin).
  ResizeFeaturesBase<S>
  A wrapper class for use by the column resize policies offered by controls such as `TableView` and `TreeTableView`.
  ScrollBar
  Either a horizontal or vertical bar with increment and decrement buttons and a "thumb" with which the user can interact.
  ScrollPane
  A Control that provides a scrolled, clipped viewport of its contents.
  ScrollPane.ScrollBarPolicy
  An enumeration denoting the policy to be used by a scrollable Control in deciding whether to show a scroll bar.
  ScrollToEvent<T>
  Event related to `ScrollPane` and virtualised controls such as `ListView`, `TableView`, `TreeView` and `TreeTableView`.
  SelectionMode
  An enumeration used to specify how many items may be selected in a `MultipleSelectionModel`.
  SelectionModel<T>
  SelectionModel is an abstract class used by UI controls to provide a consistent API for maintaining selection.
  Separator
  A horizontal or vertical separator line.
  SeparatorMenuItem
  A `MenuItem` that as the name suggests allows for a horizontal Separator to be embedded within it, by assigning a `Separator` to the `content` property of the `CustomMenuItem` This is provided for convenience as groups of `menuitems` can be separated by a separator.
  SingleSelectionModel<T>
  A SelectionModel which enforces the requirement that only a single index be selected at any given time.
  Skin<C extends Skinnable>
  An interface for defining the visual representation of user interface controls.
  SkinBase<C extends Control>
  Base implementation class for defining the visual representation of user interface controls by defining a scene graph of nodes to represent the `skin`.
  Skinnable
  The Skinnable interface is implemented by the `Control` class, and therefore is implemented by all Control implementations.
  Slider
  The Slider Control is used to display a continuous or discrete range of valid numeric choices and allows the user to interact with the control.
  SortEvent<C>
  Event related to `TableView` and `TreeTableView` sorting.
  Spinner<T>
  A single line text field that lets the user select a number or an object value from an ordered sequence.
  SpinnerValueFactory<T>
  The SpinnerValueFactory is the model behind the JavaFX `Spinner control` - without a value factory installed a Spinner is unusable.
  SpinnerValueFactory.DoubleSpinnerValueFactory
  A `SpinnerValueFactory` implementation designed to iterate through double values.
  SpinnerValueFactory.IntegerSpinnerValueFactory
  A `SpinnerValueFactory` implementation designed to iterate through integer values.
  SpinnerValueFactory.ListSpinnerValueFactory<T>
  A `SpinnerValueFactory` implementation designed to iterate through a list of values.
  SplitMenuButton
  The SplitMenuButton, like the `MenuButton` is closely associated with the concept of selecting a `MenuItem` from a menu.
  SplitPane
  A control that has two or more sides, each separated by a divider, which can be dragged by the user to give more space to one of the sides, resulting in the other side shrinking by an equal amount.
  SplitPane.Divider
  Represents a single divider in the SplitPane.
  Tab
  Tabs are placed within a `TabPane`, where each tab represents a single 'page'.
  TableCell<S,T>
  Represents a single row/column intersection in a `TableView`.
  TableColumn<S,T>
  A `TableView` is made up of a number of TableColumn instances.
  TableColumn.CellDataFeatures<S,T>
  A support class used in TableColumn as a wrapper class to provide all necessary information for a particular `Cell`.
  TableColumn.CellEditEvent<S,T>
  An event that is fired when a user performs an edit on a table cell.
  TableColumn.SortType
  Enumeration that specifies the type of sorting being applied to a specific column.
  TableColumnBase<S,T>
  Table-like controls (such as `TableView` and `TreeTableView`) are made up of zero or more instances of a concrete TableColumnBase subclass (`TableColumn` and `TreeTableColumn`, respectively).
  TableFocusModel<T, TC extends TableColumnBase<T,?>>
  The abstract base class for FocusModel implementations that are used within table-like controls (most notably `TableView` and `TreeTableView`).
  TablePosition<S,T>
  This class is used to represent a single row/column/cell in a TableView.
  TablePositionBase<TC extends TableColumnBase>
  This class is used to represent a single row/column/cell in a table.
  TableRow<T>
  TableRow is an `IndexedCell`, but rarely needs to be used by developers creating TableView instances.
  TableSelectionModel<T>
  The abstract base class for MultipleSelectionModel implementations that are used within table-like controls (most notably `TableView` and `TreeTableView`).
  TableView<S>
  The TableView control is designed to visualize an unlimited number of rows of data, broken out into columns.
  TableView.ResizeFeatures<S>
  An immutable wrapper class for use in the TableView `column resize` functionality.
  TableView.TableViewFocusModel<S>
  A `FocusModel` with additional functionality to support the requirements of a TableView control.
  TableView.TableViewSelectionModel<S>
  A simple extension of the `SelectionModel` abstract class to allow for special support for TableView controls.
  TabPane
  A control that allows switching between a group of `Tabs`.
  TabPane.TabClosingPolicy
  Specifies how the `TabPane` handles tab closing from an end-user's perspective.
  TabPane.TabDragPolicy
  This enum specifies drag policies for tabs in a TabPane.
  TextArea
  Text input component that allows a user to enter multiple lines of plain text.
  TextField
  Text input component that allows a user to enter a single line of unformatted text.
  TextFormatter<V>
  A Formatter describes a format of a `TextInputControl` text by using two distinct mechanisms: A filter (`TextFormatter.getFilter()`) that can intercept and modify user input.
  TextFormatter.Change
  Contains the state representing a change in the content or selection for a TextInputControl.
  TextInputControl
  Abstract base class for text input controls.
  TextInputControl.Content
  Interface representing a text input's content.
  TextInputDialog
  A dialog that shows a text input control to the user.
  TitledPane
  A TitledPane is a panel with a title that can be opened and closed.
  Toggle
  Represents a control that can be toggled between selected and non-selected states.
  ToggleButton
  A `ToggleButton` is a specialized control which has the ability to be selected.
  ToggleGroup
  A class which contains a reference to all `Toggles` whose `selected` variables should be managed such that only a single ``Toggle`` within the `ToggleGroup` may be selected at any one time.
  ToolBar
  A ToolBar is a control which displays items horizontally or vertically.
  Tooltip
  Tooltips are common UI elements which are typically used for showing additional information about a Node in the scenegraph when the Node is hovered over by the mouse.
  TreeCell<T>
  The `Cell` type used with the `TreeView` control.
  TreeItem<T>
  The model for a single node supplying a hierarchy of values to a control such as `TreeView`.
  TreeItem.TreeModificationEvent<T>
  An `Event` that contains relevant information for all forms of TreeItem modifications.
  TreeSortMode
  Specifies how the tree items in tree-like UI controls should be sorted.
  TreeTableCell<S,T>
  Represents a single row/column intersection in a `TreeTableView`.
  TreeTableColumn<S,T>
  A `TreeTableView` is made up of a number of TreeTableColumn instances.
  TreeTableColumn.CellDataFeatures<S,T>
  A support class used in TreeTableColumn as a wrapper class to provide all necessary information for a particular `Cell`.
  TreeTableColumn.CellEditEvent<S,T>
  An event that is fired when a user performs an edit on a table cell.
  TreeTableColumn.SortType
  Enumeration that specifies the type of sorting being applied to a specific column.
  TreeTablePosition<S,T>
  This class is used to represent a single row/column/cell in a TreeTableView.
  TreeTableRow<T>
  TreeTableRow is an `IndexedCell`, but rarely needs to be used by developers creating TreeTableView instances.
  TreeTableView<S>
  The TreeTableView control is designed to visualize an unlimited number of rows of data, broken out into columns.
  TreeTableView.EditEvent<S>
  An `Event` subclass used specifically in TreeTableView for representing edit-related events.
  TreeTableView.ResizeFeatures<S>
  An immutable wrapper class for use in the TableView `column resize` functionality.
  TreeTableView.TreeTableViewFocusModel<S>
  A `FocusModel` with additional functionality to support the requirements of a TableView control.
  TreeTableView.TreeTableViewSelectionModel<S>
  A simple extension of the `SelectionModel` abstract class to allow for special support for TreeTableView controls.
  TreeView<T>
  The TreeView control provides a view on to a tree root (of type `TreeItem`).
  TreeView.EditEvent<T>
  An `Event` subclass used specifically in TreeView for representing edit-related events.