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

public abstract class SpreadsheetCellType<T> extends Object
When instantiating 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:

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 the SpreadsheetView when 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 a SpreadsheetCell call 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 the createEditor(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;
         }
     }
 }
 
See Also:
  • Field Details

  • Constructor Details

    • SpreadsheetCellType

      public SpreadsheetCellType()
      Default constructor.
    • SpreadsheetCellType

      public SpreadsheetCellType(javafx.util.StringConverter<T> converter)
      Constructor with the StringConverter directly provided.
      Parameters:
      converter - The converter to use
  • Method Details

    • createEditor

      public abstract SpreadsheetCellEditor createEditor(SpreadsheetView view)
      Creates an editor for this type of cells.
      Parameters:
      view - the spreadsheet that will own this editor
      Returns:
      the editor instance
    • toString

      public String toString(T object, String format)
      Return a string representation of the given item for the SpreadsheetView to display using the inner converter and the specified format.
      Parameters:
      object -
      format -
      Returns:
      a string representation of the given item.
    • toString

      public abstract String toString(T object)
      Return a string representation of the given item for the SpreadsheetView to display using the inner converter.
      Parameters:
      object -
      Returns:
      a string representation of the given item.
    • match

      public boolean match(Object value)
      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, use isError(Object).
      Parameters:
      value - the value to test
      Returns:
      true if it matches.
    • match

      public abstract boolean match(Object value, Object... options)
      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, use isError(Object).
      Parameters:
      value - the value to test
      options - the options given by SpreadsheetCell.getOptionsForEditor()
      Returns:
      true if it matches.
    • isError

      public boolean isError(Object value)
      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 in match(java.lang.Object) and convertValue(java.lang.Object).
    • convertValue

      public abstract T convertValue(Object value)
      This method will be called when a commit is happening.
      This method will try to convert the value, be sure to call match(Object) before to see if this method will succeed.
      Parameters:
      value -
      Returns:
      null if not valid or the correct value otherwise.
    • LIST

      public static final SpreadsheetCellType.ListType LIST(List<String> items)
      Parameters:
      items - the list items
      Returns:
      the instance