Module org.controlsfx.controls
Class SpreadsheetCellType<T>
java.lang.Object
org.controlsfx.control.spreadsheet.SpreadsheetCellType<T>
- Direct Known Subclasses:
SpreadsheetCellType.DateType,SpreadsheetCellType.DoubleType,SpreadsheetCellType.IntegerType,SpreadsheetCellType.ListType,SpreadsheetCellType.ObjectType,SpreadsheetCellType.StringType
When instantiating a
Different static methods are provided in order to give you access to basic types, and to create
You can either use a pre-built
Then for each type you will provide your own policy in
Here is an example of how to create a
SpreadsheetCell, its SpreadsheetCellType will
specify which values the cell can accept as user input, and which
SpreadsheetCellEditor it will use to receive user input. Different static methods are provided in order to give you access to basic types, and to create
SpreadsheetCell easily:
- String: Accessible with
SpreadsheetCellType.StringType.createCell(int, int, int, int, String). - List: Accessible with
SpreadsheetCellType.ListType.createCell(int, int, int, int, String). - Double: Accessible with
SpreadsheetCellType.DoubleType.createCell(int, int, int, int, Double). - Integer: Accessible with
SpreadsheetCellType.IntegerType.createCell(int, int, int, int, Integer). - Date: Accessible with
SpreadsheetCellType.DateType.createCell(int, int, int, int, LocalDate).
Value verification
You can specify two levels of verification in your types.- The first one is defined by
match(Object). It is the first level that tells whether or not the given value should be accepted or not. Trying to set a String into a Double will return false for example. This method will be use by theSpreadsheetViewwhen trying to set values for example.
- The second level is defined by
isError(Object). This is more subtle and allow you to tell whether the given value is coherent or not regarding the policy you gave. You can just make aSpreadsheetCellcall this method when its value has changed in order to react accordingly if the value is in error. (see example below).
Converter
You will have to specify a converter for your type. It will handle all the conversion between your real value type (Double, Integer, LocalDate etc) and its string representation for the cell.You can either use a pre-built
StringConverter or our
StringConverterWithFormat. This one just add one method (
StringConverterWithFormat.toStringFormat(Object, String) which will
convert your value with a String format (found in
SpreadsheetCell.getFormat()).
Example
You can create several types which are using the same editor. Suppose you want to handle Double values. You will implement thecreateEditor(SpreadsheetView) method and use the
SpreadsheetCellEditor.DoubleEditor. Then for each type you will provide your own policy in
match(Object)
and in isError(Object), which most of the time will use your
converter. Here is an example of how to create a
StringConverterWithFormat :
StringConverterWithFormat specialConverter = new StringConverterWithFormat<Double>(new DoubleStringConverter()) {
@Override
public String toString(Double item) {
//We just redirect to the other method.
return toStringFormat(item, "");
}
@Override
public String toStringFormat(Double item, String format) {
if (item == null || Double.isNaN(item)) {
return missingLabel; // For example return something else that an empty cell.
} else{
if (!("").equals(format) && !Double.isNaN(item)) {
//We format here the value
return new DecimalFormat(format).format(item);
} else {
//We call the DoubleStringConverter that we gave in argument
return myConverter.toString(item);
}
}
}
@Override
public Double fromString(String str) {
if (str == null || str.isEmpty()) {
return Double.NaN;
} else {
try {
//Just returning the value
Double myDouble = Double.parseDouble(str);
return myDouble;
} catch (NumberFormatException e) {
return myConverter.fromString(str);
}
}
}
}
And then suppose you only want to accept double values between 0 and 100, and
that a value superior to 10 is abnormal.
@Override
public boolean isError(Object value) {
if (value instanceof Double) {
if ((Double) value > 0 && (Double) value < 10) {
return false;
}
return true;
}
return true;
}
@Override
public boolean match(Object value) {
if (value instanceof Double) {
return true;
} else {
try {
Double convertedValue = converter.fromString(value == null ? null : value.toString());
if (convertedValue >= 0 && convertedValue <= 100)
return true;
else
return false;
} catch (Exception e) {
return false;
}
}
}
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classTheSpreadsheetCellLocalDatetype base class.static classTheSpreadsheetCellDoubletype base class.static classTheSpreadsheetCellIntegertype base class.static classTheSpreadsheetCellListtype base class.static classTheSpreadsheetCellObjecttype base class.static classTheSpreadsheetCellStringtype base class. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected StringConverter<T>An instance of converter from string to cell type.static final SpreadsheetCellType.DateTypeTheSpreadsheetCellLocalDatetype instance.static final SpreadsheetCellType.DoubleTypeTheSpreadsheetCellDoubletype instance.static final SpreadsheetCellType.IntegerTypeTheSpreadsheetCellIntegertype instance.static final SpreadsheetCellType<Object>TheSpreadsheetCellObjecttype instance.static final SpreadsheetCellType.StringTypeTheSpreadsheetCellStringtype instance. -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor.SpreadsheetCellType(StringConverter<T> converter) Constructor with the StringConverter directly provided. -
Method Summary
Modifier and TypeMethodDescriptionbooleanabstract TconvertValue(Object value) This method will be called when a commit is happening.
This method will try to convert the value, be sure to callmatch(Object)before to see if this method will succeed.abstract SpreadsheetCellEditorcreateEditor(SpreadsheetView view) Creates an editor for this type of cells.booleanReturns true if the value is an error regarding the specification of its type.static final SpreadsheetCellType.ListTypeCreates aSpreadsheetCellType.ListType.booleanVerify that the upcoming value can be set to the current cell.abstract booleanVerify that the upcoming value can be set to the current cell.This is the first level of verification to prevent affecting a text to a double or a double to a date.abstract StringReturn a string representation of the given item for theSpreadsheetViewto display using the innerconverter.Return a string representation of the given item for theSpreadsheetViewto display using the innerconverterand the specified format.
-
Field Details
-
converter
An instance of converter from string to cell type. -
OBJECT
TheSpreadsheetCellObjecttype instance. -
STRING
TheSpreadsheetCellStringtype instance. -
DOUBLE
TheSpreadsheetCellDoubletype instance. -
INTEGER
TheSpreadsheetCellIntegertype instance. -
DATE
TheSpreadsheetCellLocalDatetype instance.
-
-
Constructor Details
-
SpreadsheetCellType
public SpreadsheetCellType()Default constructor. -
SpreadsheetCellType
Constructor with the StringConverter directly provided.- Parameters:
converter- The converter to use
-
-
Method Details
-
createEditor
Creates an editor for this type of cells.- Parameters:
view- the spreadsheet that will own this editor- Returns:
- the editor instance
-
toString
Return a string representation of the given item for theSpreadsheetViewto display using the innerconverterand the specified format.- Parameters:
object-format-- Returns:
- a string representation of the given item.
-
toString
Return a string representation of the given item for theSpreadsheetViewto display using the innerconverter.- Parameters:
object-- Returns:
- a string representation of the given item.
-
match
Verify that the upcoming value can be set to the current cell. This is the first level of verification to prevent affecting a text to a double or a double to a date. For closer verification, useisError(Object).- Parameters:
value- the value to test- Returns:
- true if it matches.
-
match
Verify that the upcoming value can be set to the current cell.This is the first level of verification to prevent affecting a text to a double or a double to a date. For closer verification, useisError(Object).- Parameters:
value- the value to testoptions- the options given bySpreadsheetCell.getOptionsForEditor()- Returns:
- true if it matches.
-
isError
Returns true if the value is an error regarding the specification of its type.- Parameters:
value-- Returns:
- true if the value is an error.
-
acceptDrop
public boolean acceptDrop()- Returns:
- true if this SpreadsheetCellType accepts Objects to be dropped on
the
SpreadsheetCell. Currently only Files can be dropped. If accepted, prepare to receive them inmatch(java.lang.Object)andconvertValue(java.lang.Object).
-
convertValue
This method will be called when a commit is happening.
This method will try to convert the value, be sure to callmatch(Object)before to see if this method will succeed.- Parameters:
value-- Returns:
- null if not valid or the correct value otherwise.
-
LIST
Creates aSpreadsheetCellType.ListType.- Parameters:
items- the list items- Returns:
- the instance
-