- All Implemented Interfaces:
EventTarget,Grid
Grid interface.
How to span
First of all, the Grid must have all its rows filled with the same number of
SpreadsheetCell. A span is materialized by the same cell (same
instance of SpreadsheetCell) repeated all over the covered part. In order to
materialize span, you have two ways :
- First way is to manually add the same cell where you want to span. For example, we will make the first cell span on two columns :
//I create a sample grid
int rowCount = 15;
int columnCount = 10;
GridBase grid = new GridBase(rowCount, columnCount);
ObservableList<ObservableList<SpreadsheetCell>> rows = FXCollections.observableArrayList();
for (int row = 0; row < grid.getRowCount(); ++row) {
final ObservableList<SpreadsheetCell> list = FXCollections.observableArrayList();
for (int column = 0; column < grid.getColumnCount(); ++column) {
list.add(SpreadsheetCellType.STRING.createCell(row, column, 1, 1,"value"));
}
rows.add(list);
}
//I create my SpreadsheetCell spanning on two columns.
SpreadsheetCell cell = SpreadsheetCellType.STRING.createCell(0, 0, 1, 2,"value");
//I add them in the area covered by the span.
rows.get(0).set(0, cell);
rows.get(0).set(1, cell);
grid.setRows(rows);
SpreadsheetView spv = new SpreadsheetView(grid);
- The second way is to build the SpreadsheetView, but to use the spanRow(int, int, int) or spanColumn(int, int, int) methods. These methods will take the
SpreadsheetCell at the specified position, and enlarge the span by modifying
the rowSpan or columnSpan of the cell. And also put the SpreadsheetCell in
the area covered by the span.
//I create a sample grid
int rowCount = 15;
int columnCount = 10;
GridBase grid = new GridBase(rowCount, columnCount);
ObservableList<ObservableList<SpreadsheetCell>> rows = FXCollections.observableArrayList();
for (int row = 0; row < grid.getRowCount(); ++row) {
final ObservableList<SpreadsheetCell> list = FXCollections.observableArrayList();
for (int column = 0; column < grid.getColumnCount(); ++column) {
list.add(SpreadsheetCellType.STRING.createCell(row, column, 1, 1,"value"));
}
rows.add(list);
}
//I First set the rows in the grid.
grid.setRows(rows);
//Then I simply tell the grid to span the first cell
grid.spanColumn(2,0,0);
SpreadsheetView spv = new SpreadsheetView(grid);
Row Height
You can specify some row height for some of your rows at the beginning. You have to use the methodsetRowHeightCallback(javafx.util.Callback)
in order to specify a Callback that will give you the index of the row, and you
will give back the height of the row.
If you just have a
Map available, you can use the GridBase.MapBasedRowHeightFactory
that will construct the Callback for you.
The default height is 24.0.
Cell values
If you want to change the value of a cell, you have to go through the API
with setCellValue(int, int, Object). This method will verify that
the value is corresponding to the SpreadsheetCellType of the cell and
try to convert it if possible. It will also fire a GridChange event
in order to notify all listeners that a value has changed.
If you want to listen to those changes, you can use the
addEventHandler(EventType, EventHandler) and
removeEventHandler(EventType, EventHandler) methods.
A basic listener for implementing a undo/redo in the SpreadsheetView could be
like that:
Grid grid = ...;
Stack<GridChange> undoStack = ...;
grid.addEventHandler(GridChange.GRID_CHANGE_EVENT, new EventHandler<GridChange>() {
public void handle(GridChange change) {
undoStack.push(change);
}
});
Display selection
By default, the SpreadsheetView will display a black rectangle around your selection if it's contiguous. Some may want to disable that effect. Therefore a simple call tosetDisplaySelection(boolean) with a false value
will make that rectangle disappear.
Headers
The SpreadsheetView is displaying row numbers and column letters by default. Just like any other spreadsheet would do. However, some may want to customize theose headers. You can use thegetColumnHeaders() and getRowHeaders() in order to customize what will appear in these headers.
If you put some long text in the row headers, it will not fit. Thus you may consider using
SpreadsheetView.setRowHeaderWidth(double)
in order to enlarge the row header so that your text can fit properly.- See Also:
-
Property Summary
PropertiesTypePropertyDescriptionReturns the Boolean property associated with the displayed selection of theGrid.Returns a BooleanProperty associated with the locked grid state. -
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThis class serves as a bridge between row height Callback needed by the GridBase and a Map<Integer,Double> that one could have (each Integer specify a row index and its associated height). -
Field Summary
-
Constructor Summary
ConstructorsConstructorDescriptionGridBase(int rowCount, int columnCount) Creates aGridBasewith a fixed number of rows and columns. -
Method Summary
Modifier and TypeMethodDescription<E extends Event>
voidaddEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Registers an event handler to this Grid.Returns the Boolean property associated with the displayed selection of theGrid.intReturns how many columns are inside theGrid.Returns anObservableListofStringto display in the column headers.intReturns how many rows are inside theGrid.Returns anObservableListofStringto display in the row headers.doublegetRowHeight(int row) Returns the height of a row.getRows()booleanisCellDisplaySelection(int row, int column) Returns true if the given cell will display a selection rectangle when selected.booleanReturntrueif the selection (black rectangle) is displayed on theGrid.booleanisLocked()Returns whether thisGridBaseid locked or not.booleanisRowResizable(int row) Returns true if the specified row is resizable.Returns a BooleanProperty associated with the locked grid state.<E extends Event>
voidremoveEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Unregisters a previously registered event handler from this Grid.voidsetCellDisplaySelection(int row, int column, boolean displaySelection) Overrides the value defined byGrid.isDisplaySelection()so that no matter what is defined on the grid, the given cell will always have its selection set to the displaySelection parameter.voidsetCellValue(int modelRow, int column, Object value) Changes the value situated at the intersection if possible.voidsetDisplaySelection(boolean value) If set to true, the selection (black rectangle) will be displayed on theGrid.voidLocks or unlocks thisGridBase.voidsetResizableRows(BitSet resizableRow) Sets the resizable state of all rows.voidsetRowHeightCallback(Callback<Integer, Double> rowHeight) Sets a newCallbackfor this grid in order to specify height of each row.voidSets the rows used by the grid, and updates the rowCount.voidspanColumn(int count, int rowIndex, int colIndex) Spans in column the cell situated at rowIndex and colIndex by the number count.voidspanRow(int count, int rowIndex, int colIndex) Spans in row the cell situated at rowIndex and colIndex by the number count.
-
Property Details
-
locked
Returns a BooleanProperty associated with the locked grid state. It means that the Grid is in a read-only mode and that no SpreadsheetCell can be modified, no regards for their ownSpreadsheetCell.isEditable()state.- See Also:
-
displaySelection
Returns the Boolean property associated with the displayed selection of theGrid.- Specified by:
displaySelectionPropertyin interfaceGrid- See Also:
-
-
Constructor Details
-
GridBase
public GridBase(int rowCount, int columnCount) Creates aGridBasewith a fixed number of rows and columns.- Parameters:
rowCount- the number of rowscolumnCount- the numbers of columns
-
-
Method Details
-
getRows
Returns anObservableListofObservableListofSpreadsheetCellinstances. Refer to theGridclass javadoc for more detail.- Specified by:
getRowsin interfaceGrid- Returns:
- an
ObservableListofObservableListofSpreadsheetCellinstances
-
setCellValue
Changes the value situated at the intersection if possible. Verification and conversion of the value should be done before withSpreadsheetCellType.match(Object)andSpreadsheetCellType.convertValue(Object).- Specified by:
setCellValuein interfaceGrid- Parameters:
modelRow- the row index issued from theSpreadsheetCellcolumn- the column index issued from theSpreadsheetCellvalue- the value to set to theSpreadsheetCell
-
getRowCount
public int getRowCount()Returns how many rows are inside theGrid.- Specified by:
getRowCountin interfaceGrid- Returns:
- the number of rows in the
Grid.
-
getColumnCount
public int getColumnCount()Returns how many columns are inside theGrid.- Specified by:
getColumnCountin interfaceGrid- Returns:
- the number of columns in the
Grid.
-
getRowHeight
public double getRowHeight(int row) Returns the height of a row.Grid.AUTOFITcan be returned in order to let the system compute the best row height.- Specified by:
getRowHeightin interfaceGrid- Parameters:
row- the row index- Returns:
- the height in pixels of the given row.
-
setRowHeightCallback
Sets a newCallbackfor this grid in order to specify height of each row.- Parameters:
rowHeight- theCallbackto use for rown height computation
-
getRowHeaders
Returns anObservableListofStringto display in the row headers.- Specified by:
getRowHeadersin interfaceGrid- Returns:
- an
ObservableListofStringto display in the row headers
-
getColumnHeaders
Returns anObservableListofStringto display in the column headers.- Specified by:
getColumnHeadersin interfaceGrid- Returns:
- an
ObservableListofStringto display in the column headers
-
lockedProperty
Returns a BooleanProperty associated with the locked grid state. It means that the Grid is in a read-only mode and that no SpreadsheetCell can be modified, no regards for their ownSpreadsheetCell.isEditable()state.- See Also:
-
isLocked
public boolean isLocked()Returns whether thisGridBaseid locked or not.- Returns:
trueif thisGridBaseis locked
-
setLocked
Locks or unlocks thisGridBase.- Parameters:
lock-trueto lock thisGridBase
-
spanRow
public void spanRow(int count, int rowIndex, int colIndex) Spans in row the cell situated at rowIndex and colIndex by the number count. -
spanColumn
public void spanColumn(int count, int rowIndex, int colIndex) Spans in column the cell situated at rowIndex and colIndex by the number count.- Specified by:
spanColumnin interfaceGrid- Parameters:
count- the span rangerowIndex- the row indexcolIndex- the column index
-
setRows
Sets the rows used by the grid, and updates the rowCount. This method should be called before theGridis actually given to aSpreadsheetView. If this method is called after, you should give theGridagain to theSpreadsheetViewby usingSpreadsheetView.setGrid(org.controlsfx.control.spreadsheet.Grid). -
setResizableRows
Sets the resizable state of all rows. If a bit is set to true in theBitSet, it means the row is resizable. TheBitSet.length()must be equal to thegetRowCount()- Parameters:
resizableRow- aBitSetwhere the bits set totruerepresent the resizable rows
-
isRowResizable
public boolean isRowResizable(int row) Returns true if the specified row is resizable.- Specified by:
isRowResizablein interfaceGrid- Parameters:
row- the row index- Returns:
trueif the specified row is resizable
-
isDisplaySelection
public boolean isDisplaySelection()Returntrueif the selection (black rectangle) is displayed on theGrid. Cells may override this property withGrid.setCellDisplaySelection(int, int, boolean).- Specified by:
isDisplaySelectionin interfaceGrid- Returns:
trueif the selection (black rectangle) is displayed on the Grid
-
setDisplaySelection
public void setDisplaySelection(boolean value) If set to true, the selection (black rectangle) will be displayed on theGrid. Cells may override this property withGrid.setCellDisplaySelection(int, int, boolean).- Specified by:
setDisplaySelectionin interfaceGrid- Parameters:
value-trueif the selection should be displayed
-
displaySelectionProperty
Returns the Boolean property associated with the displayed selection of theGrid.- Specified by:
displaySelectionPropertyin interfaceGrid- See Also:
-
setCellDisplaySelection
public void setCellDisplaySelection(int row, int column, boolean displaySelection) Overrides the value defined byGrid.isDisplaySelection()so that no matter what is defined on the grid, the given cell will always have its selection set to the displaySelection parameter.- Specified by:
setCellDisplaySelectionin interfaceGrid- Parameters:
row- the row indexcolumn- the column indexdisplaySelection-trueis the selection should always be displayed on this cell
-
isCellDisplaySelection
public boolean isCellDisplaySelection(int row, int column) Returns true if the given cell will display a selection rectangle when selected. If nothing is defined for this cell,Grid.isDisplaySelection()is returned.- Specified by:
isCellDisplaySelectionin interfaceGrid- Parameters:
row- the row indexcolumn- the column index- Returns:
trueif the given cell will display a selection rectangle
-
addEventHandler
public <E extends Event> void addEventHandler(EventType<E> eventType, EventHandler<? super E> eventHandler) Registers an event handler to this Grid. The Grid class allows registration of listeners which will be notified as aSpreadsheetCell's value will change.- Specified by:
addEventHandlerin interfaceGrid- 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 Grid. 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:
removeEventHandlerin interfaceGrid- Parameters:
eventType- the event type from which to unregistereventHandler- the handler to unregister
-
buildEventDispatchChain
- Specified by:
buildEventDispatchChainin interfaceEventTarget
-