java.lang.Object
org.controlsfx.control.spreadsheet.SpreadsheetCellBase
- All Implemented Interfaces:
EventTarget,SpreadsheetCell
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;
}
-
Property Summary
PropertiesTypePropertyDescriptionfinal StringPropertyReturns theStringPropertylinked with the format.Returns theObjectPropertyrepresenting this cell graphic.final ObjectProperty<Object>The item property represents the currently-set value inside thisSpreadsheetCell.A string representation of the CSS style associated with this specific Node.final ReadOnlyStringPropertyReturns 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 TypeMethodDescriptionvoidactivateCorner(SpreadsheetCell.CornerPosition position) Activates the givenCornerPositionin order to display a little triangle in the cell.<E extends Event>
voidaddEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Registers an event handler to this SpreadsheetCell.voidThis deactivates the givenCornerPositionso that no triangle will be shown for this cell.final booleanfinal StringPropertyReturns theStringPropertylinked with the format.final SpreadsheetCellTypeReturns theSpreadsheetCellTypeof this cell.final intReturns the column index of this cell.final intReturns how much this cell is spanning in column, 1 means the cell is not spanning.final StringReturns the format of this cell or an empty string if no format has been specified.Returns the graphic node associated with this cell.final ObjectgetItem()Returns the value contained in this cell.If some options cannot be factorized in aSpreadsheetCellTypeand are specific to a cell, you can return them here and theSpreadsheetCellEditorwill receive them.IfSpreadsheetCell.hasPopup()is set totrue, this method will be called when the user clicks on the cell in order to gather theMenuItemto show in the Popup.final intgetRow()Returns the row index of this cell.final intReturns 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 ObservableSet<String>Returns anObservableListofStringof all the style class associated with this cell.final StringgetText()Returns the String representation currently used for display in theSpreadsheetView.Returns the tooltip for this cell.Returns theObjectPropertyrepresenting this cell graphic.final inthashCode()booleanhasPopup()Returns true if this cell needs to display a popup when clicked in order to show someMenuItemlike aMenuButton.booleanReturnstrueif this cell contains something particular in its item and a Node given by theCellGraphicFactorywill be used to display it.booleanReturnstrueif a triangle is displayed in the cell for the givenCornerPosition.final booleanReturnstrueif this cell can be edited.booleanIf a run of text exceeds the width of the Labeled, then this variable indicates whether the text should wrap onto another line.final ObjectProperty<Object>The item property represents the currently-set value inside thisSpreadsheetCell.booleanVerifies that the upcoming cell value can be set to the current cell.<E extends Event>
voidremoveEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Unregisters a previously registered event handler from this SpreadsheetCell.voidsetCellGraphic(boolean isBrowser) IfisCellGraphicistrue, this cell item contains something particular and should be display by usingCellGraphicFactoryobject in the CellView.final voidsetColumnSpan(int columnSpan) Sets how much this cell is spanning in column.final voidsetEditable(boolean editable) Change the editable state of this cellfinal voidSets a new format for this cell.voidsetGraphic(Node graphic) Sets a graphic for this cell.voidsetHasPopup(boolean value) Sets totrueif this cell needs to display a popup when clicked in order to show someMenuItemlike aMenuButton.final voidSets the value of the property Item.final voidsetRowSpan(int rowSpan) Sets how much this cell is spanning in row.voidA string representation of the CSS style associated with this specific Node.voidsetTooltip(String tooltip) Set a new tooltip for this cell.voidsetWrapText(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.A string representation of the CSS style associated with this specific Node.final ReadOnlyStringPropertyReturns the StringProperty of the representation of the value.toString()protected voidUpdate the text for the SpreadsheetView.
-
Property Details
-
item
The item property represents the currently-set value inside thisSpreadsheetCell.- Specified by:
itemPropertyin interfaceSpreadsheetCell- See Also:
-
format
Returns theStringPropertylinked with the format.- Specified by:
formatPropertyin interfaceSpreadsheetCell- See Also:
-
text
Returns the StringProperty of the representation of the value.- Specified by:
textPropertyin interfaceSpreadsheetCell- See Also:
-
style
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:
stylePropertyin interfaceSpreadsheetCell- See Also:
-
graphic
Returns theObjectPropertyrepresenting this cell graphic.- Specified by:
graphicPropertyin interfaceSpreadsheetCell- See Also:
-
-
Constructor Details
-
SpreadsheetCellBase
public SpreadsheetCellBase(int row, int column, int rowSpan, int columnSpan) Constructs a SpreadsheetCell with the given configuration. Use theSpreadsheetCellType.OBJECTtype.- 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:
matchin interfaceSpreadsheetCell- Parameters:
value- the value that needs to be tested- Returns:
trueif 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:
setItemin interfaceSpreadsheetCell
-
getItem
Returns the value contained in this cell.- Specified by:
getItemin interfaceSpreadsheetCell- Returns:
- the value contained in this cell
-
itemProperty
The item property represents the currently-set value inside thisSpreadsheetCell.- Specified by:
itemPropertyin interfaceSpreadsheetCell- See Also:
-
isEditable
public final boolean isEditable()Returnstrueif this cell can be edited.- Specified by:
isEditablein interfaceSpreadsheetCell- Returns:
trueif this cell is editable
-
setEditable
public final void setEditable(boolean editable) Change the editable state of this cell- Specified by:
setEditablein interfaceSpreadsheetCell- Parameters:
editable-trueif 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:
isWrapTextin interfaceSpreadsheetCell- Returns:
trueif the text should wrap onto another line if it exceeds the width of theLabeled
-
isCellGraphic
public boolean isCellGraphic()Description copied from interface:SpreadsheetCellReturnstrueif this cell contains something particular in its item and a Node given by theCellGraphicFactorywill be used to display it.- Specified by:
isCellGraphicin interfaceSpreadsheetCell- Returns:
trueif this cell item needs to be given to a particular Node
-
setCellGraphic
public void setCellGraphic(boolean isBrowser) Description copied from interface:SpreadsheetCellIfisCellGraphicistrue, this cell item contains something particular and should be display by usingCellGraphicFactoryobject in the CellView.- Specified by:
setCellGraphicin 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:
setWrapTextin interfaceSpreadsheetCell- Parameters:
wrapText-trueif the text should wrap onto another line if it exceeds the width of theLabeled
-
getOptionsForEditor
If some options cannot be factorized in aSpreadsheetCellTypeand are specific to a cell, you can return them here and theSpreadsheetCellEditorwill receive them.- Specified by:
getOptionsForEditorin interfaceSpreadsheetCell- Returns:
- a
Listof options for theSpreadsheetCellEditor
-
hasPopup
public boolean hasPopup()Returns true if this cell needs to display a popup when clicked in order to show someMenuItemlike aMenuButton. The items can be set inSpreadsheetCell.getPopupItems().- Specified by:
hasPopupin interfaceSpreadsheetCell- Returns:
trueif this cell needs to display a popup
-
setHasPopup
public void setHasPopup(boolean value) Sets totrueif this cell needs to display a popup when clicked in order to show someMenuItemlike aMenuButton.- Specified by:
setHasPopupin interfaceSpreadsheetCell- Parameters:
value-trueto display aPopupwhen clicked
-
getPopupItems
IfSpreadsheetCell.hasPopup()is set totrue, this method will be called when the user clicks on the cell in order to gather theMenuItemto show in the Popup.- Specified by:
getPopupItemsin interfaceSpreadsheetCell- Returns:
- the
MenuItemto show in the Popup
-
formatProperty
Returns theStringPropertylinked with the format.- Specified by:
formatPropertyin interfaceSpreadsheetCell- See Also:
-
getFormat
Returns the format of this cell or an empty string if no format has been specified.- Specified by:
getFormatin 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:
setFormatin interfaceSpreadsheetCell- Parameters:
format- a string pattern understood by theSpreadsheetCellType
-
textProperty
Returns the StringProperty of the representation of the value.- Specified by:
textPropertyin interfaceSpreadsheetCell- See Also:
-
getText
Returns the String representation currently used for display in theSpreadsheetView.- Specified by:
getTextin interfaceSpreadsheetCell- Returns:
- the text representation of the value
-
getCellType
Returns theSpreadsheetCellTypeof this cell.- Specified by:
getCellTypein interfaceSpreadsheetCell- Returns:
- the
SpreadsheetCellTypeof this cell.
-
getRow
public final int getRow()Returns the row index of this cell.- Specified by:
getRowin interfaceSpreadsheetCell- Returns:
- the row index of this cell
-
getColumn
public final int getColumn()Returns the column index of this cell.- Specified by:
getColumnin 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:
getRowSpanin 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. SeeSpreadsheetCelldescription 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:
setRowSpanin 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:
getColumnSpanin 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. SeeSpreadsheetCelldescription 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:
setColumnSpanin interfaceSpreadsheetCell- Parameters:
columnSpan- the columnSpan for this cell
-
getStyleClass
Returns anObservableListofStringof 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:
getStyleClassin interfaceSpreadsheetCell- Returns:
- an
ObservableListofStringof 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:
setStylein 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:
getStylein 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
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:
stylePropertyin interfaceSpreadsheetCell- See Also:
-
graphicProperty
Returns theObjectPropertyrepresenting this cell graphic.- Specified by:
graphicPropertyin interfaceSpreadsheetCell- See Also:
-
setGraphic
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:
setGraphicin interfaceSpreadsheetCell- Parameters:
graphic- a graphic to display for this cell
-
getGraphic
Returns the graphic node associated with this cell. Returns null if nothing has been associated.- Specified by:
getGraphicin interfaceSpreadsheetCell- Returns:
- the graphic node associated with this cell
-
getTooltip
Returns the tooltip for this cell.- Specified by:
getTooltipin interfaceSpreadsheetCell- Returns:
- the tooltip associated with this
SpreadsheetCell
-
setTooltip
Set a new tooltip for this cell.- Parameters:
tooltip-
-
activateCorner
Activates the givenCornerPositionin order to display a little triangle in the cell.- Specified by:
activateCornerin interfaceSpreadsheetCell- Parameters:
position- the position where the triangle should be displayed
-
deactivateCorner
This deactivates the givenCornerPositionso that no triangle will be shown for this cell.- Specified by:
deactivateCornerin interfaceSpreadsheetCell- Parameters:
position- the position where the triangle should be removed if displayed
-
isCornerActivated
Returnstrueif a triangle is displayed in the cell for the givenCornerPosition.- Specified by:
isCornerActivatedin interfaceSpreadsheetCell- Returns:
trueif a triangle is displayed in the cell for the givenCornerPosition
-
buildEventDispatchChain
- Specified by:
buildEventDispatchChainin interfaceEventTarget
-
toString
-
equals
-
hashCode
public final int hashCode() -
addEventHandler
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Registers an event handler to this SpreadsheetCell.- Specified by:
addEventHandlerin interfaceSpreadsheetCell- Parameters:
eventType- the type of the events to receive by the handlereventHandler- the handler to register
-
removeEventHandler
public <E extends Event> void removeEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Unregisters a previously registered event handler from this SpreadsheetCell.- Specified by:
removeEventHandlerin 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.
-