【问题标题】:Changing JFXDatePicker / DatePicker starting weekday从工作日开始更改 JFXDatePicker / DatePicker
【发布时间】:2021-02-26 09:25:31
【问题描述】:

我在 JavaFX 中使用 JFXDatePicker(材料设计 DatePicker),我想在单击 DatePicker 时弹出的日历中更改一周的开始日期。目前,一周的开始日期是星期日 (S M T W T F S),但我想将其更改为星期一 (M T W T F S S)。

这可能吗?我做了一个小研究,但没有成功。

谢谢!

【问题讨论】:

  • afaik,仅更改 firstDayOfWeek 不受支持(至少不支持普通 DatePicker,不知道 JFXDatePicker,尽管我怀疑它不知道) - DatePicker 的所有区域设置敏感状态由默认语言环境控制(请参阅 DatePickerContent 了解如何完成)。
  • 您是否尝试在启动时更改 jvm 的语言环境?
  • 也许这可以使用@kleopatra的解决方案来解决,但我设法通过添加这些JVM参数(对于我的国家,罗马尼亚)来解决它:-Duser.country=RO -Duser.language=ro
  • 想知道为什么这不是默认语言环境?

标签: java javafx datepicker jfoenix


【解决方案1】:

DatePicker 不支持 firstDayOfWeek 的设置。它(或者更好的是:它的亲属,它使用 DatePickerContent 来呈现日期网格)从应用程序默认区域设置中获取该属性。

要强制任何给定区域设置偏离默认的 firstDayOfWeek,我们可以从默认设置一个新的区域设置并通过扩展设置其新值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多