Cell
Inherits from: Control > Parent > Resizable > TextOffsets > Node
Overview
The Cell API is used for virtualized controls such as ListView, TreeView, and TableView. A Cell is a Control which is used to render a single "row" (in the case of a ListView or TreeView) or a single cell (row/col intersection in a TableView).
Every Cell is associated with a single data item. The Cell is responsible for rendering that item and, where appropriate, for editing the item. An item within a Cell may be represented by text or some other control such as a CheckBox or ChoiceBox or any other node such as a Panel, Grid, or even Rectangle.
Because TreeView, ListView, TableView and other such controls can potentially be used for displaying incredibly large amounts of data, it is not feasible to create an actual Cell for every single element in the virtualized control. We represent extremely large data sets using only a very few Cells. Each Cell is "recycled", or reused.
Since Cell is a Control, it is essentially a "model". Its Skin is responsible for defining the look and layout, while the Behavior is responsible for handling all input events and using that information to modify the Control state. Also, the Cell is styled from CSS just like any other Control. However, it is not necessary to implement a Skin for most uses of the Cell.
In addition to having an item, every Cell has a node as its content. The content of the Cell is the node (which may be a Panel or other Parent) which is used to represent the item. For example, a ListCell might be configured with a Label as its node. The Label's text would be bound to the cell's item. In this way, whenever the item of the Cell changes, the Label's text is updated.
The default representation of the
item is up to to the various virtualized container's skins to render. For example, the ListView by default will convert the item to a String and display it in a Label, which is set as the node for each Cell. If you want to specialize the Cell used for the ListView (for example), then you must provide an implementation of the
cellFactory callback function defined on the ListView. A cell factory uses a pattern similar to the factory pattern, but is somewhat unique due to the language features available in JavaFX.
The cell factory is called by the platform whenever it determines that a new cell needs to be created. For example, perhaps your ListView has 10 million items. Creating all 10 million cells would be prohibitively expensive. So instead the ListView skin implementation might only create just enough cells to fit the visual space. If the ListView is resized to be larger, the system will determine that it needs to create some additional cells. In this case it will call the cellFactory callback function (if one is provided) to create the Cell implementation that should be used.
The implementation of the cell factory is then responsible not just for creating a Cell implementation, but also configuring that Cell implementation such that it reacts to changes in its state. For example, if I were to create a custom Cell which formatted Numbers such that they would appear as currency types, I might do so like this:
Profile: common
Variable Summary
| name | type | Default Value | description |
|---|---|---|---|
| node | Node |
A node which represents the content of this cell. Since Cells must be resized to fit within some space, and since their preferred sizes are important for determining the size of a cell, a Resizable of some kind (typically a Container or Control) is strongly recommended as the root of the content for the cell. |
Inherited Variables
Control
| name | type | Default Value | description |
|---|---|---|---|
| skin | Skin |
Skin responsible for rendering this
There is a one-to-one relationship between a
A skin may be null. |
Resizable
| name | type | Default Value | description |
|---|---|---|---|
| width | Number |
The width of the
Any javafx.scene.Node subclass which mixes in
| |
| height | Number |
The height of the
Any javafx.scene.Node subclass which mixes in
|
Node
| name | type | Default Value | description |
|---|---|---|---|
| id | String |
The id of this
| |
| styleClass | String |
A String identifier which can be used to logically group Nodes, specifically for an external style engine. This variable is exactly analogous to the styleClass attribute on an HTML element. | |
| style | String |
A string representation of the CSS style associated with this specific Node. This is exactly analogous to the "style" attribute on an HTML element, but uses the syntax defined in JavaFX CSS. | |
| visible | Boolean | true |
Specifies whether this
|
| cursor | Cursor | null |
Defines the mouse cursor for this
|
| opacity | Number | 1.0 |
Specifies how opaque (that is, solid) the
A #visible node with any opacity setting still receives mouse events and can receive keyboard focus. For example, if you want to have a large invisible rectangle overlay all Nodes in the scene graph in order to intercept mouse events but not be visible to the user, you could create a large Rectangle that had an opacity of 0%. Opacity is specified as a value between 0 and 1. Values less than 0 or greater than 1 are clipped to 0 and 1 respectively. On some platforms ImageView might not support opacity variable. |
| clip | Node | null |
Specifies a
For example, you can use an javafx.scene.image.ImageView Node as a mask to represent the Clip. Or you could use one of the geometric shape Nodes such as javafx.scene.shape.Rectangle or javafx.scene.shape.Circle. Or you could use a javafx.scene.text.Text node to represent the Clip. See the class documentation for Node for scene graph structure restrictions on setting the clip. If these restrictions are violated by a change to the clip variable, the change is ignored and the previous value of the clip variable is restored. Note: this is a conditional feature. See javafx.runtime.ConditionalFeature#SHAPE_CLIP ConditionalFeature.SHAPE_CLIP for more information. |
| cache | Boolean | false |
A performance hint to the system to indicate that this
|
| cacheHint | CacheHint | CacheHint.DEFAULT |
Additional hint for controlling bitmap caching. Under certain circumstances, such as animating nodes that are very expensive to render, it is desirable to be able to perform transformations on the node without having to regenerate the cached bitmap. An option in such cases is to perform the transforms on the cached bitmap itself. This technique can provide a dramatic improvement to animation performance, though may also result in a reduction in visual quality. The
It is possible to enable the cacheHint only at times when your node is animating. In this way, expensive nodes can appear on screen with full visual quality, yet still animate smoothly. Example:
Note that
cacheHint is only a hint to the system. Depending on the details of the node or the transform, this hint may be ignored.
If
|
| effect | Effect | null |
Specifies an effect to apply to this
Note: this is a conditional feature. See javafx.runtime.ConditionalFeature#EFFECT ConditionalFeature.EFFECT for more information. |
| disable | Boolean | false |
Sets the individual disabled state of this
|
| pickOnBounds | Boolean | false |
Defines how the picking computation is done for this node when triggered by a
|
| managed | Boolean | true |
Defines whether or not this node's layout will be managed by it's parent. Each parent class follows a strategy for laying out managed children during the scene's layout pass:
If a
|
| layoutX | Number | 0 |
Defines the X coordinate of the translation that is added to the transformed coordinates of this
For example, if
|
| layoutY | Number | 0 |
Defines the Y coordinate of the translation that is added to the transformed coordinates of this
For example, if
|
| layoutInfo | LayoutInfoBase |
Hook for node-specific layout information used by layout containers. If the node is not a child of a container which supports layout info, this variable will be ignored. Note that layoutInfo object literals may be shared across nodes, which means altering the vars in layoutInfo will affect all such nodes. | |
| transforms | Transform | [] |
Defines the sequence of javafx.scene.transform.Transform objects to be applied to this
By default, #layoutBounds is defined as the local bounds with all the transforms in this sequence applied. |
| translateX | Number | 0 |
Defines the X coordinate of the translation that is added to the transformed coordinates of this
This variable can be used to alter the location of a Node without disturbing its layout bounds, which makes it useful for animating a node's location. |
| translateY | Number | 0 |
Defines the Y coordinate of the translation that is added to the transformed coordinates of this
This variable can be used to alter the location of a Node without disturbing its layout bounds, which makes it useful for animating a node's location. |
| translateZ | Number | 0 |
Defines the Z coordinate of the translation that is added to the transformed coordinates of this
This variable can be used to alter the location of a Node without disturbing its layout bounds, which makes it useful for animating a node's location. Note: this is a conditional feature. See javafx.runtime.ConditionalFeature#SCENE3D ConditionalFeature.SCENE3D for more information. |
| scaleX | Number | 1.0 |
Defines the factor by which coordinates are scaled about the center of the object along the X axis of this
This scale factor is not included in #layoutBounds by default, which makes it ideal for scaling the entire node after all effects and transforms have been taken into account. The pivot point about which the scale occurs is the center of the untransformed #layoutBounds. |
| scaleY | Number | 1.0 |
Defines the factor by which coordinates are scaled about the center of the object along the Y axis of this
This scale factor is not included in #layoutBounds by default, which makes it ideal for scaling the entire node after all effects and transforms have been taken into account. The pivot point about which the scale occurs is the center of the untransformed #layoutBounds. |
| scaleZ | Number | 1.0 |
Defines the factor by which coordinates are scaled about the center of the object along the Z axis of this
This scale factor is not included in #layoutBounds by default, which makes it ideal for scaling the entire node after all effects and transforms have been taken into account. The pivot point about which the scale occurs is the center of the rectangular bounds formed by taking #boundsInLocal and applying all the transforms in the #transforms[] sequence. Note: this is a conditional feature. See javafx.runtime.ConditionalFeature#SCENE3D ConditionalFeature.SCENE3D for more information. |
| rotate | Number | 0.0 |
Defines the angle of rotation about the
This rotation factor is not included in #layoutBounds by default, which makes it ideal for rotating the entire node after all effects and transforms have been taken into account. The pivot point about which the rotation occurs is the center of the untransformed #layoutBounds. Note that because the pivot point is computed as the center of this
|
| rotationAxis | Point3D | Rotate.Z_AXIS |
Defines the axis of rotation of this
Note: this is a conditional feature. See javafx.runtime.ConditionalFeature#SCENE3D ConditionalFeature.SCENE3D for more information. |
| blocksMouse | Boolean | false |
If
|
| focusTraversable | Boolean | false |
Specifies whether this
|
