java.lang.Object
org.controlsfx.control.spreadsheet.SpreadsheetCellBase
- All Implemented Interfaces:
javafx.event.EventTarget
,SpreadsheetCell
public class SpreadsheetCellBase
extends Object
implements SpreadsheetCell, javafx.event.EventTarget
The SpreadsheetCells serve as model for the
You will provide them when constructing a
So the best way to handle spanning is to fill your grid with unique cells, and then call at the end
Here an example :


In addition to that, you can also specify another graphic property to your cell with
You can also customize the tooltip of your SpreadsheetCell by specifying one with
SpreadsheetView
. You will provide them when constructing a
Grid
.
SpreadsheetCell Types
Each SpreadsheetCell has its ownSpreadsheetCellType
which has its own SpreadsheetCellEditor
in order to control very closely the possible modifications.
Different SpreadsheetCellTypes
are available
depending on the data you want to represent in your SpreadsheetView
.
You can use the different static method provided in
SpreadsheetCellType
in order to create the specialized
SpreadsheetCell that suits your need.
If you want to create a SpreadsheetCell of your own, you simply have to
use one of the provided constructor. Usually you will let your SpreadsheetCellType
create the cells. For example
SpreadsheetCellType.StringType.createCell(int, int, int, int, java.lang.String)
.
You will also have to provide a custom SpreadsheetCellEditor
.
Configuration
You will have to indicate the coordinates of the cell together with therow
and column
span. You
can specify if you want the cell to be editable or not using
setEditable(boolean)
. Be advised that a cell with a rowSpan means
that the cell will replace all the cells situated in the rowSpan range. Same
with the column span.
So the best way to handle spanning is to fill your grid with unique cells, and then call at the end
GridBase.spanColumn(int, int, int)
or GridBase.spanRow(int, int, int)
. These methods will handle the span
for you.
Format
Your cell can have its very own format. If you want to display some dates with different format, you just have to create a uniqueSpreadsheetCellType
and then specify for each cell their format with
setFormat(String)
. You will then have the guaranty that all your
cells will have a LocalDate as a value, but the value will be displayed
differently for each cell. This will also guaranty that copy/paste and other
operation will be compatible since every cell will share the same
SpreadsheetCellType
. Here an example :
SpreadsheetCell cell = SpreadsheetCellType.DATE.createCell(row, column, rowSpan, colSpan, LocalDate.now().plusDays((int) (Math.random() * 10))); // Random value // given here final double random = Math.random(); if (random < 0.25) { cell.setFormat("EEEE d"); } else if (random < 0.5) { cell.setFormat("dd/MM :YY"); } else { cell.setFormat("dd/MM/YYYY"); }
Popup
Each cell can display aPopup
when clicked. This is useful when some
non editable cell wants to display several actions to take on the grid. This
feature is completely different from the Filter
. Filters are shown on
one particular row whereas popup can be added to every cell.
Graphic
Each cell can have a graphic to display next to the text in the cells. Just use thesetGraphic(Node)
in order to specify the graphic you want.
If you specify an ImageView
, the SpreadsheetView will try to resize it in
order to fit the space available in the cell.
For example :
cell.setGraphic(new ImageView(new Image(getClass().getResourceAsStream("icons/exclamation.png"))));

In addition to that, you can also specify another graphic property to your cell with
activateCorner(org.controlsfx.control.spreadsheet.SpreadsheetCell.CornerPosition)
.
This allow you to activate or deactivate some graphics on the cell in every
corner. Right now it's a little red triangle but you can modify this in your CSS by
using the "cell-corner" style class.
.cell-corner.top-left{ -fx-background-color: red; -fx-shape : "M 0 0 L 1 0 L 0 1 z"; }
You can also customize the tooltip of your SpreadsheetCell by specifying one with
setTooltip(java.lang.String)
.
Style with CSS
You can style your cell by specifying some styleClass withgetStyleClass()
. You just have to create and custom that class in
your CSS stylesheet associated with your SpreadsheetView
. Also note
that all SpreadsheetCell
have a "spreadsheet-cell" styleClass
added by default. Here is a example :cell.getStyleClass().add("row_header");And in the CSS:
.spreadsheet-cell.row_header{ -fx-background-color: #b4d4ad ; -fx-background-insets: 0, 0 1 1 0; -fx-alignment: center; }
Examples
Here is an example that uses all the pre-builtSpreadsheetCellType
types. The generation is random here so you will want to replace the logic to
suit your needs.
private SpreadsheetCell<?> generateCell(int row, int column, int rowSpan, int colSpan) { List<String> stringListTextCell = Arrays.asList("Shanghai","Paris","New York City","Bangkok","Singapore","Johannesburg","Berlin","Wellington","London","Montreal"); final double random = Math.random(); if (random < 0.10) { List<String> stringList = Arrays.asList("China","France","New Zealand","United States","Germany","Canada"); cell = SpreadsheetCellType.LIST(stringList).createCell(row, column, rowSpan, colSpan, stringList.get((int) (Math.random() * 6))); } else if (random >= 0.10 && random < 0.25) { cell = SpreadsheetCellType.STRING.createCell(row, column, rowSpan, colSpan,stringListTextCell.get((int)(Math.random()*10))); } else if (random >= 0.25 && random < 0.75) { cell = SpreadsheetCellType.DOUBLE.createCell(row, column, rowSpan, colSpan,(double)Math.round((Math.random()*100)*100)/100); } else { cell = SpreadsheetCellType.DATE.createCell(row, column, rowSpan, colSpan, LocalDate.now().plusDays((int)(Math.random()*10))); } return cell; }
- See Also:
-
Property Summary
PropertiesTypePropertyDescriptionfinal javafx.beans.property.StringProperty
Returns theStringProperty
linked with the format.javafx.beans.property.ObjectProperty
<javafx.scene.Node> Returns theObjectProperty
representing this cell graphic.final javafx.beans.property.ObjectProperty
<Object> The item property represents the currently-set value inside thisSpreadsheetCell
.javafx.beans.property.StringProperty
A string representation of the CSS style associated with this specific Node.final javafx.beans.property.ReadOnlyStringProperty
Returns the StringProperty of the representation of the value. -
Nested Class Summary
Nested classes/interfaces inherited from interface org.controlsfx.control.spreadsheet.SpreadsheetCell
SpreadsheetCell.CornerPosition
-
Field Summary
Fields inherited from interface org.controlsfx.control.spreadsheet.SpreadsheetCell
CORNER_EVENT_TYPE, EDITABLE_EVENT_TYPE, WRAP_EVENT_TYPE
-
Constructor Summary
ConstructorsConstructorDescriptionSpreadsheetCellBase
(int row, int column, int rowSpan, int columnSpan) Constructs a SpreadsheetCell with the given configuration.SpreadsheetCellBase
(int row, int column, int rowSpan, int columnSpan, SpreadsheetCellType<?> type) Constructs a SpreadsheetCell with the given configuration. -
Method Summary
Modifier and TypeMethodDescriptionvoid
activateCorner
(SpreadsheetCell.CornerPosition position) Activates the givenCornerPosition
in order to display a little triangle in the cell.<E extends javafx.event.Event>
voidaddEventHandler
(javafx.event.EventType<E> eventType, javafx.event.EventHandler<? super E> eventHandler) Registers an event handler to this SpreadsheetCell.javafx.event.EventDispatchChain
buildEventDispatchChain
(javafx.event.EventDispatchChain tail) void
This deactivates the givenCornerPosition
so that no triangle will be shown for this cell.final boolean
final javafx.beans.property.StringProperty
Returns theStringProperty
linked with the format.final SpreadsheetCellType
Returns theSpreadsheetCellType
of this cell.final int
Returns the column index of this cell.final int
Returns how much this cell is spanning in column, 1 means the cell is not spanning.final String
Returns the format of this cell or an empty string if no format has been specified.javafx.scene.Node
Returns the graphic node associated with this cell.final Object
getItem()
Returns the value contained in this cell.If some options cannot be factorized in aSpreadsheetCellType
and are specific to a cell, you can return them here and theSpreadsheetCellEditor
will receive them.List
<javafx.scene.control.MenuItem> IfSpreadsheetCell.hasPopup()
is set totrue
, this method will be called when the user clicks on the cell in order to gather theMenuItem
to show in the Popup.final int
getRow()
Returns the row index of this cell.final int
Returns how much this cell is spanning in row, 1 means the cell is not spanning.getStyle()
A string representation of the CSS style associated with this specific Node.final javafx.collections.ObservableSet
<String> Returns anObservableList
ofString
of all the style class associated with this cell.final String
getText()
Returns the String representation currently used for display in theSpreadsheetView
.Returns the tooltip for this cell.javafx.beans.property.ObjectProperty
<javafx.scene.Node> Returns theObjectProperty
representing this cell graphic.final int
hashCode()
boolean
hasPopup()
Returns true if this cell needs to display a popup when clicked in order to show someMenuItem
like aMenuButton
.boolean
Returnstrue
if this cell contains something particular in its item and a Node given by theCellGraphicFactory
will be used to display it.boolean
Returnstrue
if a triangle is displayed in the cell for the givenCornerPosition
.final boolean
Returnstrue
if this cell can be edited.boolean
If a run of text exceeds the width of the Labeled, then this variable indicates whether the text should wrap onto another line.final javafx.beans.property.ObjectProperty
<Object> The item property represents the currently-set value inside thisSpreadsheetCell
.boolean
Verifies that the upcoming cell value can be set to the current cell.<E extends javafx.event.Event>
voidremoveEventHandler
(javafx.event.EventType<E> eventType, javafx.event.EventHandler<? super E> eventHandler) Unregisters a previously registered event handler from this SpreadsheetCell.void
setCellGraphic
(boolean isBrowser) IfisCellGraphic
istrue
, this cell item contains something particular and should be display by usingCellGraphicFactory
object in the CellView.final void
setColumnSpan
(int columnSpan) Sets how much this cell is spanning in column.final void
setEditable
(boolean editable) Change the editable state of this cellfinal void
Sets a new format for this cell.void
setGraphic
(javafx.scene.Node graphic) Sets a graphic for this cell.void
setHasPopup
(boolean value) Sets totrue
if this cell needs to display a popup when clicked in order to show someMenuItem
like aMenuButton
.final void
Sets the value of the property Item.final void
setRowSpan
(int rowSpan) Sets how much this cell is spanning in row.void
A string representation of the CSS style associated with this specific Node.void
setTooltip
(String tooltip) Set a new tooltip for this cell.void
setWrapText
(boolean wrapText) If a run of text exceeds the width of the Labeled, then this variable indicates whether the text should wrap onto another line.javafx.beans.property.StringProperty
A string representation of the CSS style associated with this specific Node.final javafx.beans.property.ReadOnlyStringProperty
Returns the StringProperty of the representation of the value.toString()
protected void
Update the text for the SpreadsheetView.
-
Property Details
-
item
The item property represents the currently-set value inside thisSpreadsheetCell
.- Specified by:
itemProperty
in interfaceSpreadsheetCell
- Returns:
- the item property which contains the value.
- See Also:
-
format
public final javafx.beans.property.StringProperty formatPropertyReturns theStringProperty
linked with the format.- Specified by:
formatProperty
in interfaceSpreadsheetCell
- Returns:
- the
StringProperty
linked with the format state - See Also:
-
text
public final javafx.beans.property.ReadOnlyStringProperty textPropertyReturns the StringProperty of the representation of the value.- Specified by:
textProperty
in interfaceSpreadsheetCell
- Returns:
- the StringProperty of the representation of the value
- See Also:
-
style
public javafx.beans.property.StringProperty stylePropertyA string representation of the CSS style associated with this specific Node. This is analogous to the "style" attribute of an HTML element. Note that, like the HTML style attribute, this variable contains style properties and values and not the selector portion of a style rule.- Specified by:
styleProperty
in interfaceSpreadsheetCell
- Returns:
- a string representation of the CSS style
- See Also:
-
graphic
public javafx.beans.property.ObjectProperty<javafx.scene.Node> graphicPropertyReturns theObjectProperty
representing this cell graphic.- Specified by:
graphicProperty
in interfaceSpreadsheetCell
- Returns:
- an ObjectProperty wrapping a Node for the graphic
- See Also:
-
-
Constructor Details
-
SpreadsheetCellBase
public SpreadsheetCellBase(int row, int column, int rowSpan, int columnSpan) Constructs a SpreadsheetCell with the given configuration. Use theSpreadsheetCellType.OBJECT
type.- Parameters:
row
-column
-rowSpan
-columnSpan
-
-
SpreadsheetCellBase
public SpreadsheetCellBase(int row, int column, int rowSpan, int columnSpan, SpreadsheetCellType<?> type) Constructs a SpreadsheetCell with the given configuration.- Parameters:
row
-column
-rowSpan
-columnSpan
-type
-
-
-
Method Details
-
match
Verifies that the upcoming cell value can be set to the current cell. This is currently used by the Copy/Paste.- Specified by:
match
in interfaceSpreadsheetCell
- Parameters:
value
- the value that needs to be tested- Returns:
true
if the upcoming cell value can be set to the current cell
-
setItem
Sets the value of the property Item. This should be used only at initialization. PreferGrid.setCellValue(int, int, Object)
after because it will compute correctly the modifiedCell. IfSpreadsheetCell.isEditable()
return false, nothing is done.- Specified by:
setItem
in interfaceSpreadsheetCell
- Parameters:
value
-
-
getItem
Returns the value contained in this cell.- Specified by:
getItem
in interfaceSpreadsheetCell
- Returns:
- the value contained in this cell
-
itemProperty
The item property represents the currently-set value inside thisSpreadsheetCell
.- Specified by:
itemProperty
in interfaceSpreadsheetCell
- Returns:
- the
item
property - See Also:
-
isEditable
public final boolean isEditable()Returnstrue
if this cell can be edited.- Specified by:
isEditable
in interfaceSpreadsheetCell
- Returns:
true
if this cell is editable
-
setEditable
public final void setEditable(boolean editable) Change the editable state of this cell- Specified by:
setEditable
in interfaceSpreadsheetCell
- Parameters:
editable
-true
if this cell should be editable
-
isWrapText
public boolean isWrapText()If a run of text exceeds the width of the Labeled, then this variable indicates whether the text should wrap onto another line.- Specified by:
isWrapText
in interfaceSpreadsheetCell
- Returns:
true
if the text should wrap onto another line if it exceeds the width of theLabeled
-
isCellGraphic
public boolean isCellGraphic()Description copied from interface:SpreadsheetCell
Returnstrue
if this cell contains something particular in its item and a Node given by theCellGraphicFactory
will be used to display it.- Specified by:
isCellGraphic
in interfaceSpreadsheetCell
- Returns:
true
if this cell item needs to be given to a particular Node
-
setCellGraphic
public void setCellGraphic(boolean isBrowser) Description copied from interface:SpreadsheetCell
IfisCellGraphic
istrue
, this cell item contains something particular and should be display by usingCellGraphicFactory
object in the CellView.- Specified by:
setCellGraphic
in interfaceSpreadsheetCell
- Parameters:
isBrowser
- iftrue
, a Node will be used to display something particular for the cell
-
setWrapText
public void setWrapText(boolean wrapText) If a run of text exceeds the width of the Labeled, then this variable indicates whether the text should wrap onto another line.- Specified by:
setWrapText
in interfaceSpreadsheetCell
- Parameters:
wrapText
-true
if the text should wrap onto another line if it exceeds the width of theLabeled
-
getOptionsForEditor
If some options cannot be factorized in aSpreadsheetCellType
and are specific to a cell, you can return them here and theSpreadsheetCellEditor
will receive them.- Specified by:
getOptionsForEditor
in interfaceSpreadsheetCell
- Returns:
- a
List
of options for theSpreadsheetCellEditor
-
hasPopup
public boolean hasPopup()Returns true if this cell needs to display a popup when clicked in order to show someMenuItem
like aMenuButton
. The items can be set inSpreadsheetCell.getPopupItems()
.- Specified by:
hasPopup
in interfaceSpreadsheetCell
- Returns:
true
if this cell needs to display a popup
-
setHasPopup
public void setHasPopup(boolean value) Sets totrue
if this cell needs to display a popup when clicked in order to show someMenuItem
like aMenuButton
.- Specified by:
setHasPopup
in interfaceSpreadsheetCell
- Parameters:
value
-true
to display aPopup
when clicked
-
getPopupItems
IfSpreadsheetCell.hasPopup()
is set totrue
, this method will be called when the user clicks on the cell in order to gather theMenuItem
to show in the Popup.- Specified by:
getPopupItems
in interfaceSpreadsheetCell
- Returns:
- the
MenuItem
to show in the Popup
-
formatProperty
public final javafx.beans.property.StringProperty formatProperty()Returns theStringProperty
linked with the format.- Specified by:
formatProperty
in interfaceSpreadsheetCell
- Returns:
- the
format
property - See Also:
-
getFormat
Returns the format of this cell or an empty string if no format has been specified.- Specified by:
getFormat
in interfaceSpreadsheetCell
- Returns:
- the format of this cell or an empty string if no format has been specified
-
setFormat
Sets a new format for this cell. This format will be used bySpreadsheetCellType.toString(java.lang.Object, java.lang.String)
. This should be used by numbers for example.- Specified by:
setFormat
in interfaceSpreadsheetCell
- Parameters:
format
- a string pattern understood by theSpreadsheetCellType
-
textProperty
public final javafx.beans.property.ReadOnlyStringProperty textProperty()Returns the StringProperty of the representation of the value.- Specified by:
textProperty
in interfaceSpreadsheetCell
- Returns:
- the
text
property - See Also:
-
getText
Returns the String representation currently used for display in theSpreadsheetView
.- Specified by:
getText
in interfaceSpreadsheetCell
- Returns:
- the text representation of the value
-
getCellType
Returns theSpreadsheetCellType
of this cell.- Specified by:
getCellType
in interfaceSpreadsheetCell
- Returns:
- the
SpreadsheetCellType
of this cell.
-
getRow
public final int getRow()Returns the row index of this cell.- Specified by:
getRow
in interfaceSpreadsheetCell
- Returns:
- the row index of this cell
-
getColumn
public final int getColumn()Returns the column index of this cell.- Specified by:
getColumn
in interfaceSpreadsheetCell
- Returns:
- the column index of this cell
-
getRowSpan
public final int getRowSpan()Returns how much this cell is spanning in row, 1 means the cell is not spanning.- Specified by:
getRowSpan
in interfaceSpreadsheetCell
- Returns:
- how much this cell is spanning in row, 1 is normal
-
setRowSpan
public final void setRowSpan(int rowSpan) Sets how much this cell is spanning in row. SeeSpreadsheetCell
description for information. You should useGrid.spanRow(int, int, int)
instead of using this method directly. 1 means the cell is not spanning. Thus, the rowSpan should not be inferior to 1.- Specified by:
setRowSpan
in interfaceSpreadsheetCell
- Parameters:
rowSpan
- the rowSpan for this cell
-
getColumnSpan
public final int getColumnSpan()Returns how much this cell is spanning in column, 1 means the cell is not spanning.- Specified by:
getColumnSpan
in interfaceSpreadsheetCell
- Returns:
- how much this cell is spanning in column, 1 is normal.
-
setColumnSpan
public final void setColumnSpan(int columnSpan) Sets how much this cell is spanning in column. SeeSpreadsheetCell
description for information. You should useGrid.spanColumn(int, int, int)
instead of using this method directly. 1 means the cell is not spanning. Thus, the rowSpan should not be inferior to 1.- Specified by:
setColumnSpan
in interfaceSpreadsheetCell
- Parameters:
columnSpan
- the columnSpan for this cell
-
getStyleClass
Returns anObservableList
ofString
of all the style class associated with this cell. You can easily modify its appearance by adding a style class (previously set in CSS).- Specified by:
getStyleClass
in interfaceSpreadsheetCell
- Returns:
- an
ObservableList
ofString
of all the style class of this cell
-
setStyle
A string representation of the CSS style associated with this specific Node. This is analogous to the "style" attribute of an HTML element. Note that, like the HTML style attribute, this variable contains style properties and values and not the selector portion of a style rule.- Specified by:
setStyle
in interfaceSpreadsheetCell
- Parameters:
style
- a string representation of the CSS style associated with this specific Node
-
getStyle
A string representation of the CSS style associated with this specific Node. This is analogous to the "style" attribute of an HTML element. Note that, like the HTML style attribute, this variable contains style properties and values and not the selector portion of a style rule.- Specified by:
getStyle
in interfaceSpreadsheetCell
- Returns:
- The inline CSS style associated with this Node. If this Node does not have an inline style, an empty String is returned.
-
styleProperty
public javafx.beans.property.StringProperty styleProperty()A string representation of the CSS style associated with this specific Node. This is analogous to the "style" attribute of an HTML element. Note that, like the HTML style attribute, this variable contains style properties and values and not the selector portion of a style rule.- Specified by:
styleProperty
in interfaceSpreadsheetCell
- Returns:
- the
style
property - See Also:
-
graphicProperty
public javafx.beans.property.ObjectProperty<javafx.scene.Node> graphicProperty()Returns theObjectProperty
representing this cell graphic.- Specified by:
graphicProperty
in interfaceSpreadsheetCell
- Returns:
- the
graphic
property - See Also:
-
setGraphic
public void setGraphic(javafx.scene.Node graphic) Sets a graphic for this cell. It is displayed aside with the text if any is specified. Otherwise it's fully displayed in the cell.- Specified by:
setGraphic
in interfaceSpreadsheetCell
- Parameters:
graphic
- a graphic to display for this cell
-
getGraphic
public javafx.scene.Node getGraphic()Returns the graphic node associated with this cell. Returns null if nothing has been associated.- Specified by:
getGraphic
in interfaceSpreadsheetCell
- Returns:
- the graphic node associated with this cell
-
getTooltip
Returns the tooltip for this cell.- Specified by:
getTooltip
in interfaceSpreadsheetCell
- Returns:
- the tooltip associated with this
SpreadsheetCell
-
setTooltip
Set a new tooltip for this cell.- Parameters:
tooltip
-
-
activateCorner
Activates the givenCornerPosition
in order to display a little triangle in the cell.- Specified by:
activateCorner
in interfaceSpreadsheetCell
- Parameters:
position
- the position where the triangle should be displayed
-
deactivateCorner
This deactivates the givenCornerPosition
so that no triangle will be shown for this cell.- Specified by:
deactivateCorner
in interfaceSpreadsheetCell
- Parameters:
position
- the position where the triangle should be removed if displayed
-
isCornerActivated
Returnstrue
if a triangle is displayed in the cell for the givenCornerPosition
.- Specified by:
isCornerActivated
in interfaceSpreadsheetCell
- Parameters:
position
-- Returns:
true
if a triangle is displayed in the cell for the givenCornerPosition
-
buildEventDispatchChain
public javafx.event.EventDispatchChain buildEventDispatchChain(javafx.event.EventDispatchChain tail) - Specified by:
buildEventDispatchChain
in interfacejavafx.event.EventTarget
-
toString
-
equals
-
hashCode
public final int hashCode() -
addEventHandler
public <E extends javafx.event.Event> void addEventHandler(javafx.event.EventType<E> eventType, javafx.event.EventHandler<? super E> eventHandler) Registers an event handler to this SpreadsheetCell.- Specified by:
addEventHandler
in interfaceSpreadsheetCell
- Parameters:
eventType
- the type of the events to receive by the handlereventHandler
- the handler to register
-
removeEventHandler
public <E extends javafx.event.Event> void removeEventHandler(javafx.event.EventType<E> eventType, javafx.event.EventHandler<? super E> eventHandler) Unregisters a previously registered event handler from this SpreadsheetCell.- Specified by:
removeEventHandler
in interfaceSpreadsheetCell
- Parameters:
eventType
- the event type from which to unregistereventHandler
- the handler to unregister
-
updateText
protected void updateText()Update the text for the SpreadsheetView. This method is automatically called whenever the item property or the filter property has changed. In addition it can be called manually whenever an update of the text is necessary, e.g. in a case where the item itself has changed to such an amount that the text representation has changed aswell. In this case the item property itself has not changed, so no automatic text update will be triggered.
-