モジュール javafx.controls
パッケージ javafx.scene.control

クラスDatePicker

  • すべての実装されたインタフェース:
    Styleable, EventTarget, Skinnable


    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
    • プロパティの詳細

      • dayCellFactory

        public final ObjectProperty<Callback<DatePicker,DateCell>> dayCellFactoryProperty
        カスタム・セル・ファクトリを提供して、DatePickerポップアップの個々の日のセルをカスタマイズできます。 セル・ファクトリの詳細は、DateCellおよびCellを参照してください。 例:
        
         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);
         
        デフォルト値:
        null
        関連項目:
        getDayCellFactory()setDayCellFactory(Callback)
      • chronology

        public final ObjectProperty<Chronology> chronologyProperty
        DatePickerコントロールの日付を解析、表示および選択するために使用されるカレンダ・システム。

        デフォルト値は、Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))への呼出しから返されます。 デフォルトは、Localeカレンダ拡張を使用してLocaleに明示的に指定されている場合を除き、通常、IsoChronologyです。 値をnullに設定すると、デフォルトの暦が復元されます。

        関連項目:
        getChronology()setChronology(Chronology)
      • showWeekNumbers

        public final BooleanProperty showWeekNumbersProperty
        DatePickerポップアップが週番号を示す列を表示するかどうか。

        デフォルト値は、リソース・バンドルに指定され、現在のロケールの国によって異なります。

        関連項目:
        isShowWeekNumbers()setShowWeekNumbers(boolean)
      • converter

        public final ObjectProperty<StringConverter<LocalDate>> converterProperty
        入力テキストをLocalDate型のオブジェクトに、およびその逆に変換します。

        アプリケーションによって設定されない場合は、現在のLocaleおよびchronologyに対するDateTimeFormatterに基づいてDatePickerスキン・クラスがコンバータを設定します。 このフォーマッタは、その後、現在の日付の値の解析と表示に使用されます。 値を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;
                   }
               }
           });
         

        年の2桁のみが含まれている入力を解析するためのデフォルトの基準年は2000です(DateTimeFormatterを参照)。 このデフォルトは、個人の生年月日の入力を許可する場合には適していません。 次の例では、コンバータのfromString()メソッドを変更して、生年月日の2桁の年を最大で過去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​()
        日付の値をnullに設定したデフォルトのDatePickerインスタンスを作成します。
      • DatePicker

        public DatePicker​(LocalDate localDate)
        DatePickerインスタンスを作成し、valueを指定された日付に設定します。
        パラメータ:
        localDate - DatePickerに現在選択されている日付として設定されます。 nullに設定できます。
    • メソッドの詳細

      • setDayCellFactory

        public final void setDayCellFactory​(Callback<DatePicker,DateCell> value)
        プロパティdayCellFactoryの値を設定します。
        プロパティの説明:
        カスタム・セル・ファクトリを提供して、DatePickerポップアップの個々の日のセルをカスタマイズできます。 セル・ファクトリの詳細は、DateCellおよびCellを参照してください。 例:
        
         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);
         
        デフォルト値:
        null
      • getDayCellFactory

        public final Callback<DatePicker,DateCell> getDayCellFactory​()
        プロパティdayCellFactoryの値を取得します。
        プロパティの説明:
        カスタム・セル・ファクトリを提供して、DatePickerポップアップの個々の日のセルをカスタマイズできます。 セル・ファクトリの詳細は、DateCellおよびCellを参照してください。 例:
        
         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);
         
        デフォルト値:
        null
      • dayCellFactoryProperty

        public final ObjectProperty<Callback<DatePicker,DateCell>> dayCellFactoryProperty​()
        カスタム・セル・ファクトリを提供して、DatePickerポップアップの個々の日のセルをカスタマイズできます。 セル・ファクトリの詳細は、DateCellおよびCellを参照してください。 例:
        
         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);
         
        デフォルト値:
        null
        関連項目:
        getDayCellFactory()setDayCellFactory(Callback)
      • chronologyProperty

        public final ObjectProperty<Chronology> chronologyProperty​()
        DatePickerコントロールの日付を解析、表示および選択するために使用されるカレンダ・システム。

        デフォルト値は、Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))への呼出しから返されます。 デフォルトは、Localeカレンダ拡張を使用してLocaleに明示的に指定されている場合を除き、通常、IsoChronologyです。 値をnullに設定すると、デフォルトの暦が復元されます。

        関連項目:
        getChronology()setChronology(Chronology)
      • getChronology

        public final Chronology getChronology​()
        プロパティchronologyの値を取得します。
        プロパティの説明:
        DatePickerコントロールの日付を解析、表示および選択するために使用されるカレンダ・システム。

        デフォルト値は、Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))への呼出しから返されます。 デフォルトは、Localeカレンダ拡張を使用してLocaleに明示的に指定されている場合を除き、通常、IsoChronologyです。 値をnullに設定すると、デフォルトの暦が復元されます。

      • setChronology

        public final void setChronology​(Chronology value)
        プロパティchronologyの値を設定します。
        プロパティの説明:
        DatePickerコントロールの日付を解析、表示および選択するために使用されるカレンダ・システム。

        デフォルト値は、Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT))への呼出しから返されます。 デフォルトは、Localeカレンダ拡張を使用してLocaleに明示的に指定されている場合を除き、通常、IsoChronologyです。 値をnullに設定すると、デフォルトの暦が復元されます。

      • showWeekNumbersProperty

        public final BooleanProperty showWeekNumbersProperty​()
        DatePickerポップアップが週番号を示す列を表示するかどうか。

        デフォルト値は、リソース・バンドルに指定され、現在のロケールの国によって異なります。

        関連項目:
        isShowWeekNumbers()setShowWeekNumbers(boolean)
      • setShowWeekNumbers

        public final void setShowWeekNumbers​(boolean value)
        プロパティshowWeekNumbersの値を設定します。
        プロパティの説明:
        DatePickerポップアップが週番号を示す列を表示するかどうか。

        デフォルト値は、リソース・バンドルに指定され、現在のロケールの国によって異なります。

      • isShowWeekNumbers

        public final boolean isShowWeekNumbers​()
        プロパティshowWeekNumbersの値を取得します。
        プロパティの説明:
        DatePickerポップアップが週番号を示す列を表示するかどうか。

        デフォルト値は、リソース・バンドルに指定され、現在のロケールの国によって異なります。

      • converterProperty

        public final ObjectProperty<StringConverter<LocalDate>> converterProperty​()
        入力テキストをLocalDate型のオブジェクトに、およびその逆に変換します。

        アプリケーションによって設定されない場合は、現在のLocaleおよびchronologyに対するDateTimeFormatterに基づいてDatePickerスキン・クラスがコンバータを設定します。 このフォーマッタは、その後、現在の日付の値の解析と表示に使用されます。 値を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;
                   }
               }
           });
         

        年の2桁のみが含まれている入力を解析するためのデフォルトの基準年は2000です(DateTimeFormatterを参照)。 このデフォルトは、個人の生年月日の入力を許可する場合には適していません。 次の例では、コンバータのfromString()メソッドを変更して、生年月日の2桁の年を最大で過去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)
        プロパティconverterの値を設定します。
        プロパティの説明:
        入力テキストをLocalDate型のオブジェクトに、およびその逆に変換します。

        アプリケーションによって設定されない場合は、現在のLocaleおよびchronologyに対するDateTimeFormatterに基づいてDatePickerスキン・クラスがコンバータを設定します。 このフォーマッタは、その後、現在の日付の値の解析と表示に使用されます。 値を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;
                   }
               }
           });
         

        年の2桁のみが含まれている入力を解析するためのデフォルトの基準年は2000です(DateTimeFormatterを参照)。 このデフォルトは、個人の生年月日の入力を許可する場合には適していません。 次の例では、コンバータのfromString()メソッドを変更して、生年月日の2桁の年を最大で過去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​()
        プロパティconverterの値を取得します。
        プロパティの説明:
        入力テキストをLocalDate型のオブジェクトに、およびその逆に変換します。

        アプリケーションによって設定されない場合は、現在のLocaleおよびchronologyに対するDateTimeFormatterに基づいてDatePickerスキン・クラスがコンバータを設定します。 このフォーマッタは、その後、現在の日付の値の解析と表示に使用されます。 値を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;
                   }
               }
           });
         

        年の2桁のみが含まれている入力を解析するためのデフォルトの基準年は2000です(DateTimeFormatterを参照)。 このデフォルトは、個人の生年月日の入力を許可する場合には適していません。 次の例では、コンバータのfromString()メソッドを変更して、生年月日の2桁の年を最大で過去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​()
        プロパティ・エディタの値を取得します。
        プロパティの説明:
        DatePickerのエディタ。
      • createDefaultSkin

        protected Skin<?> createDefaultSkin​()
        このコントロールのデフォルト・スキンの新しいインスタンスを作成します。 これは、CSS -fx-skinを介してスキンが提供されていない場合にコントロール用のスキンを作成するために、または setSkin(...)を使用してサブクラスで明示的に設定するために呼び出されます。
        オーバーライド:
        createDefaultSkin 、クラス: Control
        戻り値:
        このコントロールのデフォルト・スキンの新しいインスタンス。 nullの場合、コントロールにはスキンがありません(Cssで提供されている場合を除く)。
      • getClassCssMetaData

        public static List<CssMetaData<? extends Styleable,?>> getClassCssMetaData​()
        戻り値:
        このクラスに関連付けられたCssMetaData。スーパークラスのCssMetaDataを含むことがあります。
      • getControlCssMetaData

        public List<CssMetaData<? extends Styleable,?>> getControlCssMetaData​()
        オーバーライド:
        getControlCssMetaData 、クラス: Control
        戻り値:
        コントロールのCSSでスタイル設定可能なプロパティの変更不可能なリスト
        導入されたバージョン:
        JavaFX 8.0
      • queryAccessibleAttribute

        public Object queryAccessibleAttribute​(AccessibleAttribute attribute,
                                               Object... parameters)
        このメソッドは、属性の値をリクエストするためにアシスティブ・テクノロジによって呼び出されます。

        このメソッドは一般に、特定の役割に必要な属性を実装するためにサブクラスによってオーバーライドされます。
        特定の属性が処理されない場合は、スーパークラスの実装を呼び出す必要があります。

        オーバーライド:
        queryAccessibleAttribute、クラス: ComboBoxBase<LocalDate>
        パラメータ:
        attribute - リクエストされた属性
        parameters - オプションのパラメータ・リスト
        戻り値:
        リクエストされた属性の値
        関連項目:
        AccessibleAttribute