Module  javafx.controls
软件包  javafx.scene.control

Class DatePicker

  • All Implemented Interfaces:
    StyleableEventTargetSkinnable


    public class DatePicker
    extends ComboBoxBase<LocalDate>
    DatePicker控件允许用户输入日期作为文本或从日历弹出窗口中选择日期。 该日历基于标准ISO-8601年表或java.time.chrono包中定义的任何其他年表类。

    value属性表示当前选定的LocalDate 初始日期可以通过constructor或致电setValue(LocalDate)进行设置。 默认值为null。

       final DatePicker datePicker = new DatePicker(); datePicker.setOnAction(new EventHandler() { public void handle(Event t) { LocalDate date = datePicker.getValue(); System.err.println("Selected date: " + date); } });  
    chronology属性指定用于解析,显示和选择日期的日历系统。 value属性始终在ISO日历系统中定义,因此,基于不同年表的应用程序可能会使用Chronology API中提供的转换方法来获取或设置相应的ChronoLocalDate值。 例如:
       LocalDate isoDate = datePicker.getValue(); ChronoLocalDate chronoDate = ((isoDate != null) ? datePicker.getChronology().date(isoDate) : null); System.err.println("Selected date: " + chronoDate);  
    从以下版本开始:
    JavaFX 8.0
    • Property Detail

      • dayCellFactory

        public final ObjectProperty<Callback<DatePicker,DateCell>> dayCellFactoryProperty
        可以提供自定义单元格工厂来自定义DatePicker弹出窗口中的单个日期单元格。 有关电池工厂的更多信息,请参阅DateCellCell 例:
           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:
        空值
        另请参见:
        getDayCellFactory()setDayCellFactory(Callback)
      • chronology

        public final ObjectProperty<Chronology> chronologyProperty
        用于在DatePicker控件中解析,显示和选择日期的日历系统。

        默认值从调用返回到Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT)) 默认值通常为IsoChronology除非通过使用区域设置日历扩展名在Locale明确提供。 将值设置为null将恢复默认年表。

        另请参见:
        getChronology()setChronology(Chronology)
      • converter

        public final ObjectProperty<StringConverter<LocalDate>> converterProperty
        将输入文本转换为类型为LocalDate的对象,反之亦然。

        如果没有由应用程序设置,DatePicker皮肤类将基于LocalechronologyDateTimeFormatter设置转换器。 然后,此格式化程序用于解析和显示当前日期值。 将值设置为null将恢复默认转换器。

        使用显式格式化程序的示例:

           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; } } });  

        包装默认格式化程序并捕获解析异常的示例:

           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; } } });  

        解析输入的默认基准年仅包含两年的数字为2000(见DateTimeFormatter )。 此默认对于允许输入人的出生日期无效。 以下示例将转换器的fromString()方法修改为允许两位数的年份为过去99年的出生日期。

           @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()setConverter(StringConverter)
    • 构造方法详细信息

      • DatePicker

        public DatePicker​()
        创建一个默认的DatePicker实例,具有 null日期值集。
      • DatePicker

        public DatePicker​(LocalDate localDate)
        创建一个DatePicker实例,并将 value设置为给定日期。
        参数
        localDate - 被设置为DatePicker当前选定的日期。 可以为null。
    • 方法详细信息

      • setDayCellFactory

        public final void setDayCellFactory​(Callback<DatePicker,DateCell> value)
        设置属性dayCellFactory的值。
        Property description:
        可以提供自定义单元格工厂来自定义DatePicker弹出窗口中的单个日期单元格。 有关电池工厂的更多信息,请参阅DateCellCell 例:
           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:
        空值
      • getDayCellFactory

        public final Callback<DatePicker,DateCell> getDayCellFactory​()
        获取属性dayCellFactory的值。
        Property description:
        可以提供自定义单元格工厂来自定义DatePicker弹出窗口中的单个日期单元格。 有关电池工厂的更多信息,请参阅DateCellCell 例:
           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:
        空值
      • dayCellFactoryProperty

        public final ObjectProperty<Callback<DatePicker,DateCell>> dayCellFactoryProperty​()
        可以提供自定义单元格工厂来自定义DatePicker弹出窗口中的单个日期单元格。 有关电池工厂的更多信息,请参阅DateCellCell 例:
           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:
        空值
        另请参见:
        getDayCellFactory()setDayCellFactory(Callback)
      • chronologyProperty

        public final ObjectProperty<Chronology> chronologyProperty​()
        用于在DatePicker控件中解析,显示和选择日期的日历系统。

        默认值从调用返回到Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT)) 默认值通常为IsoChronology除非通过使用区域设置日历扩展名在Locale明确提供。 将值设置为null将恢复默认年表。

        另请参见:
        getChronology()setChronology(Chronology)
      • getChronology

        public final Chronology getChronology​()
        获取物业年表的价值。
        Property description:
        用于在DatePicker控件中解析,显示和选择日期的日历系统。

        默认值从调用返回到Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT)) 默认值通常为IsoChronology除非通过使用区域设置日历扩展名在Locale明确提供。 将值设置为null将恢复默认年表。

      • setChronology

        public final void setChronology​(Chronology value)
        设置属性年表的值。
        Property description:
        用于在DatePicker控件中解析,显示和选择日期的日历系统。

        从调用Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))返回默认值。 默认值通常为IsoChronology除非通过使用区域设置日历扩展名在Locale明确提供。 将值设置为null将恢复默认年表。

      • setShowWeekNumbers

        public final void setShowWeekNumbers​(boolean value)
        设置属性showWeekNumbers的值。
        Property description:
        DatePicker弹出窗口是否应显示显示周数的列。

        默认值在资源束中指定,并且取决于当前语言环境的国家/地区。

      • isShowWeekNumbers

        public final boolean isShowWeekNumbers​()
        获取属性showWeekNumbers的值。
        Property description:
        DatePicker弹出窗口是否应显示显示周数的列。

        默认值在资源束中指定,并且取决于当前语言环境的国家/地区。

      • converterProperty

        public final ObjectProperty<StringConverter<LocalDate>> converterProperty​()
        将输入文本转换为类型为LocalDate的对象,反之亦然。

        如果没有由应用程序设置,DatePicker皮肤类将基于LocalechronologyDateTimeFormatter设置转换器。 然后,此格式化程序用于解析和显示当前日期值。 将值设置为null将恢复默认转换器。

        使用显式格式化程序的示例:

           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; } } });  

        包装默认格式化程序并捕获解析异常的示例:

           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; } } });  

        解析输入的默认基准年仅包含两年的数字为2000(见DateTimeFormatter )。 此默认对于允许输入人的出生日期无效。 以下示例将转换器的fromString()方法修改为允许两位数的年份为过去99年的出生日期。

           @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()setConverter(StringConverter)
      • setConverter

        public final void setConverter​(StringConverter<LocalDate> value)
        设置属性转换器的值。
        Property description:
        将输入文本转换为类型为LocalDate的对象,反之亦然。

        如果没有由应用程序设置,DatePicker皮肤类将根据当前的LocalechronologyDateTimeFormatter设置一个转换器。 然后,此格式化程序用于解析和显示当前日期值。 将值设置为null将恢复默认转换器。

        使用显式格式化程序的示例:

           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; } } });  

        包装默认格式化程序并捕获解析异常的示例:

           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; } } });  

        解析输入的默认基准年仅包含两位数字,为2000(见DateTimeFormatter )。 此默认对于允许输入人的出生日期无效。 以下示例将转换器的fromString()方法修改为允许两位数的年份为过去99年的出生日期。

           @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

        public final StringConverter<LocalDate> getConverter​()
        获取属性转换器的值。
        Property description:
        将输入文本转换为类型为LocalDate的对象,反之亦然。

        如果没有由应用程序设置,DatePicker皮肤类将根据当前的LocalechronologyDateTimeFormatter设置一个转换器。 然后,此格式化程序用于解析和显示当前日期值。 将值设置为null将恢复默认转换器。

        使用显式格式化程序的示例:

           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; } } });  

        包装默认格式化程序并捕获解析异常的示例:

           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; } } });  

        解析输入的默认基准年仅包含两年的数字为2000(见DateTimeFormatter )。 此默认对于允许输入人的出生日期无效。 以下示例将转换器的fromString()方法修改为允许两位数的年份为过去99年的出生日期。

           @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

        public final TextField getEditor​()
        获取属性编辑器的值。
        Property description:
        DatePicker的编辑器。
      • createDefaultSkin

        protected Skin<?> createDefaultSkin​()
        为此控件创建一个新的默认皮肤实例。 如果没有通过CSS -fx-skin提供皮肤或者在具有setSkin(...)的子类中显式设置,则调用它来创建控件的皮肤。
        重写:
        createDefaultSkinControl
        结果
        此控件的默认皮肤的新实例。 如果为null,则控件将没有皮肤,除非由css提供。
      • getClassCssMetaData

        public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData​()
        结果
        与此类相关联的CssMetaData可能包括其类的CssMetaData。
      • queryAccessibleAttribute

        public Object queryAccessibleAttribute​(AccessibleAttribute attribute,
                                               Object... parameters)
        该方法由辅助技术调用以请求属性的值。

        子类通常覆盖此方法来实现特定角色所需的属性。
        如果未处理特定属性,则必须调用超类实现。

        重写:
        queryAccessibleAttributeComboBoxBase<LocalDate>
        参数
        attribute - 请求的属性
        parameters - 可选参数列表
        结果
        请求的属性的值
        另请参见:
        AccessibleAttribute