- All Implemented Interfaces:
Styleable
,EventTarget
,Skinnable
public class DatePicker extends ComboBoxBase<LocalDate>
The value
property represents the
currently selected LocalDate
. An initial date can
be set via the constructor
or by calling setValue(LocalDate)
. The
default value is null.
DatePicker datePicker = new DatePicker();
datePicker.setOnAction(e -> {
LocalDate date = datePicker.getValue();
System.err.println("Selected date: " + date);
});
The chronology
property specifies a
calendar system to be used for parsing, displaying, and choosing
dates.
The value
property is always defined in
the ISO calendar system, however, so applications based on a
different chronology may use the conversion methods provided in the
Chronology
API to get or set the
corresponding ChronoLocalDate
value. For
example:
LocalDate isoDate = datePicker.getValue();
ChronoLocalDate chronoDate =
((isoDate != null) ? datePicker.getChronology().date(isoDate) : null);
System.err.println("Selected date: " + chronoDate);
- Since:
- JavaFX 8.0
-
Property Summary
Properties Type Property Description ObjectProperty<Chronology>
chronology
The calendar system used for parsing, displaying, and choosing dates in the DatePicker control.ObjectProperty<StringConverter<LocalDate>>
converter
Converts the input text to an object of type LocalDate and vice versa.ObjectProperty<Callback<DatePicker,DateCell>>
dayCellFactory
A custom cell factory can be provided to customize individual day cells in the DatePicker popup.ReadOnlyObjectProperty<TextField>
editor
The editor for the DatePicker.BooleanProperty
showWeekNumbers
Whether the DatePicker popup should display a column showing week numbers.Properties inherited from class javafx.scene.control.ComboBoxBase
armed, editable, onAction, onHidden, onHiding, onShowing, onShown, promptText, showing, value
Properties inherited from class javafx.scene.layout.Region
background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width
Properties inherited from class javafx.scene.Node
accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, viewOrder, visible
-
Field Summary
Fields inherited from class javafx.scene.control.ComboBoxBase
ON_HIDDEN, ON_HIDING, ON_SHOWING, ON_SHOWN
-
Constructor Summary
Constructors Constructor Description DatePicker()
Creates a default DatePicker instance with anull
date value set.DatePicker(LocalDate localDate)
Creates a DatePicker instance and sets thevalue
to the given date. -
Method Summary
Modifier and Type Method Description ObjectProperty<Chronology>
chronologyProperty()
The calendar system used for parsing, displaying, and choosing dates in the DatePicker control.ObjectProperty<StringConverter<LocalDate>>
converterProperty()
Converts the input text to an object of type LocalDate and vice versa.protected Skin<?>
createDefaultSkin()
Create a new instance of the default skin for this control.ObjectProperty<Callback<DatePicker,DateCell>>
dayCellFactoryProperty()
A custom cell factory can be provided to customize individual day cells in the DatePicker popup.ReadOnlyObjectProperty<TextField>
editorProperty()
The editor for the DatePicker.Chronology
getChronology()
Gets the value of the property chronology.static List<CssMetaData<? extends Styleable,?>>
getClassCssMetaData()
List<CssMetaData<? extends Styleable,?>>
getControlCssMetaData()
StringConverter<LocalDate>
getConverter()
Gets the value of the property converter.Callback<DatePicker,DateCell>
getDayCellFactory()
Gets the value of the property dayCellFactory.TextField
getEditor()
Gets the value of the property editor.boolean
isShowWeekNumbers()
Gets the value of the property showWeekNumbers.Object
queryAccessibleAttribute(AccessibleAttribute attribute, Object... parameters)
This method is called by the assistive technology to request the value for an attribute.void
setChronology(Chronology value)
Sets the value of the property chronology.void
setConverter(StringConverter<LocalDate> value)
Sets the value of the property converter.void
setDayCellFactory(Callback<DatePicker,DateCell> value)
Sets the value of the property dayCellFactory.void
setShowWeekNumbers(boolean value)
Sets the value of the property showWeekNumbers.BooleanProperty
showWeekNumbersProperty()
Whether the DatePicker popup should display a column showing week numbers.Methods inherited from class javafx.scene.control.ComboBoxBase
arm, armedProperty, disarm, editableProperty, executeAccessibleAction, getOnAction, getOnHidden, getOnHiding, getOnShowing, getOnShown, getPromptText, getValue, hide, isArmed, isEditable, isShowing, onActionProperty, onHiddenProperty, onHidingProperty, onShowingProperty, onShownProperty, promptTextProperty, setEditable, setOnAction, setOnHidden, setOnHiding, setOnShowing, setOnShown, setPromptText, setValue, show, showingProperty, valueProperty
Methods inherited from class javafx.scene.control.Control
computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
Methods inherited from class javafx.scene.layout.Region
backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
Methods inherited from class javafx.scene.Parent
getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
Methods inherited from class javafx.scene.Node
accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
-
Property Details
-
dayCellFactory
A custom cell factory can be provided to customize individual day cells in the DatePicker popup. Refer toDateCell
andCell
for more information on cell factories. Example:final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() { public DateCell call(final DatePicker datePicker) { return new DateCell() { @Override public void updateItem(LocalDate item, boolean empty) { super.updateItem(item, empty); if (MonthDay.from(item).equals(MonthDay.of(9, 25))) { setTooltip(new Tooltip("Happy Birthday!")); setStyle("-fx-background-color: #ff4444;"); } if (item.equals(LocalDate.now().plusDays(1))) { // Tomorrow is too soon. setDisable(true); } } }; } }; datePicker.setDayCellFactory(dayCellFactory);
- Default value:
- null
- See Also:
getDayCellFactory()
,setDayCellFactory(Callback)
-
chronology
The calendar system used for parsing, displaying, and choosing dates in the DatePicker control.The default value is returned from a call to
Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))
. The default is usuallyIsoChronology
unless provided explicitly in theLocale
by use of a Locale calendar extension. Setting the value tonull
will restore the default chronology.- See Also:
getChronology()
,setChronology(Chronology)
-
showWeekNumbers
Whether the DatePicker popup should display a column showing week numbers.The default value is specified in a resource bundle, and depends on the country of the current locale.
- See Also:
isShowWeekNumbers()
,setShowWeekNumbers(boolean)
-
converter
Converts the input text to an object of type LocalDate and vice versa.If not set by the application, the DatePicker skin class will set a converter based on a
DateTimeFormatter
for the currentLocale
andchronology
. This formatter is then used to parse and display the current date value. Setting the value tonull
will restore the default converter.Example using an explicit formatter:
datePicker.setConverter(new StringConverter<LocalDate>() { String pattern = "yyyy-MM-dd"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); { datePicker.setPromptText(pattern.toLowerCase()); } @Override public String toString(LocalDate date) { if (date != null) { return dateFormatter.format(date); } else { return ""; } } @Override public LocalDate fromString(String string) { if (string != null && !string.isEmpty()) { return LocalDate.parse(string, dateFormatter); } else { return null; } } });
Example that wraps the default formatter and catches parse exceptions:
final StringConverter<LocalDate> defaultConverter = datePicker.getConverter(); datePicker.setConverter(new StringConverter<LocalDate>() { @Override public String toString(LocalDate value) { return defaultConverter.toString(value); } @Override public LocalDate fromString(String text) { try { return defaultConverter.fromString(text); } catch (DateTimeParseException ex) { System.err.println("HelloDatePicker: "+ex.getMessage()); throw ex; } } });
The default base year for parsing input containing only two digits for the year is 2000 (see
DateTimeFormatter
). This default is not useful for allowing a person's date of birth to be typed. The following example modifies the converter's fromString() method to allow a two digit year for birth dates up to 99 years in the past.@Override public LocalDate fromString(String text) { if (text != null && !text.isEmpty()) { Locale locale = Locale.getDefault(Locale.Category.FORMAT); Chronology chrono = datePicker.getChronology(); String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, chrono, locale); String prePattern = pattern.substring(0, pattern.indexOf("y")); String postPattern = pattern.substring(pattern.lastIndexOf("y")+1); int baseYear = LocalDate.now().getYear() - 99; DateTimeFormatter df = new DateTimeFormatterBuilder() .parseLenient() .appendPattern(prePattern) .appendValueReduced(ChronoField.YEAR, 2, 2, baseYear) .appendPattern(postPattern) .toFormatter(); return LocalDate.from(chrono.date(df.parse(text))); } else { return null; } }
- See Also:
getConverter()
,setConverter(StringConverter)
-
editor
The editor for the DatePicker.- See Also:
getEditor()
-
-
Constructor Details
-
DatePicker
public DatePicker()Creates a default DatePicker instance with anull
date value set. -
DatePicker
Creates a DatePicker instance and sets thevalue
to the given date.- Parameters:
localDate
- to be set as the currently selected date in the DatePicker. Can be null.
-
-
Method Details
-
setDayCellFactory
Sets the value of the property dayCellFactory.- Property description:
- A custom cell factory can be provided to customize individual
day cells in the DatePicker popup. Refer to
DateCell
andCell
for more information on cell factories. Example:final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() { public DateCell call(final DatePicker datePicker) { return new DateCell() { @Override public void updateItem(LocalDate item, boolean empty) { super.updateItem(item, empty); if (MonthDay.from(item).equals(MonthDay.of(9, 25))) { setTooltip(new Tooltip("Happy Birthday!")); setStyle("-fx-background-color: #ff4444;"); } if (item.equals(LocalDate.now().plusDays(1))) { // Tomorrow is too soon. setDisable(true); } } }; } }; datePicker.setDayCellFactory(dayCellFactory);
- Default value:
- null
-
getDayCellFactory
Gets the value of the property dayCellFactory.- Property description:
- A custom cell factory can be provided to customize individual
day cells in the DatePicker popup. Refer to
DateCell
andCell
for more information on cell factories. Example:final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() { public DateCell call(final DatePicker datePicker) { return new DateCell() { @Override public void updateItem(LocalDate item, boolean empty) { super.updateItem(item, empty); if (MonthDay.from(item).equals(MonthDay.of(9, 25))) { setTooltip(new Tooltip("Happy Birthday!")); setStyle("-fx-background-color: #ff4444;"); } if (item.equals(LocalDate.now().plusDays(1))) { // Tomorrow is too soon. setDisable(true); } } }; } }; datePicker.setDayCellFactory(dayCellFactory);
- Default value:
- null
-
dayCellFactoryProperty
A custom cell factory can be provided to customize individual day cells in the DatePicker popup. Refer toDateCell
andCell
for more information on cell factories. Example:final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() { public DateCell call(final DatePicker datePicker) { return new DateCell() { @Override public void updateItem(LocalDate item, boolean empty) { super.updateItem(item, empty); if (MonthDay.from(item).equals(MonthDay.of(9, 25))) { setTooltip(new Tooltip("Happy Birthday!")); setStyle("-fx-background-color: #ff4444;"); } if (item.equals(LocalDate.now().plusDays(1))) { // Tomorrow is too soon. setDisable(true); } } }; } }; datePicker.setDayCellFactory(dayCellFactory);
- Default value:
- null
- See Also:
getDayCellFactory()
,setDayCellFactory(Callback)
-
chronologyProperty
The calendar system used for parsing, displaying, and choosing dates in the DatePicker control.The default value is returned from a call to
Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))
. The default is usuallyIsoChronology
unless provided explicitly in theLocale
by use of a Locale calendar extension. Setting the value tonull
will restore the default chronology.- See Also:
getChronology()
,setChronology(Chronology)
-
getChronology
Gets the value of the property chronology.- Property description:
- The calendar system used for parsing, displaying, and choosing
dates in the DatePicker control.
The default value is returned from a call to
Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))
. The default is usuallyIsoChronology
unless provided explicitly in theLocale
by use of a Locale calendar extension. Setting the value tonull
will restore the default chronology.
-
setChronology
Sets the value of the property chronology.- Property description:
- The calendar system used for parsing, displaying, and choosing
dates in the DatePicker control.
The default value is returned from a call to
Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))
. The default is usuallyIsoChronology
unless provided explicitly in theLocale
by use of a Locale calendar extension. Setting the value tonull
will restore the default chronology.
-
showWeekNumbersProperty
Whether the DatePicker popup should display a column showing week numbers.The default value is specified in a resource bundle, and depends on the country of the current locale.
- See Also:
isShowWeekNumbers()
,setShowWeekNumbers(boolean)
-
setShowWeekNumbers
public final void setShowWeekNumbers(boolean value)Sets the value of the property showWeekNumbers.- Property description:
- Whether the DatePicker popup should display a column showing
week numbers.
The default value is specified in a resource bundle, and depends on the country of the current locale.
-
isShowWeekNumbers
public final boolean isShowWeekNumbers()Gets the value of the property showWeekNumbers.- Property description:
- Whether the DatePicker popup should display a column showing
week numbers.
The default value is specified in a resource bundle, and depends on the country of the current locale.
-
converterProperty
Converts the input text to an object of type LocalDate and vice versa.If not set by the application, the DatePicker skin class will set a converter based on a
DateTimeFormatter
for the currentLocale
andchronology
. This formatter is then used to parse and display the current date value. Setting the value tonull
will restore the default converter.Example using an explicit formatter:
datePicker.setConverter(new StringConverter<LocalDate>() { String pattern = "yyyy-MM-dd"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); { datePicker.setPromptText(pattern.toLowerCase()); } @Override public String toString(LocalDate date) { if (date != null) { return dateFormatter.format(date); } else { return ""; } } @Override public LocalDate fromString(String string) { if (string != null && !string.isEmpty()) { return LocalDate.parse(string, dateFormatter); } else { return null; } } });
Example that wraps the default formatter and catches parse exceptions:
final StringConverter<LocalDate> defaultConverter = datePicker.getConverter(); datePicker.setConverter(new StringConverter<LocalDate>() { @Override public String toString(LocalDate value) { return defaultConverter.toString(value); } @Override public LocalDate fromString(String text) { try { return defaultConverter.fromString(text); } catch (DateTimeParseException ex) { System.err.println("HelloDatePicker: "+ex.getMessage()); throw ex; } } });
The default base year for parsing input containing only two digits for the year is 2000 (see
DateTimeFormatter
). This default is not useful for allowing a person's date of birth to be typed. The following example modifies the converter's fromString() method to allow a two digit year for birth dates up to 99 years in the past.@Override public LocalDate fromString(String text) { if (text != null && !text.isEmpty()) { Locale locale = Locale.getDefault(Locale.Category.FORMAT); Chronology chrono = datePicker.getChronology(); String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, chrono, locale); String prePattern = pattern.substring(0, pattern.indexOf("y")); String postPattern = pattern.substring(pattern.lastIndexOf("y")+1); int baseYear = LocalDate.now().getYear() - 99; DateTimeFormatter df = new DateTimeFormatterBuilder() .parseLenient() .appendPattern(prePattern) .appendValueReduced(ChronoField.YEAR, 2, 2, baseYear) .appendPattern(postPattern) .toFormatter(); return LocalDate.from(chrono.date(df.parse(text))); } else { return null; } }
- See Also:
getConverter()
,setConverter(StringConverter)
-
setConverter
Sets the value of the property converter.- Property description:
- Converts the input text to an object of type LocalDate and vice
versa.
If not set by the application, the DatePicker skin class will set a converter based on a
DateTimeFormatter
for the currentLocale
andchronology
. This formatter is then used to parse and display the current date value. Setting the value tonull
will restore the default converter.Example using an explicit formatter:
datePicker.setConverter(new StringConverter<LocalDate>() { String pattern = "yyyy-MM-dd"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); { datePicker.setPromptText(pattern.toLowerCase()); } @Override public String toString(LocalDate date) { if (date != null) { return dateFormatter.format(date); } else { return ""; } } @Override public LocalDate fromString(String string) { if (string != null && !string.isEmpty()) { return LocalDate.parse(string, dateFormatter); } else { return null; } } });
Example that wraps the default formatter and catches parse exceptions:
final StringConverter<LocalDate> defaultConverter = datePicker.getConverter(); datePicker.setConverter(new StringConverter<LocalDate>() { @Override public String toString(LocalDate value) { return defaultConverter.toString(value); } @Override public LocalDate fromString(String text) { try { return defaultConverter.fromString(text); } catch (DateTimeParseException ex) { System.err.println("HelloDatePicker: "+ex.getMessage()); throw ex; } } });
The default base year for parsing input containing only two digits for the year is 2000 (see
DateTimeFormatter
). This default is not useful for allowing a person's date of birth to be typed. The following example modifies the converter's fromString() method to allow a two digit year for birth dates up to 99 years in the past.@Override public LocalDate fromString(String text) { if (text != null && !text.isEmpty()) { Locale locale = Locale.getDefault(Locale.Category.FORMAT); Chronology chrono = datePicker.getChronology(); String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, chrono, locale); String prePattern = pattern.substring(0, pattern.indexOf("y")); String postPattern = pattern.substring(pattern.lastIndexOf("y")+1); int baseYear = LocalDate.now().getYear() - 99; DateTimeFormatter df = new DateTimeFormatterBuilder() .parseLenient() .appendPattern(prePattern) .appendValueReduced(ChronoField.YEAR, 2, 2, baseYear) .appendPattern(postPattern) .toFormatter(); return LocalDate.from(chrono.date(df.parse(text))); } else { return null; } }
-
getConverter
Gets the value of the property converter.- Property description:
- Converts the input text to an object of type LocalDate and vice
versa.
If not set by the application, the DatePicker skin class will set a converter based on a
DateTimeFormatter
for the currentLocale
andchronology
. This formatter is then used to parse and display the current date value. Setting the value tonull
will restore the default converter.Example using an explicit formatter:
datePicker.setConverter(new StringConverter<LocalDate>() { String pattern = "yyyy-MM-dd"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); { datePicker.setPromptText(pattern.toLowerCase()); } @Override public String toString(LocalDate date) { if (date != null) { return dateFormatter.format(date); } else { return ""; } } @Override public LocalDate fromString(String string) { if (string != null && !string.isEmpty()) { return LocalDate.parse(string, dateFormatter); } else { return null; } } });
Example that wraps the default formatter and catches parse exceptions:
final StringConverter<LocalDate> defaultConverter = datePicker.getConverter(); datePicker.setConverter(new StringConverter<LocalDate>() { @Override public String toString(LocalDate value) { return defaultConverter.toString(value); } @Override public LocalDate fromString(String text) { try { return defaultConverter.fromString(text); } catch (DateTimeParseException ex) { System.err.println("HelloDatePicker: "+ex.getMessage()); throw ex; } } });
The default base year for parsing input containing only two digits for the year is 2000 (see
DateTimeFormatter
). This default is not useful for allowing a person's date of birth to be typed. The following example modifies the converter's fromString() method to allow a two digit year for birth dates up to 99 years in the past.@Override public LocalDate fromString(String text) { if (text != null && !text.isEmpty()) { Locale locale = Locale.getDefault(Locale.Category.FORMAT); Chronology chrono = datePicker.getChronology(); String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null, chrono, locale); String prePattern = pattern.substring(0, pattern.indexOf("y")); String postPattern = pattern.substring(pattern.lastIndexOf("y")+1); int baseYear = LocalDate.now().getYear() - 99; DateTimeFormatter df = new DateTimeFormatterBuilder() .parseLenient() .appendPattern(prePattern) .appendValueReduced(ChronoField.YEAR, 2, 2, baseYear) .appendPattern(postPattern) .toFormatter(); return LocalDate.from(chrono.date(df.parse(text))); } else { return null; } }
-
getEditor
Gets the value of the property editor.- Property description:
- The editor for the DatePicker.
-
editorProperty
The editor for the DatePicker.- See Also:
getEditor()
-
createDefaultSkin
Create a new instance of the default skin for this control. This is called to create a skin for the control if no skin is provided via CSS-fx-skin
or set explicitly in a sub-class withsetSkin(...)
.- Overrides:
createDefaultSkin
in classControl
- Returns:
- new instance of default skin for this control. If null then the control will have no skin unless one is provided by css.
-
getClassCssMetaData
- Returns:
- The CssMetaData associated with this class, which may include the CssMetaData of its superclasses.
-
getControlCssMetaData
- Overrides:
getControlCssMetaData
in classControl
- Returns:
- unmodifiable list of the controls css styleable properties
- Since:
- JavaFX 8.0
-
queryAccessibleAttribute
This method is called by the assistive technology to request the value for an attribute.This method is commonly overridden by subclasses to implement attributes that are required for a specific role.
If a particular attribute is not handled, the superclass implementation must be called.- Overrides:
queryAccessibleAttribute
in classComboBoxBase<LocalDate>
- Parameters:
attribute
- the requested attributeparameters
- optional list of parameters- Returns:
- the value for the requested attribute
- See Also:
AccessibleAttribute
-