- java.lang.Object
-
- org.controlsfx.control.spreadsheet.SpreadsheetCellBase
-
- All Implemented Interfaces:
EventTarget
,SpreadsheetCell
public class SpreadsheetCellBase extends Object implements SpreadsheetCell, EventTarget
The SpreadsheetCells serve as model for theSpreadsheetView
.
You will provide them when constructing aGrid
.
SpreadsheetCell Types
Each SpreadsheetCell has its ownSpreadsheetCellType
which has its ownSpreadsheetCellEditor
in order to control very closely the possible modifications.Different
SpreadsheetCellTypes
are available depending on the data you want to represent in yourSpreadsheetView
. You can use the different static method provided inSpreadsheetCellType
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 exampleSpreadsheetCellType.StringType.createCell(int, int, int, int, java.lang.String)
. You will also have to provide a customSpreadsheetCellEditor
.Configuration
You will have to indicate the coordinates of the cell together with therow
andcolumn
span. You can specify if you want the cell to be editable or not usingsetEditable(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 endGridBase.spanColumn(int, int, int)
orGridBase.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 withsetFormat(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 sameSpreadsheetCellType
.
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 theFilter
. 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 anImageView
, 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 withactivateCorner(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 withsetTooltip(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 yourSpreadsheetView
. Also note that allSpreadsheetCell
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:
SpreadsheetView
,SpreadsheetCellEditor
,SpreadsheetCellType
-
-
Property Summary
Properties Type Property Description StringProperty
format
Returns theStringProperty
linked with the format.ObjectProperty<Node>
graphic
Returns theObjectProperty
representing this cell graphic.ObjectProperty<Object>
item
The item property represents the currently-set value inside thisSpreadsheetCell
.StringProperty
style
A string representation of the CSS style associated with this specific Node.ReadOnlyStringProperty
text
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
Constructors Constructor Description SpreadsheetCellBase(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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
activateCorner(SpreadsheetCell.CornerPosition position)
Activates the givenCornerPosition
in order to display a little triangle in the cell.void
addEventHandler(EventType<Event> eventType, EventHandler<Event> eventHandler)
Registers an event handler to this SpreadsheetCell.EventDispatchChain
buildEventDispatchChain(EventDispatchChain tail)
void
deactivateCorner(SpreadsheetCell.CornerPosition position)
This deactivates the givenCornerPosition
so that no triangle will be shown for this cell.boolean
equals(Object obj)
StringProperty
formatProperty()
Returns theStringProperty
linked with the format.SpreadsheetCellType
getCellType()
Returns theSpreadsheetCellType
of this cell.int
getColumn()
Returns the column index of this cell.int
getColumnSpan()
Returns how much this cell is spanning in column, 1 means the cell is not spanning.String
getFormat()
Returns the format of this cell or an empty string if no format has been specified.Node
getGraphic()
Returns the graphic node associated with this cell.Object
getItem()
Returns the value contained in this cell.List<Object>
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.List<MenuItem>
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.int
getRow()
Returns the row index of this cell.int
getRowSpan()
Returns how much this cell is spanning in row, 1 means the cell is not spanning.String
getStyle()
A string representation of the CSS style associated with this specific Node.ObservableSet<String>
getStyleClass()
Returns anObservableList
ofString
of all the style class associated with this cell.String
getText()
Returns the String representation currently used for display in theSpreadsheetView
.Optional<String>
getTooltip()
Returns the tooltip for this cell.ObjectProperty<Node>
graphicProperty()
Returns theObjectProperty
representing this cell graphic.int
hashCode()
boolean
hasPopup()
Returns true if this cell needs to display a popup when clicked in order to show someMenuItem
like aMenuButton
.boolean
isCellGraphic()
Returnstrue
if this cell contains something particular in its item and a Node given by theCellGraphicFactory
will be used to display it.boolean
isCornerActivated(SpreadsheetCell.CornerPosition position)
Returnstrue
if a triangle is displayed in the cell for the givenCornerPosition
.boolean
isEditable()
Returnstrue
if this cell can be edited.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.ObjectProperty<Object>
itemProperty()
The item property represents the currently-set value inside thisSpreadsheetCell
.boolean
match(Object value)
Verifies that the upcoming cell value can be set to the current cell.void
removeEventHandler(EventType<Event> eventType, EventHandler<Event> 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.void
setColumnSpan(int columnSpan)
Sets how much this cell is spanning in column.void
setEditable(boolean editable)
Change the editable state of this cellvoid
setFormat(String format)
Sets a new format for this cell.void
setGraphic(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
.void
setItem(Object value)
Sets the value of the property Item.void
setRowSpan(int rowSpan)
Sets how much this cell is spanning in row.void
setStyle(String style)
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.StringProperty
styleProperty()
A string representation of the CSS style associated with this specific Node.ReadOnlyStringProperty
textProperty()
Returns the StringProperty of the representation of the value.String
toString()
protected void
updateText()
Update the text for the SpreadsheetView.
-
-
-
Property Detail
-
item
public final ObjectProperty<Object> itemProperty
The item property represents the currently-set value inside thisSpreadsheetCell
.- Specified by:
itemProperty
in interfaceSpreadsheetCell
- See Also:
getItem()
,setItem(Object)
-
format
public final StringProperty formatProperty
Returns theStringProperty
linked with the format.- Specified by:
formatProperty
in interfaceSpreadsheetCell
- See Also:
getFormat()
,setFormat(String)
-
text
public final ReadOnlyStringProperty textProperty
Returns the StringProperty of the representation of the value.- Specified by:
textProperty
in interfaceSpreadsheetCell
- See Also:
getText()
-
style
public 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
- See Also:
getStyle()
,setStyle(String)
-
graphic
public ObjectProperty<Node> graphicProperty
Returns theObjectProperty
representing this cell graphic.- Specified by:
graphicProperty
in interfaceSpreadsheetCell
- See Also:
getGraphic()
,setGraphic(Node)
-
-
Constructor Detail
-
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 Detail
-
match
public boolean match(Object value)
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
public final void setItem(Object value)
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
-
getItem
public final Object getItem()
Returns the value contained in this cell.- Specified by:
getItem
in interfaceSpreadsheetCell
- Returns:
- the value contained in this cell
-
itemProperty
public final ObjectProperty<Object> itemProperty()
The item property represents the currently-set value inside thisSpreadsheetCell
.- Specified by:
itemProperty
in interfaceSpreadsheetCell
- See Also:
getItem()
,setItem(Object)
-
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
public List<Object> 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
public List<MenuItem> 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 StringProperty formatProperty()
Returns theStringProperty
linked with the format.- Specified by:
formatProperty
in interfaceSpreadsheetCell
- See Also:
getFormat()
,setFormat(String)
-
getFormat
public final String 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
public final void setFormat(String format)
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 ReadOnlyStringProperty textProperty()
Returns the StringProperty of the representation of the value.- Specified by:
textProperty
in interfaceSpreadsheetCell
- See Also:
getText()
-
getText
public final String getText()
Returns the String representation currently used for display in theSpreadsheetView
.- Specified by:
getText
in interfaceSpreadsheetCell
- Returns:
- the text representation of the value
-
getCellType
public final SpreadsheetCellType 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
public final ObservableSet<String> 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
public void setStyle(String 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:
setStyle
in interfaceSpreadsheetCell
- Parameters:
style
- a string representation of the CSS style associated with this specific Node
-
getStyle
public String 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 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
- See Also:
getStyle()
,setStyle(String)
-
graphicProperty
public ObjectProperty<Node> graphicProperty()
Returns theObjectProperty
representing this cell graphic.- Specified by:
graphicProperty
in interfaceSpreadsheetCell
- See Also:
getGraphic()
,setGraphic(Node)
-
setGraphic
public void setGraphic(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 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
public Optional<String> getTooltip()
Returns the tooltip for this cell.- Specified by:
getTooltip
in interfaceSpreadsheetCell
- Returns:
- the tooltip associated with this
SpreadsheetCell
-
setTooltip
public void setTooltip(String tooltip)
Set a new tooltip for this cell.- Parameters:
tooltip
-
-
activateCorner
public void activateCorner(SpreadsheetCell.CornerPosition position)
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
public void deactivateCorner(SpreadsheetCell.CornerPosition position)
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
public boolean isCornerActivated(SpreadsheetCell.CornerPosition position)
Returnstrue
if a triangle is displayed in the cell for the givenCornerPosition
.- Specified by:
isCornerActivated
in interfaceSpreadsheetCell
- Returns:
true
if a triangle is displayed in the cell for the givenCornerPosition
-
buildEventDispatchChain
public EventDispatchChain buildEventDispatchChain(EventDispatchChain tail)
- Specified by:
buildEventDispatchChain
in interfaceEventTarget
-
addEventHandler
public void addEventHandler(EventType<Event> eventType, EventHandler<Event> eventHandler)
Registers an event handler to this SpreadsheetCell. The SpreadsheetCell class allows registration of listeners which will be notified when a corner state of the editable state of this SpreadsheetCell have changed.- Specified by:
addEventHandler
in interfaceSpreadsheetCell
- Parameters:
eventType
- the type of the events to receive by the handlereventHandler
- the handler to register- Throws:
NullPointerException
- if the event type or handler is null
-
removeEventHandler
public void removeEventHandler(EventType<Event> eventType, EventHandler<Event> eventHandler)
Unregisters a previously registered event handler from this SpreadsheetCell. One handler might have been registered for different event types, so the caller needs to specify the particular event type from which to unregister the handler.- Specified by:
removeEventHandler
in interfaceSpreadsheetCell
- Parameters:
eventType
- the event type from which to unregistereventHandler
- the handler to unregister- Throws:
NullPointerException
- if the event type or handler is null
-
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.
-
-