问题描述
我在 JavaFX 中使用 JFXDatePicker(Material Design DatePicker),我想在单击 DatePicker 时弹出的日历中更改一周的开始日期。目前,一周的开始日期是星期日(S M T W T F S),但我想将其更改为星期一(M T W T F S S)。
这可能吗?我做了一个小调查,但没有成功。
谢谢!
解决方法
DatePicker 不支持设置 firstDayOfWeek。它(或者更好的是:它的亲属,它使用 DatePickerContent 来呈现日期网格)从应用程序默认区域设置中获取该属性。
对于任何给定的 Locale,要强制偏离默认的 firstDayOfWeek,我们可以从默认值构建一个新的 Locale,并通过扩展设置其新值:
public static Locale adjustWeekStart(Locale locale,DayOfWeek day) {
String dayString = day.toString().substring(0,3);
Locale weekStart = new Locale.Builder()
.setLocale(locale)
.setExtension(Locale.UNICODE_LOCALE_EXTENSION,"fw-" + dayString)
.build();
return weekStart;
}
注意:键“fw”在 WeekFields.of(Locale) 中指定,日期名称的前三个字母的值取自 CalendarDataUtility 的实现(如果在某处指定,请编辑;)
现在我们可以使用修改后的 Locale 作为默认值,并使用修改后的 firstDayOfWeek 获取 DatePickers:
public class DatePickerExperiments extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Locale.setDefault(adjustWeekStart(Locale.getDefault(),DayOfWeek.SATURDAY));
DatePicker datePicker = new DatePicker();
Scene scene = new Scene(new HBox(datePicker),300,240);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}